歡迎光臨
每天分享高質量文章

無路可逃:Oracle 12.2 BigSCN新特性可能的DB Link相容性問題

在《雲和恩墨技術通訊》的3月刊中,我們再次強調了關於 SCN 問題的預警,提醒大家在2019年6月23日之前採取必要的措施。

下載連結:

https://cs.enmotech.com/docDownload

 

可是此前我忽略了一種特殊的情形,在這篇文章中必須明確一下。

由於 Oracle Database 12.2版本中引入了一個新特性:BigSCN

 

在 Oracle 12.2中,SCN 使用 8 Bytes 來記錄,而此前是使用 6 Bytes。這就導致了一種情形:

如果Oracle 12.2中 SCN 的大小超過了 Power(2,48),那麼12.2之前的所有版本都將無法透過 DB Link 訪問 Oracle 12.2 的資料庫。

 

這個問題是無解的。而且和 SCN 的增長率無關。只有將低版本的資料庫升級為 12.2 才能夠再次透過 DB Link 互聯。

 

但是不要害怕因為超越 6 Bytes 極限的 SCN 很難遇到,本文所描述的情形僅僅是一種可能性,並不代表大家會遇到

 

我們看一下測試。首先在 Oracle 11.2.0.4 的環境,建立一個指向 12.2 的DB Link:

SQL> create database link yhem connect to eygle 2 identified by eygle using 'EYGLE';
Database link created.

眾所周知,透過DB Link執行的查詢會將兩個資料庫的SCN同步,這也是Oracle SCN 問題影響特別廣泛的原因,以下測試展示了這個過程:

SQL> col scn for 999,999,999,999,999SQL> select current_scn scn from v$database; SCN---------------------------- 167,129,852
SQL> select current_scn scn from v$database@yhem; SCN----------------------------       4,294,967,074
SQL> select current_scn scn from v$database; SCN----------------------------       4,294,967,083SQL> select banner from v$version@yhem where rownum BANNER--------------------------------------------------------------------------------Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

 

我們知道,使用 6 Bytes 記錄的 SCN,理論極限值是:

SQL> select power(2,48) scn from dual;SCN------------------------281,474,976,710,656

 

在 Oracle 12.2中,如果 SCN 增進到超過 Power(2,48) 的大小(大幅度增進 SCN 是危險的,請謹慎),如下所示:

SQL> select current_scn scn from v$database;SCN--------------------------------4,519,057,215,000,399
SQL> oradebug setmypidStatement processed.SQL> oradebug dumpvar sga kcsgscn_kcslf kcsgscn_ [0600113B8, 0600113E8) = 00050F5D 00100E0F

 

此時如果在 Oracle 11g 中向 12.2 發起透過 DB Link 的查詢,就會遇到 ORA-24442錯誤:

SQL> select * from dual@yhem;select * from dual@yhem
*ERROR at line 1:ORA-24442: SCN exceeds the capability of the target OCI database or client

 

註意,ORA-24442 是一個新的錯誤號,這個錯誤不是說 SCN 非法、越界或者其他,而是提示“SCN 超過了客戶端的能力”,也就是客戶端不具備基本的功能性需求:

ORA-24442: SCN exceeds the capability of the target OCI database or client
Cause: An attempt was made to transfer a system change number (SCN) to an Oracle database or client that is older than Release 12.2 and the SCN exceeds the maximum value that such a system can handle.
Action: If needed, update the target database or client to Release 12.2 or higher.

    已同步到看一看
    贊(0)

    分享創造快樂