oracle網路配置listener.ora、sqlnet.ora、tnsnames.ora

dukewyh發表於2012-03-02
轉摘一篇介紹ORACLE 網路配置listener.ora、sqlnet.ora、tnsnames.ora 的文章:
 
oracle網路配置
三個配置檔案 listener.ora、sqlnet.ora、tnsnames.ora ,都是放在$ORACLE_HOME\network\admin目錄下。
 
1.  sqlnet.ora-----作用類似於linux或者其他unix的nsswitch.conf檔案,透過這個檔案來決定怎麼樣找一個連線中出現的連線字串。
例如我們客戶端輸入
sqlplus
假如我的sqlnet.ora是下面這個樣子
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES,HOSTNAME)
那麼,客戶端就會首先在tnsnames.ora檔案中找orcl的記錄.如果沒有相應的記錄則嘗試把orcl當作一個主機名,透過網路的途徑去解析它的 ip地址然後去連線這個ip上GLOBAL_DBNAME=orcl這個例項,當然我這裡orcl並不是一個主機名
如果我是這個樣子
NAMES.DIRECTORY_PATH= (TNSNAMES)
那麼客戶端就只會從tnsnames.ora查詢orcl的記錄,括號中還有其他選項,如LDAP等並不常用。

2.  Tnsnames.ora------這個檔案類似於unix 的hosts檔案,提供的tnsname到主機名或者ip的對應,只有當sqlnet.ora中類似
NAMES.DIRECTORY_PATH= (TNSNAMES) 這樣,也就是客戶端解析連線字串的順序中有TNSNAMES是,才會嘗試使用這個檔案。
PROTOCOL:客戶端與伺服器端通訊的協議,一般為TCP,該內容一般不用改。
HOST:資料庫偵聽所在的機器的機器名或IP地址,資料庫偵聽一般與資料庫在同一個機器上,所以當我說資料庫偵聽所在的機器一般也是指資料庫所在的機器。在UNIX或WINDOWS下,可以透過在資料庫偵聽所在的機器的命令提示符下使用hostname命令得到機器名,或透過ipconfig(for WINDOWS) or ifconfig(for UNIX)命令得到IP地址。需要注意的是,不管用機器名或IP地址,在客戶端一定要用ping命令ping通資料庫偵聽所在的機器的機器名,否則需要在 hosts檔案中加入資料庫偵聽所在的機器的機器名的解析。
PORT:資料庫偵聽正在偵聽的埠,可以察看伺服器端的listener.ora檔案或在資料庫偵聽所在的機器的命令提示符下透過lnsrctl status [listener name]命令察看。此處Port的值一定要與資料庫偵聽正在偵聽的埠一樣。
SERVICE_NAME:在伺服器端,用system使用者登陸後,sqlplus> show parameter service_name命令察看。
ORCL 對應的本機,SALES對應的另外一個IP地址,裡邊還定義了使用主用伺服器還是共享伺服器模式進行連線
 
#你所要連線的時候輸入得TNSNAME
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
#下面是這個TNSNAME對應的主機,埠,協議
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =
#使用專用伺服器模式去連線需要跟伺服器的模式匹配,如果沒有就根據伺服器的模式自動調節
(SERVER = DEDICATED)
#對應service_name,SQLPLUS>;show parameter service_name; 進行檢視
(SERVICE_NAME = orcl)
)
)
#下面這個類似
SALES =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.188.219)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = sales)
)
)
注意:如果資料庫伺服器用MTS,客戶端程式需要用database link時最好明確指明客戶端用dedicated直連方式,不然會遇到很多跟分散式環境有關的ORACLE BUG。一般情況下資料庫伺服器用直接的連線會好一些,除非你的實時資料庫連線數接近1000。
   
3.  listener.ora------listener監聽器程式的配置檔案
關於listener程式就不多說了,接受遠端對資料庫的接入申請並轉交給oracle的伺服器程式。所以如果不是使用的遠端的連線,listener程式就不是必需的,同樣的如果關閉listener程式並不會影響已經存在的資料庫連線。
Listener.ora檔案的例子
#listener.ora Network Configuration File: #E:\oracle\product\10.1.0\Db_2\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.
#下面定義LISTENER程式為哪個例項提供服務 這裡是ORCL,並且它對應的ORACLE_HOME和GLOBAL_DBNAME 其中GLOBAL_DBNAME不是必需的除非
#使用HOSTNAME做資料庫連線
 
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = boway)
(ORACLE_HOME = E:\oracle\product\10.1.0\Db_2)
(SID_NAME = ORCL)
)
)
#監聽器的名字,一臺資料庫可以有不止一個監聽器
#再向下面是監聽器監聽的協議,ip,埠等,這裡使用的tcp1521埠,並且使#用的是主機名
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = boway)(PORT = 1521))
)
上面的例子是一個最簡單的例子,但也是最普遍的。一個listener程式為一個instance(SID)提供服務。
監聽器的操作命令
$ORACLE_HOME/bin/lsnrctl start,其他諸如stop,status等。具體敲完一個lsnrctl後看幫助。

上面說到的三個檔案都可以透過圖形的配置工具來完成配置
$ORACLE_HOME/netca 嚮導形式的
$ORACLE_HOME/netmgr
本人比較習慣netmgr,
profile 配置的是sqlnet.ora也就是名稱解析的方式
service name 配置的是tnsnames.ora檔案
listeners配置的是listener.ora檔案,即監聽器程式
具體的配置可以嘗試一下然後來看一下配置檔案。

這樣一來總體結構就有了,是
當你輸入sqlplus 的時候
1. 查詢sqlnet.ora看看名稱的解析方式,發現是TNSNAME
2. 則查詢tnsnames.ora檔案,從裡邊找orcl的記錄,並且找到主機名,埠和service_name
3. 如果listener程式沒有問題的話,建立與listener程式的連線。
4. 根據不同的伺服器模式如專用伺服器模式或者共享伺服器模式,listener採取接下去的動作。預設是專用伺服器模式,沒有問題的話客戶端就連線上了資料庫的server process。
5. 這時候網路連線已經建立,listener程式的歷史使命也就完成了。

#---------------
幾種連線用到的命令形式
1.sqlplus / as sysdba 這是典型的作業系統認證,不需要listener程式
2.sqlplus sys/oracle 這種連線方式只能連線本機資料庫,同樣不需要listener程式
3.sqlplus 這種方式需要listener程式處於可用狀態。最普遍的透過網路連線。
以上連線方式使用sys使用者或者其他透過密碼檔案驗證的使用者都不需要資料庫處於可用狀態,作業系統認證也不需要資料庫可用,普通使用者因為是資料庫認證,所以資料庫必需處於open狀態。
init.ora中的Remote_Login_Passwordfile對身份驗證的影響
    三個可選值:
    NONE:預設值,指示Oracle系統不使用密碼檔案,透過作業系統進行身份驗證的特權使用者擁有SYSORA和SYSOPER許可權
    EXCLUSIVE:
    1.表示只有一個資料庫例項可以使用密碼檔案
    2.允許將SYSORA和SYSOPER許可權賦值給SYS以外的其它使用者
    SHARED:
    1.表示可以有多個資料庫例項可以使用密碼檔案
    2.不允許將SYSORA和SYSOPER許可權賦值給SYS以外的其它使用者
    所以,如果要以作業系統身份登入,Remote_Login_Passwordfile應該設定為NONE
    當登入使用者不是ORA_DBA組和ORA_OPER組成員時,登入資料庫需要在Oracle中建立當前作業系統使用者相同的使用者名稱,如果當前使用者是域用       戶,則名稱為:domainname\yourname,如果是本地計算機使用者,則名稱為:computername\yourname
    建立方法:
    create "domainname\yourname" identified externally;
    作業系統,修改HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0下面新增AUTH_PREFIX_DOMAIN,值設為FALSE,在建立Oracle使用者時可以忽略     掉域名
    這種方式下,init.ora中有一個引數將影響資料庫如何匹配一個windows使用者和Oracle使用者os_authent_prefix = ""
    預設為空,Oracle8i以前,無該引數,而使用OPS$作為使用者名稱字首.(Oracle使用者名稱最大長度限制為30個字元)
 
 關於域名(主機名)解析    
           /etc/hosts (UNIX)
           或者windows\hosts(WIN98)  winnt\system32\drivers\etc\hosts (WIN2000)
           客戶端需要寫入資料庫伺服器IP地址和主機名的對應關係。
         
           127.0.0.1       localhost
           192.168.0.35    oracledb oracledb
           192.168.0.45    tomcat tomcat
           202.84.10.193   bj_db   bj_db  
         
           有些時候我們配置好第一步後,tnsping 資料庫伺服器別名顯示是成功的,
           但是sqlplus 不通,jdbc thin link 也不通的時候,       
           一定不要忘了在客戶端做這一步,原因可能是DNS伺服器裡沒有設定這個伺服器IP地址和主機名的對應關係。
           如果同時有私有IP和Internet上公有IP,私有IP寫在前面,公有IP寫在後面。
           編輯前最好留一個備份,增加一行時也最好用複製貼上,避免編輯hosts時空格或者tab字元錯誤。
         
 UNIX下ORACLE多資料庫的環境,OS客戶端需要配置下面兩個環境變數
           ORACLE_SID=appdb;export ORACLE_SID
           TWO_TASK=appdb;export TWO_TASK
      來指定預設的目標資料庫 
 
#-------------
平時排錯可能會用到的
1.lsnrctl status檢視伺服器端listener程式的狀態
LSNRCTL>; help
The following operations are available
An asterisk (*) denotes a modifier or extended command:
start stop status
services version reload
save_config trace change_password
quit exit set*
show*
LSNRCTL>; status
:em11:

文章出處:DIY部落()




另外:http://hi.baidu.com/yjdzh/blog/item/67e11162278ce6dae7113a80.html

tnsnames.ora 監聽配置檔案詳解

監聽配置檔案
             為了使得外部程式 如 CAMS後臺程式 能夠訪問 Oracle 資料庫 必須配
             置 Oracle 網路伺服器環境 配置 Oracle 網路伺服器環境是透過配置
             listener.ora sqlnet.ora 和 tnsnames.ora 共三個檔案來進行的 listener.ora
             即監聽配置檔案 在本小節說明 另兩個檔案分別在隨後的兩個小節說明
             監聽配置檔案 listener.ora 的存放路徑為 $ORACLE_HOME/network/admin
             以下是一個示例
             LISTENER =                          #監聽器名稱
                (DESCRIPTION_LIST =
               (DESCRIPTION =
                  (ADDRESS_LIST =
                      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
                  )
                  (ADDRESS_LIST =
                      (ADDRESS =
             (PROTOCOL = TCP)
             (HOST = localhost.localdomain)
             (PORT = 1521))
                  )
               )
               (DESCRIPTION =
                  (PROTOCOL_STACK =
                      (divSENTATION = GIOP)
                      (SESSION = RAW)
                  )
                  (ADDRESS =
             (PROTOCOL = TCP)
             (HOST = localhost.localdomain)
             (PORT = 2481))

                  )
            )
           
SID_LIST_LISTENER = #命名規則 SID_LIST_+上面定義的監聽器名稱
(SID_LIST =
    (SID_DESC =
   (SID_NAME = PLSExtProc1)
   (ORACLE_HOME = /u01/app/oracle/product/8.1.7)
   (PROGRAM = extproc)
    )
    (SID_DESC =
   (GLOBAL_DBNAME = cams)
   (ORACLE_HOME = /u01/app/oracle/product/8.1.7)
   (SID_NAME = cams)
    )
    (SID_DESC =
   (GLOBAL_DBNAME = oid)
   (ORACLE_HOME = /u01/app/oracle/product/8.1.7)
   (SID_NAME = oid)
    )
)


& 說明
1 listener.ora 檔案中定義一個監聽器 其預設的名稱為 LISTENER
這個監聽器預設以tcp/ip為協議地址且埠號為1521執行 在CAMS應用中
監聽檔案定義的監聽器就使用這個預設名字 並且使用預設的協議 tcp/ip
和預設的埠號 1521 待配置好監聽檔案以及隨後說明的 sqlnet.ora 和
tnsnames.ora 檔案之後 就可以用以下命令將監聽檔案中定義的監聽器啟動
起來
    $ lsnrctl start
停止監聽器的命令為
    $ lsnrctl stop
監測監聽器當前狀態的命令為
    $ lsnrctl status
當 lsnrctl status 命令有如下輸出結果
    STATUS of the LISTENER
    ------------------------
    Alias                LISTENER
    Version                 TNSLSNR for Linux: Version 8.1.7.4.0 - Production
    Start Date             17-JAN-2004 19:00:08
    Uptime                31 days 15 hr. 27 min. 59 sec
就說明監聽器正在執行 否則說明監聽器已經停止了 CAMS 系統的後臺程
序的正常執行不僅依賴於資料庫例項的執行 還依賴於這個資料庫監聽器的
執行 假如監聽器沒有啟動 即使資料庫已經啟動 CAMS 後臺程式仍然不
能正常工作
2 如(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))所示的一個
IPC 協議地址的監聽 是為了外部程式呼叫用的 在資料庫安裝時自動設定
不需要改動

3 在監聽檔案後部還有一個 SID_LIST_LISTENER 段 該段用於定義監聽
器的服務 即為哪些資料庫例項提供監聽服務 以 cams 例項為例 其對應的
服務資訊為
(SID_DESC =
(GLOBAL_DBNAME = cams) #資料庫名
    (ORACLE_HOME = /u01/app/oracle/product/8.1.7)
(SID_NAME = cams) #資料庫例項名
)


1.2.5 sqlnet.ora 檔案
             sqlnet.ora 檔案的存放路徑為 $ORACLE_HOME/network/admin 以下是一
             個示例

NAMES.DEFAULT_DOMAIN = localdomain
NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME)
& 說明
NAMES.DEFAULT_DOMAIN 指定網路域名 NAMES.DIRECTORY_PATH
指定當解析客戶端連線識別符號時命名方法 naming metthods 採用的優先順
序 從左至右遞減        在 CAMS 應用中 這兩個引數採用上述所示的系統缺
省值


1.2.6 tnsnames.ora 檔案
tnsnames.ora 檔案的存放路徑為 $ORACLE_HOME/network/admin 以下
是一個示例
OID.LOCALDOMAIN =
(DESCRIPTION =
    (ADDRESS_LIST =
   (ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT =
1521))
    )
    (CONNECT_DATA =
   (SERVICE_NAME = oid)
    )
)
CAMS.LOCALDOMAIN =
(DESCRIPTION =
    (ADDRESS_LIST =
   (ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT =
1521))
    )
    (CONNECT_DATA =
   (SERVICE_NAME = cams)
    )
)
INST1_HTTP.LOCALDOMAIN =
(DESCRIPTION =
    (ADDRESS_LIST =
   (ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT =

1521))
    )
    (CONNECT_DATA =
   (SERVER = SHARED)
   (SERVICE_NAME = MODOSE)
   (divSENTATION = )
    )
)
EXTPROC_CONNECTION_DATA.LOCALDOMAIN =
(DESCRIPTION =
    (ADDRESS_LIST =
   (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
    )
    (CONNECT_DATA =
   (SID = PLSExtProc1)
   (divSENTATION = RO)
    )
)
 

& 說明
tnsnames.ora 檔案中定義一個或多個網路服務 net service cams 例項對
應的網路服務為
CAMS.LOCALDOMAIN =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS =
   (PROTOCOL = TCP)
   (HOST = localhost.localdomain)
   (PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = cams)
)
)
注意 這裡 ADDRESS項包含三個子引數

PROTOCOL :預設協議TCP

HOST :ip地址

PORT:埠,預設1521

CAMS.LOCALDOMAIN為資料名

要確保在監聽檔案中也有對應的一個 ADDRESS 項也包含同樣的三個子參
數 並且子引數的值對應都相等 另外 這裡 SERVICE_NAME 的值必需確
保與監聽檔案中某 SID_DESC項下的 SID_NAME引數的值相等

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

相關文章