【oracle11g,9】控制檔案,oracle11g控制
一.控制檔案作用: 1.記錄了資料庫的物理狀態。 2.維護資料庫的一致性。控制檔案中記錄了資料庫系統scn號、資料檔案scn號與資料檔案頭裡的開始scn號,如果這三個scn號一致說明資料庫可以啟動。如果不一致就要恢複。 3.在參數檔案中定義控制檔案的位置和個數。 控制檔案最少1個,最多8個,多個檔案是鏡像的關係。定義控制檔案*.control_files='/opt/oracle/oradata/orcl/control01.ctl','/opt/oracle/oradata/orcl/control02.ctl','/opt/oracle/oradata/orcl/control03.ctl' 4.控制檔案是二進位檔案 一般不超過100m。 5.資料庫從mount階段開始使用控制檔案, 6.控制檔案只能串連一個資料庫。 7.丟失了要恢複
二.控制檔案包含以下內容:資料庫名字和標識符(DB ID)資料庫建立的時間戳記資料表空間的名字資料檔案和聯機重做記錄檔的位置和名字當前聯機重做記錄檔的sequence號碼檢查點資訊復原段的開始和結束聯機重做日誌的歸檔資訊備份資訊
三.轉儲控制檔案:由於控制檔案是個二進位檔案,無法直接開啟查閱,但是通過上一章介紹的如下命令可以將控制檔案內容轉儲出來便於查看: alter session set events 'immediate trace name controlf level 12'; 以下是來自Oracle Database 11g的轉儲測試: SQL> alter session set events 'immediate trace name controlf level 12'; Session altered. #備份控制檔案到trace檔案中SQL> alter database backup controlfile to trace;
Database altered.
SQL> select value from v$diag_info where name='Default Trace File';VALUE--------------------------------------------------------------------------------/u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_4929.trc
注意:從11g 開始,可以通過v$diag_info 獲得當前會話轉儲檔案的名稱。
四.控制檔案檢查資料庫的一致性: 1.控制檔案中記錄了資料庫系統scn號、資料檔案scn號與資料檔案頭列裡的開始scn號,如果這三個scn號一致說明資料庫可以啟動。如果不一致就要恢複。#系統scn號SQL> select checkpoint_change# from v$database;
CHECKPOINT_CHANGE#------------------ 469717#檔案scn號SQL> select checkpoint_change# from v$datafile;
CHECKPOINT_CHANGE#------------------ 469717 469717 469717 469717
開始scn號SQL> select checkpoint_change# from v$datafile_header;
CHECKPOINT_CHANGE#------------------ 469717 469717 469717 469717
2.scn號與時間的轉換:#全域檢查點SQL> alter system checkpoint;
System altered.#建立一個函數SQL> create or replace function scn_to_timestamp(query_scn in NUMBER)return TIMESTAMPIS EXTERNALNAME "ktfexscntot"WITH CONTEXT PARAMETERS (context ,query_scn OCINUMBER,RETURN)LIBRARY DBMS_TRAN_LIB;/ 2 3 4 5 6 7 8 9
Function created.#系統scnSQL> select checkpoint_change# from v$database;
CHECKPOINT_CHANGE#------------------ 473363#scn轉成時間SQL> select scn_to_timestamp(473363) from dual;
SCN_TO_TIMESTAMP(473363)---------------------------------------------------------------------------16-JUN-14 06.16.14.000000000 AM
#時間轉成scnSQL> select timestamp_to_scn('16-JUN-14 06.16.14.000000000 AM') from dual;
TIMESTAMP_TO_SCN('16-JUN-1406.16.14.000000000AM')------------------------------------------------- 473362
五.控制檔案多元化 (增減控制檔案資料量)1.規劃原則: 多例複用,定義多個控制檔案,分別放在不同的磁碟上。
2.管理控制檔案的個數和位置: spfile 或pfile 都可以實現對控制檔案的個數和位置的管理 spfile步驟: 修改spfile參數control_file 一致性關閉資料庫 增加或者減少控制檔案 使用spfile啟動資料庫 驗證結果。
例:修改控制檔案個數
--減少控制檔案SQL> alter system set control_files='/opt/oracle/oradata/orcl/control01.ctl' scope=spfile;
System altered.或者
--增加控制檔案: SQL> alter system set control_files='/opt/oracle/oradata/orcl/control01.ctl', '/opt/oracle/oradata/orcl/control02.ctl', '/opt/oracle/oradata/orcl/control03.ctl' scope=spfile;
System altered.
--關閉資料庫
SQL> shutdown immediate
--copy控制檔案到添加目錄 或者刪除控制檔案 [oracle@master disk3]$ cp /u01/app/oracle/oradata/prod/disk3/control01.ctl /u01/app/oracle/oradata/prod/disk4/control01.ctl
--啟動資料庫
SQL> startup ORACLE instance started.
Total System Global Area 418484224 bytesFixed Size 1336932 bytesVariable Size 276826524 bytesDatabase Buffers 134217728 bytesRedo Buffers 6103040 bytesDatabase mounted.Database opened.
3. pfile步驟: 修改pfile參數 一致性關閉資料庫 增加或者減少控制檔案 使用pfile啟動資料庫 驗證結果。
修改控制檔案:*.control_files='/u01/app/oracle/oradata/prod/disk1/control01.ctl','/u01/app/oracle/oradata/prod/disk2/control01.ctl','/u01/app/oracle/oradata/prod/disk3/control01.ctl','/u01/app/oracle/oradata/prod/disk4/control01.ctl','/u01/app/oracle/oradata/prod/disk5/control01.ctl'關閉資料庫:SQL>shutdown immediate
copy檔案:[oracle@master dbs]$cp /u01/app/oracle/oradata/prod/disk4/control01.ctl /u01/app/oracle/oradata/prod/disk5/control01.ctl啟動資料庫:SQL> startupORACLE instance started.
Total System Global Area 418484224 bytesFixed Size 1336932 bytesVariable Size 276826524 bytesDatabase Buffers 134217728 bytesRedo Buffers 6103040 bytesDatabase mounted.Database opened.
六.控制檔案的恢複:(控制檔案全丟了要重建控制檔案)1.有多個控制檔案時,丟了其中一個控制檔案的恢複.
解決:拷貝其他的控制檔案到丟失的目錄即可。
2.控制檔案全部丟失, 但controlfile備份到trace檔案中的情況:執行過alter database backup controlfile to trace;
解決:啟動nomount狀態,重建控制檔案: noresetlogs例:①.啟動資料庫:報錯SQL> startupORACLE instance started.
Total System Global Area 418484224 bytesFixed Size 1336932 bytesVariable Size 276826524 bytesDatabase Buffers 134217728 bytesRedo Buffers 6103040 bytesORA-00205: error in identifying control file, check alert log for more info②.查看警示日誌:報錯ALTER DATABASE MOUNTORA-00210: cannot open the specified control fileORA-00202: control file: '/u01/app/oracle/oradata/prod/disk3/control01.ctl'ORA-27037: unable to obtain file statusLinux Error: 2: No such file or directoryAdditional information: 3ORA-00210: cannot open the specified control fileORA-00202: control file: '/u01/app/oracle/oradata/prod/disk2/control01.ctl'ORA-27037: unable to obtain file statusLinux Error: 2: No such file or directoryAdditional information: 3ORA-00210: cannot open the specified control fileORA-00202: control file: '/u01/app/oracle/oradata/prod/disk1/control01.ctl'ORA-27037: unable to obtain file statusLinux Error: 2: No such file or directoryAdditional information: 3Mon Jun 16 15:16:04 2014Checker run found 2 new persistent data failuresORA-205 signalled during: ALTER DATABASE MOUNT...③.找trace 檔案中的一句話(在trace 檔案的最後),進行重建控制檔案。 注意:這裡的PROD是db_name .CREATE CONTROLFILE REUSE DATABASE "PROD" NORESETLOGS NOARCHIVELOG MAXLOGFILES 16 MAXLOGMEMBERS 2 MAXDATAFILES 30 MAXINSTANCES 1 MAXLOGHISTORY 292LOGFILE GROUP 1 ( '/u01/app/oracle/oradata/prod/disk1/redo01.log', '/u01/app/oracle/oradata/prod/disk2/redo01.log' ) SIZE 100M BLOCKSIZE 512, GROUP 2 ( '/u01/app/oracle/oradata/prod/disk1/redo02.log', '/u01/app/oracle/oradata/prod/disk2/redo02.log' ) SIZE 100M BLOCKSIZE 512, GROUP 3 ( '/u01/app/oracle/oradata/prod/disk1/redo03.log', '/u01/app/oracle/oradata/prod/disk2/redo03.log' ) SIZE 100M BLOCKSIZE 512-- STANDBY LOGFILEDATAFILE '/u01/app/oracle/oradata/prod/disk3/system01.dbf', '/u01/app/oracle/oradata/prod/disk3/sysaux01.dbf', '/u01/app/oracle/oradata/prod/disk3/undotbs01.dbf', '/u01/app/oracle/oradata/prod/disk3/users01.dbf'CHARACTER SET AL32UTF8;在nomount執行上面的重建控制檔案語句。
③.啟動資料庫到open狀態,SQL> alter database open;
Database altered.查看錶空間的資訊SQL> select tablespace_name ,contents from dba_tablespaces;
TABLESPACE_NAME CONTENTS------------------------------ ---------SYSTEM PERMANENTSYSAUX PERMANENTUNDOTBS UNDOTEMPTS1 TEMPORARYUSERS PERMANENT
確認下暫存資料表空間的資料檔案是否存在SQL> select file#,name from v$tempfile;
FILE# NAME---------- -------------------------------------------------- 1 /u01/app/oracle/oradata/prod/disk3/temp01.dbf
3.控制檔案全部丟失,有控制檔案的備份:(實驗未成功)解決: 啟動到nomount 狀態,copy舊的控制檔案,控制檔案相應的目錄, 啟動到mount,執行alter database backup controlfile to trace; 關閉資料庫,刪除舊的控制檔案, 在trace中找到重建控制檔案語句,重建控制檔案, 啟動資料庫到open,檢查暫存資料表空間的資料檔案是否存在(一般暫存資料表空間不存在,重新建立一個暫存資料表空間,設定為預設暫存資料表空間)。
建立暫存資料表空間SQL> create temporary tablespace tempts2 tempfile '/u01/app/oracle/oradata/prod/disk5/temp01.dbf' size 50m;
Tablespace created.設定為預設暫存資料表空間SQL> alter database default temporary tablespace tempts2;
Database altered.查看SQL> select file#,name from v$tempfile;
FILE# NAME---------- -------------------------------------------------- 1 /u01/app/oracle/oradata/prod/disk5/temp01.dbf
4. 如果沒有控制檔案的備份和backup to trace,只要能找到建庫語句,修改(記錄檔,資料檔案的路徑要與資料庫的一致)後執行就可。
5.恢複控制檔案的各種情況
重建控制檔案不一定需要用resetlogs開庫。先嘗試alter database open;情況1:順利開庫
情況2:需要不完全恢複,恢複後正常開庫recover database;alter database open;情況3:不完全恢複後,只能resetlogs開庫如果剛剛是shutdown abort的,使用recover database until cancel;
如果需要做不完全恢複,系統會提示你用 using backup controlfile;SQL> recover database using backup controlfile;執行上面的一句話後,要輸入記錄檔的。
oracle建立新的控制檔案的方法
控制檔案除了包括資料檔案、記錄檔資訊外,還包含一些與執行個體密切相關的參數,如maxlogfiles、maxlogmembers、maxloghistory等等。如果在開始建立執行個體時,這些參數大小設定不是很合理的話,則可能會導致執行個體的不可用,比如maxdatafiles表示執行個體中所有資料檔案的總數,如果目前所建立的資料檔案已經達到這個值,則不能再建立新的資料檔案。
建立控制檔案的詳細步驟:(1)先進行準備工作控制檔案必須包含資料檔案和記錄檔的路徑和檔案名稱,所以必須先查詢資料檔案(查dba_data_files資料字典)和記錄檔(查V$logfile資料字典)的詳細資料:select member from v$logfile;select name from v$datafile;select value from v$parameter where name='control_files';(2)關閉資料庫用immediate或abort關閉資料庫sql>connect as sysdbasql>shutdown immediate;(3)備份所有資料檔案和重做記錄檔當資料庫發生變化時,一般情況都要進行備份工作,最好採用作業系統的冷備份對所有資料檔案、記錄檔及控制檔案進行備份。(4)用nomount選項啟動資料庫sql>startup mount(5)用create controlfile建立控制檔案。(6)用離線方式備份新的控制檔案到裝置。(7)修改服務參數檔案路徑spfile.(8)如果丟失聯機或歸檔日誌或資料檔案,則恢複資料庫。否則執行第(9)步驟。(9)使用alter database open命令開啟資料庫。(10)關閉資料庫並備份資料庫
誰可以告訴我Oracle控制檔案是什?
對Oracle資料庫的control file來說它是一個非常小的(在MB範圍內的)二進位檔案,而它所含
有資料庫結構的資訊。大家可以把它理解為用於資料庫的一個元數資料庫儲存庫。它含有資料庫的結構
——構成一個資料庫的資料檔案和重做記錄檔。
它是在大家使用Oracle建立資料庫得到建立的,並在發生物理變化時得到更新的,如:每當大家添加
或者重新命名一個資料檔案時(alter data file)。
control file被不斷的更新,並且在任何時候都應該可供使用的。(注意:不要編輯control file的內容!)
只有Oracle進程才能更新它的內容!
control file的內容包括如下各項:
1.控制檔案屬於的資料庫名稱,一個控制檔案中能屬於一個資料庫.
2.資料庫建立的時間.
3.資料檔案的名稱,位置以及聯機/離線狀態資訊.
4.重做記錄檔的名稱和位置.
5.重做日誌存檔資訊.
6.資料表空間名稱
7.當前的記錄序號[log sequence number],它是一個在聯機重做記錄檔被切換時得到遞增和記錄的
唯一識別碼.
8.最新的檢查點資訊.
9.撤銷段的開始與結束.
10.Recovery Manager(復原管理員,簡稱RMAN)的備份資訊.Recovery Manager是資料庫管理員用來
備份和恢複資料庫的Oracle工具 + 生產力.