如果Oracle数据库是以read only模式打开的,则无法通过db link访问远程数据库。因为只要通过db link,即使只执行select,oracle也是要开启分布式事务支持的,事务需要分配回滚段,而read only模式下是没有online的回滚段的:
SQL>select id from auction_auctions@lnk_db1 where rownum=1;
select id from auction_auctions@lnk_db1 where rownum=1
*
ERROR at line 1:
ORA-16000: database open for read-only access
在一个read write的库上做个测试,可以看到通过db link的查询确实开启了事务,并且分配了回滚段。
SQL>select sid from v$mystat where rownum=1;
SID
----------
1270
SQL>select 1 from dual@lnk_db1;
1
----------
1
SQL>select s.sid,s.serial#,s.sql_hash_value,
2 r.segment_name,
3 t.xidusn,
4 t.xidslot,
5 t.xidsqn
6 from v$session s,
7 v$transaction t,
8 dba_rollback_segs r
9 where s.taddr = t.addr
10 and t.
SQL>select id from auction_auctions@lnk_db1 where rownum=1;
select id from auction_auctions@lnk_db1 where rownum=1
*
ERROR at line 1:
ORA-16000: database open for read-only access
在一个read write的库上做个测试,可以看到通过db link的查询确实开启了事务,并且分配了回滚段。
SQL>select sid from v$mystat where rownum=1;
SID
----------
1270
SQL>select 1 from dual@lnk_db1;
1
----------
1
SQL>select s.sid,s.serial#,s.sql_hash_value,
2 r.segment_name,
3 t.xidusn,
4 t.xidslot,
5 t.xidsqn
6 from v$session s,
7 v$transaction t,
8 dba_rollback_segs r
9 where s.taddr = t.addr
10 and t.