Oracle使用DBLink访问SQL Server

安装数据库网关

配置数据库网关

配置网关初始化文件

1、给网关指定系统标识符 (System Identifier, SID) ,默认的 SIDdg4msql,对应的初始化文件为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.oraHS_TRANSACTION_MODEL参数指定,默认使用的是COMMIT_CONFIRM

Oracle访问远程数据库时,事务分为两个阶段。事务启动时,状态为prepared,接收到远程数据库响应时,状态变更为commitrollback
在 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 NULLTRAN_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 # 未测过

标签: Oracle

添加新评论