談?wù)凮racle為2019年埋下的雷:Oracle關(guān)于DBLINK的預(yù)警

      網(wǎng)友投稿 988 2025-03-31

      最近一個(gè)月,Oracle在MOS上發(fā)布了兩篇與DBLINK相關(guān)的預(yù)警:

      Oracle Databases Need to be Patched to a Minimum Patchset/PSU/RU level before April

      2019 (Doc ID 2361478.1)

      Mandatory Patching Requirement for Database Versions 11.2.0.3 or Earlier, Using DB

      Links (Doc ID 2335265.1)

      談?wù)凮racle為2019年埋下的雷:Oracle關(guān)于DBLINK的預(yù)警

      文章大概的意思是:11.2.0.3 及以前版本,使用DB Link的,在2019年4月前必須應(yīng)用到推薦的補(bǔ)丁,否則你使用DBLINK的場(chǎng)景可能會(huì)遇到故障。

      看似很?chē)?yán)重,有點(diǎn)以前2000年說(shuō)的千年蟲(chóng)的味道,其實(shí)仔細(xì)研究,這個(gè)預(yù)警其實(shí)沒(méi)多大的事。

      1.?????? 這個(gè)補(bǔ)丁是什么用途?

      增加DBMS_SCN的工具包,設(shè)置在2019年6月23日,自動(dòng)啟用 3 級(jí)兼容性,提升SCN的可用量。從16K/s或32K/s的增長(zhǎng)率,提升到 96K/s 的增長(zhǎng)率,目標(biāo)是讓數(shù)據(jù)庫(kù)支持的變化更多,承載能更強(qiáng)。

      但是注意:圖1中可以看出,3級(jí)兼容性的SCN上限是高很多的,但畢竟還是有上限的,所以就算啟動(dòng)3級(jí)兼容性,SCN 越界的ORA-19706問(wèn)題仍然可能會(huì)遇到。

      2.?????? 本次預(yù)警涉及哪些版本需打補(bǔ)丁?

      豁免版本:11.2.0.4 和 12.1.0.2 及以上版本,已然自帶加持;

      10g 版本:你可以選擇升級(jí)到 11g 或者 12c;

      11.1版本:你可以選擇升級(jí)到11.1.0.7 版本,應(yīng)用補(bǔ)丁升級(jí)到11.1.0.7.20+;

      11.2版本:你可以選擇升級(jí)到11.2.0.3 版本,應(yīng)用補(bǔ)丁升級(jí)到11.2.0.3.9+;

      12.1版本:你至少升級(jí)到 12.1.0.2.0 版本;

      版本對(duì)應(yīng)的補(bǔ)丁:

      3.?????? 怎么檢查數(shù)據(jù)庫(kù)有沒(méi)包含相關(guān)的補(bǔ)丁和它的一些信息?

      最簡(jiǎn)單的是在sqlplus下,desc dbms_scn

      如果存在這個(gè)工具,就是包含補(bǔ)丁的。

      可以在sqlplus下用以下腳本檢查:

      vi scncomp.sql

      declare

      v_date date;

      v_compat number;

      v_enable boolean;

      begin

      dbms_scn.getscnautorolloverparams(v_date, v_compat, v_enable);

      dbms_output.put_line('date:' || to_char(v_date, 'yyyymmddhh24miss') || ', compatiable:' || v_compat );

      if v_enable then

      dbms_output.put_line('Auto-rollover is enabled');

      else

      dbms_output.put_line('Auto-rollover is disabled');

      end if;

      end;

      很明顯,這個(gè)補(bǔ)丁將會(huì)在20190623這天啟動(dòng)3級(jí)兼容性

      4.?????? 相關(guān)補(bǔ)丁和SCN有關(guān)系,但好像與DBLINK沒(méi)啥關(guān)系啊?

      低版本和高版本之間的數(shù)據(jù)庫(kù)通過(guò)DB Link互聯(lián),可能受到影響,主要取決于高SCN系統(tǒng)的高度,因?yàn)楦甙姹镜腟CN增長(zhǎng)算法改變,當(dāng)高版本的current SCN值在高位時(shí),可能瞬間抬升低版本的SCN至越界(認(rèn)真觀察圖1,3級(jí)兼容的上限高很多),DBLINK的訪(fǎng)問(wèn)就被拒絕和報(bào)錯(cuò)了。

      通過(guò)DBLINK的查詢(xún)會(huì)同步數(shù)據(jù)庫(kù)的SCN,這個(gè)結(jié)論的實(shí)驗(yàn)就不做了,蓋總博客有,可以自行觀察有DBLINK互相訪(fǎng)問(wèn)的那幾個(gè)庫(kù),current scn值是否都在同一個(gè)數(shù)量級(jí),即可以驗(yàn)證。

      注:高版本就是 11.2.0.4 和 12.1.0.2 及其以上版本,和打過(guò)補(bǔ)丁的 11.1.0.7和 11.2.0.3 版本;其他的都為低版本。

      5.?????? 怎么檢查SCN還多久到達(dá)上限?

      SCN其實(shí)有2個(gè)上限值,一個(gè)是硬限制:

      Oracle 使用了6 Bytes 記錄SCN,也就是48位,即SCN的最大值是281萬(wàn)億(281,474,976,710,656),到達(dá)這個(gè)數(shù)值后,數(shù)據(jù)庫(kù)將再也啟動(dòng)不了,需要重建數(shù)據(jù)庫(kù)才能解決。按3級(jí)兼容的96K/s的速度,也可以用90年,所以這不是我們考慮的上限,遠(yuǎn)達(dá)不到。

      我們需要考慮的是軟上限,還是得認(rèn)真觀察圖1,

      下面是Oracle提供的計(jì)算多久到達(dá)軟上限的公式:

      select

      version,

      date_time,

      dbms_flashback.get_system_change_number current_scn,

      Headroom

      from

      (

      select

      version,

      to_char(SYSDATE,'YYYY/MM/DD HH24:MI:SS') DATE_TIME,

      ((((

      ((to_number(to_char(sysdate,'YYYY'))-1988)*12*31*24*60*60) +

      ((to_number(to_char(sysdate,'MM'))-1)*31*24*60*60) +

      (((to_number(to_char(sysdate,'DD'))-1))*24*60*60) +

      (to_number(to_char(sysdate,'HH24'))*60*60) +

      (to_number(to_char(sysdate,'MI'))*60) +

      (to_number(to_char(sysdate,'SS')))

      ) * (16*1024)) - dbms_flashback.get_system_change_number)

      / (16*1024*60*60*24)

      ) Headroom

      from v$instance

      )

      這些顯示還有629天,是否到629天我數(shù)據(jù)庫(kù)就不能用呢?

      不是的,

      1)????? Oracle提供的公式,用的是兼容性1的16K速度來(lái)計(jì)算,而我實(shí)際版本是兼容性2的32K速度的,所以這個(gè)HEADROOM值只能大概參考。

      2)????? current scn是在不斷增大的,可每天可到達(dá)的SCN limit值也在增大啊(看圖1),629天后,那時(shí)都被自動(dòng)開(kāi)啟過(guò)兼容性3了,那當(dāng)天SCN limit值又倍增不少(看圖1)。結(jié)合根據(jù)計(jì)算公式來(lái)看,629天后也遠(yuǎn)達(dá)不到軟上限值。

      補(bǔ)充下SCN Headroom概念:

      Headroom(天) = (Reasonable SCN Limit -CurrentSCN)/ SCN每秒最大可能增長(zhǎng)

      速率/3600/24

      也就是如果SCN按最大速率增長(zhǎng),達(dá)到當(dāng)前理論最大值需要的天數(shù)。這個(gè)值可以用來(lái)

      判斷SCN增長(zhǎng)速率是否過(guò)快。

      補(bǔ)充下計(jì)算公式中,兼容級(jí)別1-3中用于計(jì)算的初始時(shí)間:

      1:~1988/01/01

      2:~ 1998/07/01

      3: ~ 2008/03/30

      接近上限值的時(shí)候,就可能開(kāi)始報(bào)錯(cuò)了:

      --相關(guān)隱含參數(shù)_external_scn_rejection_threshold_hours, 采集自11.2.0.3.9

      select ksppinm,ksppstvl,ksppdesc from x$ksppi x,x$ksppcv y where x.indx=y.indx and ksppinm like '_external_scn_rejection_threshold_hours';

      這個(gè)參數(shù)在11.2.0.2版本之前是744,也就是31天。意思是SCN Headroom剩下31天時(shí),就會(huì)拒絕DBLINK訪(fǎng)問(wèn)。

      例子:

      ORA-19706錯(cuò)誤:最常見(jiàn)的就是拒絕dblink連接的時(shí)候,如A庫(kù)跟B庫(kù)通過(guò)dblink連接,

      A的SCN有通過(guò)人為調(diào)整增大許多,連接B庫(kù)的時(shí)候,Oracle會(huì)判斷該SCN傳播過(guò)來(lái)之

      后,如果會(huì)導(dǎo)致SCN headroom小于_external_scn_rejection_threshold_hours設(shè)置的

      閾值,則拒絕連接。

      6.?????? 打了補(bǔ)丁后,DBLINK就肯定不會(huì)出問(wèn)題么?哪些庫(kù)最優(yōu)先要打補(bǔ)丁?

      不,打了補(bǔ)丁,只是讓數(shù)據(jù)庫(kù)可以支持到96K/s秒的速率,這樣就極大增高當(dāng)天的SCN LIMIT(看圖1),讓你很難達(dá)到SCN軟上限。

      但是

      1)我們怕SCN被DBLINK傳染,有沒(méi)可能DBLINK連到一個(gè)曾經(jīng)壞過(guò),用推進(jìn)多次SCN的方法開(kāi)庫(kù)又未重建的數(shù)據(jù)庫(kù)呢?一堆數(shù)據(jù)庫(kù)DBLINK互聯(lián)傳染SCN呢?

      2)我們怕數(shù)據(jù)庫(kù)BUG等異常造成的SCN異常。

      如果你的數(shù)據(jù)庫(kù)不使用DBLINK連其他庫(kù),業(yè)務(wù)也不忙,確實(shí)可以不打補(bǔ)丁。

      11.2.0.2之前的數(shù)據(jù)庫(kù)版本,SCN的默認(rèn)的最大增長(zhǎng)速率是16K/s,

      11.2.0.2及之后的數(shù)據(jù)庫(kù)版本,SCN的默認(rèn)的最大增長(zhǎng)速率是32K/s,

      --相關(guān)隱含參數(shù)_max_reasonable_scn_rate,采集自11.2.0.3.9

      select ksppinm,ksppstvl,ksppdesc from x$ksppi x,x$ksppcv y where x.indx=y.indx and ksppinm like '_max_reasonable_scn_rate';

      如果你的業(yè)務(wù)增長(zhǎng)速度可能超過(guò)16K或者32K的(超過(guò)兼容性級(jí)別的速率),就需要小心了。

      可以取業(yè)務(wù)高峰時(shí)的AWR,觀察calls to kcmgas的速率。

      在2018年3月份里,兼容性為1(16K速率)的SCN極限值為15.9萬(wàn)億,兼容性為2(32K速率)的SCN極限值為20.7萬(wàn)億。

      select to_char(current_scn) from v$database;

      查詢(xún)自己庫(kù)的current SCN和極限值對(duì)比,如果接近,就要小心了。

      查詢(xún)select * from dba_db_links,看看自己庫(kù)和其他系統(tǒng)的關(guān)聯(lián)。

      主要是計(jì)算以業(yè)務(wù)高峰的速率,SCN還多久會(huì)達(dá)到軟上限。

      綜合這些情況下,自己的庫(kù)和DBLINK目標(biāo)庫(kù)都要盡早打上補(bǔ)丁。

      參考文檔

      恩莫公眾號(hào)、中亦安圖公眾號(hào)

      開(kāi)發(fā)者 數(shù)據(jù)庫(kù)

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶(hù)投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶(hù)投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:wps表格如何使用自動(dòng)計(jì)算功能(wps表格中怎么才可以自動(dòng)計(jì)算)
      下一篇:word中怎么復(fù)制格式(word怎么進(jìn)行格式復(fù)制)
      相關(guān)文章
      亚洲精品成人久久久| 日本亚洲免费无线码| 亚洲А∨精品天堂在线| 亚洲午夜无码久久久久软件| 亚洲成人黄色在线| 99人中文字幕亚洲区| 亚洲综合小说久久另类区| 精品亚洲A∨无码一区二区三区| 久久精品国产亚洲AV麻豆~| 亚洲av综合色区| 久久精品国产精品亚洲艾| 亚洲国产精品一区二区久久hs| 亚洲色大成网站WWW久久九九| 伊人久久精品亚洲午夜| 亚洲免费人成在线视频观看| 亚洲色大成网站WWW久久九九 | 久久精品亚洲综合专区| 久久青青成人亚洲精品| 亚洲高清在线观看| 亚洲色图校园春色| 亚洲一级毛片中文字幕| 中文字幕精品三区无码亚洲| 亚洲精品国产av成拍色拍| 精品亚洲成a人在线观看| 亚洲中文字幕视频国产| 亚洲日产无码中文字幕| 久久亚洲精品国产精品黑人| 91在线亚洲精品专区| 亚洲一区精品视频在线| 亚洲国产欧美日韩精品一区二区三区| 亚洲heyzo专区无码综合| 亚洲第一成人影院| 亚洲色无码专区在线观看| 亚洲国产精品不卡在线电影| 亚洲精品永久www忘忧草| 中中文字幕亚洲无线码| 无码一区二区三区亚洲人妻| MM131亚洲国产美女久久| 亚洲AV无码一区东京热| 亚洲国产精品综合久久网各| 亚洲欧美国产精品专区久久|