oracle 11G R2控制文件的管理


 

控制文件

每一個數據庫都有一個控制文件,它是一個二進制數據文件,它記錄了數據庫的物理結構。控制文件數據庫一個重要參數文件,在寫數據時,控制文件必須是可用的狀態。控制文件包括如下信息:

1. 記錄數據庫名稱

2. 數據文件與重做日志文件的名稱與存儲位置

3. 數據庫創建時間

4. 當前log的SN

5. 檢查點信息

控制文件管理

  如下信息介紹控制文件,了解控制文件。

控制文件名稱

  你使用初始化參數文件中的參數control_files命名控制文件名稱。可以使用show parameter control_fils參數查看。

多路控制文件

在初始化參數文件中,我們可以設置多個控制文件,多個控制文件的內容是完全相同的。 而每一個數據庫至少有兩個控制文件。

多個控制文件的操作是:

n 數據庫寫入所有在初始化參數中命名的文件名稱

n 數據庫只讀在初始化參數中顯示的第一個控制文件

n 當數據庫在執行時,所有的控制文件都不可用時,實例就變得不可用並退出

初始化參數中的控制文件命名

control_files=('c:\app\administrator\product\11.2.0\Ora_home\database\control01.ctl', 'D:\app\Administrator\control\control02.ctl')

備份控制文件

  當你做如下操作是建議備份控制文件

1. 添加,輸出,重新命名數據文件

2. 添加,刪除表空間,改變表空間的狀態

3. 添加,刪除重做日志與組

恢復控制文件

 

創建初始化控制文件

  當創建oracle數據庫時,初始化控制文件一並被創建。控制文件的名稱與位置受初始化參數control_files確定。

控制文件的復制,重命名以及文件位置的修改

  對當前控制文件的復制(復制后,能夠看到新的控制文件,就相當於實現控制文件的增加),重命名以及控制文件位置的修改步驟如下

1)關閉數據庫

2)復制已經存在的文件到新的存儲位置

3)編輯control_files參數,

4)重啟數據庫

創建新的控制文件

重建控制文件的前提

a) 控制文件已經被破壞,而且不能夠恢復

b) 重命名數據庫

重建控制文件的步驟是:

Ø 為數據庫的數據文件與重做日志文件創建一個清單,也就是說,在重建控制文件之前,你需要了解數據文件與重做日志文件的位置!

Ø 關閉數據庫

Ø 備份數據庫數據文件與重做日志文件

Ø 啟動數據庫實例,數據庫並不處於加載或打開狀態(mount 與open)

Ø 使用create controlfile 表達式創建控制文件

Ø 存放新控制文件的備份到其它存放設備

Ø 編輯初始化參數的控制文件信息 control_files

Ø 恢復數據庫(可選)

Ø 打開數據庫

重建控制文件參數

1. Logfile位置

2. Datafile位置

3. 正確的字符集

4. MAXLOGFILE

5. MAXLOGMEMBER

6. MAXLOGHISTORY

7. MAXDATAFILES

8. MAXINSTANCES

9. ARCHIVELOG

清除控制文件

清除控制文件可以參考刪除控制文件,詳細步驟入下:

1. 關閉數據庫

2. 修改初始化參數控制文件名稱並刪除舊的控制文件

3. 刪除物理文件

4. 重啟數據庫

控制文件常用的視圖

V$database;

V$controlfile;

V$controlfile_record_section;

V$parameter

實例測試

1.了解控制文件名稱。

通過show parameter control_files,了解控制文件的名稱與控制文件的位置,這個參數是初始化參數control_files中設定。

SQL> show parameter control_files

NAME TYPE VALUE

--------------------------

control_files string C:\APP\ADMINISTRATOR\PRODUCT\1

1.2.0\DBHOME_1\DATABASE\CONTROL01.CTL, C:\APP\ADMINISTRATOR\

PRODUCT\11.2.0\DBHOME_1\DATABASE\CONTROL02.CTL

SQL>

2. 增加/刪除控制文件並修改初始化參數

*******************************************************************************

增加控制文件步驟

1)copy一個控制文件

SQL> host copy C:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\CONTROL01.CTL C:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\CONTROL03.CTL

1 file(s) copied.

2)顯示控制文件

SQL> host dir C:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\ # 顯示文件

Volume in drive C has no label.

Volume Serial Number is 349C-76EF

Directory of C:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE

05/09/2017 05:22 PM <DIR> .

05/09/2017 05:22 PM <DIR> ..

04/15/2017 11:45 AM <DIR> archive

05/09/2017 03:56 PM 7,553,024 CONTROL01.CTL

05/09/2017 03:56 PM 7,553,024 CONTROL02.CTL

05/09/2017 03:56 PM 7,553,024 CONTROL03.CTL

04/22/2017 12:17 PM 2,048 hc_new02.dat

04/15/2017 12:01 PM 2,048 hc_newdb.dat

04/17/2017 11:10 PM 3,161 initnewdb.ora

04/15/2017 11:58 AM 3,058 initnewdb.ora.bak.win-db

05/09/2017 03:56 PM 1,073,750,016 NEWDB01.DBF

12/22/2005 08:07 PM 31,744 oradba.exe

…….

05/09/2017 03:56 PM 1,073,750,016 USERS01.DBF

20 File(s) 3,857,721,035 bytes

3 Dir(s) 30,806,429,696 bytes free

 

3) 使用命令alter system 命令修改控制文件名稱

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup nomount

ORACLE instance started.

Total System Global Area 1286066176 bytes

Fixed Size 2254864 bytes

Variable Size 872417264 bytes

Database Buffers 402653184 bytes

Redo Buffers 8740864 bytes

SQL> alter system set control_files='C:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\CONTROL01.CTL','C:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\CONTROL02.CTL','C:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\CONTROL03.CTL' scope=spfile;

System altered.

SQL> alter database mount;

Database altered.

SQL> alter database open;

Database altered.

SQL>

SQL> show parameter control_files

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

control_files string C:\APP\ADMINISTRATOR\PRODUCT\1

1.2.0\DBHOME_1\DATABASE\CONTROL01.CTL,C:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\CONTROL02.CTL

#控制文件還沒有生效

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup

ORACLE instance started.

Total System Global Area 1286066176 bytes

Fixed Size 2254864 bytes

Variable Size 872417264 bytes

Database Buffers 402653184 bytes

Redo Buffers 8740864 bytes

ORA-00214: control file 'C:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\CONTROL01.CTL' version 1577 inconsistent with file 'C:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\CONTROL03.CTL'

version 1559

#再次啟動,發現控制文件不一致,數據庫處於nomount 狀態

SQL> select open_mode from v$database;

select open_mode from v$database

*

ERROR at line 1:

ORA-01507: database not mounted

ERROR at line 1:

ORA-01507: database not mounted

SQL> alter database mount;

alter database mount

*

ERROR at line 1:

ORA-00214: control file 'C:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\CONTROL01.CTL' version 1577 inconsistent with file 'C:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\CONTROL03.CTL'

version 1559

4) 不一致的解決辦法,重新copy一次

SQL> host copy C:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\CONTROL01.CTL C:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\CONTROL03.CTL

1 file(s) copied.

SQL> alter database mount;

Database altered.

SQL> alter database open

2 ;

Database altered.

SQL> show parameter control_files;

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

control_files string C:\APP\ADMINISTRATOR\PRODUCT\1

1.2.0\DBHOME_1\DATABASE\CONTROL01.CTL, C:\APP\ADMINISTRATOR\

PRODUCT\11.2.0\DBHOME_1\DATABASE\CONTROL02.CTL, C:\APP\ADMIN

ISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\CONTROL03.CTL

SQL>

經驗:為了解決控制文件一致性問題,可以在關閉數據庫后,再復制控制文件,在startup nomout 修改控制文件,重啟數據庫,就可以看到數據庫已經增加控制文件了。

*******************************************************************************

刪除控制文件

*******************************************************************************

1) 修改初始化參數文件

SQL> alter system set control_files='C:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\CONTROL01.CTL','C:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\CONTROL02.CTL' scope=spfile;

System altered.

2) 重啟數據庫

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup

ORACLE instance started.

Total System Global Area 1286066176 bytes

Fixed Size 2254864 bytes

Variable Size 872417264 bytes

Database Buffers 402653184 bytes

Redo Buffers 8740864 bytes

Database mounted.

Database opened.

SQL> show parameter control_files

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

control_files string C:\APP\ADMINISTRATOR\PRODUCT\1

1.2.0\DBHOME_1\DATABASE\CONTROL01.CTL, C:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\CONTROL02.CTL

SQL>

3)刪除物理文件

SQL> host del C:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\CONTROL04.CTL /q

*******************************************************************************

3. 備份控制文件

1. 使用rman 備份

*******************************************************************************

C:\Users\Administrator>set oracle_sid=newdb

C:\Users\Administrator>rman target /

Recovery Manager: Release 11.2.0.3.0 - Production on Sat May 13 10:55:49 2017

Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.

connected to target database: NEWDB (DBID=3181730330)

RMAN> show all;

RMAN> backup current controlfile;

Starting backup at 13-MAY-17

allocated channel: ORA_DISK_1

channel ORA_DISK_1: SID=27 device type=DISK

channel ORA_DISK_1: starting full datafile backup set

channel ORA_DISK_1: specifying datafile(s) in backup set

including current control file in backup set

channel ORA_DISK_1: starting piece 1 at 13-MAY-17

channel ORA_DISK_1: finished piece 1 at 13-MAY-17

piece handle=C:\APP\ADMINISTRATOR\FLASH_RECOVERY_AREA\NEWDB\BACKUPSET\2017_05_13\O1_MF_NCNNF_TAG20170513T105702_DKDXKM1C_.BKP tag=TAG20170513T105702 comment=NONE

channel ORA_DISK_1: backup set complete, elapsed time: 00:00:10

Finished backup at 13-MAY-17

RMAN>

*******************************************************************************

使用命令alter database backup controlfile to命令

*******************************************************************************

二進制方式備份

SQL> alter database backup controlfile to 'c:\controlfile.bkp';

Database altered.

以sql 語句方式備份,方便重建

SQL> alter database backup controlfile to trace as 'c:\01.sql';

Database altered.

*******************************************************************************

4. 恢復控制文件

對恢復控制文件的操作,需要數據庫在未加載狀態執行,這里做一個簡單介紹

SQL>startup nomount;

SQL>restore controlfile from'c:\controlfile.bkp';

5. 查看控制文件視圖

*******************************************************************************

SQL> select * from v$controlfile;

STATUS NAME IS_ BLOCK_SIZE FILE_SIZE_BLKS

------- ------------------------------------------------------------ --- ---------- --------------

C:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\CONTRO NO 16384 460

L01.CTL

C:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\CONTRO NO 16384 460

L02.CTL

SQL>


免責聲明!

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



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