Oracle使用DBLink访问SQL Server
Oracle使用DBLink访问SQL Server
安装数据库网关
略
配置数据库网关
配置网关初始化文件
1、给网关指定系统标识符 (System Identifier, SID) ,默认的 SID 是dg4msql
,对应的初始化文件为initdg4msql.ora
。如需更改网关的SID,相应的初始化文件名也需要更改,例如:网关SID是gateway
,对应的初始化文件名为initgateway.ora
。
# 网关初始化文件存放位置 $ORACLE_HOME: Oracle安装目录
$ORACLE_HOME/dg4msql/admin/initdg4msql.ora
2、在initdg4msql.ora
文件下填写初始化参数。
# 设置连接信息 格式如下:
# HS_FDS_CONNECT_INFO=host_name[[:port_number]|/[instance_name]][/database_name]
# 例如:端口:1433 实例名:WINCC 数据库名:XHCDATA
HS_FDS_CONNECT_INFO=172.19.255.143
HS_FDS_CONNECT_INFO=172.19.255.143/WINCC
HS_FDS_CONNECT_INFO=172.19.255.143//XHCDATA
HS_FDS_CONNECT_INFO=172.19.255.143:1433/XHCDATA
HS_FDS_CONNECT_INFO=172.19.255.143/WINCC/XHCDATA
# 其他参数
# HS_TRANSACTION_MODEL 事务模型
# HS_TRANSACTION_LOG 事务日志表
# HS_FDS_RECOVERY_ACCOUNT recover账号
# HS_FDS_RECOVERY_PWD recover密码
配置网关的网络
1、添加监听器,配置文件默认存放于$ORACLE_HOME/network/admin/listener.ora
。
# listener.ora
SID_LIST_LISTENER=
(SID_LIST=
#...
(SID_DESC=
(SID_NAME=网关的SID)
(ORACLE_HOME=Oralce安装目录)
(PROGRAM=dg4msql)
)
)
1.2、停止/启动监听器。
# 把Oracle的安装目录下的bin目录添加至环境变量中,对应Linux系统修改.bash_profile文件
# ORACLE_HOME: 类似于'Oracle\app\用户名\product\版本号\dbhome_1'
PATH=$ORACLE_HOME/bin:$PATH;
LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH;
export $PATH
export $LD_LIBRARY_PATH
# 停止监听器
lsnrctl stop
# 启动监听器
lsnrctl start
# 查看监听器状态
lsnrctl status
# Service "dg4msql" has 1 instance(s).
# Instance "dg4msql", status UNKNOWN, has 1 handler(s) for this service...
# The command completed successfully
2、配置 TNS,让 Oracle 数据库可以访问网关。
# TNS 配置文件默认存放在`$ORACLE_HOME/network/admin/tnsnames.ora`
# 添加连接信息
连接名=
(DESCRIPTION=
(ADDRESS=
(PROTOCOL=TCP)
(HOST=Oracle的主机地址)
(PORT=Oracle的服务端口)
)
#为了确保高可用性可指定多个ADDRESS
(CONNECT_DATA=(SID=网关的SID))
(HS=OK)
)
创建DBLink
# 语法:CREATE [PUBLIC] DATABASE LINK 链接名 CONNECT TO "SQL Server数据库的用户名" IDENTIFIED BY "SQL Server数据库的密码" USING 'TNS配置的连接名';
# 示例:创建bm2p用户私有的dblink
# 登录数据库
conn bm2p/bm2p@TEST;
# 创建dblink
CREATE DATABASE LINK ct CONNECT TO "mes" IDNTIFIED BY "123456" USING 'dg4msql';
# 检验dblink是否可用
SELECT * FROM DUAL@ct;
配置 Two-Phase Commit (二阶段事务提交)
网关支持以下几种事务模型:
COMMIT_CONFIRM
READ_ONLY
SINGLE_SITE
事务模型可以通过网关初始化文件initdg4msql.ora
的HS_TRANSACTION_MODEL
参数指定,默认使用的是COMMIT_CONFIRM
。
Oracle访问远程数据库时,事务分为两个阶段。事务启动时,状态为prepared
,接收到远程数据库响应时,状态变更为commit
或rollback
。
在 SQL Server 数据库配置用于恢复事务的账号和密码
为了让网关可以恢复分布式事务,需要在SQL Server
数据库中建立一个用户,默认用于恢复事务的账号和密码均为RECOVER
。
可通过修改initdg4msql.ora
中的HS_FDS_RECOVERY_ACCOUNT
和`HS_FDS_
RECOVERY_PWD`参数,指定恢复事务的账号和密码。
在 SQL Server 数据库中创建用于恢复事务的日志表
日志表的更新操作不会作为分布式事务的一部分。
网关通过日志表来检查事务是否执行失败,默认的日志表名为HS_TRANSACTION_LOG
,由两个字段组成GLOBAL_TRAN_ID
数据类型为CHAR(64) NOT NULL
和TRAN_COMMENT
数据类型为CHAR(255)
。
可通过修改initdg4msql.ora
中的HS_TRANSACTION_LOG
参数,指定日志表的名称。
可以使用$ORACLE_HOME/dg4msql/admin/dg4msql_tx.sql
脚本创建日志表。
# 在SQL Server数据库所在服务上执行
# isql -U 恢复事务的账号 -P 恢复事务的密码 [-S 实例名] -i 脚本所在位置
isql -U recover -P recover -S WINCC -i dg4msql_tx.sql # 未测过