您好,登錄后才能下訂單哦!
章節內容:
l 什么是控制文件
l 控制文件指南
l 創建控制文件
l 創建控制文件后的疑難解答
l 備份控制文件
l 使用當前副本恢復控制文件
l 刪除控制文件
l 控制文件數據字典視圖
每個Oracle數據庫都有一個控制文件,它是一個小二進制文件,用于記錄數據庫的物理結構。控制文件中包含下列內容:
l 數據庫名稱
l 關聯數據文件和重做日志文件的名稱和位置
l 數據庫創建的時間戳
l 當前日志序列號
l 檢查點信息
l 當數據庫打開時,Oracle數據庫服務器對控制文件必須是可寫的。沒有控制文件,數據庫將會無法掛載,并且恢復困難。
Oracle數據庫的控制文件與數據庫同時創建。默認情況下,在創建數據庫期間至少會創建一個控制文件副本。在某些操作系統上,默認是創建多個副本。你應該在數據庫創建過程中創建兩個或多個控制文件副本。如果你丟失了控制文件或想要更改控制文件中的特定信息,也可以稍后創建控制文件。
本節介紹管理數據庫控制文件的準則,其中包含以下主題:
l 指定控制文件的文件名
l 控制文件在不同磁盤上的多路復用
l 備份控制文件
l 管理控制文件的大小
你可以使用數據庫初始化參數文件中的CONTROL_FILES初始化參數指定控制文件名。數據庫實例在數據庫啟動過程中識別并打開CONTROL_FILES參數中列出的控制文件,并在數據庫操作過程中寫入和維護這些控制文件。
如果在創建數據之前未指定CONTROL_FILES的文件:
l 如果不使用OMF(Oracle Managed Files),則數據庫將創建一個控制文件并使用默認文件名,默認名稱和操作系統相關。
l 如果使用OMF(Oracle Managed Files),那么OMF的初始化參數將指定控制文件的名稱和位置。
l 如果使用Oracle自動存儲管理(Oracle ASM),則可以將部分Oracle ASM文件名配置在DB_CREATE_FILE_DEST和DB_RECOVERY_FILE_DEST初始化參數中。然后,Oracle ASM會在相應的位置自動創建控制文件。
每個Oracle數據庫應至少有兩個控制文件,每個控制文件存儲在不同的物理磁盤上。如果控制文件由于磁盤故障而損壞,則關聯的實例必須關閉。當磁盤修復完畢后,可以使用其他磁盤上的控制文件的完整副本來還原損壞的控制文件,然后可以重新啟動實例。在這種情況下,不需要進行介質恢復。
在多路復用控制文件下,數據庫進行如下操作:
l 數據庫寫入初始化參數CONTROL_FILES列出的所有控制文件名。
l 在數據庫操作期間,數據庫只讀取CONTROL_FILES參數中列出的第一個文件。
l 如果任何控制文件在數據庫操作期間變得不可用,則數據庫實例將變得不可用,操作應該被中止。
注意:
Oracle強烈建議你的數據庫至少有兩個控制文件,并且它們位于獨立的物理磁盤上。
如果重做日志是多路復用的,可以將控制文件副本放在重做日志組成員所在的每個磁盤上,實現對控制文件的多路復用。通過在這些位置存儲控制文件,可以最大限度地減少在磁盤故障中丟失所有控制文件和所有重做日志組的風險。
備份控制文件非常重要,包括在數據庫最初始狀態和每次對數據庫的物理結構進行變更的情況。結構性變化如下:
l 添加,刪除或重命名數據文件
l 添加或刪除表空間,或更改表空間的讀/寫狀態
l 添加或刪除重做日志文件或重做日志組
備份控制文件的方法在“備份控制文件”中進行了說明。
在使用CREATE DATABASE語句創建數據庫時,控制文件大小由MAXDATAFILES,MAXLOGFILES,MAXLOGMEMBERS,MAXLOGHISTORY和MAXINSTANCES等參數的值決定。增加這些參數的值會增加相關數據庫的控制文件的大小。
本章節描述創建控制文件的方法,包括如下主題:
l 創建初始化控制文件
l 添加額外副本,重命名和移動控制文件
l 創建新的控制文件
當你執行CREATE DATABSE語句時,數據庫會自動創建初始化控制文件。控制文件的名字通過參數文件中的CONTROL_FILES參數指定,在CONTROL_FILES參數中需要指定控制文件名為全路徑,具體到操作系統。以下是CONTROL_FILES初始化參數的例子:
如果你在創建數據庫過程中,指定的控制文件名已存在,那必須在CREATE DATABASE語句中使用CONTROLFILE REUSE子句,否則會提示錯誤。同時,如果舊控制文件和參數中指定的控制文件大小不一致,那么不能使用REUSE子句。
在不同Oracle數據庫發行版之間,控制文件大小和數量會有所不同。通過配置MAXDATAFILES,MAXLOGFILES,MAXLOGMEMBERS,MAXLOGHISTORY和MAXINSTANCES等參數可以影響控制文件的大小。
你可以后續再修改CONTROL_FILES 參數值,以添加控制文件,修改控制文件名或者移動已有控制文件的位置。
你可以通過拷貝一個已有的控制文件到新的路徑下然后修改CONTROL_FILES參數的方式添加控制文件備份。類似的,你也可以通過修改控制文件名或者將控制文件移動到其他路徑的方式對控制文件重命名。在上述兩種情況下,為了保證控制文件的一致性,請在拷貝控制文件前將數據庫關閉。
添加一個控制文件備份或者重命名一個控制文件的方法:
1.關閉數據庫
2.使用操作系統命令將已有控制文件拷貝至一個新的路徑下
3.編輯初始化參數文件中的CONTROL_FILES 參數值,添加一個新的控制文件名或者修改已有控制文件名。
4.重啟數據庫
本節討論何時以及如何創建新的控制文件。
在下列這些情況下,你需要創建新的控制文件:
l 在沒有控制文件備份的情況下,數據庫的所有控制文件都永久損壞
l 你想要修改數據庫名
比如,在分布式環境中,你想修改一個和其他數據庫名稱沖突的數據庫名。
注意:
你可以使用DBNEWID應用程序更改數據庫名稱和DBID(數據庫內部標識符)。
l 當兼容性級別設置為早于10.2.0的值,你必須對數據庫配置的一個區域進行更改,且該配置與CREATE DATABASE或CREATE CONTROLFILE命令中下列任一參數相關:MAXLOGFILES,MAXLOGMEMBERS,MAXLOGHISTORY 和MAXINSTANCES。如果兼容性為10.2.0或更高版本,則在進行此更改時不必創建新的控制文件; 如果需要,控制文件會自動擴展,以適應新的配置信息。
例如,假設創建數據庫或重新創建控制文件時,將MAXLOGFILES設置為3。假設現在要使用ALTER DATABASE命令將第四個重做日志文件組添加到數據庫。如果兼容性設置為10.2.0或更高版本,你可以這樣做并且控制文件會自動擴展以適應新的日志文件信息。但是,如果兼容性設置早于10.2.0,你的ALTER DATABASE命令將生成錯誤,你必須先創建新的控制文件。
你可以使用CREATE CONTROLFILE語句為數據庫創建一個新的控制文件。下列語句為prod數據庫(以前使用不同數據庫名稱的數據庫)創建一個新的控制文件:
如果數據庫是打開的,盡可能正常關閉數據庫。IMMEDIATE或者ABORT子句只能作為最后的手段使用。
3.備份數據庫的所有數據文件和重做日志文件。
4.啟動一個新的實例,但不要掛載或打開數據庫:
7.編輯數據庫的CONTROL_FILES初始化參數,指定為步驟5中創建的數據庫所有控制文件(不包括備份控制文件)。如果要重命名數據庫,請編輯實例參數文件中的DB_NAME參數以指定新名稱。
8.必要時進行數據庫恢復。如果你沒有恢復數據庫,請跳到步驟9。
如果你正在創建控制文件作為恢復的一部分,請恢復數據庫。如果使用NORESETLOGS子句(步驟5)創建了新的控制文件,則可以使用完整的,關閉的數據庫進行恢復。
如果新的控制文件是使用RESETLOGS子句創建的,則必須指定USING BACKUP CONTROL FILE。 如果你丟失了在線或存檔的重做日志或數據文件,請使用恢復這些文件的步驟。
9.使用下列方法之一打開數據庫:
l 如果你沒有執行恢復,或者在步驟8執行完整的,關閉的數據庫恢復,請正常打開數據庫。
數據庫現已打開并可用。
執行CREATE CONTROLFILE語句后,你可能會遇到一些錯誤。本節介紹最常見的控制文件錯誤:
l 檢查丟失或額外的文件
l 在CREATE CONTROLFILE期間處理錯誤
在創建完一個新的控制文件并用它打開數據庫后,檢查告警日志以查看數據庫是否檢測到數據字典與控制文件不一致,例如數據字典中的數據文件在控制文件中找不到。
如果控制文件中不存在數據字典中列出的數據文件,則數據庫將以名稱MISSINGnnnn在控制文件中創建一個占位符條目,其中nnnn是十進制的文件編號。MISSINGnnnn在控制文件中被標記為脫機并需要介質恢復。
如果MISSINGnnnn對應的實際數據文件為只讀或脫機正常,則可以通過將MISSINGnnnn重命名為實際數據文件的名稱來使數據文件可訪問。如果MISSINGnnnn對應不是只讀或脫機正常的數據文件,則不能使用重命名操作來使數據文件可訪問,因為數據文件被RESETLOGS的結果排除,需要進行介質恢復。在這種情況下,你必須刪除包含數據文件的表空間。
相反的,如果數據字典中不存在控制文件中列出的數據文件,則數據庫將在新的控制文件中刪除對數據文件的引用。在這兩種情況下,數據庫都會在告警日志中生成一條解釋性消息,讓你知道數據庫做了什么。
如果在創建新的控制文件后嘗試掛載和打開數據庫時,Oracle數據庫會向你發送錯誤(通常為ORA-01173,ORA-01176,ORA-01177,ORA-01215或ORA-01216),因為你在CREATE CONTROLFILE語句中省略了一個文件,或者包含不應列出的文件。在這種情況下,你應該恢復在步驟3中備份的文件,并使用正確的文件名重復步驟4中的過程。
使用ALTER DATABASE BACKUP CONTROLFILE語句備份你的控制文件。你有兩個選擇:
l 使用下列語句將控制文件備份到二進制文件(現有控制文件的副本):
l 生成可以用于重新創建控制文件的SQL語句:
本節介紹如何從當前備份或多路復用中恢復控制文件。
此過程假定CONTROL_FILES參數中指定的控制文件之一已損壞,控制文件目錄仍可訪問,并且具有控制文件的多路復用。
1.在實例關閉時,使用操作系統命令用正常的副本覆蓋異常的控制文件:
2.啟動SQL * Plus并打開數據庫:
此過程假定由于永久介質故障,并且您具有控制文件的復用副本,CONTROL_FILES參數中指定的控制文件之一是無法訪問的。
1.在實例關閉時,使用操作系統命令將控制文件的當前副本復制到新的可訪問位置:
2.編輯初始化參數文件中的CONTROL_FILES參數,用新的位置替換異常的位置:
3.啟動SQL * Plus并打開數據庫:
如果您有復用控制文件,可以通過編輯CONTROL_FILES初始化參數來快速啟動數據庫。從CONTROL_FILES配置中刪除異常控制文件,您可以立即重新啟動數據庫。然后,您可以執行異常控制文件的重建,然后再編輯CONTROL_FILES初始化參數以包括恢復的控制文件,再關閉并重新啟動數據庫。
您想要從數據庫中刪除控制文件,例如,如果控制文件的位置不再合適。請記住,數據庫始終至少應有兩個控制文件。
1.關閉數據庫。
2.編輯數據庫初始化參數文件中的CONTROL_FILES參數,以刪除舊的控制文件名。
3.重新啟動數據庫。
注意:
此操作不會從磁盤中物理刪除不需要的控制文件。從數據庫中刪除控制文件后,使用操作系統命令刪除不必要的文件。
以下視圖顯示有關控制文件的信息:
視圖 |
描述 |
V$DATABASE |
從控制文件顯示數據庫信息 |
V$CONTROLFILE |
列出控制文件的名稱 |
V$CONTROLFILE_RECORD_SECTION |
顯示有關控制文件記錄部分的信息 |
V$PARAMETER |
顯示CONTROL_FILES初始化參數中指定的控制文件的名稱 |
此示例列出了控制文件的名稱:
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。