ORACLE數據庫有極強的網(wǎng)絡(luò )功能,它支持各種網(wǎng)絡(luò )協(xié)議,如TCP/IP、SPX/IPX、X.25、LU6.2、Decnet等等,支持異種網(wǎng)絡(luò )協(xié)議互聯(lián)、異種數據庫互聯(lián)。SQL*Net是ORACLE的網(wǎng)絡(luò )軟件。
一、SQL*Net產(chǎn)品介紹
ORACLE不僅支持傳統的主機─終端方式,還支持流行的Client/Server體系結構方式,使得應用與數據庫核心分布處理,極大地提高了資源的利用率和處理效率。Client/Server的Server端安放ORACLE Server;Client端安放用戶(hù)界面程序或ORACLE的Client端產(chǎn)品,如SQL*Plus;SQL*Net是ORACLE的網(wǎng)絡(luò )軟件,通過(guò)SQL*Net可以實(shí)現Client與Server的連接,SQL*Net是建立在某一網(wǎng)絡(luò )協(xié)議之上的網(wǎng)絡(luò )中間件產(chǎn)品,如下圖所示:
圖1-SQL*Net網(wǎng)絡(luò )連接
目前,SQL*Net有SQL*Net V1和SQL*Net V2兩種版本。從上圖中可以看出,必須在底層網(wǎng)絡(luò )已經(jīng)連通的前提下,才能對SQL*Net作合適的配置。
SQL*Net提供了以下網(wǎng)絡(luò )功能:
網(wǎng)絡(luò )透明性:在一個(gè)本地數據庫上開(kāi)發(fā)的應用,可以不加修改地分布到網(wǎng)絡(luò )上去運行;
協(xié)議獨立性:在任何一臺計算機上編制的應用,都可以不加修改地分布到任何協(xié)議的網(wǎng)絡(luò )上去運行;
異種機網(wǎng)絡(luò ):通過(guò)多協(xié)議轉換,可實(shí)現多種網(wǎng)絡(luò )協(xié)議之間的互聯(lián);
位置透明:通過(guò)位置透明策略,可以使網(wǎng)絡(luò )中數據,如同放在單一本地數據庫中一樣使用。以后當數據分布發(fā)生變化時(shí),應用程序不用作任何修改;
自動(dòng)字符集轉換:兩個(gè)通訊節點(diǎn)之間不同的字符集和NLS(國際語(yǔ)言支持)數據描述可以通過(guò)SQL*Net來(lái)管理。
下面介紹SQL*Net運行過(guò)程中相關(guān)的文件(以UNIX環(huán)境中TCP/IP協(xié)議為例):
lsnrctl:放在“/ORACLE_HOME/bin”目錄下,用于啟動(dòng)SQL*Net V2.0監聽(tīng)進(jìn)程。常用的命令有:lsnrctl start啟動(dòng)監聽(tīng)服務(wù),lsnrctl stop停止監聽(tīng)服務(wù),lsnrctl status查看監聽(tīng)服務(wù)當前是否啟用。
tcpctl和orasrv:放在“/ORACLE_HOME/bin”目錄下,用于啟動(dòng)SQL*Net V1.0監聽(tīng)進(jìn)程。由于現在使用的是V2.0版本,故此處不再詳述。
listener.ora和tnsnames.ora:放在“/ORACLE_HOME/network/admin”子目錄下,是SQL*Net V2正常工作所需的配置文件及整個(gè)網(wǎng)絡(luò )的配置文件。listener.ora是服務(wù)器監聽(tīng)進(jìn)程網(wǎng)絡(luò )配置文件,tnsnames.ora是客戶(hù)機與服務(wù)器聯(lián)絡(luò )所需的網(wǎng)絡(luò )配置文件。
config.ora:該文件放置了ORACLE運行的一些參數,與網(wǎng)絡(luò )有關(guān)的有LOCAL_CONNECT,指明缺省訪(fǎng)問(wèn)ORACLE的連接描述符。如在該文件中有一行:LOCALE_CONNECT = ora,表示缺省連接描述符為ora。如果運行SQL*Plus時(shí),可省去“$ sqlplus 用戶(hù)名/口令@ora”中的連接描述符“ora:”只輸入“$ sqlplus 用戶(hù)名/口令”即可。
config.ora文件放在“/ORACLE_HOME/dbs”子目錄下。
sqlnet.ora文件放在“/ORACLE_HOME/network/admin”子目錄中,其作用類(lèi)似Unix中nsswitch.conf配置文件,當輸入連接數據庫字符串時(shí),通過(guò)這個(gè)文件來(lái)決定連接字符串與數據庫實(shí)例名的對應關(guān)系。比如sqlnet.ora中描述為NAMES.DIRECTORY_PATH= (TNSNAMES,HOSTNAME),我們在客戶(hù)端輸入:sqlplus
system/system@oracleTest,客戶(hù)端首先在tnsnames.ora文件中找oracleTest的記錄。如果沒(méi)有相應的記錄則嘗試把oracleTest當作一個(gè)主機名,通過(guò)網(wǎng)絡(luò )的途徑去解析它的ip地址然后去連接這個(gè)ip上GLOBAL_DBNAME=oracleTest這個(gè)實(shí)例,當然這里oracleTest并不是一個(gè)主機名;如果將sqlnet.ora中的NAMES.DIRECTORY_PATH改為NAMES.DIRECTORY_PATH= (TNSNAMES),那么客戶(hù)端就只會(huì )從tnsnames.ora中查找oracleTest記錄。
TCP/IP的配置文件:與SQL*Net有關(guān)的TCP/IP協(xié)議配置文件有兩個(gè):
/etc/hosts:存放整個(gè)網(wǎng)絡(luò )環(huán)境中每個(gè)節點(diǎn)的IP地址。
/etc/services:存放TCP/IP協(xié)議使用的各個(gè)端口的地址。
二、配置客戶(hù)機/服務(wù)器結構
使用ORACLE的SQL*Net V2連接客戶(hù)機和服務(wù)器,需配置每個(gè)客戶(hù)機和服務(wù)器。在服務(wù)器上需配置的文件有:listener.ora、/etc/services,在客戶(hù)機上需配置tnsnames.ora文件。
1、數據庫連接過(guò)程
(1)查詢(xún)sqlnet.ora看看名稱(chēng)的解析方式,發(fā)現是TNSNAME;則查詢(xún)tnsnames.ora文件,從里邊找oracleTest的記錄,并且找到主機名,端口和service_name;
(2)如果listener進(jìn)程沒(méi)有問(wèn)題的話(huà),建立與listener進(jìn)程的連接;根據不同的服務(wù)器模式如專(zhuān)用服務(wù)器模式或者共享服務(wù)器模式,系統默認是專(zhuān)用服務(wù)器模式,一切都沒(méi)有問(wèn)題的話(huà)客戶(hù)端就連接上了數據庫的server process;
(3)網(wǎng)絡(luò )連接就建立起來(lái)了,listener進(jìn)程的歷史使命也就完成了。
注:幾種連接用到的命令形式:
sqlplus / as sysdba 這是典型的操作系統認證,不需要listener進(jìn)程
sqlplus system/manager 這種連接方式只能連接本機數據庫,同樣不需要listener進(jìn)程
以上連接方式使用system用戶(hù)或者其他通過(guò)密碼文件驗證的用戶(hù)都不需要數據庫處于可用狀態(tài),操作系統認證也不需要數據庫可用,普通用戶(hù)因為是數據庫認證,所以數據庫必需處于open狀態(tài)。
2. 配置listener.ora
listener.ora文件中存放了客戶(hù)機與服務(wù)器連接所需要的監聽(tīng)地址,以及服務(wù)器啟動(dòng)監聽(tīng)進(jìn)程時(shí)的信息。listener.ora文件缺省放置在/ORACLE_HOME/network/admin之下。一個(gè)完整的listener.ora文件樣式如下:
LISTENER=(
ADDRESS=(COMMUNITY=TCP1)(PROTOCOL=TCP)(HOST=Server1)(PORT=1521))
SID_LISTENER=(SID_DESC=(SID_NAME=oracle)(ORACLE_HOME=/usr/oracle)
)
其中,LISTENER是服務(wù)器中監聽(tīng)進(jìn)程的名稱(chēng);COMMUNITY代表服務(wù)器在整個(gè)網(wǎng)絡(luò )中的節點(diǎn)位置(該參數不是一定要有值,可以為空);PROTOCOL表明所使用的網(wǎng)絡(luò )協(xié)議,若是TCP/IP協(xié)議,則該值必須為“TCP”;HOST表示服務(wù)器的網(wǎng)絡(luò )地址;PORT指TCP/IP協(xié)議在主機中所占用端口號,ORACLE缺省使用1521,不能改變;SID_NAME指服務(wù)器上運行的ORACLE數據庫名稱(chēng),該值應與.profile文件中的環(huán)境變量ORACLE_SID相同;ORACLE_HOME是指ORACLE數據庫的主目錄,該值也應與.profile文件中的環(huán)境變量ORACLE_HOME相同。另外,在listener.ora文件中,還有一些啟動(dòng)監聽(tīng)進(jìn)程所需要的參數。下面是listener.ora文件的實(shí)例:
listener = 服務(wù)器監聽(tīng)進(jìn)程名稱(chēng)
(address_list = 網(wǎng)絡(luò )地址列表
(address = 網(wǎng)絡(luò )地址之一
(protocol = tcp) 網(wǎng)絡(luò )協(xié)議(tcp表示TCP/IP協(xié)議)
(host = 192.168.0.1) 服務(wù)器IP地址:192.168.0.1
(port = 1251) 端口號:1251
)
)
startup_wait_time_listener = 0 監聽(tīng)進(jìn)程對狀態(tài)控制命令響應前等待秒數
connect_timeout_listener = 10 連接最大允許等待時(shí)間
sid_list_listener = 服務(wù)器標識列表
(sid_desc = 服務(wù)器標識描述之一
(sid_name = oracle) 數據庫標識名:oracle
(oracle_home = /usr/oracle) ORACLE數據庫主目錄:/usr/oracle
)
3. 配置/etc/services文件
在/etc/services文件中加如下一行:
lsnrctl ftp/1521
指明監聽(tīng)進(jìn)程使用的協(xié)議及端口地址。
4. 配置tnsnames.ora文件
客戶(hù)機為了和服務(wù)器連接,和服務(wù)器之間的互聯(lián),都必須先和服務(wù)器上的監聽(tīng)進(jìn)程聯(lián)絡(luò )。ORACLE通過(guò)tnsnames.ora文件中的連接描述符來(lái)說(shuō)明連接信息。一般tnsnames.ora 是建立在客戶(hù)機上的。如果是客戶(hù)機/服務(wù)器結構,整個(gè)網(wǎng)絡(luò )上只有一臺機器安裝了ORACLE數據庫服務(wù)器,那么只需在每個(gè)要訪(fǎng)問(wèn)ORACLE服務(wù)器的客戶(hù)機上定義該文件,在服務(wù)器上無(wú)需定義。但是,如果網(wǎng)絡(luò )上有多臺機器均安裝了ORACLE數據庫服務(wù)器,并且服務(wù)器之間有數據共享的要求,那么在每臺服務(wù)器上都必須定義該文件。tnsnames.ora文件缺省放在/ORACLE_HOME/network/admin目錄下。下面是tnsnames.ora的文件樣式:
REMOTE_DB=(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=
(COMMUNITY=SPX.US.Oracle)
(PROTOCOL=SPX)
(SERVICE=NOVELL1))
(ADDRESS=
(COMMUNITY=TCP1.US.Oracle)
(PROTOCOL=TCP)
(HOST=SERVER1)
(PORT=1521)
(CONNECT_DATA=
(SID=oracle)
(SERVER=DEDICATED)
)
)
請注意以下幾點(diǎn):
(1) REMOTE_DB為連接描述符名字,可根據需要隨意定義,以后客戶(hù)機要登錄服務(wù)器時(shí)使用:
$sqlplus 用戶(hù)名/口令@REMOTE_DB
(2) ADDRESS_LIST,表示該客戶(hù)機要經(jīng)由多種協(xié)議與一臺或多臺服務(wù)器連接。在該樣式文件中就表示該客戶(hù)機要用NOVELL網(wǎng)上的SPX/IPX協(xié)議和用TCP/IP網(wǎng)上的TCP/IP協(xié)議來(lái)和服務(wù)器相連。若只使用一種協(xié)議相連,那么僅使用ADDRESS關(guān)鍵字即可,而不用使用ADDRESS_LIST。
(3) PROTOCOL指明要連接使用的協(xié)議。
(4) SERVICE是NOVELL網(wǎng)上使用的關(guān)鍵字。
(5) HOST是TCP/IP協(xié)議使用的服務(wù)器IP地址。
(6) PORT是TCP/IP使用的端口地址。
(7) SID指定要連接的服務(wù)器上ORACLE數據庫的ORACLE_SID。
(8) SERVER=DEDICATED表示用專(zhuān)用服務(wù)器連接ORACLE數據庫。
下面是一個(gè)tnsnames.ora文件內容舉例:
ora = 連接描述符名:ora
(description = 描述
(address =網(wǎng)絡(luò )地址之一
(protocol = tcp)網(wǎng)絡(luò )協(xié)議(tcp表示TCP/IP協(xié)議)
(host = 192.168.0.1)服務(wù)器IP地址:192.168.0.1
(port = 1521)服務(wù)器端口號:1521
)
(connect_data =連接數據
(sid = oracle)數據庫標識名:oracle
)
)
文章轉載自網(wǎng)管網(wǎng):http://www.bitscn.com/pdb/oracle/200904/160359_5.html