在《雲和恩墨技術通訊》的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,999
SQL> 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,083
SQL> 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 setmypid
Statement 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.
朋友會在“發現-看一看”看到你“在看”的內容