设为首页 收藏本站
查看: 762|回复: 0

[经验分享] Oracle10g分布式事务for SQL Server 2000的解决方案

[复制链接]

尚未签到

发表于 2016-11-7 02:34:05 | 显示全部楼层 |阅读模式
  
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&gt 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设置
http://image-001.yo2cdn.com/wp-content/uploads/150/15019/2007/11/3.jpg
至此, Oracle到SQL Server的分布式事务配置即完成了, 现在就可以将对Oracle和SQL Server中表的操作放进一个事务中进行.


归类于:

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-296570-1-1.html 上篇帖子: 关于sql server中的表中记录按记录排序的问题,未有结论 下篇帖子: IT书讯 -- Inside Microsoft SQL Server 2005 Query Tuning and Optimization
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表