|
Oracle10g分布式事务for SQL Server 2000的解决方案
1. 安装配置Oracle Server
此步骤参见<<Oracle 10g x64安装.doc>>
Oracle Server要安装在Windows Server上,在Windows XP上,分布式事务无法成功。
分布式事务实际测试结果:
Windows Server 2003上通过,Windows XP上失败
2. 安装配置Transparent Gateway
2.1 安装Transparent Gateway
2.1.1 选择安装目录
默认安装名称为OraTg10g_home1
默认安装路径为X:/oracle/product/10.2.0/tg_1
将安装名称改为OraDb10g_home1
将安装路径改为X:/oracle/product/10.2.0/db_1
Tips:
安装Oracle Server和Transparent Gateway, 有三种方式
-将Oracle Server和Transparent Gateway分开在不同机器安装
-将Oracle Server和Transparent Gateway安装在同一台机器的相同目录
-将Oracle Server和Transparent Gateway安装在同一台机器的不同目录
这里我们选择第2种方式,
安装在同一台机器便于机器归类, 而安装在同一目录会在配置上简化许多不易出错。
2.1.2 选择产品组件
这里勾上Transparent Gateway for Microsoft SQL Server
2.1.3 配置SQL Server和数据库名称
系统自动产生的样例配置文件X:/oracle/product/10.2.0/db_1/tg4msql/admin/inittg4msql.ora里, SQL Server和数据库名 称格式似乎不正确,我们在后面使用的配置文件X:/oracle/init<SID_NAME>.ora里将改变SQL Server和数据库名称的格式.
2.2 配置Transparent Gateway
2.2.1 配置listener.ora
X:/oracle/product/10.2.0/db_1/network/admin/listener.ora
- listener.ora中的SID_NAME
SID_NAME对应X:/oracle/init<SID_NAME>.ora文件名中的SID_NAME部分
SID_NAME对应X:/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora里tns实例的SID
添加范例文件中的蓝色部分
##################################################################
# listener.ora Network Configuration File
#X:/oracle/product/10.2.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = X:/oracle/product/10.2.0/db_1)
(PROGRAM = extproc)
)
(SID_DESC =
(SID_NAME = <SID_NAME>)
(ORACLE_HOME = X:/oracle/product/10.2.0/db_1)
(PROGRAM = tg4msql)
)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.130.111)(PORT = 1521))
)
)
##################################################################
2.2.2 配置tnsnames.ora
X:/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora
- tnsnames.ora中的HOST
ORACLE主机的名称或IP
- tnsnames.ora中的SID_NAME
SID_NAME对应X:/oracle/init<SID_NAME>.ora的文件名名称
SID_NAME对应X:/oracle/product/10.2.0/db_1/network/admin/listener.ora里的SID_NAME
- tnsnames.ora中的TNS_NAME
TNS_NAME对应Oracle中database link里的TNS_NAME
添加范例文件中的蓝色部分
##################################################################
# tnsnames.ora Network Configuration File:
# X:/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = <HOST>)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
<TNS_NAME> =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = <HOST>)(PORT = 1521))
)
(CONNECT_DATA =
(SID = <SID_NAME> http://extra-001.yo2cdn.com/wp-includes/images/smilies/icon_wink.gif
)
(HS = OK)
)
##################################################################
2.2.3 配置init<SID_NAME>.ora
X:/oracle/product/10.2.0/db_1/tg4msql/admin/init<SID_NAME>.ora
- init<SID_NAME>.ora文件名中的SID_NAME
SID_NAME对应X:/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora里tns实例的SID
SID_NAME对应X:/oracle/product/10.2.0/db_1/network/admin/listener.ora里的SID_NAME
- init<SID_NAME>.ora中的SQL_SERVER
SQL Server主机名称或IP
- init<SID_NAME>.ora中的DATABASE_NAME
数据库名称
- init<SID_NAME.ora>中的TRANSPARENT_ACCOUNT_NAME
TRANSPARENT_ACCOUNT_NAME 用于分布式事务的SQL Server账号
TRANSPARENT_ACCOUNT_PWD 用于分布式事务的SQL Server账号的密码
注释掉原文件中HS_FDS_CONNECT_INFO的定义
增加范例文件中的蓝色部分
##################################################################
# This is a sample agent init file that contains the HS parameters that are
# needed for the Transparent Gateway for SQL Server
#
# HS init parameters
#
HS_FDS_CONNECT_INFO = "SERVER=<SQL_SERVER>;DATABASE=<DATABASE_NAME>"
HS_FDS_TRACE_LEVEL = OFF
HS_FDS_RECOVERY_ACCOUNT = <TRANSPARENT_ACCOUNT_NAME>
HS_FDS_RECOVERY_PWD = <TRANSPARENT_ACCOUNT_PWD>
HS_FDS_TRANSACTION_MODEL = TWO_PHASE_COMMIT
#DEFAULT
#HS_FDS_TRANSACTION_LOG = HS_FDS_TRANSACTION_LOG
#HS_FDS_TRANSACTION_MODEL = COMMIT_CONFIRM
##################################################################
2.2.4 如何配置到多个数据库的实例
按照2.2.1节, 2.2.2节, 2.2.3节中所述的为每个不同数据库建立不同的透明网关配置文件init<SID_NAME>, 并且将ORACLE配置文件做出相应改动即可
例如: initmsql.ora, initfs2.ora, 此时相应的在listener.ora和tnsnames.ora中也要增加相应的SID_NAME和TNS_NAME
3. 配置SQL Server
3.1 创建分布式账号
3.1.1 创建账号
创建账号, 名为<TRANSPARENT_ACCOUNT_NAME>
对应X:/oracle/product/10.2.0/db_1/tg4msql/admin/init<SID_NAME>.ora中的<TRANSPARENT_ACCOUNT_NAME>
3.1.2 赋予账号权限
将数据库<DATABASE_NAME>的db_owner权限赋予3.1.1节中创建的账号
如果需要到一台SQL主机上的多个数据库时, 可将多个数据库的db_owner权限赋予同一个分布式账号, 也可单独建立多个独立的分布式帐号, 然后赋予权限
如果需要到多台SQL主机上的数据库时, 则必须为此建立多个独立的分布式帐号, 然后赋予权限
3.1.3 创建分布式事务Log表
以3.1.1节中创建的帐号, 在数据库<DATABASE_NAME>下创建分布式事务Log表, 并且将对该表的所有权限赋予public, 表名为HS_FDS_TRANSACTION_LOG, 建表脚本如下:
##################################################################
DROP TABLE HS_TRANSACTION_LOG
go
CREATE TABLE HS_TRANSACTION_LOG(
GLOBAL_TRAN_ID char (64) NOT NULL,
TRAN_COMMENT char (255) NULL
)
go
grant all on HS_TRANSACTION_LOG to public
go
##################################################################
4. 重新启停Listener
4.1 停止Listener
X:/oracle/product/10.2.0/db_1/BIN>LSNRCTL.EXE stop
LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 07-11月-2007 11:2
1:50
Copyright (c) 1991, 2005, Oracle. All rights reserved.
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<HOST>)(PORT=1521)
))
命令执行成功
4.2 启动Listener
X:/oracle/product/10.2.0/db_1/BIN>LSNRCTL.EXE start
LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 07-11月-2007 13:3
0:58
Copyright (c) 1991, 2005, Oracle. All rights reserved.
启动tnslsnr: 请稍候...
TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Production
系统参数文件为X:/oracle/product/10.2.0/db_1/network/admin/listener.ora
写入X:/oracle/product/10.2.0/db_1/network/log/listener.log的日志信息
监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=<HOST>)(PORT=1521)))
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<HOST>)(PORT=1521)
))
LISTENER 的 STATUS
------------------------
别名 LISTENER
版本 TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Produ
ction
启动日期 07-11月-2007 13:31:01
正常运行时间 0 天 0 小时 0 分 3 秒
跟踪级别 off
安全性 ON: Local OS Authentication
SNMP OFF
监听程序参数文件 X:/oracle/product/10.2.0/db_1/network/admin/listener.o
ra
监听程序日志文件 X:/oracle/product/10.2.0/db_1/network/log/listener.log
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=<HOST>)(PORT=1521)))
服务摘要..
服务 "PLSExtProc" 包含 1 个例程。
例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "<SID_NAME>" 包含 1 个例程。
例程 "<SID_NAME>", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功
5. 在Oracle中创建database link
5.1 创建database link
用sys用户或拥有Create Public database link系统权限的账号login oracle
SQL> create public database link <DBLINK_NAME>
connect to <TRANSPARENT_ACCOUNT_NAME>
identified by "<TRANSPARENT_ACCOUNT_PWD>"
using '<TNS_NAME>';
SQL> select * Fromauthinfo2@<DBLINK_NAME>
DBLINK_NAME DBLINK的名称
TRANSPARENT_ACCOUNT_NAME 分布式账号用户名, 对应上述配置文件
TRANSPARENT_ACCOUNT_PWD 分布式账号的密码, 对应上述配置文件
TNS_NAME 对应上述配置文件
6. 配置MSDTC
6.1 组件服务的设置
分布式事务需要在Oracle主机和SQL Server主机上配置MSDTC
控制面板 -> 管理工具 -> 组件服务
6.3 SQL Server主机的MSDTC设置
归类于: |
|