以前有個朋友向我提過這個問題:大家通過數據庫鏈執行跨數據庫的查詢時,可能都會遇到Oracle將兩個數據庫的SCN同步的問題,今天就來解決一下。
SQL> conn test/[email protected]:1666/ora102044
Connected.
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
2745758
SQL> conn test/[email protected]:15210/orcl
Connected.
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
5642527
SQL> create database link ora102044
2 connect to test
3 identified by test
4 using '192.168.0.19:1666/ora102044';
Database link created.
SQL> select current_scn from v$database@ora102044;
CURRENT_SCN
-----------
5642628
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
5642638
SQL> conn test/[email protected]:1666/ora102044
Connected.
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
5642702
可以看到,在通過數據庫鏈執行查詢後,Oracle會同步兩個數據庫的SCN,取兩個數據庫最大的SCN作爲新的SCN,執行查詢時刻,兩個數據庫的SCN一致。
Oracle的這個機制應該是爲了分佈式查詢的一致性,這樣一個查詢只需要一個SCN就可以在分佈式查詢的任何一個數據庫中來獲取一致性。
但是這種實現也會存在一定的潛在問題,其中一個數據庫的SCN可能會從一個較低的數值,一下增長到一個很高的數據。這個例子中,ORA102044數據庫的SCN就增加了一倍以上。而對於實際環境中,SCN的增加可能是幾倍、幾十倍甚至是上百倍,從而引發一些其他的bug。
本文就暫且介紹到這裏,希望能給大家以幫助。
轉自 北京CUUG培訓