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