Oracle監聽配置(ora-12514錯誤)

773281375發表於2014-03-14

1、客戶端連線資料庫流程:監聽只在連線時候起到轉發作用
①客戶端→監聽轉發→資料庫
②資料庫→監聽轉發→客戶端
③客戶端→資料庫
2、監聽配置:用netca命令
lsnrctl stop/start/status   #監聽停止、啟動、檢視狀態命令
①服務端要配置兩個檔案:listener、tnsnames
listener檔案:
LISTENER=            #監聽名字
 (DESCRIPTION_LIST =
   (DESCRIPTION =
     (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
     (ADDRESS = (PROTOCOL = TCP)(HOST =192.168.1.111)(PORT = 1521))  #伺服器本地IP地址
   )
 )
tnsnames檔案:
linuxorcl=    #連線時@後面的字串,如sqlplus scott/tiger@linuxorcl
 (DESCRIPTION =
   (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL = TCP)(HOST =192.168.1.111)(PORT = 1521)) #伺服器本地IP地址
   )
   (CONNECT_DATA =
     (SERVICE_NAME =orcl)    #伺服器上資料庫例項名字
   )
 )
②客戶端要配置一個檔案:tnsnames
tnsnames檔案:
linuxorcl=   #連線時@後面的字串,如sqlplus scott/tiger@linuxorcl
 (DESCRIPTION =
   (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL = TCP)(HOST =192.168.1.111)(PORT = 1521))#伺服器IP地址
   )
   (CONNECT_DATA =
     (SERVICE_NAME =orcl)  #伺服器上資料庫例項名字
   )
 )
3、監聽註冊有兩種方式:靜態註冊和動態註冊
①如何查詢某服務是靜態監聽註冊還是動態監聽註冊可以使用命令lsnrctl status來檢視服務,例項狀態為UNKNOWN值時表明此服務是靜態註冊的設定。
②靜態註冊
所謂靜態配置,就是在配置監聽器時,就明確的告訴監聽器某個資料庫的資訊,監聽器在啟動過程中就會載入這一部分資訊。這個資訊同樣是記錄在監聽器的配置檔案LISTENER.ORA中,下面就是使用靜態配置LISTENER.ORA檔案,注意其中SID_LIST_LISTENER部分就是靜態配置內容:
SID_LIST_LISTENER =
 (SID_LIST =
   (SID_DESC =
     (SID_NAME = PLSExtProc)
     (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
     (PROGRAM = extproc)
   )
(SID_DESC  =                                 
     (GLOBAL_NAME = orcl)         #GLOBAL_NAME資料服務名
     (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
     (SID_NAME = orcl)         #SID_NAME資料庫例項名字
   )
 )
這個例子就是說,名字叫做LISTENER的監聽器需要負責SID=ORCL的資料庫的連線請求,靜態配置的最大問題就是監聽器無法知道資料庫的真正狀態。
③動態註冊
動態註冊是在instance啟動的時候PMON程式根據init.ora中的INSTANCE_NAME,SERVICE_NAMES兩個引數將例項和服務動態註冊到listener中。要想使用動態註冊功能,首先需要在資料庫的初始化SERVICE_NAME和INSTANCE_NAME。如果沒有定義SERVER_NAME引數,資料庫會使用DB_NAME和DB_DOMAIN組成的一個全域性資料庫名稱(Global Database Name)註冊到監聽器中。INSTANCE_NAME是例項名稱,通常和SID值一樣。只要資料庫處於執行狀態,PMON程式就會自動、定期的地向監聽程式註冊、更新資訊,DBA也可以使用下面命令強制PMON立即向監聽器註冊:SQL>alert system register;
我在linux系統下就發生過ora-12514錯誤,檢查了半天后來發現時系統裡面的/etc/hosts裡面的ip地址沒有配成本地ip而是用127.0.0.1來代替

⑤監聽解析一個登入命令流程如sqlplus scott/tiger@linuxorcl
首先監聽會先去找tnsnames檔案,解析裡面是否有以linuxorcl開頭的段如:
linuxorcl =    #連線時@後面的字串,如sqlplus scott/tiger@linuxorcl
 (DESCRIPTION =
   (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.111)(PORT = 1521))  #伺服器本地IP地址
   )
   (CONNECT_DATA =
     (SERVICE_NAME = orcl)    #伺服器上資料庫例項名字
   )
 )
然後根據段裡面的Host和service_name去解析資料庫例項
最後把資料庫例項註冊到監聽上(動態的或靜態的)

資料庫名:show parameter db_name;
資料庫服務名:show parameter service_name;
資料庫例項名:show parameter instance_name;

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29489498/viewspace-1120439/,如需轉載,請註明出處,否則將追究法律責任。

相關文章