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