现在想实现跨数据库的事务:
比如:在本地(Oracle)插入一条用户信息,同时远程SQLSERVER数据库中删除一条数据(主键相同),保证两个操作在一个事务中完成.
说明一点:本地的数据库和远程的数据库的库结构是完全一样的.
大家谁有这方面的经验,多多指导!!!
------解决方案--------------------
1、建立db_link;
2、建议用存储过程来实现插入操作(存储过程中用事务);
3、前台程序再调用存储过程。
------解决方案--------------------
在所有需要用到事务的地方都显式定义being tran 然后显示commit/rollback,或者使用xact_abort选项来保证事务的逻辑一致性
------解决方案--------------------
MSSQL服务器这边,MSDTC服务需启动.
------解决方案--------------------
类似这样的代码,就可以实现分布式是事务:
分布式事务
Oracle 有很多很好的特性,其中之一就是能够透明地处理分布式事务。在一个事务的范围内,可以
更新多个不同数据库中的数据。提交时,要么提交所有实例中的更新,要么一个都不提交(它们都会回滚)。
为此,我不需要另外编写任何代码:只是“提交“就行了。
Oracle 中分布式事务的关键是数据库链接(database link)。
--建立database link
CREATE PUBLIC DATABASE LINK hisdb
CONNECT TO easyrep IDENTIFIED BY easyrep
USING 'repdb';
--插入远程数据库表记录
insert into table sss@hisdb values( ... );
--删除本地数据库表记录
delete from sss where id= ... ;
------解决方案--------------------
建立远程链接服务器,并且保证两个语句在同一个事务中完成:
exec sp_addlinkedserver '链接名称',' ','SQLOLEDB','192.168.xx.xxx'
exec sp_addlinkedsrvlogin '链接名称','false',NULL,'sa','xxxxxxx'
....
建立存储过程执行 :
SET XACT_ABORT ON
begin tran
insert into table1().....
delete 链接名称.数据库名.dbo.table1 where .....
commit tran
------解决方案--------------------
不管目标服务器事务控制如何,原服务器都应该做好严密的事务控制