關於控制檔案的擴充套件問題 (全面) - Expanded controlfile section
近期發現Oracle10.2.0.4 RAC (Linux AS 5.3) 兩個節點的資料庫alert log中有報一些控制檔案擴充套件的資訊, 具體如下,有些是節點1上的,有些是節點2上的,可以透過thread號看出來:
這是一個還未上線的資料庫,目前僅僅偶爾有一些測試資料, 最近好幾次出現控制檔案擴充套件,
都是關於archived log 及 log history (對應控制檔案section 11 及section 9 ) ,
引數 control_file_record_keep_time = 7 , 當controlfile 中可以重複使用的部分 log history 及archived log 使用完了預留給他們的slot , 由於 control_file_record_keep_time = 7 ,需要保留 7 天的log , 不能在控制檔案中覆蓋掉這些記錄 , 所以需要擴充套件兩個section 的大小, 一般每次擴充套件都是上次大小的2倍, 如果我們設定了 control_file_record_keep_time=0, controlfile 就沒有必要擴充套件section來儲存archive log 資訊, 用完預留的 slot 後就開始迴圈使用而不會擴充套件了 。
Thu Apr 8 22:18:29 2010
Thread 1 advanced to log sequence 197 (LGWR switch)
Current log# 14 seq# 197 mem# 0: /b2bdata/oracle/oradata/wmb2bprd/redo14a.log
Current log# 14 seq# 197 mem# 1: /b2bdata1/oracle/oradata/wmb2bprd/redo14b.log
Thu Apr 8 22:18:29 2010
Expanded controlfile section 11 from 112 to 224 records
Requested to grow by 112 records; added 4 blocks of records
Thu Apr 8 22:48:29 2010
Thread 1 advanced to log sequence 198 (LGWR switch)
Current log# 15 seq# 198 mem# 0: /b2bdata/oracle/oradata/wmb2bprd/redo15a.log
Current log# 15 seq# 198 mem# 1: /b2bdata1/oracle/oradata/wmb2bprd/redo15b.log
Sat Apr 10 20:58:27 2010
Thread 2 advanced to log sequence 247 (LGWR switch)
Current log# 26 seq# 247 mem# 0: /b2bdata/oracle/oradata/wmb2bprd/redo26a.log
Current log# 26 seq# 247 mem# 1: /b2bdata1/oracle/oradata/wmb2bprd/redo26b.log
Sat Apr 10 21:28:26 2010
Expanded controlfile section 9 from 292 to 584 records
Requested to grow by 292 records; added 1 blocks of records
Sat Apr 10 21:28:26 2010
Thread 2 advanced to log sequence 248 (LGWR switch)
Current log# 19 seq# 248 mem# 0: /b2bdata/oracle/oradata/wmb2bprd/redo19a.log
Current log# 19 seq# 248 mem# 1: /b2bdata1/oracle/oradata/wmb2bprd/redo19b.log
Mon Apr 12 14:58:55 2010
Expanded controlfile section 11 from 448 to 896 records
Requested to grow by 448 records; added 16 blocks of records
Mon Apr 12 15:28:57 2010
Thread 2 advanced to log sequence 332 (LGWR switch)
Current log# 23 seq# 332 mem# 0: /b2bdata/oracle/oradata/wmb2bprd/redo23a.log
Current log# 23 seq# 332 mem# 1: /b2bdata1/oracle/oradata/wmb2bprd/redo23b.log
Wed Apr 14 10:20:01 2010
Thread 1 advanced to log sequence 461 (LGWR switch)
Current log# 14 seq# 461 mem# 0: /b2bdata/oracle/oradata/wmb2bprd/redo14a.log
Current log# 14 seq# 461 mem# 1: /b2bdata1/oracle/oradata/wmb2bprd/redo14b.log
Wed Apr 14 10:50:01 2010
Expanded controlfile section 9 from 584 to 1168 records
Requested to grow by 584 records; added 2 blocks of records
Wed Apr 14 10:50:01 2010
Thread 1 advanced to log sequence 462 (LGWR switch)
Current log# 15 seq# 462 mem# 0: /b2bdata/oracle/oradata/wmb2bprd/redo15a.log
Current log# 15 seq# 462 mem# 1: /b2bdata1/oracle/oradata/wmb2bprd/redo15b.log
4/10 backup controlfile trace :
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "WMB2BPRD" NORESETLOGS ARCHIVELOG
MAXLOGFILES 192
MAXLOGMEMBERS 3
MAXDATAFILES 2048
MAXINSTANCES 32
MAXLOGHISTORY 292
LOGFILE
4/13 backup controlfile trace :
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "WMB2BPRD" NORESETLOGS ARCHIVELOG
MAXLOGFILES 192
MAXLOGMEMBERS 3
MAXDATAFILES 2048
MAXINSTANCES 32
MAXLOGHISTORY 584
LOGFILE
4/14 backup controlfile trace :
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "WMB2BPRD" NORESETLOGS ARCHIVELOG
MAXLOGFILES 192
MAXLOGMEMBERS 3
MAXDATAFILES 2048
MAXINSTANCES 32
MAXLOGHISTORY 1168
LOGFILE
--------------------------------------------------------------------------------------------------------------------------------
參考文章:
發表於: 2008.11.27 11:28
分類: Oracle10g
出處: http://yeahokay.itpub.net/post/11939/474512
---------------------------------------------------------------
如果你對這兩個引數有不清楚的地方,希望這篇文章可以掃除你的疑惑。
這兩個引數對應於controlfile中不同的section。存放於完全不同的儲存空間內。
MAXLOGHISTORY 對應於”LOG HISTORY ” section. 對應於view v$log_history & v$loghist,單位為log的個數
control_file_record_keep_time 對應於”ARCHIVED LOG” section, 對應於view v$archived_log 單位為keep的天數
這裡所指的section可以從v$controlfile_record_section中查到
SQL> select TYPE,RECORDS_TOTAL,RECORDS_USED from v$controlfile_record_section
2 where type in (’LOG HISTORY’,'ARCHIVED LOG’);
TYPE RECORDS_TOTAL RECORDS_USED
——————– ————- ————
LOG HISTORY 907 526
ARCHIVED LOG 447 411
MAXLOGHISTORY 定義了controlfile中可以儲存多少個log file的資訊,可以從v$loghist, v$log_history中查到
control_file_record_keep_time 定義了controlfile中*至少*要keep多少天的archive log資訊,可以從v$archived_log中查到。
我們來做下面這個簡單的試驗,大致可以明白這兩個引數的含義
1. 重建controlfile maxloghistory=100, resetlogs open database,設定control_file_record_keep_time=0
SQL> select TYPE,RECORDS_TOTAL,RECORDS_USED from v$controlfile_record_section
2 where type in (’LOG HISTORY’,'ARCHIVED LOG’);
TYPE RECORDS_TOTAL RECORDS_USED
——————– ————- ————
LOG HISTORY 226 0
ARCHIVED LOG 111 0
這時候看到”LOG HISTORY”預先分配了226個record的空間,RECORDS_USED=0
“ARCHIVED LOG”預先分配了111個record的空間, RECORDS_USED=0
這裡 “LOG HISTORY”不是如我們設定的maxloghistory=100那樣預分配100個record的空間,是因為controlfile中分配空間以 block為單位的,這裡block size為8k,一個record的大小為36 bytes,算下來差不多226個,如果你一開始指定maxloghistory=300,那麼oracle會分配兩個block,”LOG HISTORY”中與分配的RECORD數將為452左右(可能會有細小的誤差)。所以更準確的說,建立controlfile時 maxloghistory的值指定了oracle將預分配多少個block給”LOG HISTORY” section
這裡”ARCHIVED LOG”預分配了111個record的空間,”ARCHIVE LOG” section一條記錄的大小為584bytes, 計算下來大約為8個block
2. 不斷的產生archive log,看這兩個儲存空間如何擴充套件
SQL> begin
2 for i in 1..300 loop
3 execute immediate ‘alter system archive log current’;
4 end loop;
5 end;
6 /
PL/SQL procedure successfully completed.
在此過程中,一開始, 兩者的RECORDS_USED都不斷增加,因為有預留的空間可以使用
TYPE RECORDS_TOTAL RECORDS_USED
——————– ————- ————
LOG HISTORY 226 57
ARCHIVED LOG 111 57
當archive log section中RECORDS_USED到達111時,RECORDS_USED停止增加,log history仍然繼續增長直到226
TYPE RECORDS_TOTAL RECORDS_USED
——————– ————- ————
LOG HISTORY 226 146
ARCHIVED LOG 111 111
最後300個archive log產生結束後,log history section儲存226條資訊,archived log儲存111條資訊,controlfile沒有擴充套件,size保持不變
沒有擴充套件的原因是我們設定了 control_file_record_keep_time=0, controlfile沒有必要擴充套件來儲存archive log 資訊,所以用完一開始保留的111個slot後就開始迴圈使用了。
TYPE RECORDS_TOTAL RECORDS_USED
——————– ————- ————
LOG HISTORY 226 226
ARCHIVED LOG 111 111
3.接下來我們設定control_file_record_keep_time=1,繼續生成300個archive logs
SQL> alter system set control_file_record_keep_time=1;
System altered.
SQL> begin
2 for i in 1..300 loop
3 execute immediate ‘alter system archive log current’;
4 end loop;
5 end;
6 /
PL/SQL procedure successfully completed.
在此過程中,一開始兩個section就同時擴充套件了,LOG HISTORY section和ARCHIVED LOG section都擴充套件了到了原來的兩倍大小(後面的試驗中始終以2的倍數擴充套件)。controlfile size變大。
這裡因為我們需要至少keep一天的archive log資訊,所以archived log section自然要進行擴充套件。又因為這些archive log的資訊同時也要在log history section中有記錄,所以log history section也進行了擴充套件。
TYPE RECORDS_TOTAL RECORDS_USED
——————– ————- ————
LOG HISTORY 453 229
ARCHIVED LOG 223 114
兩個section的RECORDS_USED持續增長, 當archived log的RECORDS_USED達到223時,這個section進行了第二次擴充套件,從223擴到了447,擴大到了原來的兩倍大小
此時LOG HISTORY section中仍然有空間存放,所以不需要擴充套件該section
TYPE RECORDS_TOTAL RECORDS_USED
——————– ————- ————
LOG HISTORY 453 350
ARCHIVED LOG 447 235
當LOG HISTORY section中的 RECORDS_USED增長到453時,該section發生了第二次擴充套件,從453到907,擴大了一倍,此時ARCHIVE LOG section仍然後可用空間,並沒有擴充套件
TYPE RECORDS_TOTAL RECORDS_USED
——————– ————- ————
LOG HISTORY 907 469
ARCHIVED LOG 447 354
所以從上面看出,兩個section的擴充套件並沒有什麼關係,當自身需要擴充套件的時候就擴充套件一倍大小。MAXLOGHISTORY這個引數隨著LOG HISTORY section的擴充套件而變大。
最後有一些常見的問題和解答:
1.為什麼v$log_history和v$archived_log中記錄數不一樣
上面的試驗已經解答了這個問題。這兩個view對應於不同的東西,在controlfile中的儲存空間也不同。
2. 為什麼有時v$archived_log的keep的archive log 的天數大於control_file_record_keep_time所指定的天數
這種情況很常見,例如當系統某段時間很繁忙的時候,生成的archive log比較多,這時候為了keep指定天數的archive log,controlfile進行了大量的擴充套件,這部分空間擴充套件後不會回縮,而且是以兩倍大小來擴充套件,所以當系統不是很繁忙的時候,就可以keep更多天的資料
control_file_record_keep_time指定的是至少要keep的天數,並不是說v$archived_log之只保留多少天的archive log
3. 為什麼建立controlfile時指定的maxloghistory要小於實際的log history section預留的record數
這個問題前面也解釋到了。空間分配以block為單位。準確的說建立controlfile時的maxloghistory規定了大致會預留多少個block,一個block大約可以存放226條記錄
4. 如何dump controlfile
選自ixora,原文地址
The contents of the current controlfile can be dumped in text form. to a process trace file in the user_dump_dest directory using the CONTROLF dump. The levels for this dump are as follows.
Dump Level | Dump Contains |
---|---|
1 | only the file header |
2 | just the file header, the database info record, and checkpoint progress records |
3 | all record types, but just the earliest and latest records for circular reuse record types |
4 | as above, but includes the 4 most recent records for circular reuse record types |
5+ | as above, but the number of circular reuse records included doubles with each level |
For example, the following syntax could be used to get a text dump on the controlfile in the trace file of the current process showing all the controlfile record types but only the oldest and most recent of the circular reuse records.
oradebug setmypid oradebug dump controlf 3
Of course, the session must be connected AS SYSDBA to use the ORADEBUG facility. However, any session with the ALTER SESSION privilege can use the following event syntax to take the same dump.
alter session set events 'immediate trace name controlf level 3';
上面所說的各個section記錄的size就是從dump檔案中看出的,我使用的是level 3
***************************************************************************
LOG FILE HISTORY RECORDS
***************************************************************************
(blkno = 0×7b, size = 36, max = 907, in-use = 782, last-recid= 856)
Earliest record:
RECID #75 Recno 756 Record timestamp 08/13/06 23:42:26 Thread=1 Seq#=75 Link-Recid=74
Low scn: 0×0000.01865bef 08/13/06 23:42:26 Next scn: 0×0000.01865bf2
Latest record:
RECID #856 Recno 630 Record timestamp 08/14/06 00:03:45 Thread=1 Seq#=856 Link-Recid=855
Low scn: 0×0000.018665c7 08/14/06 00:03:45 Next scn: 0×0000.018665ca
***************************************************************************
ARCHIVED LOG RECORDS
***************************************************************************
(blkno = 0×86, size = 584, max = 895, in-use = 667, last-recid= 856)
Earliest record:
RECID #190 Recno 863 Record timestamp 08/13/06 23:44:23 Thread=1 Seq#=190
Flags:
Resetlogs scn and time scn: 0×0000.0186593c 08/13/06 23:32:41
filename /oracle/GBPGW/archive/BABY/BABY_190.arc
Low scn: 0×0000.01865d4a 08/13/06 23:44:23 Next scn: 0×0000.01865d4d 08/13/06 23:44:23
Block count=1 Blocksize=512
Latest record:
RECID #856 Recno 634 Record timestamp 08/14/06 00:03:45 Thread=1 Seq#=856
Flags:
Resetlogs scn and time scn: 0×0000.0186593c 08/13/06 23:32:41
filename /oracle/GBPGW/archive/BABY/BABY_856.arc
Low scn: 0×0000.018665c7 08/14/06 00:03:45 Next scn: 0×0000.018665ca 08/14/06 00:03:45
Block count=1 Blocksize=512
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-659772/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 10g R2 中控制檔案自動擴充套件 - Expanded controlfile section套件
- 關於Interceptor擴充套件問題套件
- 關於使用擴充套件包的問題。套件
- 請教關於JAVA動態擴充套件問題Java套件
- 控制檔案(controlfile)中的各個section 代表什麼 ?
- oracle 關閉資料檔案的擴充套件Oracle套件
- 關於32位oracle擴充套件SGA的一些問題Oracle套件
- 轉載 控制檔案(controlfile)中的各個section 代表什麼 ?
- MAXDATAFILES,DB_FILES及控制檔案的自動擴充套件套件
- aix擴充套件檔案系統AI套件
- aix 擴充套件檔案系統AI套件
- 擴充套件資料檔案大小套件
- 關於using backup controlfile(丟失控制檔案和資料檔案)
- 關於block的ITL和dump的擴充套件BloC套件
- 10gr2自動擴充套件控制檔案中的設定套件
- Linux 檔案系統擴充套件Linux套件
- 關於給apache新增PHP擴充套件的方法ApachePHP套件
- 關於基於 Jdon+Disruptor 的 橫向擴充套件套件
- LVM : 擴充套件檔案系統的容量LVM套件
- 關於“50% CPU 佔有率”題目的內容擴充套件套件
- 擴充套件的持久化上下文問題套件持久化
- Oracle 控制檔案(CONTROLFILE)Oracle
- Jmeter——元件擴充套件,使其功能更全面JMeter元件套件
- hyperf oss/cos 檔案上傳擴充套件套件
- macOS 探尋檔案擴充套件屬性Mac套件
- 回滾段擴充套件資料檔案套件
- python擴充套件檔案import失敗Python套件Import
- chrome擴充套件推薦:此刻、今天、最近~一個關於時間管理的擴充套件 – MomentumChrome套件
- chrome擴充套件推薦:此刻、今天、最近~一個關於時間管理的擴充套件 - MomentumChrome套件
- 斐波那契問題和擴充套件套件
- PHPWAMP安裝Redis擴充套件的方式與相關擴充套件的下載PHPRedis套件
- Oracle 控制檔案(CONTROLFILE) -- <2>Oracle
- Oracle 控制檔案(CONTROLFILE)- <1>Oracle
- 關於翻譯包的擴充套件 dimsav/Laravel-translatable套件Laravel
- 關於oracle的控制檔案Oracle
- 分享自己寫的關於順豐同城配送的擴充套件包套件
- nginx配置檔案語法高亮的Sublime Text擴充套件Nginx套件
- kotlin 擴充套件(擴充套件函式和擴充套件屬性)Kotlin套件函式