ORACLE 创建DBlink访问SQL SERVER数据库
2008-11-08 01:37
459 查看
Oracle中使用透明网关链接到Sqlserver
在最近项目中需要从Oracle中访问SQL Server数据库, 自然想到了透明网关. 因为Oracle数据库是Linux上的, 而Linux上的Oracle9i不包括连接到SQL Server的透明网关.就在一台单独的Windows服务器上安装了透明网关用做Oracle访问SQL Server的桥梁.
环境如下:
Oracle Database Server:Linux + oracle 9.2.0.4 IP:10.194.129.197
Transparent Gateway:Windows 2003 server IP: 10.194.129.225
MS SQL Server:Windows 2003 server + SQL Server 2005 IP: 10.194.129.225
1、 Transparent Gateway for SQL Server安装
从Oracle 9i数据库安装光盘setup.exe安装,选择安装客户端


安装类型选择:管理员
安装完客户端后,重新运行setup.exe,安装产品选择Oracle 9i Database 9.2.0.1.0, 安装类型选择"自定义",安装组件选择Oracle Net Services和Oracle Transparent Gateways, 并在此项下选择Oracle Transparent Gateway for Microsoft SQL Server, 安装过程中可以不设置连接到SQL Server的信息.如下图所示:


以下的IP地址及数据库以实际环境为准

2、 编辑%ORACLE_HOME%\tg4msql\admin\init%ORACLE_SID%.ora, 该文件包含了TG for SQL Server的配置信息, 其中%ORACLE_SID%是给TG的"SID", 默认为tg4msql. 修改文件中的行
其中SERVER后为SQL Server所在的服务器名称或ip地址,Database为连接到的数据库名称.
当然,如果在SQL Server服务器上,有两个sql server实例,则使用‘服务器名"实例名’的方式设置上面的SERVER值,如:HS_FDS_CONNECT_INFO="SERVER=ZZL\MSSQLSERVER;DATABASE=MSDB"
3、 编辑%ORACLE_HOME%"network"admin"listener.ora, 编辑对应listener的SID_LIST
其中%ORACLE_SID%必须为第二布中设置的SID, 默认值为tg4msql. 修改listener.ora文件后需重启listener使修改生效.如果没有listener.ora文件,请用Net Configuration Assistant或Net Manager新建一个LISTENER.
以上操作都是在Transparent Gateway所在机器上。
4、 在Oracle服务器上:编辑需要连接到透明网关的Oracle Server的$ORACLE_HOME\network\admin\tnsnames.ora, 例如:
HOST指向Transparent Gateway所在的机器的IP,Service_name为第3步中的SID_NAME
使用tnsping测试服务名是否连通,命令:tnsping tg4msql。如果不通,请检查防火墙及网络配置。
5、 在Oracle数据库中建立连接, 指向TG for SQL Server.
其中tg4msql是tnsnames中建立的连接字符串.
ms sql server的用户名和密码必须小写,而且要加双引号
否则会报如下错误:
错误信息:
ORA-28500: connection from ORACLE to a non-Oracle system returned this messsage:
[Transparent gateway from MSSQL][Microsoft][ODBC SQL Server Driver][SQL Server]??
'sa'????? (SQL State:28000; SQL Code: 18456)
ORA-02063: preceding 2 lines from LINK_ZZL
错误原因:
在CREATE DATABASE LINK LINK_ZZL的连接字符串中,ms sql server的用户名和密码必须小写,而且要加双引号
6、确保CATHS.sql已被运行。
以SYS用户连接上去,查看有没有SYS.HS_FDS_CLASS,如果没有,运行$ORACLE_HOME/RDBMS"ADMIN"CATHS.SQL
6、 测试, 如运行select * from emp@tg4msql等.
访问dblink时说明:
这是基于网关的方式,因此不能在断开网络的情况下本地的oracle连接本地的ms sql server
否则会报如下错误:
ORA-28545: error diagnosed by Net8 when connecting to an agent
NCRO: Failed to make RSLV connection
ORA-02063: preceding 2 lines from LINK_ZZL
7、BUG解决。
如果在第6步出现以下错误提示,则以SYS运行
ERROR at line 1:
ORA-28522: error initializing heterogeneous capabilities
ORA-28522: error initializing heterogeneous capabilities
ORA-28559: FDS_CLASS_NAME is <GTW>9.2.0.5.0_128, FDS_INST_NAME is <link>
ORA-02063: preceding 3 lines from %s
ORA-00604: error occurred at recursive SQL level 1
ORA-24274: no row exists in the HS$_BASE_CAPS table for these parameters
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 86
ORA-06512: at "SYS.DBMS_HS_UTL", line 431
ORA-06512: at "SYS.DBMS_HS_CHK", line 51
ORA-06512: at "SYS.DBMS_HS_UTL", line 48
ORA-06512: at "SYS.DBMS_HS", line 38
ORA-06512: at line 1
在最近项目中需要从Oracle中访问SQL Server数据库, 自然想到了透明网关. 因为Oracle数据库是Linux上的, 而Linux上的Oracle9i不包括连接到SQL Server的透明网关.就在一台单独的Windows服务器上安装了透明网关用做Oracle访问SQL Server的桥梁.
环境如下:
Oracle Database Server:Linux + oracle 9.2.0.4 IP:10.194.129.197
Transparent Gateway:Windows 2003 server IP: 10.194.129.225
MS SQL Server:Windows 2003 server + SQL Server 2005 IP: 10.194.129.225
1、 Transparent Gateway for SQL Server安装
从Oracle 9i数据库安装光盘setup.exe安装,选择安装客户端
安装类型选择:管理员
安装完客户端后,重新运行setup.exe,安装产品选择Oracle 9i Database 9.2.0.1.0, 安装类型选择"自定义",安装组件选择Oracle Net Services和Oracle Transparent Gateways, 并在此项下选择Oracle Transparent Gateway for Microsoft SQL Server, 安装过程中可以不设置连接到SQL Server的信息.如下图所示:
以下的IP地址及数据库以实际环境为准
2、 编辑%ORACLE_HOME%\tg4msql\admin\init%ORACLE_SID%.ora, 该文件包含了TG for SQL Server的配置信息, 其中%ORACLE_SID%是给TG的"SID", 默认为tg4msql. 修改文件中的行
HS_FDS_CONNECT_INFO="SERVER=10.194.129.225;DATABASE=185life" |
当然,如果在SQL Server服务器上,有两个sql server实例,则使用‘服务器名"实例名’的方式设置上面的SERVER值,如:HS_FDS_CONNECT_INFO="SERVER=ZZL\MSSQLSERVER;DATABASE=MSDB"
3、 编辑%ORACLE_HOME%"network"admin"listener.ora, 编辑对应listener的SID_LIST
SID_LIST_LISTENER= (SID_LIST= (SID_DESC= (SID_NAME=%ORACLE_SID%) (ORACLE_HOME=oracle_home_directory) (PROGRAM=tg4msql) ) ) 例如: SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = tg4msql) (ORACLE_HOME = d:\oracle\ora92) #oracle的主目录 (PROGRAM = tg4msql) ) ) |
以上操作都是在Transparent Gateway所在机器上。
4、 在Oracle服务器上:编辑需要连接到透明网关的Oracle Server的$ORACLE_HOME\network\admin\tnsnames.ora, 例如:
TG4MSQL = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.194.129.225)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = tg4msql) ) (HS = OK) ) |
使用tnsping测试服务名是否连通,命令:tnsping tg4msql。如果不通,请检查防火墙及网络配置。
5、 在Oracle数据库中建立连接, 指向TG for SQL Server.
CREATE DATABASE LINK tg4msql CONNECT TO "user" IDENTIFIED BY "password" USING 'tg4msql'; |
ms sql server的用户名和密码必须小写,而且要加双引号
否则会报如下错误:
错误信息:
ORA-28500: connection from ORACLE to a non-Oracle system returned this messsage:
[Transparent gateway from MSSQL][Microsoft][ODBC SQL Server Driver][SQL Server]??
'sa'????? (SQL State:28000; SQL Code: 18456)
ORA-02063: preceding 2 lines from LINK_ZZL
错误原因:
在CREATE DATABASE LINK LINK_ZZL的连接字符串中,ms sql server的用户名和密码必须小写,而且要加双引号
6、确保CATHS.sql已被运行。
以SYS用户连接上去,查看有没有SYS.HS_FDS_CLASS,如果没有,运行$ORACLE_HOME/RDBMS"ADMIN"CATHS.SQL
6、 测试, 如运行select * from emp@tg4msql等.
访问dblink时说明:
这是基于网关的方式,因此不能在断开网络的情况下本地的oracle连接本地的ms sql server
否则会报如下错误:
ORA-28545: error diagnosed by Net8 when connecting to an agent
NCRO: Failed to make RSLV connection
ORA-02063: preceding 2 lines from LINK_ZZL
7、BUG解决。
如果在第6步出现以下错误提示,则以SYS运行
exec dbms_hs.replace_base_caps(531, 531, 'First/Last function'); |
ORA-28522: error initializing heterogeneous capabilities
ORA-28522: error initializing heterogeneous capabilities
ORA-28559: FDS_CLASS_NAME is <GTW>9.2.0.5.0_128, FDS_INST_NAME is <link>
ORA-02063: preceding 3 lines from %s
ORA-00604: error occurred at recursive SQL level 1
ORA-24274: no row exists in the HS$_BASE_CAPS table for these parameters
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 86
ORA-06512: at "SYS.DBMS_HS_UTL", line 431
ORA-06512: at "SYS.DBMS_HS_CHK", line 51
ORA-06512: at "SYS.DBMS_HS_UTL", line 48
ORA-06512: at "SYS.DBMS_HS", line 38
ORA-06512: at line 1
相关文章推荐
- Oracle DBLINK 简单使用 oracle在进行跨库访问时,可以通过创建dblink实现,今天就简单的介绍下如果创建dblink,以及通过dblink完成插入、修改、删除等操
- oracle 创建dblink访问远程数据库
- Oracle DBLink 理解、授权、创建、删除、访问表授权
- oracle 11g建立DBLink访问sql server数据库
- [转摘]关于创建oracle dblink 过程的几点心得
- ORACLE创建DBLINK
- oracle 10g中dblink访问远程oracle数据库
- oracle-创建dblink
- oracle中创建dblink
- oracle创建第三方数据接口表,指定特定用户访问某张表
- Oracle基础-创建DBLink(DDL)
- oracle创建dblink注意事项 ORA-04052
- oracle 中 dblink 的创建方法
- PostGresql组件部署和Oracle访问PostGresql的dblink配置
- oracle创建与mysql的dblink
- 实现ORACLE跨库访问 DBLINK
- 2.oracle 12c 创建-访问-关闭-删除PDB
- oracle dblink结合同义词的用法 PLS-00352:无法访问另一数据库
- MYSQL 创建表连接(类ORACLE DBLINK但是单表)
- Oracle创建表空间、创建用户、授权、授权对象的访问以及查看权限集合