程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> 淺談Oracle數據庫的網絡應用

淺談Oracle數據庫的網絡應用

編輯:Oracle數據庫基礎

Oracle不僅支持傳統的主機─終端方式,還支持流行的ClIEnt/Server體系結構方式,使得應用與數據庫核心分布處理,極大地提高了資源的利用率和處理效率。Client/Server的Server端安放ORACLE Server;Client端安放用戶界面程序或ORACLE的ClIEnt端產品,如SQL*Plus;SQL*Net是Oracle的網絡軟件,通過SQL*Net可以實現ClIEnt與Server的連接,SQL*Net是建立在某一網絡協議之上的網絡中間件產品,如下圖所示:

 

目前,SQL*Net有SQL*Net V1和SQL*Net V2兩種版本。從上圖中可以看出,必須在底層網絡已經連通的前提下,才能對SQL*Net作合適的配置。

SQL*Net提供了以下網絡功能:

網絡透明性:在一個本地數據庫上開發的應用,可以不加修改地分布到網絡上去運行;

協議獨立性:在任何一台計算機上編制的應用,都可以不加修改地分布到任何協議的網絡上去運行;

異種機網絡:通過多協議轉換,可實現多種網絡協議之間的互聯;

位置透明:通過位置透明策略,可以使網絡中數據,如同放在單一本地數據庫中一樣使用。以後當數據分布發生變化時,應用程序不用作任何修改;

自動字符集轉換:兩個通訊節點之間不同的字符集和NLS(國際語言支持)數據描述可以通過SQL*Net來管理。

下面介紹SQL*Net運行過程中相關的文件(以UNIX環境中TCP/IP協議為例):

lsnrctl:放在“/Oracle_HOME/bin”目錄下,用於啟動SQL*Net V2.0監聽進程。常用的命令有:lsnrctl start啟動監聽服務,lsnrctl stop停止監聽服務,lsnrctl status查看監聽服務當前是否啟用。

tcpctl和orasrv:放在“/Oracle_HOME/bin”目錄下,用於啟動SQL*Net V1.0監聽進程。由於現在使用的是V2.0版本,故此處不再詳述。

listener.ora和tnsnames.ora:放在“/Oracle_HOME/network/admin”子目錄下,是SQL*Net V2正常工作所需的配置文件及整個網絡的配置文件。listener.ora是服務器監聽進程網絡配置文件,tnsnames.ora是客戶機與服務器聯絡所需的網絡配置文件。

config.ora:該文件放置了ORACLE運行的一些參數,與網絡有關的有LOCAL_CONNECT,指明缺省訪問Oracle的連接描述符。如在該文件中有一行:LOCALE_CONNECT = ora,表示缺省連接描述符為ora。如果運行SQL*Plus時,可省去“$ sqlplus 用戶名/口令@ora”中的連接描述符“ora:”只輸入“$ sqlplus 用戶名/口令”即可。

config.ora文件放在“/Oracle_HOME/dbs”子目錄下。

sqlnet.ora文件放在“/Oracle_HOME/network/admin”子目錄中,其作用類似Unix中nsswitch.conf配置文件,當輸入連接數據庫字符串時,通過這個文件來決定連接字符串與數據庫實例名的對應關系。比如sqlnet.ora中描述為NAMES.DIRECTORY_PATH= (TNSNAMES,HOSTNAME),我們在客戶端輸入:sqlplus system/system@oracleTest,客戶端首先在tnsnames.ora文件中找oracleTest的記錄。如果沒有相應的記錄則嘗試把oracleTest當作一個主機名,通過網絡的途徑去解析它的ip地址然後去連接這個ip上GLOBAL_DBNAME=oracleTest這個實例,當然這裡oracleTest並不是一個主機名;如果將sqlnet.ora中的NAMES.DIRECTORY_PATH改為NAMES.DIRECTORY_PATH= (TNSNAMES),那麼客戶端就只會從tnsnames.ora中查找OracleTest記錄。

TCP/IP的配置文件:與SQL*Net有關的TCP/IP協議配置文件有兩個:

/etc/hosts:存放整個網絡環境中每個節點的IP地址。

/etc/services:存放TCP/IP協議使用的各個端口的地址。

配置客戶機/服務器結構

使用Oracle的SQL*Net V2連接客戶機和服務器,需配置每個客戶機和服務器。在服務器上需配置的文件有:listener.ora、/etc/services,在客戶機上需配置tnsnames.ora文件。

1.數據庫連接過程

當輸入sqlplus system/manager@OracleTest的時候

(1)查詢sqlnet.ora看看名稱的解析方式,發現是TNSNAME;則查詢tnsnames.ora文件,從裡邊找OracleTest的記錄,並且找到主機名,端口和service_name;

(2)如果listener進程沒有問題的話,建立與listener進程的連接;根據不同的服務器模式如專用服務器模式或者共享服務器模式,系統默認是專用服務器模式,一切都沒有問題的話客戶端就連接上了數據庫的server process;

(3)網絡連接就建立起來了,listener進程的歷史使命也就完成了。

注:幾種連接用到的命令形式:

sqlplus / as sysdba 這是典型的操作系統認證,不需要listener進程

sqlplus system/manager 這種連接方式只能連接本機數據庫,同樣不需要listener進程

sqlplus system/manager@OracleTest 這種方式需要listener進程處於可用狀態。最普遍的通過網絡連接。

以上連接方式使用system用戶或者其他通過密碼文件驗證的用戶都不需要數據庫處於可用狀態,操作系統認證也不需要數據庫可用,普通用戶因為是數據庫認證,所以數據庫必需處於open狀態。

2. 配置listener.ora

listener.ora文件中存放了客戶機與服務器連接所需要的監聽地址,以及服務器啟動監聽進程時的信息。listener.ora文件缺省放置在/Oracle_HOME/network/admin之下。一個完整的listener.ora文件樣式如下:

LISTENER=(ADDRESS=(COMMUNITY=TCP1)(PROTOCOL=TCP)(HOST=Server1)(PORT=1521))
SID_LISTENER=(SID_DESC=(SID_NAME=oracle)(ORACLE_HOME=/usr/Oracle))

其中,LISTENER是服務器中監聽進程的名稱;COMMUNITY代表服務器在整個網絡中的節點位置(該參數不是一定要有值,可以為空);PROTOCOL表明所使用的網絡協議,若是TCP/IP協議,則該值必須為“TCP”;HOST表示服務器的網絡地址;PORT指TCP/IP協議在主機中所占用端口號,ORACLE缺省使用1521,不能改變;SID_NAME指服務器上運行的ORACLE數據庫名稱,該值應與.profile文件中的環境變量ORACLE_SID相同;ORACLE_HOME是指Oracle數據庫的主目錄,該值也應與.profile文件中的環境變量Oracle_HOME相同。另外,在listener.ora文件中,還有一些啟動監聽進程所需要的參數。下面是listener.ora文件的實例:

listener = 服務器監聽進程名稱
(address_list = 網絡地址列表
(address = 網絡地址之一
(protocol = tcp) 網絡協議(tcp表示TCP/IP協議)
(host = 192.168.0.1) 服務器IP地址:192.168.0.1
(port = 1251) 端口號:1251
)
)
startup_wait_time_listener = 0 監聽進程對狀態控制命令響應前等待秒數
connect_timeout_listener = 10 連接最大允許等待時間
sid_list_listener = 服務器標識列表
(sid_desc = 服務器標識描述之一
(sid_name = Oracle) 數據庫標識名:Oracle
(oracle_home = /usr/oracle) Oracle數據庫主目錄:/usr/Oracle
)

3. 配置/etc/services文件

在/etc/services文件中加如下一行:

lsnrctl FTP/1521

指明監聽進程使用的協議及端口地址。

4. 配置tnsnames.ora文件

客戶機為了和服務器連接,和服務器之間的互聯,都必須先和服務器上的監聽進程聯絡。ORACLE通過tnsnames.ora文件中的連接描述符來說明連接信息。一般tnsnames.ora 是建立在客戶機上的。如果是客戶機/服務器結構,整個網絡上只有一台機器安裝了ORACLE數據庫服務器,那麼只需在每個要訪問ORACLE服務器的客戶機上定義該文件,在服務器上無需定義。但是,如果網絡上有多台機器均安裝了Oracle數據庫服務器,並且服務器之間有數據共享的要求,那麼在每台服務器上都必須定義該文件。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)
)
)

請注意以下幾點:

(1) REMOTE_DB為連接描述符名字,可根據需要隨意定義,以後客戶機要登錄服務器時使用:

$sqlplus 用戶名/口令@REMOTE_DB

(2) ADDRESS_LIST,表示該客戶機要經由多種協議與一台或多台服務器連接。在該樣式文件中就表示該客戶機要用NOVELL網上的SPX/IPX協議和用TCP/IP網上的TCP/IP協議來和服務器相連。若只使用一種協議相連,那麼僅使用ADDRESS關鍵字即可,而不用使用ADDRESS_LIST。

(3) PROTOCOL指明要連接使用的協議。

(4) SERVICE是NOVELL網上使用的關鍵字。

(5) HOST是TCP/IP協議使用的服務器IP地址。

(6) PORT是TCP/IP使用的端口地址。

(7) SID指定要連接的服務器上Oracle數據庫的Oracle_SID。

(8) SERVER=DEDICATED表示用專用服務器連接Oracle數據庫。

下面是一個tnsnames.ora文件內容舉例:

ora = 連接描述符名:ora
(description = 描述
(address =網絡地址之一
(protocol = tcp)網絡協議(tcp表示TCP/IP協議)
(host = 192.168.0.1)服務器IP地址:192.168.0.1
(port = 1521)服務器端口號:1521
)
(connect_data =連接數據
(sid = Oracle)數據庫標識名:Oracle
)
)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved