Oracle控制文件的介紹


控制文件用於記錄和維護數據庫的物理結構,當啟動例程並打開數據庫時,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=

‘d:democontrol01.ctl’,’e:democontrol02.ctl’

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用於標識已占用記錄條數.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM