创建数据库链接到远程数据库我们有一个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