很多时候为了做数据导入或者数据迁移,我们需要在Oracle里访问SQLServer的数据,通过程序自然能够进行两者之间的数据交换,但效率较低,Oracle透明网关提供直接访问SQLServer数据库的功能,但切记存在以下限制(技术上可以找到解决办法,但麻烦比好处多):
存在二进制的字段的表最好不要通过透明网关访问。
SQLServer中的表名称、字段名成最好修改为大写。
以下是透明网关的配置步骤:
1. 安装Oracle10g数据库软件并创建数据库test
Oracle企业版10.2.0。
2. 安装透明网关软件
3. 配置透明网关
c:\oracle\product.2.0\db_1\tg4msql\admin\initmssql.ora
HS_FDS_CONNECT_INFO="SERVER=SQLHOSTNAME;DATABASE=SQLDB"
HS_FDS_TRACE_LEVEL=OFF
HS_FDS_RECOVERY_ACCOUNT=RECOVER
HS_FDS_RECOVERY_PWD=RECOVER
4. 配置监听服务
c:\oracle\product.2.0\db_1\NETWORK\ADMIN\listener.ora
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST =ORAHOSTNAME)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = C:\oracle\product.2.0\db_1)
(PROGRAM = extproc)
)
(SID_DESC =
(SID_NAME=mssql)
(ORACLE_HOME = C:\oracle\product.2.0\db_1)
(PROGRAM=tg4msql)
)
)
5. 配置连接方式(切记不要漏掉)
c:\oracle\product.2.0\db_1\NETWORK\ADMIN\sqlnet.ora
SQLNET.AUTHENTICATION_SERVICES = (NONE)
6. 创建数据库链接sqldb指向SQLServer数据库
7. 访问数据
sqlplus test/123456@test
select * from table1@sqldb;
查到了吧!
注意事项:
访问SQLServer时SQL语句中的字段名经常要加引号。
select “f1” from t1
访问SQLServer的Text字段要在Oracle中创建全局临时表导入后才能访问。 |