控制文件用於記錄和維護數據庫的物理結構,當啟動例程並打開數據庫時,oracle會根據初始化參數control files 在例程和數據庫之間建立關聯.裝載數據庫(MOUNT狀態)時,ORACLE會安裝初始化參數control_files定位並打開控制文件和重做日志.
控制文件時oracle數據庫最重要的物理文件.控制文件不僅記載了數據庫的物理結構(數據文件的名稱和位置,重做日志的名稱和位置).裝載和打開數據庫時也需要這些文件,而且它們還記載了日志序列好,檢查點和日志歷史信息.同步和恢復數據庫時需要這些信息.
控制文件主要記載了以下信息
數據庫名稱
數據文件名稱和位置
重做日志名稱和位置
表空間名稱
當前日志序列好
檢查點信息
日志歷史信息
RMAN信息
控制文件主要是由永久參數和RMAN信息組成.
永久參數包括
MAXINSTANCES:用於指定可以同時訪問數據庫的最大例程個數
MAXDATAFILES:用於指定oracle數據庫的最大數據文件個數
MAXLOGFILES:用於指定oracle數據庫的最大日志組個數
MAXLOGMEMBERS:用於指定每個日志組的最大日志成員個數.
MAXLOGHISTORY:用於指定控制文件可記載日志歷史的最大個數.
使用RMAN執行備份操作時,RMAN備份信息會被記載到控制文件中.初始化參數control_file_record_keep_time指定了RMAN備份信息在控制文件中的保留時間,默認值為7.
多元化控制文件
使用PFILE多元化控制文件
如果在啟動例程時使用了pfile,在多元化控制文件時需要手工編輯文本參數文件,並修改初始化參數control_files.具體步驟如下:
1,手工修改初始化參數control_files
Control_files=d:democontrol01.ctl,e:democontrol02.ctl
此時e:democontrol02.ctl文件還不存在.
2,關閉數據庫,
3,復制控制文件
4,啟動數據庫.
因為例程使用PFILE,所以啟動時應該指定PFILE全名
STARTUP PFILE=%oracle_home%databaseinitdemo.ora
使用spfile多元化控制文件
如果啟動例程使用spfile,在多元化控制文件時需要執行ALTER SYSTEM命令修改初始化參數control_files
1,修改初始化參數
C:sqlplus sys/oracle@demo as sysdba
Sql>ALTER SYSTEM SET control_files=
2 ‘d:democontrol01.ctl’,’e:democontrol02.ctl’
3 SCOPE=SPFILE;
此時e:democontrol02.ctl還不存在.
2,關閉數據庫,
3,復制控制文件
4,啟動數據庫.
處理意外丟失的控制文件
多元化控制文件以后,如果某個控制文件丟失或損壞,數據庫將無法裝載,在啟動例程並裝載數據庫時,會報告如下錯誤;
ORA-00205:error in identifying controlfile,check alert log for more info
出現如上錯誤時,應修改初始化參數control_files,去掉損壞或丟失的控制文件,然后重新啟動數據庫.
重建控制文件.
以建立demo數據庫的控制文件為例,說明重新建立控制文件的方法
1,修改初始化參數CONTROL_FILES,改變控制文件的位置.
如果控制文件所在的磁盤出現損壞,那么必須使用ALTER SYSTEM命令改變控制文件的存放位置.當例程處於NOMOUNT狀態時,執行以下命令可以改變控制文件位置.
Alter system set control_files=’c:democontrol01.ctl’,’d:democontrol02.ctl’ scope=spfile;
2,關閉例程
3.啟動例程(startup nomunt)
建立控制文件時,要求例程必須處於NOMOUNT狀態.正確地設置了初始化參數CONTROL_FILES后,玉女國國重新啟動例程,並應檢查初始化參數CONTROL_FILES的設置是否正確.
Startup nomount
Select value FROM v$parameter where name=’control_files’;
4,建立控制文件.
CREATE CONTROLFILE DATABASE demo NORESETLOGS
LOGFILE
GROUP 1 ‘D:DEMOREDO01.LOG’ SIZE 10M,
GROUP 2 ‘D:DEMOREDO02.LOG’ SIZE 10M
DATAFILE
‘D:DEMOSYSTEM01.DBF’,
‘D:DEMOUNDOTBS01.DBF’,
‘D:DEMOSYSAUX01.DBF’
CHARACTER SET ZHS16GBK;
其中,DATABASE用於指定數據庫名,該名稱必須和初始化參數db_name完全一致;
NORESETLOGS用於指定仍然使用原有重做日志,如果不希望使用原有重做日志,可以指定RESETLOGS選項;
LOGFILE用於指定數據庫原有重做日志大組號,尺寸已經對應的日志成員;
DATAFILE用於指定數據庫原有的數據文件
CHAARACETR SET 用於指定數據庫字符集.
5,打開數據庫
Alter database open;
如果建立控制文件時指定了RESETLOGS選項,那么在打開數據庫時必須帶有該選項(格式為ALTER DATABASE OPEN RESETLOGS).
6,增加臨時文件.
打開數據庫后,客戶應用可以執行各種數據庫訪問操作,如果執行排序操作,可能會顯示錯誤信息.為了順利執行排序操作,必須重新建立臨時文件.
Alter tablespace temp add tempfile ‘d:demotemp.dbf’ size 10485760
Reuse autoextend off;
修改永久參數
當某個DBA執行CREATE DATABASE ADD LOGFILE MEMBER為某日志組增加日志成員時,oracle顯示如下錯誤信息:
ALTER DATABASE ADD LOGFILE MEMBER
*
ERROR at line 1:
ORA-00357:too many members specified for log file,the maximum is 2
出現如上錯誤時,表示日志組成員個數超出了永久參數MAXLOGMEMBERS的設置.
在這種情況下,為了給日志組增加多個日志成員,必須修改永久參數MAXLOGMEMBERS.
然后才可以增加多個日志成員.下面以限制DEMO數據庫最多10個日志組,每個日志組最多4個日志成員為例,說明修改永久參數的方法.
1,啟動例程 STARTUP NOMOUNT
2,建立控制文件.
建立控制文件時必須提供正確的數據文件和重做日志清單.因為原有控制文件仍然存在,所有必須指定REUSE選項覆蓋控制文件.
CREATE CONTROLFILE REUSE DATABASE “DEMO” NORESETLOGS
MAXLOGFILES 10
MAXLOGMEMBERS 4
LOGFILE
GROUP 1 ‘D:DEMOREDO01.LOG’ SIZE 10M,
GROUP 2 ‘D:DEMOREDO02.LOG’ SIZE 10M
DATAFILE
‘D:DEMOSYSTEM01.DBF’,
‘D:DEMOUNDOTBS01.DBF’,
‘D:DEMOSYSAUX01.DBF’
CHARACTER SET ZHS16GBK;
3.打開數據庫
Alter database open;
如果建立控制文件時指定了RESETLOGS選項,那么在打開數據庫時必須帶有該選項(格式為ALTER DATABASE OPEN RESETLOGS).
4增加臨時文件.
打開數據庫后,客戶應用可以執行各種數據庫訪問操作,如果執行排序操作,可能會顯示錯誤信息.為了順利執行排序操作,必須重新建立臨時文件.
Alter tablespace temp add tempfile ‘d:demotemp.dbf’ size 10485760
Reuse autoextend off;
修改數據庫名稱
使用CREATE CONTROLFILE命令沖擊建立控制文件.
使用工具DBNEWID改變數據庫名.
下面以DEMO數據庫名稱修改為EXAMPLE為例,說明通過建立控制文件修改數據庫名稱的方法.
1,初始化參數DB_NAME
因為oracle數據庫名稱是通過初始化參數db_name來標識的,所有在建立控制文件之前,必須正確的設置該參數.需要注意,因為初始化參數DB_NAME不能使用ALTER SYSTEM命令進行修改,所以必須建立PFILE,然后修改參數DB_NAME.最后使用該PFILE重新建立SPFILE
建立PFILE文件:SQL>CREATE PFILE FROM SPFILE;
編輯PFILE文件initdemo.ora,修改參數DB_NAME:db_name=example
建立臨時的SPFILE文件.
因為當前例程使用的SPFILE文件不能覆蓋,所有執行CREATE SPFILE是應該指定一個臨時的SPFILE文件.示例如下:
CREATE SPFILE=’ORACLE_HOME%databasespfiletemp.ora’ from
PFILE=’%ORACLE_HOME%databaseinitdemo.ora’;
2,關閉oracle數據庫.
關閉oracle數據庫后,為了使用新的spfile文件,應該使用OS命令刪除原來的SPFILE文件,然后將臨時spfile文件修改為spfiledemo.ora
3,啟動例程.
建立控制文件必須在nomount狀態下進行,所以必須啟動例程.啟動例程后還應該初始化參數DB_NAME設置是否正確
STARTUP NOMOUNT
SELECT value FROM v$parameter WHERE name=’db_name’;
4,建立控制文件.
因為要修改數據庫名稱,所有建立控制文件時必須指定SET DATABASE選項和RESETLOGS選項.因為原有控制文件仍然存在,所有必須指定REUSE選項覆蓋控制文件
CREATE CONTROLFILE REUSE SET DATABASE “EXAMPLE” RESETLOGS
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 454
LOGFILE
GROUP 1 ‘D:DEMOREDO01.LOG’ SIZE 10M,
GROUP 2 ‘D:DEMOREDO02.LOG’ SIZE 10M
DATAFILE
‘D:DEMOSYSTEM01.DBF’,
‘D:DEMOUNDOTBS01.DBF’,
‘D:DEMOSYSAUX01.DBF’
CHARACTER SET ZHS16GBK;
5,打開數據庫
Alter database open;
如果建立控制文件時指定了RESETLOGS選項,那么在打開數據庫時必須帶有該選項(格式為ALTER DATABASE OPEN RESETLOGS).
6,增加臨時文件.
打開數據庫后,客戶應用可以執行各種數據庫訪問操作,如果執行排序操作,可能會顯示錯誤信息.為了順利執行排序操作,必須重新建立臨時文件.
Alter tablespace temp add tempfile ‘d:demotemp.dbf’ size 10485760
Reuse autoextend off;
刪除控制文件
使用ALTER SYSTEM命令修改初始化參數
Alter system set control_files=’d:democontrol01.ctl’ scope=spfile;然后重新啟動數據庫
查看控制文件的信息
1,顯示控制文件名稱.
Select * from v$controlfile;
2, 顯示初始化參數control_files
Select value from v$parameter where name=’control_files’;
3,獲得控制文件不同部分的信息.
Col type format a20
Select type,record_size,records_total,records_used from v$controlfile_record_section;
其中,type用於標識特定記錄類型,record_size用於標識每條記錄所占用的字節數,
RECORDS_TOTAL用於標識記錄的最大條數,RECORDS_USED用於標識已占用記錄條數.