1. 程式人生 > >oracle 11.2.0.2以後變動的一些隱含參數

oracle 11.2.0.2以後變動的一些隱含參數

_use_adaptive_log_file_sync _minimum_giga_scn _external_scn_rejection_threshold_hours _datafile_write_errors_crash_instance

1 查詢隱含參數

SELECT x.ksppinm NAME, y.ksppstvl VALUE, x.ksppdesc describ

FROM SYS.x$ksppi x, SYS.x$ksppcv y

WHERE x.inst_id = USERENV (‘Instance‘)

AND y.inst_id = USERENV (‘Instance‘)

AND x.indx = y.indx

AND x.ksppinm LIKE ‘%&par%‘

2 _datafile_write_errors_crash_instance

11.2.0.2新增,默認為true,如果出現寫錯誤,直接實例宕掉,以前為offline;

3 _use_adaptive_log_file_sync

11.2.0.1和11.2.0.2兩個版本該參數默認是false。

從11.2.0.3開始,這個參數默認值是true,也就是開始啟用“自適應日誌同步機制”。

開啟改參數後,日誌同步機制會在2種方式中切換。

該參數決定了,foreground/user session 和LGWR進程通過什麽方式獲知commit操作已完成(也就是redo寫log file完成)。

Post/wait, traditional method for posting completion of writes to redo log

傳統方式,在11.2.0.3之前,user session等待LGWR通知redo寫入到log file完畢,被動方式。

優點:post/wait方式,user session幾乎能立即發現redo已刷到磁盤。

Polling, a new method where the foreground process checks if the LGWR has completed the write.

新方式,主動監測LGWR是否完成寫入,主動方式。這種方式比Post/wait方式響應速度慢,但是可以節約CPU資源。

優點:當commit完成後,LGWR會把commit完成的消息通知給很多user session,這個過程消耗大量CPU。

Polling方式采用朱勇監測LGWR釋放寫入redo完成,所以釋放了LGWR占用的CPU資源。

4 _external_scn_rejection_threshold_hours

11.2.0.2及以上版本的這個參數默認值是24,其他版本默認值是744。這樣使11.2.0.2以下版本的數據庫其Headroom的閾值增得較大。

5 _minimum_giga_scn

11.2.0.2打上相關補丁後無效了;另alter session set events ’10015 trace name adjust_scn level XXX’也推不動SCN了,查看SCN

推薦推進SCN的方法1:

1、當數據塊為8k的時候,控制文件大小為16k

2、找到Controlfile Checkpointed at scn,偏移量為第一個塊的60,比如0×4060,然後具體位置在0×4060的第9至第14個byte

3、找到第一個塊的第一行,如0×4000,將offset為15的flag由0×04改為0×00,並同時將checksum值(offset為16、17)全部清零。


推薦推進SCN的方法2:

“oradebug poke <address> <length> <value>” allows you to modify a given region of memory (length of memory is limited to size of scalar C types)

SQL> col current_scn for 99999999999;
SQL> select current_scn from v$database; 
 CURRENT_SCN
------------
 12414232664
SQL> select to_char(CHECKPOINT_CHANGE#,‘XXXXXXXXXXXX‘) from v$database; 
TO_CHAR(CHECK
-------------
    2E3F154CE
SQL> oradebug dumpvar sga kcsgscn_
kcslf kcsgscn_ [5000C974, 5000C994) = 00000002 E3F243A0 05AC1DA5 00000000 00000000 00000000 00000000 5000C58C
SQL>oradebug poke 0x5000C974 4 0X300000000
SQL>select to_number(‘300000000‘,‘XXXXXXXXXXXXXX‘)  current_scn from dual;


本文出自 “snowhill” 博客,轉載請與作者聯系!

oracle 11.2.0.2以後變動的一些隱含參數