創建數據庫鏈接到遠程數據庫我們有一個CRM系統,我們的公司,它使用一個的Oracle 11g數據庫。它由第三方供應商開發。不能在甲骨文數據庫
我們無權訪問運行CRM系統的服務器。但是,儘管如此,我們仍然可以使用DBA登錄數據(SYS用戶)。它包括:
- 服務器IP:172.1.2.3
- 端口:1521
- SID:ABC
- 用戶:SYS
- 密碼:*
我們可以使用它來訪問數據庫Oracle SQL Developer 3.1(連接>>屬性)
現在數據的部分必須複製出CRM數據庫的成其他 Oracle數據庫,它駐留在另一服務器上。
據我的理解,我需要在我的目標數據庫中創建一個數據庫鏈接。我想是這樣的:
CREATE PUBLIC DATABASE LINK xxx CONNECT TO sys IDENTIFIED BY ***** USING 'MYTNSENTRY'
我的tnsnames.ora如下:
MYTNSENTRY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.1.2.3)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = abc)
)
)
....我的listener.ora這個樣子的:
MYLISTENER=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=172.1.2.3)(PORT=1521))
))
SID_LIST_MYLISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=MYTNSENTRY)
(ORACLE_HOME=C:\somepath) # path to Oracle home of target DB
(PROGRAM=extproc)))
PROGRAM = extproc是正確的選擇嗎?有幾個其他程序可供選擇。我甚至無法啓動與lsnrctl的聽衆,因爲它無法「驗證用戶」或其他東西。具有諷刺意味的是,聽衆設置和數據庫鏈接到一個MS SQL服務器工作順利。
儘管缺少有關CRM DB系統的重要信息,但仍然可以使用SQL Developer連接到數據庫。不應該也可以在兩個Oracle DB之間建立連接嗎?請幫助我設置和創建數據庫鏈接。
-----編輯:--------
亞歷克斯·普爾的提示幫助我得到它的工作。我用
show parameters service_names;
得到完整的服務名稱。它的格式爲abc.def,其中def爲域。因此,我在tnsnames中將域名添加到TNS別名中。ORA:
MYTNSENTRY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.1.2.3)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = abc.def)
)
)
的連接可以與在目標DB服務器的命令提示TNSPING MYTNSENTRY進行測試。 tnsnames.ora是本地的。但是,我刪除了對「本地」listener.ora,的所有更改,因爲偵聽程序確實駐留在CRM服務器上。
的SQL命令大多是不變的,但現在可以進行連接:
TNSNames文件中包含來自「其他」(非CRM)oracle數據庫上的TNSNames文件的那個條目,對不對? 我不確定您必須對目標數據庫上的偵聽器執行任何操作。至少,我從來不需要。據我所知,目標數據庫像處理任何其他連接一樣處理傳入的數據庫鏈接(但我可能錯了) – moleboy 2012-04-18 20:43:16
我也確實不希望以sys用戶身份創建數據庫鏈接(或者,至少,我不會......如果只是爲了安全起見) – moleboy 2012-04-18 20:45:31
同意。 'SYS'在Oracle中非常特別,應該謹慎小心。 – 2012-04-18 20:46:36