連線RAC資料庫中單個例項(一)
有時候希望連線RAC資料庫時,只連線到其中某個例項。但是要實現這個目的,並不是僅僅透過設定TNSNAMES.ORA中服務名地址列表就可以實現的。
這篇描述透過INSTANCE_NAME來實現目標。
測試環境10.2.0.3 Rac for Solaris for sparc 64:
SQL> SELECT NAME FROM V$DATABASE;
NAME
---------
TESTRAC
SQL> SELECT INSTANCE_NUMBER, INSTANCE_NAME FROM V$INSTANCE;
INSTANCE_NUMBER INSTANCE_NAME
--------------- ----------------
1 testrac1
SQL> SELECT INSTANCE_NUMBER, INSTANCE_NAME FROM GV$INSTANCE;
INSTANCE_NUMBER INSTANCE_NAME
--------------- ----------------
1 testrac1
2 testrac2
為了避免出現ORA-12545錯誤,在兩個節點分別設定了LOCAL_LISTENER初始化引數:
SQL> ALTER SYSTEM
2 SET LOCAL_LISTENER = '(ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.198.224)(PORT = 1521))'
3 SID = 'testrac1';
系統已更改。
節點2:
SQL> SELECT INSTANCE_NAME FROM V$INSTANCE;
INSTANCE_NAME
----------------
testrac2
SQL> ALTER SYSTEM
2 SET LOCAL_LISTENER = '(ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.198.225)(PORT = 1521))'
3 SID = 'testrac2';
系統已更改。
分別檢查兩個節點上LISTENER相關的配置,節點1:
SQL> SHOW PARAMETER LISTENER
NAME TYPE VALUE
---------------- ----------- ------------------------------
local_listener string (ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.198.224)(PORT = 1521))
remote_listener string LISTENERS_TESTRAC
節點2:
SQL> SHOW PARAMETER LISTENER
NAME TYPE VALUE
---------------- ----------- ------------------------------
local_listener string (ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.198.225)(PORT = 1521))
remote_listener string LISTENERS_TESTRAC
其中REMOTE_LISTENER設定的值是TNSNAMES.ORA中配置的服務名,節點1上的TNSNAMES.ORA配置為:
LISTENER_TESTRAC2 =
(ADDRESS = (PROTOCOL = TCP)(HOST = racnode2-vip)(PORT = 1521))
LISTENER_TESTRAC1 =
(ADDRESS = (PROTOCOL = TCP)(HOST = racnode1-vip)(PORT = 1521))
TESTRAC2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = racnode2-vip)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = testrac)
(INSTANCE_NAME = testrac2)
)
)
TESTRAC1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = racnode1-vip)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = testrac)
(INSTANCE_NAME = testrac1)
)
)
TESTRAC =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = racnode1-vip)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = racnode2-vip)(PORT = 1521))
(LOAD_BALANCE = yes)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = testrac)
)
)
LISTENERS_TESTRAC =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = racnode1-vip)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = racnode2-vip)(PORT = 1521))
)
節點2上的TNSNAMES.ORA配置為:
LISTENER_TESTRAC2 =
(ADDRESS = (PROTOCOL = TCP)(HOST = racnode2-vip)(PORT = 1521))
LISTENER_TESTRAC1 =
(ADDRESS = (PROTOCOL = TCP)(HOST = racnode1-vip)(PORT = 1521))
TESTRAC2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = racnode2-vip)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = testrac)
(INSTANCE_NAME = testrac2)
)
)
TESTRAC1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = racnode1-vip)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = testrac)
(INSTANCE_NAME = testrac1)
)
)
TESTRAC =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = racnode1-vip)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = racnode2-vip)(PORT = 1521))
(LOAD_BALANCE = yes)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = testrac)
)
)
LISTENERS_TESTRAC =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = racnode1-vip)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = racnode2-vip)(PORT = 1521))
)
在本地測試連線,本地TNSNAMES.ORA檔案中TESTRAC服務名配置為:
TESTRAC =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.198.224)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.198.225)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = TESTRAC)
)
)
下面嘗試多次連線TESTRAC資料庫,檢查每次連線到哪個例項上:
SQL> CONN YANGTK/YANGTK@TESTRAC
已連線。
SQL> SELECT INSTANCE_NAME FROM V$INSTANCE;
INSTANCE_NAME
----------------
testrac1
SQL> CONN YANGTK/YANGTK@TESTRAC
已連線。
SQL> SELECT INSTANCE_NAME FROM V$INSTANCE;
INSTANCE_NAME
----------------
testrac2
將TESTRAC配置中的地址去掉一個,結果仍然如此:
TESTRAC =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.198.224)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = TESTRAC)
)
)
測試連線:
SQL> CONN YANGTK/YANGTK@TESTRAC
已連線。
SQL> SELECT INSTANCE_NAME FROM V$INSTANCE;
INSTANCE_NAME
----------------
testrac1
SQL> CONN YANGTK/YANGTK@TESTRAC
已連線。
SQL> SELECT INSTANCE_NAME FROM V$INSTANCE;
INSTANCE_NAME
----------------
testrac2
可以看到,即使TNSNAMES.ORA中配置了一個節點的地址,透過這個服務名訪問RAC資料庫,還是可能連線到兩個例項上的。
為了確保透過服務名只連線到一個例項,需要在CONNECT_DATA中不僅僅指定SERVICE_NAME,同時還需要指定INSTANCE_NAME引數:
TESTRAC =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.198.224)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = TESTRAC)
(INSTANCE_NAME = TESTRAC1)
)
)
現在再次測試連線:
SQL> CONN YANGTK/YANGTK@TESTRAC
已連線。
SQL> SELECT INSTANCE_NAME FROM V$INSTANCE;
INSTANCE_NAME
----------------
testrac1
SQL> CONN YANGTK/YANGTK@TESTRAC
已連線。
SQL> SELECT INSTANCE_NAME FROM V$INSTANCE;
INSTANCE_NAME
----------------
testrac1
SQL> CONN YANGTK/YANGTK@TESTRAC
已連線。
SQL> SELECT INSTANCE_NAME FROM V$INSTANCE;
INSTANCE_NAME
----------------
testrac1
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2317695/viewspace-2083845/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 連線RAC資料庫中單個例項(二)資料庫
- RAC資料庫啟用、禁用一個例項資料庫
- 單例項恢復RAC資料庫步驟(一)單例資料庫
- RAC資料庫恢復到單例項資料庫資料庫單例
- JDBC連線自定義sqlserver資料庫例項名(多個例項)JDBCSQLServer資料庫
- 單例項資料庫expdp遷移到RAC庫單例資料庫
- duplicate複製資料庫(rac-單例項)資料庫單例
- 恢復RAC資料庫到單例項(ASM)資料庫單例ASM
- 資料庫–如何連線RDS例項,使用雲資料庫?資料庫
- 【RAC】刪除RAC資料庫節點(一)——刪除資料庫例項資料庫
- 單例項恢復RAC資料庫步驟(三)單例資料庫
- 單例項恢復RAC資料庫步驟(二)單例資料庫
- RAC環境只啟動單例項資料庫單例資料庫
- 單例項環境利用備份恢復RAC資料庫(一)單例資料庫
- 【RAC】將單例項備份集恢復為rac資料庫單例資料庫
- 【RAC】將RAC備份集恢復為單例項資料庫單例資料庫
- 用srvctl 命令停止RAC 資料庫某個例項資料庫
- 利用STANDBY將單例項資料庫升級為RAC環境(一)單例資料庫
- JDBC連線MySQL資料庫的方法和例項JDBCMySql資料庫
- Java連線各種資料庫的例項 (轉)Java資料庫
- 最近遇到的RAC的一個例項無法連線的問題
- 將RAC備份集恢復為單例項資料庫單例資料庫
- 多個資料庫是否可以共有一個Oracle 11g RAC例項KG資料庫Oracle
- 單例項資料遷移到RAC補充單例
- DBeaver如何連線一個資料庫資料庫
- 單例項資料庫工具轉化多例項資料庫單例資料庫
- 單例項資料庫手工轉化多例項資料庫單例資料庫
- 從單例項資料庫轉換到RAC環境——RAC的建立和配置單例資料庫
- 設計模式使用例項(5)——建造者模式例項之資料庫連線管理設計模式資料庫
- 單例項環境利用備份恢復RAC資料庫(四)單例資料庫
- 單例項環境利用備份恢復RAC資料庫(三)單例資料庫
- 單例項環境利用備份恢復RAC資料庫(二)單例資料庫
- WMB 使用Compute節點連線Oracle資料庫例項Oracle資料庫
- 多個mapreduce連線例項
- oracle資料庫連線後,hang機一例Oracle資料庫
- Oracle 資料庫巡檢指令碼 單例項 RAC 輸出HTML格式Oracle資料庫指令碼單例HTML
- 【kingsql分享】將RAC資料庫異機恢復到單例項(Ⅰ)SQL資料庫單例
- 利用STANDBY將單例項資料庫升級為RAC環境(四)單例資料庫