Oracle控制檔案基礎
本文所述內容根據Oracle Database Administrator’s Guide 11g Release 2(11.2)--" 管理控制檔案 " 章節學習整理而得。
一、控制檔案概述
控制檔案是一種二進位制檔案,它記錄了資料庫的物理結構。在控制檔案當中包含以下資訊:
1、資料庫名稱
2、與當前資料庫相關聯的資料檔案和重做日誌檔案的名稱和位置
3、資料庫建立的時間
4、當前日誌的序號
5、檢查點資訊
資料庫開啟時,必須保證資料庫能夠向控制檔案寫入資訊。如果控制檔案丟失或損壞,資料庫將無法啟動到mount狀態,並會給資料庫的恢復帶來一定的困難。
控制檔案是隨資料庫的建立而建立的。預設情況下,至少會為其自身建立一個副本,在許多作業系統上都會為控制檔案建立多個副本。在資料庫建立期間,我們可以選擇建立兩個或更多的控制檔案。如果丟失(損壞)或是想修改控制檔案中的個別專案,也可以在以後建立它。
二、建立控制檔案
在資料庫建立之前,通過oracle引數檔案中的CONTROL_FILE引數指定控制檔案的名字和儲存的位置。在資料庫startup期間,由例項識別和開啟控制檔案中包含的所有檔案,在資料庫操作期間,由例項負責寫入資訊和維護控制檔案。
在建立資料庫之前,如果未設定CONTROL_FILE初始化引數,則:
1、如果沒有使用OMF,oracle將以預設的名稱和路徑建立控制檔案
2、如果使用了OMF,oracle將根據OMF的設定確定控制檔案的名稱和路徑
3、如果使用Orale的自動儲存管理,通過設定DB_CREATE_FILE_DEST和DB_RECOVER_FILE_DEST初始化引數,Oracle ASM將自動在適當的位置建立控制檔案。
之前所述的控制檔案的建立是在建立資料庫(create database)的同時建立控制檔案,那麼該在何時建立新的控制檔案?又該如何建立新的控制檔案呢?oracle的官方文件中給出瞭如下說明:
1、何時建立新的控制檔案
a、在控制檔案發生永久性的損壞且之前未對控制檔案進行備份
b、需要修改控制檔案中的某些內容
2、如何建立新的控制檔案
a、收集重做日誌檔案,資料檔案,控制檔案的資訊
select group#,member from v$logfile;
select name,bytes from v$datafile;
select value from v$parameter where name='control_files';
b、關閉資料庫
c、備份資料檔案和重做日誌檔案
d、啟動例項到nomount狀態
e、使用create controlfile語句建立新的控制檔案,如下
f、備份新建控制檔案
g、修改control_file初始化引數,建立控制檔案的多路複用,如果修改了資料庫的名字,還需要修改初始化引數檔案中的DB_NAME引數
h、以如下方式開啟資料庫:
alter database open;
alter database open resetlog;
3、控制檔案建立後的問題處理
在使用新建的控制檔案開啟資料庫後,應檢視告警日誌中是否記錄了諸如資料字典和控制檔案不一致之類的資訊。例如:某個資料檔案在資料字典中存在但是在控制檔案中卻沒有對應的記錄等等。
如果某個檔案在資料字典中存在而在控制檔案中不存在,資料庫將在控制檔案中建立一個名為MISSINGnnnn的佔位符條目,nnnn是以十進位制表示的資料檔案編號。控制檔案中的MISSINGnnnn標誌意味著檔案號為nnnn的資料檔案被離線且需要介質恢復。
與此相反,如果某個資料檔案的資訊在控制檔案中存在而在資料字典中卻不存在,資料庫將移除該資訊。在上述的兩種情況中,我們都可以從資料庫的告警日誌中得到相關的說明資訊,所以說,在使用新建的控制檔案開啟資料庫時,一定不要忘了檢視告警日誌中是否提示了相關的異常資訊。
4、建立控制檔案期間的錯誤處理
當使用新建的控制檔案mount和open資料庫時,如果出現了ORA錯誤資訊(通常有 ORA-01173, ORA-01176, ORA-01177, ORA-01215, ORA-01216),絕大多數的原因為:在create controlfile語句中遺漏了相關檔案的資訊或包含了不該有的檔案的資訊,這時只能重新建立控制檔案了。
三、多路複用控制檔案
Oracle推薦最好將控制檔案分佈在不同的物理磁碟上。如果由於磁碟故障導致控制檔案發生損壞,與之相關聯的例項應被關閉。一旦磁碟被修復,可以通過其他磁碟上的控制檔案恢復損壞的控制檔案。待恢復完成後例項就可以重新啟動,不需要進行介質恢復。
多路複用控制檔案是如何進行工作的呢?
1、資料庫啟動時,僅讀取control_file中第一個引數檔案的資訊
2、資料庫開啟時,將會向control_file中所有的控制檔案更新資訊
3、在資料庫操作期間,如果任意一個控制檔案不可用,例項將無法操作。
四、備份與恢復控制檔案
1、何時需要備份控制檔案:
a、新增、刪除或重新命名資料檔案
b、新增、刪除一個表空間或修改表空間的讀寫狀態 //在新增,刪除或重新命名的前後都需要進行備份嗎?文件沒有說明,我認為應該這樣。
c、新增、刪除重做日誌檔案或組
2、備份控制檔案的方法如下:
a、以二進位制檔案的形式備份控制檔案:alter database backup controlfile to '/u02/backup';
b、以SQL語句的形式備份控制檔案便於以後可以重建:alter database backup controlfile to trace;該備份的存放位置可以通過檢視alert告警日誌獲知。
3、恢復控制檔案的方法如下:
a、假設control_file引數中的一個引數檔案發生損壞,但是控制檔案的存放目錄仍然可以訪問,這時可以:關閉資料庫-->cp控制檔案另一副本覆蓋損壞控制檔案--> startup
b、假設control_file引數中的一個引數檔案發生發生介質損壞,這時可以:關閉資料庫 --> 在新介質上恢復控制檔案 --> 修改control_file引數 --> startup
4、刪除控制檔案
關閉資料庫 --> 修改control_file引數(刪除對於資訊) --> startup,該系列操作不會刪除作業系統上的物理檔案,需要手動刪除。
五、記錄控制檔案相關資訊的資料字典檢視
1、v$database:記錄資料庫中關於控制檔案的資訊。
例如:
SQL> select controlfile_type,controlfile_created,controlfile_change#,controlfile_time from v$database;
CONTROLFILE_TY CONTROLFILE_CR CONTROLFILE_CHANGE# CONTROLFILE_TI
-------------- -------------- ------------------- --------------
CURRENT 31-1月 -14 1237887 11-3月 -14
2、v$controlfile:顯示控制檔案的路徑和名稱。
SQL> select name from v$controlfile;
NAME
--------------------------------------------------------------------------------
D:\APP\ORACLE\ORADATA\ORCL\CONTROL01.CTL
D:\APP\ORACLE\FLASH_RECOVERY_AREA\ORCL\CONTROL02.CTL
3、v$controlfile_record_section:該資料字典檢視的作用不清楚。
SQL> select * from v$controlfile_record_section;
TYPE RECORD_SIZE RECORDS_TOTAL RECORDS_USED FIRST_INDEX LAST_INDEX LAST_RECID
---------------------------- ----------- ------------- ------------ ----------- ---------- ----------
DATABASE 316 1 1 0 0 0
CKPT PROGRESS 8180 11 0 0 0 0
REDO THREAD 256 8 1 0 0 0
REDO LOG 72 16 3 0 0 3
DATAFILE 520 100 6 0 0 40
FILENAME 524 2298 10 0 0 0
TABLESPACE 68 100 7 0 0 3
TEMPORARY FILENAME 56 100 1 0 0 1
RMAN CONFIGURATION 1108 50 0 0 0 0
LOG HISTORY 56 292 13 1 13 13
OFFLINE RANGE 200 163 0 0 0 0
ARCHIVED LOG 584 28 0 0 0 0
BACKUP SET 40 409 0 0 0 0
BACKUP PIECE 736 200 0 0 0 0
BACKUP DATAFILE 200 245 0 0 0 0
BACKUP REDOLOG 76 215 0 0 0 0
DATAFILE COPY 736 200 1 1 1 1
BACKUP CORRUPTION 44 371 0 0 0 0
COPY CORRUPTION 40 409 0 0 0 0
DELETED OBJECT 20 818 1 1 1 1
TYPE RECORD_SIZE RECORDS_TOTAL RECORDS_USED FIRST_INDEX LAST_INDEX LAST_RECID
---------------------------- ----------- ------------- ------------ ----------- ---------- ----------
PROXY COPY 928 246 0 0 0 0
BACKUP SPFILE 124 131 0 0 0 0
DATABASE INCARNATION 56 292 2 1 2 2
FLASHBACK LOG 84 2048 0 0 0 0
RECOVERY DESTINATION 180 1 1 0 0 0
INSTANCE SPACE RESERVATION 28 1055 1 0 0 0
REMOVABLE RECOVERY FILES 32 1000 0 0 0 0
RMAN STATUS 116 141 0 0 0 0
THREAD INSTANCE NAME MAPPING 80 8 8 0 0 0
MTTR 100 8 1 0 0 0
DATAFILE HISTORY 568 57 0 0 0 0
STANDBY DATABASE MATRIX 400 31 31 0 0 0
GUARANTEED RESTORE POINT 212 2048 0 0 0 0
RESTORE POINT 212 2083 0 0 0 0
DATABASE BLOCK CORRUPTION 80 8384 0 0 0 0
ACM OPERATION 104 64 6 0 0 0
FOREIGN ARCHIVED LOG 604 1002 0 0 0 0
37 rows selected
4、v$parameter:說明在初始化引數中是由那個引數決定控制檔案的名稱和路徑的。
SQL> select name from v$parameter where name='control_files';
NAME
--------------------------------------------------------------------------------
control_files
一、控制檔案概述
控制檔案是一種二進位制檔案,它記錄了資料庫的物理結構。在控制檔案當中包含以下資訊:
1、資料庫名稱
2、與當前資料庫相關聯的資料檔案和重做日誌檔案的名稱和位置
3、資料庫建立的時間
4、當前日誌的序號
5、檢查點資訊
資料庫開啟時,必須保證資料庫能夠向控制檔案寫入資訊。如果控制檔案丟失或損壞,資料庫將無法啟動到mount狀態,並會給資料庫的恢復帶來一定的困難。
控制檔案是隨資料庫的建立而建立的。預設情況下,至少會為其自身建立一個副本,在許多作業系統上都會為控制檔案建立多個副本。在資料庫建立期間,我們可以選擇建立兩個或更多的控制檔案。如果丟失(損壞)或是想修改控制檔案中的個別專案,也可以在以後建立它。
二、建立控制檔案
在資料庫建立之前,通過oracle引數檔案中的CONTROL_FILE引數指定控制檔案的名字和儲存的位置。在資料庫startup期間,由例項識別和開啟控制檔案中包含的所有檔案,在資料庫操作期間,由例項負責寫入資訊和維護控制檔案。
在建立資料庫之前,如果未設定CONTROL_FILE初始化引數,則:
1、如果沒有使用OMF,oracle將以預設的名稱和路徑建立控制檔案
2、如果使用了OMF,oracle將根據OMF的設定確定控制檔案的名稱和路徑
3、如果使用Orale的自動儲存管理,通過設定DB_CREATE_FILE_DEST和DB_RECOVER_FILE_DEST初始化引數,Oracle ASM將自動在適當的位置建立控制檔案。
之前所述的控制檔案的建立是在建立資料庫(create database)的同時建立控制檔案,那麼該在何時建立新的控制檔案?又該如何建立新的控制檔案呢?oracle的官方文件中給出瞭如下說明:
1、何時建立新的控制檔案
a、在控制檔案發生永久性的損壞且之前未對控制檔案進行備份
b、需要修改控制檔案中的某些內容
2、如何建立新的控制檔案
a、收集重做日誌檔案,資料檔案,控制檔案的資訊
select group#,member from v$logfile;
select name,bytes from v$datafile;
select value from v$parameter where name='control_files';
b、關閉資料庫
c、備份資料檔案和重做日誌檔案
d、啟動例項到nomount狀態
e、使用create controlfile語句建立新的控制檔案,如下
點選(此處)摺疊或開啟
-
CREATE CONTROLFILE
-
SET DATABASE prod --指定資料庫的名字
-
LOGFILE GROUP 1 ('/u01/oracle/prod/redo01_01.log',
-
'/u01/oracle/prod/redo01_02.log'),
-
GROUP 2 ('/u01/oracle/prod/redo02_01.log',
-
'/u01/oracle/prod/redo02_02.log'),
-
GROUP 3 ('/u01/oracle/prod/redo03_01.log',
-
'/u01/oracle/prod/redo03_02.log')
-
RESETLOGS --重置日誌xuhao
-
DATAFILE '/u01/oracle/prod/system01.dbf' SIZE 3M,
-
'/u01/oracle/prod/rbs01.dbs' SIZE 5M,
-
'/u01/oracle/prod/users01.dbs' SIZE 5M,
-
'/u01/oracle/prod/temp01.dbs' SIZE 5M
-
MAXLOGFILES 50
-
MAXLOGMEMBERS 3
-
MAXLOGHISTORY 400
-
MAXDATAFILES 200
-
MAXINSTANCES 6
- ARCHIVELOG;
g、修改control_file初始化引數,建立控制檔案的多路複用,如果修改了資料庫的名字,還需要修改初始化引數檔案中的DB_NAME引數
h、以如下方式開啟資料庫:
alter database open;
alter database open resetlog;
3、控制檔案建立後的問題處理
在使用新建的控制檔案開啟資料庫後,應檢視告警日誌中是否記錄了諸如資料字典和控制檔案不一致之類的資訊。例如:某個資料檔案在資料字典中存在但是在控制檔案中卻沒有對應的記錄等等。
如果某個檔案在資料字典中存在而在控制檔案中不存在,資料庫將在控制檔案中建立一個名為MISSINGnnnn的佔位符條目,nnnn是以十進位制表示的資料檔案編號。控制檔案中的MISSINGnnnn標誌意味著檔案號為nnnn的資料檔案被離線且需要介質恢復。
與此相反,如果某個資料檔案的資訊在控制檔案中存在而在資料字典中卻不存在,資料庫將移除該資訊。在上述的兩種情況中,我們都可以從資料庫的告警日誌中得到相關的說明資訊,所以說,在使用新建的控制檔案開啟資料庫時,一定不要忘了檢視告警日誌中是否提示了相關的異常資訊。
4、建立控制檔案期間的錯誤處理
當使用新建的控制檔案mount和open資料庫時,如果出現了ORA錯誤資訊(通常有 ORA-01173, ORA-01176, ORA-01177, ORA-01215, ORA-01216),絕大多數的原因為:在create controlfile語句中遺漏了相關檔案的資訊或包含了不該有的檔案的資訊,這時只能重新建立控制檔案了。
三、多路複用控制檔案
Oracle推薦最好將控制檔案分佈在不同的物理磁碟上。如果由於磁碟故障導致控制檔案發生損壞,與之相關聯的例項應被關閉。一旦磁碟被修復,可以通過其他磁碟上的控制檔案恢復損壞的控制檔案。待恢復完成後例項就可以重新啟動,不需要進行介質恢復。
多路複用控制檔案是如何進行工作的呢?
1、資料庫啟動時,僅讀取control_file中第一個引數檔案的資訊
2、資料庫開啟時,將會向control_file中所有的控制檔案更新資訊
3、在資料庫操作期間,如果任意一個控制檔案不可用,例項將無法操作。
四、備份與恢復控制檔案
1、何時需要備份控制檔案:
a、新增、刪除或重新命名資料檔案
b、新增、刪除一個表空間或修改表空間的讀寫狀態 //在新增,刪除或重新命名的前後都需要進行備份嗎?文件沒有說明,我認為應該這樣。
c、新增、刪除重做日誌檔案或組
2、備份控制檔案的方法如下:
a、以二進位制檔案的形式備份控制檔案:alter database backup controlfile to '/u02/backup';
b、以SQL語句的形式備份控制檔案便於以後可以重建:alter database backup controlfile to trace;該備份的存放位置可以通過檢視alert告警日誌獲知。
3、恢復控制檔案的方法如下:
a、假設control_file引數中的一個引數檔案發生損壞,但是控制檔案的存放目錄仍然可以訪問,這時可以:關閉資料庫-->cp控制檔案另一副本覆蓋損壞控制檔案--> startup
b、假設control_file引數中的一個引數檔案發生發生介質損壞,這時可以:關閉資料庫 --> 在新介質上恢復控制檔案 --> 修改control_file引數 --> startup
4、刪除控制檔案
關閉資料庫 --> 修改control_file引數(刪除對於資訊) --> startup,該系列操作不會刪除作業系統上的物理檔案,需要手動刪除。
五、記錄控制檔案相關資訊的資料字典檢視
1、v$database:記錄資料庫中關於控制檔案的資訊。
例如:
SQL> select controlfile_type,controlfile_created,controlfile_change#,controlfile_time from v$database;
CONTROLFILE_TY CONTROLFILE_CR CONTROLFILE_CHANGE# CONTROLFILE_TI
-------------- -------------- ------------------- --------------
CURRENT 31-1月 -14 1237887 11-3月 -14
2、v$controlfile:顯示控制檔案的路徑和名稱。
SQL> select name from v$controlfile;
NAME
--------------------------------------------------------------------------------
D:\APP\ORACLE\ORADATA\ORCL\CONTROL01.CTL
D:\APP\ORACLE\FLASH_RECOVERY_AREA\ORCL\CONTROL02.CTL
3、v$controlfile_record_section:該資料字典檢視的作用不清楚。
SQL> select * from v$controlfile_record_section;
TYPE RECORD_SIZE RECORDS_TOTAL RECORDS_USED FIRST_INDEX LAST_INDEX LAST_RECID
---------------------------- ----------- ------------- ------------ ----------- ---------- ----------
DATABASE 316 1 1 0 0 0
CKPT PROGRESS 8180 11 0 0 0 0
REDO THREAD 256 8 1 0 0 0
REDO LOG 72 16 3 0 0 3
DATAFILE 520 100 6 0 0 40
FILENAME 524 2298 10 0 0 0
TABLESPACE 68 100 7 0 0 3
TEMPORARY FILENAME 56 100 1 0 0 1
RMAN CONFIGURATION 1108 50 0 0 0 0
LOG HISTORY 56 292 13 1 13 13
OFFLINE RANGE 200 163 0 0 0 0
ARCHIVED LOG 584 28 0 0 0 0
BACKUP SET 40 409 0 0 0 0
BACKUP PIECE 736 200 0 0 0 0
BACKUP DATAFILE 200 245 0 0 0 0
BACKUP REDOLOG 76 215 0 0 0 0
DATAFILE COPY 736 200 1 1 1 1
BACKUP CORRUPTION 44 371 0 0 0 0
COPY CORRUPTION 40 409 0 0 0 0
DELETED OBJECT 20 818 1 1 1 1
TYPE RECORD_SIZE RECORDS_TOTAL RECORDS_USED FIRST_INDEX LAST_INDEX LAST_RECID
---------------------------- ----------- ------------- ------------ ----------- ---------- ----------
PROXY COPY 928 246 0 0 0 0
BACKUP SPFILE 124 131 0 0 0 0
DATABASE INCARNATION 56 292 2 1 2 2
FLASHBACK LOG 84 2048 0 0 0 0
RECOVERY DESTINATION 180 1 1 0 0 0
INSTANCE SPACE RESERVATION 28 1055 1 0 0 0
REMOVABLE RECOVERY FILES 32 1000 0 0 0 0
RMAN STATUS 116 141 0 0 0 0
THREAD INSTANCE NAME MAPPING 80 8 8 0 0 0
MTTR 100 8 1 0 0 0
DATAFILE HISTORY 568 57 0 0 0 0
STANDBY DATABASE MATRIX 400 31 31 0 0 0
GUARANTEED RESTORE POINT 212 2048 0 0 0 0
RESTORE POINT 212 2083 0 0 0 0
DATABASE BLOCK CORRUPTION 80 8384 0 0 0 0
ACM OPERATION 104 64 6 0 0 0
FOREIGN ARCHIVED LOG 604 1002 0 0 0 0
37 rows selected
4、v$parameter:說明在初始化引數中是由那個引數決定控制檔案的名稱和路徑的。
SQL> select name from v$parameter where name='control_files';
NAME
--------------------------------------------------------------------------------
control_files
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29515435/viewspace-1106595/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle基礎 06 控制檔案 controlfileOracle
- Oracle引數檔案基礎Oracle
- Oracle重做日誌檔案基礎Oracle
- Oracle基礎 09 概要檔案 profileOracle
- Oracle 控制檔案Oracle
- Oracle重建控制檔案Oracle
- ORACLE 新增控制檔案Oracle
- ORACLE控制檔案管理Oracle
- oracle 重建控制檔案Oracle
- Oracle基礎 07 引數檔案 pfile/spfileOracle
- Oracle 控制檔案的重建Oracle
- oracle 關於--控制檔案Oracle
- 增加oracle的控制檔案Oracle
- oracle sqlldr控制檔案模板OracleSQL
- Oracle 控制檔案內容Oracle
- 【ORACLE CONCEPT】控制檔案Oracle
- Linux基礎學習——檔案基礎Linux
- oracle控制檔案及引數檔案問題Oracle
- Oracle 控制檔案(CONTROLFILE)Oracle
- 關於oracle的控制檔案Oracle
- ORACLE控制檔案的重建 (轉)Oracle
- PHP基礎---檔案包含PHP
- Unity基礎——.meta檔案Unity
- 檔案系統基礎
- oracle基礎管理——表空間和資料檔案Oracle
- 【控制檔案】映象控制檔案
- oracle中移動控制檔案、資料檔案、日誌檔案Oracle
- oracle 11g 新增控制檔案Oracle
- oracle控制檔案轉儲說明Oracle
- 重建Oracle資料庫控制檔案Oracle資料庫
- Oracle 控制檔案(CONTROLFILE) -- <2>Oracle
- Oracle 控制檔案(CONTROLFILE)- <1>Oracle
- 檔案管理基礎命令一
- python 基礎之檔案Python
- Python基礎——檔案操作Python
- Spark基礎-Scala檔案操作Spark
- 【Java基礎】--上傳檔案Java
- C++基礎::檔案流C++