1. 程式人生 > 實用技巧 >控制檔案

控制檔案

  1. 控制檔案的功能和特點
    1. 控制檔案是二進位制檔案,不能對正在使用的控制檔案進行編輯
    2. 如果資料庫中控制檔案的版本不同,資料庫是不能正常啟動的-------解決方法:用新版本覆蓋舊版本
    3. 控制檔案定義了資料庫當前的物理狀態
    4. 控制檔案維護了資料的一致‘
    5. 控制檔案在mount階段被讀取
    6. 記錄了RMAN備份的元資料
  2. 相關命令
    1. 檢視控制檔案的位置
      1. SQL> show parameter control_files;
      2. SQL> select name from v$controlfile;
    2. 檢視資料庫例項狀態
      1. SQL> select status from v$instance;
  3. 控制檔案備份
    1. TRACE備份
      1. trace不是備份,嚴格意義上來說是根據現有的二進位制控制檔案生成出來的一份文字型檔案,該檔案中記錄了建立控制檔案的基本資訊。
      2. SQL> alter database backup controlfile to trace; ---- 通過日誌來查詢寫入了哪個trace檔案
      3. SQL> alter database backup controfile to trace as '路徑'----手動指定trace檔案的路徑
      4. 通過trace出來的檔案,主要作用是後期用來手動重建
    2. BINARY備份
      1. 對控制檔案的熱備份
      2. SQL> alter database backup controlfile to '路徑';
      3. 二進位制備份(手工CP、線上熱備),主要用作還原
  4. 資料庫如何開啟歸檔模式(題外話)
    1. 乾淨一致的關閉資料庫 ----- SQL> shutdown immediate;
    2. 將資料庫啟動到mount狀態 ----- SQL> startup mount;
    3. 開啟歸檔模式 ---- SQL> alter database archivelog;
    4. 開啟資料 --- SQL> alter database open;
    5. 注: 開啟歸檔後,預設歸檔路徑的資料夾是不存在的----Archive destination /u01/app/oracle/product/12.2.0/db_1/dbs/arch
  5. 知識點
    1. SQL> alter system switch logfile; ----切換日誌檔案
    2. log_archive_dest_1(引數)-----影響 Archive destination
    3. SQL> show parameter log_archive_dest;
    4. 歸檔路徑一共有31路,(如果是針對本地的,只能用1-10這10個路徑)location
    5. 歸檔路徑一共有31路,(如果是針對遠端的,例如DG環境,必須存在本地路徑)service,如果是針對遠端的,最多可以使用2-31路,一共30個路徑(也就是對應著DG環境一共最多可以有30個備庫)
    6. SQL > alter system set log_archive_dest_1='location=/u01/app/oracle/arch'; -----更改歸檔路徑
    7. 全備份
      1. 備份路徑---[oracle@hansen ~]$ mkdir /u01/app/oracle/backup
      2. RMAN備份--[oracle@hansen ~]$ rman target /
      3. 開始備份---RMAN> backup database format '/u01/app/oracle/backup/%U.full';
  6. 控制檔案丟失
    1. 丟失其中一個------通過其他控制檔案複製一份即可
    2. 全部丟失-----手工重建 ----風險:如果沒有開啟catalog目錄庫,預設使用的就是控制檔案,如果手工重建,元資料丟失

控制檔案實驗

實驗一 :

  1. 關閉資料庫

  2. 將控制檔案複製一份到/tmp/的路徑下

  3. 啟動資料庫

  4. 對控制檔案進行一次線上熱備

  5. 關閉資料庫

  6. 將控制檔案全部移動到/u01/app/oracle/oradata/OCP12C/bak/路徑下

  7. 將/tmp/路徑下控制檔案和線上熱備的控制檔案分別 複製一份到/u01/app/oracle/oradata/OCP12C/路徑下

  8. 啟動資料庫(不能正常啟動,因為兩個控制檔案的版本號不同)

  9. 解決方法:將線上熱備的控制檔案再複製一份覆蓋從/tmp/路徑下複製來的控制檔案,此時可以將資料庫啟動到mount狀態,但依然不能開啟資料庫,將/u01/app/oracle/oradata/OCP12C/bak/路徑下的控制檔案複製到u01/app/oracle/oradata/OCP12C/路徑下,再次啟動資料庫成功

  10. 總結:資料庫啟動到第二階段要載入控制檔案時,發現控制檔案版本號不同,所以報錯,當使用線上熱備的兩份控制檔案時,版本號一致,但資料庫在第二次關閉時,資料檔案頭部也記錄了控制檔案的版本號資訊,此資訊與線上熱備控制檔案版本號資訊不同,所以資料庫只能啟動到mount狀態,不能正常open。在/u01/app/oracle/oradata/OCP12C/bak/路徑下的控制檔案版本號資訊與資料檔案頭部記錄的資訊是一致的,最後成功啟動資料庫。

實驗程式碼:

 1 第一步:
 2 SQL> shutdown immediate
 3 Database closed.
 4 Database dismounted.
 5 ORACLE instance shut down.
 6 第二步:
 7 [oracle@oracle12c OCP12C]$ cp control0* /tmp
 8 第三步:
 9 SQL> startup
10 ORACLE instance started.
11 
12 Total System Global Area 1660944384 bytes
13 Fixed Size            8793448 bytes
14 Variable Size          939524760 bytes
15 Database Buffers      704643072 bytes
16 Redo Buffers            7983104 bytes
17 Database mounted.
18 Database opened.
19 SQL> select status from v$instance;
20 
21 STATUS
22 ------------------------
23 OPEN
24 第四步:
25 SQL> alter database backup controlfile to '/tmp/contorl01.bak';
26 
27 Database altered.
28 第五步:
29 SQL> shutdown immediate
30 Database closed.
31 Database dismounted.
32 ORACLE instance shut down.
33 第六步:
34 [oracle@oracle12c OCP12C]$ mv control0* bak/
35 第七步:
36 [oracle@oracle12c OCP12C]$ cp /tmp/control01.ctl .
37 [oracle@oracle12c OCP12C]$ cp /tmp/contorl01.bak control02.ctl
38 第八步:
39 SQL> startup nomount
40 ORACLE instance started.
41 
42 Total System Global Area 1660944384 bytes
43 Fixed Size            8793448 bytes
44 Variable Size          939524760 bytes
45 Database Buffers      704643072 bytes
46 Redo Buffers            7983104 bytes
47 SQL> alter database mount
48   2  ;
49 alter database mount
50 *
51 ERROR at line 1:
52 ORA-00214: control file '/u01/app/oracle/oradata/OCP12C/control02.ctl' version
53 41363 inconsistent with file '/u01/app/oracle/oradata/OCP12C/control01.ctl'
54 version 41348
55 第九步:
56 [oracle@oracle12c OCP12C]$ cp control02.ctl control01.ctl
57 
58 SQL> alter database mount;
59 
60 Database altered.
61 
62 SQL> alter database open;
63 alter database open
64 *
65 ERROR at line 1:
66 ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
67 
68 
69 SQL> alter database open RESETLOGS;
70 alter database open RESETLOGS
71 *
72 ERROR at line 1:
73 ORA-01152: file 1 was not restored from a sufficiently old backup
74 ORA-01110: data file 1: '/u01/app/oracle/oradata/OCP12C/system01.dbf'
75 第十步:
76 [oracle@oracle12c OCP12C]$ cp bak/control0* .
77 
78 SQL> alter database open;
79 
80 Database altered.
81 
82 SQL> select status  from  v$instance;
83 
84 STATUS
85 ------------------------
86 OPEN
87 
88 SQL>
View Code