Google Prettify

2013-08-27

如何設定與連結到外部Oracle 資料庫

Oracle是主從式架構的資料庫,我們一般開發的時候,很多時候直接在本機上面建了Oracle DB。這裡要講的是如何從本機連到外部的Oracle DB 與相關設定。

環境

遠端電腦(Server):
OS: Windows 7 Professional
Oracle: Win64 11gR2 database (11.2.0)
SID: orcl
ORA_HOME: D:\oracle\product\11.2.0\dbhome_1

本機電腦(Client):
OS: Windows 7 Professional
Oracle: Win32 11gR2 database(11.2.0)

步驟


簡單來說,就以下幾個步驟:(其中一個還不在本篇範圍…)
1. 安裝Oracle與建立DB instance。(不在本篇範圍)
2. 組態網路環境。
2.1 遠端server 組態
2.2 本機TNS組態

在詳細說明步驟前先談一下Oracle的網路架構。

網路架構


Oracle網路架構大概分為以下幾個部份:


Oracle DB網路架構圖
圖片來源: http://docs.oracle.com/cd/B19306_01/network.102/b14212/architecture.htm

我想表達的重點是:Oracle DB Instance透過Listener來提供服務。Listener的設定檔是listener.ora;實體位置可能如下,當然隨安裝環境或是版本,前面的路徑會有不同。

c:\oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN\listener.ora

遠端Server組態


在Windows 下提供了方便的GUI可以直接做設定(開始功能表→Oracle→組態設定和移轉工具→Net Manager)。當然,如果你想直接改listener.ora也是可以。

A. 首先是建立Listener。這部份沒什麼需要詳細說明的,就資料填一填即可。


B. 新增資料庫服務。這裡是告訴Oracle當Listener收到request時,應該連到那個DB Instance。這部份也很簡單,也是資料填一填就好了。注意:全域資料庫名稱是要給外部知道的;可以跟SID相同,也可以不同。別忘了設定完後要重啟Listener與資料庫。



最後透過GUI產生出來的listener.ora大概長的會是像這樣子:

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = YOUR_GLOBAL_DBNAME)
      (ORACLE_HOME = D:\oracle\product\11.2.0\dbhome_1)
      (SID_NAME = ORCL)
    )
  )

LISTENER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = DB_MACHINE_IP)(PORT = 1521))
  )
ADR_BASE_LISTENER = D:\oracle

本機TNS組態


原則上這一個段落是選擇性的。如果是採用jdbc連線方式的話,這部份是不需要的。

架構圖中沒有表現出來的是TNS。TNS是Transparent Network Substrate 的縮寫,也是屬於Oracle網路服務的一個部份。在Server端TNS不用做什麼設定;預設值就好。Client(本機)端的設定檔是在 tnsnames.ora,實際檔案位置如下:

c:\oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN\tnsnames.ora

Windows 下也親切的提供了GUI。同樣的,我們也可以直接去更改 tnsnames.ora。這部份也很簡單,就新增一個服務命名,然後資料輸一輸就可以了。



注意的是這裡的服務名稱要填之前的「全域資料庫名稱」。最後產生出來的tnsnames.ora大概會是這樣子:

YOUR_TNSNAME =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = DB_MACHINE_IP)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = YOUR_GLOBAL_SID)
    )
  )

問題解決


原則上設定完後應該就可以了。

  • 如果發生連線連不到的話,請檢查一下client 與server 的作業系統防火牆與防毒軟體的設定,是否有被擋掉、防火牆的例外有沒有設定。如果有這類的問題,在連線的時候,通常回應都會稍慢一些(因為需要花時間等 timeout),可以依此為判斷依據。
  • 如果發生SID找不到或是沒有提供listener錯誤,請比對一下listener.ora與tnsnames.ora是否設定正確,同時檢查一下listener或oracle有沒有正常啟動。

結論


本篇說明如何如何組態Oracle Server的Listener與Oracle Client端的TNS,可以連到不同網域的資料庫。

沒有留言 :

您或許對這些有興趣

Related Posts with Thumbnails

最後

謝謝您的閱讀,希望您可以有豐富的收獲。