今天被同事问到,DB Link跨数据库的事务问题,实验如下:
SQL> conn aisj/aisj
已连接。
SQL>
SQL> create database link db_link_test connect to aisj identified by aisj using 'test_192.168.189.1';
数据库链接已创建。
SQL> select 1 from dual@db_link_test;
1
----------
1
SQL> declare
2 begin
3 insert into db_test_1@db_link_test values('a');
4 insert into db_test_2 values('b');
5 exception
6 when others
7 then rollback;
8 end;
9 /
PL/SQL 过程已成功完成。
SQL> select * from db_test_2;
A
--
b
SQL> select * from db_test_1@db_link_test;
A
--
a
SQL> rollback;
回退已完成。
SQL>
SQL>
SQL> declare
2 begin
3 insert into db_test_1@db_link_test values('aaaaaa');
4 insert into db_test_2 values('b');
5 exception
6 when others
7 then rollback;
8 end;
9 /
PL/SQL 过程已成功完成。
SQL> select * from db_test_2;
未选定行
SQL> select * from db_test_1@db_link_test;
未选定行
SQL> declare
begin
insert into db_test_1@db_link_test values('a');
insert into db_test_2 values('bbbbbbb');
exception
when others
then rollback;
end;
/ 2 3 4 5 6 7 8 9
PL/SQL 过程已成功完成。
SQL> select * from db_test_2;
未选定行
SQL> select * from db_test_1@db_link_test;
未选定行
SQL>
SQL> declare
begin
insert into db_test_1@db_link_test values('a');
commit;
insert into db_test_2 values('bbbbbbb');
exception
when others
then rollback;
end;
/ 2 3 4 5 6 7 8 9 10
PL/SQL 过程已成功完成。
SQL> select * from db_test_1@db_link_test;
A
--
a
SQL> select * from db_test_2;
未选定行
SQL>
可以看到:通过DB Link跨数据的简单DML在事务方面的表现和本地表一样
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21124603/viewspace-766646/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/21124603/viewspace-766646/