【发布时间】:2012-04-30 08:19:44
【问题描述】:
我们公司有一个 CRM 系统,它使用 Oracle 11g 数据库。它由第三方供应商开发。
我们无权访问运行 CRM 系统的服务器。但是,我们有可用的 DBA 登录数据(SYS 用户)。它包括:
- 服务器IP:172.1.2.3
- 端口:1521
- SID: abc
- 用户:系统
- 密码:*
我们可以使用它通过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 数据库系统的一些重要信息,但仍然可以在 SQL Developer 中连接到数据库。难道不是也可以在两个 Oracle DB 之间建立连接吗?请帮助我设置和创建数据库链接。
----- 编辑:--------
Alex Poole 的提示帮助我让它发挥作用。我用过
show parameters service_names;
获取完整的服务名称。它的格式为 abc.def,其中 def 是域。因此,我将域名添加到 tnsnames.ora 中的 TNS 别名中:
MYTNSENTRY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.1.2.3)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = abc.def)
)
)
可以在目标数据库服务器的命令提示符下使用 tnsping MYTNSENTRY 测试连接。 tnsnames.ora 是本地的。但是,我删除了对“本地”listener.ora 的所有更改,因为监听器确实驻留在 CRM 服务器上。
SQL 命令基本没有变化,但现在连接正常:
CREATE PUBLIC DATABASE LINK xxx CONNECT TO some_user IDENTIFIED BY ***** USING 'MYTNSENTRY'
【问题讨论】:
-
您拥有该条目的 TNSNames 文件来自“其他”(非 CRM)oracle 数据库上的 TNSNames 文件,对吗?我不确定您是否必须对目标数据库上的侦听器做任何事情。至少我从来不需要。据我所知,目标数据库像任何其他连接一样处理传入的数据库链接(但我可能错了)
-
我也很确定您不想以 sys 用户的身份创建数据库链接(或者,至少,我不会......如果只是为了安全起见)
-
同意。
SYS在 Oracle 中是非常特殊的,应格外小心/谨慎对待。 -
我会在
sys中重复不要这样做。您需要引用您的密码;它不是一个对象,它是一个字符串。 -
是的,tnsnames.ora 来自“目标”数据库。我需要在“创建数据库链接”SQL 语句中引用服务名称。由于我没有关于 CRM 服务器上运行的内容的信息,因此我打算创建自己的 Listener/TNS 别名来提供服务。然后,该侦听器将用于访问远程 (=CRM) 数据库。感谢您对 sys 用户的安全问题的提示,我将使用另一个用户。
标签: oracle database-connection database-link heterogeneous-services