【翻譯】控制檔案管理(Managing Control Files)

neverinit發表於2017-08-16
原文所在的連結為:

1. 控制檔案管理

章節內容:

什麼是控制檔案

控制檔案指南

建立控制檔案

建立控制檔案後的疑難解答

備份控制檔案

使用當前副本恢復控制檔案

刪除控制檔案

控制檔案資料字典檢視

1.1. 什麼是控制檔案

每個Oracle資料庫都有一個控制檔案,它是一個小二進位制檔案,用於記錄資料庫的物理結構。控制檔案中包含下列內容:

資料庫名稱

關聯資料檔案和重做日誌檔案的名稱和位置

資料庫建立的時間戳

當前日誌序列號

檢查點資訊

當資料庫開啟時,Oracle資料庫伺服器對控制檔案必須是可寫的。沒有控制檔案,資料庫將會無法掛載,並且恢復困難。

Oracle資料庫的控制檔案與資料庫同時建立。預設情況下,在建立資料庫期間至少會建立一個控制檔案副本。在某些作業系統上,預設是建立多個副本。你應該在資料庫建立過程中建立兩個或多個控制檔案副本。如果你丟失了控制檔案或想要更改控制檔案中的特定資訊,也可以稍後建立控制檔案。

1.2. 控制檔案指南

本節介紹管理資料庫控制檔案的準則,其中包含以下主題:

指定控制檔案的檔名

控制檔案在不同磁碟上的多路複用

備份控制檔案

管理控制檔案的大小

1.2.1. 指定控制檔案的檔名

你可以使用資料庫初始化引數檔案中的CONTROL_FILES初始化引數指定控制檔名。資料庫例項在資料庫啟動過程中識別並開啟CONTROL_FILES引數中列出的控制檔案,並在資料庫操作過程中寫入和維護這些控制檔案。

如果在建立資料之前未指定CONTROL_FILES的檔案:

如果不使用OMFOracle Managed Files),則資料庫將建立一個控制檔案並使用預設檔名,預設名稱和作業系統相關。

如果使用OMFOracle Managed Files),那麼OMF的初始化引數將指定控制檔案的名稱和位置。

如果使用Oracle自動儲存管理(Oracle ASM),則可以將部分Oracle ASM檔名配置在DB_CREATE_FILE_DESTDB_RECOVERY_FILE_DEST初始化引數中。然後,Oracle ASM會在相應的位置自動建立控制檔案。

1.2.2. 控制檔案在不同磁碟上的多路複用

每個Oracle資料庫應至少有兩個控制檔案,每個控制檔案儲存在不同的物理磁碟上。如果控制檔案由於磁碟故障而損壞,則關聯的例項必須關閉。當磁碟修復完畢後,可以使用其他磁碟上的控制檔案的完整副本來還原損壞的控制檔案,然後可以重新啟動例項。在這種情況下,不需要進行介質恢復。

在多路複用控制檔案下,資料庫進行如下操作:

資料庫寫入初始化引數CONTROL_FILES列出的所有控制檔名。

在資料庫操作期間,資料庫只讀取CONTROL_FILES引數中列出的第一個檔案。

如果任何控制檔案在資料庫操作期間變得不可用,則資料庫例項將變得不可用,操作應該被中止。

注意:

Oracle強烈建議你的資料庫至少有兩個控制檔案,並且它們位於獨立的物理磁碟上。

如果重做日誌是多路複用的,可以將控制檔案副本放在重做日誌組成員所在的每個磁碟上,實現對控制檔案的多路複用。透過在這些位置儲存控制檔案,可以最大限度地減少在磁碟故障中丟失所有控制檔案和所有重做日誌組的風險。

1.2.3. 備份控制檔案

備份控制檔案非常重要,包括在資料庫最初始狀態和每次對資料庫的物理結構進行變更的情況。結構性變化如下:

新增,刪除或重新命名資料檔案

新增或刪除表空間,或更改表空間的讀/寫狀態

新增或刪除重做日誌檔案或重做日誌組

備份控制檔案的方法在“備份控制檔案”中進行了說明。

1.2.4. 管理控制檔案的大小

在使用CREATE DATABASE語句建立資料庫時,控制檔案大小由MAXDATAFILESMAXLOGFILESMAXLOGMEMBERSMAXLOGHISTORYMAXINSTANCES等引數的值決定。增加這些引數的值會增加相關資料庫的控制檔案的大小。

1.3. 建立控制檔案

本章節描述建立控制檔案的方法,包括如下主題:

建立初始化控制檔案

新增額外副本,重新命名和移動控制檔案

建立新的控制檔案

1.3.1. 建立初始化控制檔案

當你執行CREATE DATABSE語句時,資料庫會自動建立初始化控制檔案。控制檔案的名字透過引數檔案中的CONTROL_FILES引數指定,在CONTROL_FILES引數中需要指定控制檔名為全路徑,具體到作業系統。以下是CONTROL_FILES初始化引數的例子:

  1. CONTROL_FILES = (/u01/oracle/prod/control01.ctl,
  2.                  /u02/oracle/prod/control02.ctl,
  3.                  /u03/oracle/prod/control03.ctl)


如果你在建立資料庫過程中,指定的控制檔名已存在,那必須在CREATE DATABASE語句中使用CONTROLFILE REUSE子句,否則會提示錯誤。同時,如果舊控制檔案和引數中指定的控制檔案大小不一致,那麼不能使用REUSE子句。

在不同Oracle資料庫發行版之間,控制檔案大小和數量會有所不同。透過配置MAXDATAFILESMAXLOGFILESMAXLOGMEMBERSMAXLOGHISTORYMAXINSTANCES等引數可以影響控制檔案的大小。

你可以後續再修改CONTROL_FILES 引數值,以新增控制檔案,修改控制檔名或者移動已有控制檔案的位置。

1.3.2. 新增額外副本,重新命名和移動控制檔案

你可以透過複製一個已有的控制檔案到新的路徑下然後修改CONTROL_FILES引數的方式新增控制檔案備份。類似的,你也可以透過修改控制檔名或者將控制檔案移動到其他路徑的方式對控制檔案重新命名。在上述兩種情況下,為了保證控制檔案的一致性,請在複製控制檔案前將資料庫關閉。

新增一個控制檔案備份或者重新命名一個控制檔案的方法:

1.關閉資料庫

2.使用作業系統命令將已有控制檔案複製至一個新的路徑下

3.編輯初始化引數檔案中的CONTROL_FILES 引數值,新增一個新的控制檔名或者修改已有控制檔名。

4.重啟資料庫

1.3.3. 建立新的控制檔案

本節討論何時以及如何建立新的控制檔案。

1.3.3.1. 何時建立新的控制檔案

在下列這些情況下,你需要建立新的控制檔案:

在沒有控制檔案備份的情況下,資料庫的所有控制檔案都永久損壞

你想要修改資料庫名

比如,在分散式環境中,你想修改一個和其他資料庫名稱衝突的資料庫名。


注意:

你可以使用DBNEWID應用程式更改資料庫名稱和DBID(資料庫內部識別符號)。

當相容性級別設定為早於10.2.0的值,你必須對資料庫配置的一個區域進行更改,且該配置與CREATE DATABASECREATE CONTROLFILE命令中下列任一引數相關:MAXLOGFILESMAXLOGMEMBERSMAXLOGHISTORY MAXINSTANCES。如果相容性為10.2.0或更高版本,則在進行此更改時不必建立新的控制檔案; 如果需要,控制檔案會自動擴充套件,以適應新的配置資訊。

例如,假設建立資料庫或重新建立控制檔案時,將MAXLOGFILES設定為3。假設現在要使用ALTER DATABASE命令將第四個重做日誌檔案組新增到資料庫。如果相容性設定為10.2.0或更高版本,你可以這樣做並且控制檔案會自動擴充套件以適應新的日誌檔案資訊。但是,如果相容性設定早於10.2.0,你的ALTER DATABASE命令將生成錯誤,你必須先建立新的控制檔案。

1.3.3.2. CREATE CONTROLFILE語句

你可以使用CREATE CONTROLFILE語句為資料庫建立一個新的控制檔案。下列語句為prod資料庫(以前使用不同資料庫名稱的資料庫)建立一個新的控制檔案:


  1. CREATE CONTROLFILE
  2.    SET DATABASE prod
  3.    LOGFILE GROUP 1 ('/u01/oracle/prod/redo01_01.log',
  4.                     '/u01/oracle/prod/redo01_02.log'),
  5.            GROUP 2 ('/u01/oracle/prod/redo02_01.log',
  6.                     '/u01/oracle/prod/redo02_02.log'),
  7.            GROUP 3 ('/u01/oracle/prod/redo03_01.log',
  8.                     '/u01/oracle/prod/redo03_02.log')
  9.    RESETLOGS
  10.    DATAFILE '/u01/oracle/prod/system01.dbf' SIZE 3M,
  11.             '/u01/oracle/prod/rbs01.dbs' SIZE 5M,
  12.             '/u01/oracle/prod/users01.dbs' SIZE 5M,
  13.             '/u01/oracle/prod/temp01.dbs' SIZE 5M
  14.    MAXLOGFILES 50
  15.    MAXLOGMEMBERS 3
  16.    MAXLOGHISTORY 400
  17.    MAXDATAFILES 200
  18.    MAXINSTANCES 6
  19.    ARCHIVELOG;



注意事項:

CREATE CONTROLFILE語句可能會損壞指定的資料檔案和重做日誌檔案。省略檔名可能導致該檔案中的資料丟失,或丟失對整個資料庫的訪問。發出此宣告時務必小心,請務必按照“建立新控制檔案的步驟”中的說明進行操作。

如果資料庫在建立新的控制檔案之前啟用強制日誌模式,並且希望繼續啟用該模式,則必須在CREATE CONTROLFILE語句中指定FORCE LOGGING子句。

1.3.3.3. 建立新控制檔案的步驟

完成以下步驟來建立一個新的控制檔案。

1.列出資料庫的所有資料檔案和重做日誌檔案。

如果按照“備份控制檔案”中的說明,遵循控制檔案備份的建議,你將會擁有一個反映當前資料庫結構的資料檔案和重做日誌檔案的列表。但是,如果沒有這樣的列表,則執行以下語句生成一個列表。


  1. SELECT MEMBER FROM V$LOGFILE;
  2. SELECT NAME FROM V$DATAFILE;
  3. SELECT VALUE FROM V$PARAMETER WHERE NAME = 'control_files';


如果你沒有這樣的列表,並且你的控制檔案已損壞,從而無法開啟資料庫,請嘗試查詢資料庫的所有資料檔案和重做日誌檔案。建立新的控制檔案後,步驟5中未指定的任何檔案都不可恢復。而且,如果省略組成SYSTEM表空間的任何檔案,則可能無法恢復資料庫。

2.關閉資料庫。

如果資料庫是開啟的,儘可能正常關閉資料庫。IMMEDIATE或者ABORT子句只能作為最後的手段使用。

3.備份資料庫的所有資料檔案和重做日誌檔案。

4.啟動一個新的例項,但不要掛載或開啟資料庫:

  1. STARTUP NOMOUNT


5.使用CREATE CONTROLFILE語句為資料庫建立一個新的控制檔案。

建立新的控制檔案時,如果除了控制檔案之外丟失了任何重做日誌組,請指定RESETLOGS子句。在這種情況下,將需要對丟失的重做日誌進行恢復(步驟8)。如果你已經重新命名資料庫,則必須指定RESETLOGS子句。否則,選擇“NORESETLOGS”子句。

6.將新控制檔案的備份儲存在離線儲存裝置上。有關建立備份的說明,請參閱“備份控制檔案”。

7.編輯資料庫的CONTROL_FILES初始化引數,指定為步驟5中建立的資料庫所有控制檔案(不包括備份控制檔案)。如果要重新命名資料庫,請編輯例項引數檔案中的DB_NAME引數以指定新名稱。

8.必要時進行資料庫恢復。如果你沒有恢復資料庫,請跳到步驟9

如果你正在建立控制檔案作為恢復的一部分,請恢復資料庫。如果使用NORESETLOGS子句(步驟5)建立了新的控制檔案,則可以使用完整的,關閉的資料庫進行恢復。

如果新的控制檔案是使用RESETLOGS子句建立的,則必須指定USING BACKUP CONTROL FILE。 如果你丟失了線上或存檔的重做日誌或資料檔案,請使用恢復這些檔案的步驟。

9.使用下列方法之一開啟資料庫:

如果沒有執行恢復,或者在步驟8執行完整的,關閉的資料庫恢復,請正常開啟資料庫。

  1. ALTER DATABASE OPEN;

如果在建立控制檔案時指定了RESETLOGS,請使用ALTER DATABASE語句,指定RESETLOGS

  1. ALTER DATABASE OPEN RESETLOGS;

資料庫現已開啟並可用。

1.4. 建立控制檔案後的疑難解答

執行CREATE CONTROLFILE語句後,你可能會遇到一些錯誤。本節介紹最常見的控制檔案錯誤:

檢查丟失或額外的檔案

CREATE CONTROLFILE期間處理錯誤

1.4.1. 檢查丟失或額外的檔案

在建立完一個新的控制檔案並用它開啟資料庫後,檢查告警日誌以檢視資料庫是否檢測到資料字典與控制檔案不一致,例如資料字典中的資料檔案在控制檔案中找不到。

如果控制檔案中不存在資料字典中列出的資料檔案,則資料庫將以名稱MISSINGnnnn在控制檔案中建立一個佔位符條目,其中nnnn是十進位制的檔案編號。MISSINGnnnn在控制檔案中被標記為離線並需要介質恢復。

如果MISSINGnnnn對應的實際資料檔案為只讀或離線正常,則可以透過將MISSINGnnnn重新命名為實際資料檔案的名稱來使資料檔案可訪問。如果MISSINGnnnn對應不是隻讀或離線正常的資料檔案,則不能使用重新命名操作來使資料檔案可訪問,因為資料檔案被RESETLOGS的結果排除,需要進行介質恢復。在這種情況下,你必須刪除包含資料檔案的表空間。

相反的,如果資料字典中不存在控制檔案中列出的資料檔案,則資料庫將在新的控制檔案中刪除對資料檔案的引用。在這兩種情況下,資料庫都會在告警日誌中生成一條解釋性訊息,讓你知道資料庫做了什麼。

1.4.2. CREATE CONTROLFILE期間處理錯誤

如果在建立新的控制檔案後嘗試掛載和開啟資料庫時,Oracle資料庫會向你傳送錯誤(通常為ORA-01173ORA-01176ORA-01177ORA-01215ORA-01216),因為你在CREATE CONTROLFILE語句中省略了一個檔案,或者包含不應列出的檔案。在這種情況下,你應該恢復在步驟3中備份的檔案,並使用正確的檔名重複步驟4中的過程。

1.5. 備份控制檔案

使用ALTER DATABASE BACKUP CONTROLFILE語句備份你的控制檔案。你有兩個選擇:

使用下列語句將控制檔案備份到二進位制檔案(現有控制檔案的副本):

  1. ALTER DATABASE BACKUP CONTROLFILE TO'/oracle/backup/control.bkp';

生成可以用於重新建立控制檔案的SQL語句:

  1. ALTER DATABASE BACKUP CONTROLFILE TO TRACE;


此命令將SQL指令碼寫入trace檔案,可以對其進行抓取和編輯以重現控制檔案。透過檢視告警日誌可以確定跟蹤檔案的名稱和位置。

1.6. 使用當前副本恢復控制檔案

本節介紹如何從當前備份或多路複用中恢復控制檔案。

1.6.1. 使用控制檔案副本恢復控制檔案

此過程假定CONTROL_FILES引數中指定的控制檔案之一已損壞,控制檔案目錄仍可訪問,並且具有控制檔案的多路複用。

1.在例項關閉時,使用作業系統命令用正常的副本覆蓋異常的控制檔案:

  1. %cp /u03/oracle/prod/control03.ctl /u02/oracle/prod/control02.ctl

2.啟動SQL * Plus並開啟資料庫:

  1. SQL> STARTUP

1.6.2. 使用控制檔案備份恢復永久介質故障

此過程假定由於永久介質故障,並且您具有控制檔案的複用副本,CONTROL_FILES引數中指定的控制檔案之一是無法訪問的。

1.在例項關閉時,使用作業系統命令將控制檔案的當前副本複製到新的可訪問位置:

  1. %cp /u01/oracle/prod/control01.ctl /u04/oracle/prod/control03.ctl

2.編輯初始化引數檔案中的CONTROL_FILES引數,用新的位置替換異常的位置:


  1. CONTROL_FILES =(/u01/oracle/prod/control01.ctl,
  2.                  /u02/oracle/prod/control02.ctl,
  3.                  /u04/oracle/prod/control03.ctl)


3.啟動SQL * Plus並開啟資料庫:

  1. SQL> STARTUP

如果您有複用控制檔案,可以透過編輯CONTROL_FILES初始化引數來快速啟動資料庫。從CONTROL_FILES配置中刪除異常控制檔案,您可以立即重新啟動資料庫。然後,您可以執行異常控制檔案的重建,然後再編輯CONTROL_FILES初始化引數以包括恢復的控制檔案,再關閉並重新啟動資料庫。

1.7. 刪除控制檔案

您想要從資料庫中刪除控制檔案,例如,如果控制檔案的位置不再合適。請記住,資料庫始終至少應有兩個控制檔案。


1.關閉資料庫。

2.編輯資料庫初始化引數檔案中的CONTROL_FILES引數,以刪除舊的控制檔名。

3.重新啟動資料庫。


注意:

此操作不會從磁碟中物理刪除不需要的控制檔案。從資料庫中刪除控制檔案後,使用作業系統命令刪除不必要的檔案。

1.8. 控制檔案資料字典檢視

以下檢視顯示有關控制檔案的資訊:

檢視

描述

V$DATABASE

從控制檔案顯示資料庫資訊

V$CONTROLFILE

列出控制檔案的名稱

V$CONTROLFILE_RECORD_SECTION

顯示有關控制檔案記錄部分的資訊

V$PARAMETER

顯示CONTROL_FILES初始化引數中指定的控制檔案的名稱


此示例列出了控制檔案的名稱:


  1. SQL> SELECT NAME FROM V$CONTROLFILE;
  2. NAME
  3. -------------------------------------
  4. /u01/oracle/prod/control01.ctl
  5. /u02/oracle/prod/control02.ctl
  6. /u03/oracle/prod/control03.ctl


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31394774/viewspace-2143631/,如需轉載,請註明出處,否則將追究法律責任。

相關文章