在SQLServer2000中使用insert触发器检索oracle中的某个数据表的内容
提示错误:
服务器: 消息 7391,级别 16,状态 1,行 3
该操作未能执行,因为 OLE DB 提供程序 'MSDAORA' 无法启动分布式事务。
OLE DB 错误跟踪[OLE/DB Provider 'MSDAORA' ITransactionJoin::JoinTransaction returned 0x8004d01b]
但在查询分析器中单独执行检索oracle数据表,完全正确,效率也很高。 采用的是链接服务器的方式!
请各位高手指教! 网上找了许多资料,但都没有完整的解决方案,请各位提供解决线索,谢谢!!!
提示错误:
服务器: 消息 7391,级别 16,状态 1,行 3
该操作未能执行,因为 OLE DB 提供程序 'MSDAORA' 无法启动分布式事务。
OLE DB 错误跟踪[OLE/DB Provider 'MSDAORA' ITransactionJoin::JoinTransaction returned 0x8004d01b]
但在查询分析器中单独执行检索oracle数据表,完全正确,效率也很高。 采用的是链接服务器的方式!
请各位高手指教! 网上找了许多资料,但都没有完整的解决方案,请各位提供解决线索,谢谢!!!
前一段花了些时间配置 TRANSPARENT GATEWAY
现在把心得贴出来与大家共享我的OS是WIN2000
ORACLE 9.0
SQLSERVER2000
HOSTNAME : SVR1
都使用 tcp/ip 默认端口
1: 安装 TRANSPARENT GATEWAY 选件(我安装的是FOR MSSQL)
安装完成了以后有这样一个目录 oracle_home\ora90\tg4msql2: 配置 LISTENER.ORA
(SID_DESC =
(GLOBAL_DBNAME = tg4sql) # 可自己命名
(PROGRAM = tg4msql)
(SID_NAME = sql2000) # SID 自己命名
(ORACLE_HOME = D:\oracle\ora90)
)3: 在 oracle_home\ora90\tg4msql\admin
建文件 init<SID>.ora 由于LISTENER里定义SID为 sql2000
因此文件名为:initsql2000.ora
其中内容为:
HS_FDS_CONNECT_INFO=svr1.master # svr1为SQL服务器名
HS_FDS_TRACE_LEVEL=OFF
HS_FDS_RECOVERY_ACCOUNT=RECOVER
HS_FDS_RECOVERY_PWD=RECOVER4: 重启 DATABASE AND LISTENER5: 配置 tnsnames.ora
tg_sql =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = SVR1)(PORT = 1521))
)
(CONNECT_DATA =
(SID = sql2000)
)
(HS=OK)
) 6: 建立 DATABASE LINK
CREATE PUBLIC DATABASE LINK DB_SQL
CONNECT TO SA IDENTIFIED BY PASSWORD
USING 'tg_sql'7: 完成,测试
select * from t_test@db_sql8: 请注意使用 DBLINK 时,INIT.ORA中 GLOBAL_NAME 的设置,
如果为 ture , 请使用DBLINK的全称,可在 all_db_links 中查到,
如果为 FALSE, 不必使用全称,当出现
“ORA-02019:为找到远程数据库的连接说明”
时,请使用全称,如:
select * from t_test@db_sql.US.ORACLE.COM
请其他高手继续发表相关解决方案!!!
IT技术挺全的,不错,鼓励一下:http://www.ciitc.com
我的要求很简单,就是在SQLServer执行触发器的时候,不要开启分布式事务,这样这个错误就不会出现的
现在无法知道如何关闭触发器的分布式事务。 rollback trans 也试过了,当执行到oracle的表访问的时候,SQLServer又自动开启分布式事务的,非常苦恼!!!