番外:Oracle 中關於 Control File 的備份說明


番外系列說明:該系列所有文章都將作為獨立篇章進行知識點講解,是對其他系列博文進行的補充說明,來自於博客園AskScuti

主題關於 Control File 控制文件備份的說明

內容預覽:本篇涉及控制文件作用、多路復用和備份。(控制文件的重建恢復不在本系列,將納入己亥清爽恢復系列)

目錄

1. 控制文件的作用

2. 控制文件的多路復用

  2.1 如何進行多路復用(OCM 11g 考題)

  2.2 最多可進行幾路復用

3. 控制文件的備份

  3.1 TRACE備份

    3.1.1 TRACE默認備份

    3.1.2 TRACE指定路徑備份

  3.2 BINARY備份

 

1. 控制文件的作用

  某某某的作用,這種已經爛大街且千篇一律的理論知識,相信你不感興趣,我也不感興趣。那是從前,從前的事都過去了,因為你遇見了我,這不叫自戀,而是自信。如果你是初學者,記着前面3句話即可,如果有點基礎,記着5句話。

  第 1 句:它是數據庫啟動的第二階段(MOUNT)需要加載讀取的文件。

  第 2 句:它是一個二進制文件,不能直接手工編輯或查看,它很小,但很重要。

  第 3 句:通過它可以查詢當前數據庫的物理狀態。(比如當前實例是STARTED?還是MOUNTED?還是OPEN?)

  第 4 句:它要維護數據的一致性(SCN)。

  第 5 句:它記錄着RMAN備份的元數據。

  不知道什么是元數據?

  在現實生活中:例如一個倉庫的賬本,里面記錄了多少貨架、每個貨架分布的位置、每個貨架每一層放了什么東西等等,這些信息就是這個倉庫的元數據。

  在數據庫中:例如一個數據庫的備份,具體什么時間做的備份、什么形式的備份、生成了幾個備份集、包含多少數據文件、每個備份集幾個備份片、具體路徑在哪里等等,這些信息就是RMAN備份的元數據。

 

2. 控制文件的多路復用

2.1 如何進行多路復用(OCM 11g 考題)

直接引用一道考題做說明:Triplex the contrl file on the PROD1

將PROD1庫的控制文件進行3路復用。

查看當前控制文件路徑:

SQL> show parameter name 

NAME                  TYPE    VALUE
--------------------- ------- ---------
db_file_name_convert  string
db_name               string  PROD1
db_unique_name        string  PROD1
global_names          boolean FALSE
instance_name         string  PROD1
lock_name_space       string
log_file_name_convert string
processor_group_name  string
service_names         string  PROD1

SQL> show parameter control_files
SQL> select name from v$controlfile;

NAME
-------------------------------------------
/u01/app/oracle/oradata/PROD1/control01.ctl
/u01/app/oracle/oradata/PROD1/control02.ctl

更改 control_files 參數:

注意,該參數為動態參數,無法在 memory 中修改,所以scope選項不能是默認both,也不能是memory,只能是spfile。

SQL> alter system set control_files='/u01/app/oracle/oradata/PROD1/control01.ctl','/u01/app/oracle/oradata/PROD1/control02.ctl','/u01/app/oracle/oradata/PROD1/control03.ctl' scope=spfile;

System altered.

干凈一致關閉數據庫:

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

修改(復制)參數對應的物理文件:

SQL> !cp /u01/app/oracle/oradata/PROD1/control01.ctl /u01/app/oracle/oradata/PROD1/control03.ctl

保證參數里面指定的路徑,和物理路徑一致。

啟動數據庫並查詢驗證:

SQL> startup
ORACLE instance started.

Total System Global Area  830930944 bytes
Fixed Size               2232920 bytes
Variable Size            591400360 bytes
Database Buffers         234881024 bytes
Redo Buffers              2416640 bytes
Database mounted.
Database opened.
SQL> show parameter control_files 
SQL> select name from v$controlfile;

NAME
-------------------------------------------
/u01/app/oracle/oradata/PROD1/control01.ctl
/u01/app/oracle/oradata/PROD1/control02.ctl
/u01/app/oracle/oradata/PROD1/control03.ctl

2.2 最多可進行幾路復用

來個9路復用試一下:所有路徑的控制文件內容完全一樣,且多路復用建議每一路放在不同路徑下。

SQL> alter system set control_files='/u01/app/oracle/oradata/PROD1/control01.ctl','/u01/app/oracle/oradata/PROD1/control02.ctl','/u01/app/oracle/oradata/PROD1/control03.ctl','/u01/app/oracle/oradata/PROD1/control04.ctl','/u01/app/oracle/oradata/PROD1/control05.ctl','/u01/app/oracle/oradata/PROD1/control06.ctl','/u01/app/oracle/oradata/PROD1/control07.ctl','/u01/app/oracle/oradata/PROD1/control08.ctl','/u01/app/oracle/oradata/PROD1/control09.ctl' scope=spfile;

System altered.

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> !cp /u01/app/oracle/oradata/PROD1/control01.ctl /u01/app/oracle/oradata/PROD1/control04.ctl

SQL> !cp /u01/app/oracle/oradata/PROD1/control01.ctl /u01/app/oracle/oradata/PROD1/control05.ctl

SQL> !cp /u01/app/oracle/oradata/PROD1/control01.ctl /u01/app/oracle/oradata/PROD1/control06.ctl

SQL> !cp /u01/app/oracle/oradata/PROD1/control01.ctl /u01/app/oracle/oradata/PROD1/control07.ctl

SQL> !cp /u01/app/oracle/oradata/PROD1/control01.ctl /u01/app/oracle/oradata/PROD1/control08.ctl

SQL> !cp /u01/app/oracle/oradata/PROD1/control01.ctl /u01/app/oracle/oradata/PROD1/control09.ctl

SQL> startup
ORACLE instance started.

Total System Global Area  830930944 bytes
Fixed Size               2232920 bytes
Variable Size            591400360 bytes
Database Buffers         234881024 bytes
Redo Buffers              2416640 bytes
ORA-03113: end-of-file on communication channel
Process ID: 5040
Session ID: 1 Serial number: 3

查看告警日志文件:

 1 [oracle@henry trace]$ pwd
 2 /u01/app/oracle/diag/rdbms/prod1/PROD1/trace
 3 [oracle@henry trace]$ tail -f 200 alert_PROD1.log 
 4 tail: cannot open200for reading: No such file or directory
 5 ==> alert_PROD1.log <==
 6 ORACLE_BASE from environment = /u01/app/oracle
 7 Tue May 21 19:44:50 2019
 8 ALTER DATABASE   MOUNT
 9 Errors in file /u01/app/oracle/diag/rdbms/prod1/PROD1/trace/PROD1_ckpt_5026.trc:
10 ORA-00208: number of control file names exceeds limit of 8
11 System state dump requested by (instance=1, osid=5026 (CKPT)), summary=[abnormal instance termination].
12 System State dumped to trace file /u01/app/oracle/diag/rdbms/prod1/PROD1/trace/PROD1_diag_5014.trc
13 Dumping diagnostic data in directory=[cdmp_20190521194450], requested by (instance=1, osid=5026 (CKPT)), summary=[abnormal instance termination].
14 CKPT (ospid: 5026): terminating the instance due to error 208
15 Instance terminated by CKPT, pid = 5026

看下第10行:ORA-00208: number of control file names exceeds limit of 8

所以,控制文件多路復用最多為“八路軍 - 鐵流兩萬五千里,直向着一個堅定的方向!苦斗十年鍛煉成一支不可戰勝的力量。”!

再來看下官方文檔 11g Release 2 (11.2) Database Reference 對此參數的描述:

CONTROL_FILES

Range of values1 to 8 filenames

 

3. 控制文件的備份

3.1 TRACE備份

  需要知道的是,嚴格意義上來說,這不是控制文件的備份,而是根據當前控制文件生成了一份 trace 跟蹤文件,該文件里面記錄了數據庫結構的基本信息,而且trace出來的文件是可以直接查看的

3.1.1 TRACE默認備份

SQL> alter database backup controlfile to trace;

Database altered.

默認情況下,放哪里了?可以根據日志文件查看到:

1 Tue May 21 20:07:53 2019
2 alter database backup controlfile to trace
3 Backup controlfile written to trace file /u01/app/oracle/diag/rdbms/prod1/PROD1/trace/PROD1_ora_6647.trc 4 Completed: alter database backup controlfile to trace

這個路徑可以通過參數 dump 查詢到:

SQL> show parameter dump

NAME                  TYPE   VALUE
--------------------- ------ ----------------------------
background_core_dump  string partial
background_dump_dest  string /u01/app/oracle/diag/rdbms/prod1/PROD1/trace
core_dump_dest        string /u01/app/oracle/diag/rdbms/prod1/PROD1/cdump
max_dump_file_size    string unlimited
shadow_core_dump      string partial
user_dump_dest        string /u01/app/oracle/diag/rdbms/prod1/PROD1/trace

查看下里面的內容:trace出來的控制文件,可以編輯或查看,原控制文件是不可編輯或查看的。

*** 2019-05-21 20:07:53.396
-- The following are current System-scope REDO Log Archival related
-- parameters and can be included in the database initialization file.
--
-- LOG_ARCHIVE_DEST=''
-- LOG_ARCHIVE_DUPLEX_DEST=''
--
-- LOG_ARCHIVE_FORMAT=%t_%s_%r.dbf
--
-- DB_UNIQUE_NAME="PROD1"
--
-- LOG_ARCHIVE_CONFIG='SEND, RECEIVE, NODG_CONFIG'
-- LOG_ARCHIVE_MAX_PROCESSES=4
-- STANDBY_FILE_MANAGEMENT=MANUAL
-- STANDBY_ARCHIVE_DEST=?/dbs/arch
-- FAL_CLIENT=''
-- FAL_SERVER=''
--
-- LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/archive1'
-- LOG_ARCHIVE_DEST_1='OPTIONAL REOPEN=300 NODELAY'
-- LOG_ARCHIVE_DEST_1='ARCH NOAFFIRM NOEXPEDITE NOVERIFY SYNC'
-- LOG_ARCHIVE_DEST_1='REGISTER NOALTERNATE NODEPENDENCY'
-- LOG_ARCHIVE_DEST_1='NOMAX_FAILURE NOQUOTA_SIZE NOQUOTA_USED NODB_UNIQUE_NAME'
-- LOG_ARCHIVE_DEST_1='VALID_FOR=(PRIMARY_ROLE,ONLINE_LOGFILES)'
-- LOG_ARCHIVE_DEST_STATE_1=ENABLE
--
-- Below are two sets of SQL statements, each of which creates a new
-- control file and uses it to open the database. The first set opens
-- the database with the NORESETLOGS option and should be used only if
-- the current versions of all online logs are available. The second
-- set opens the database with the RESETLOGS option and should be used
-- if online logs are unavailable.
-- The appropriate set of statements can be copied from the trace into
-- a script file, edited as necessary, and executed when there is a
-- need to re-create the control file.
--
--     Set #1. NORESETLOGS case
--
-- The following commands will create a new control file and use it
-- to open the database.
-- Data used by Recovery Manager will be lost.
-- Additional logs may be required for media recovery of offline
-- Use this only if the current versions of all online logs are
-- available.
-- After mounting the created controlfile, the following SQL
-- statement will place the database in the appropriate
-- protection mode:
--  ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "PROD1" NORESETLOGS  ARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 '/u01/app/oracle/oradata/PROD1/redo01.log'  SIZE 50M BLOCKSIZE 512,
  GROUP 2 '/u01/app/oracle/oradata/PROD1/redo02.log'  SIZE 50M BLOCKSIZE 512,
  GROUP 3 '/u01/app/oracle/oradata/PROD1/redo03.log'  SIZE 50M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
  '/u01/app/oracle/oradata/PROD1/system01.dbf',
  '/u01/app/oracle/oradata/PROD1/sysaux01.dbf',
  '/u01/app/oracle/oradata/PROD1/undotbs01.dbf',
  '/u01/app/oracle/oradata/PROD1/users01.dbf',
  '/u01/app/oracle/oradata/PROD1/example01.dbf',
  '/u01/app/oracle/oradata/PROD1/abc01.dbf',
  '/u01/app/oracle/oradata/PROD1/abcd01.dbf',
  '/u01/app/oracle/oradata/PROD1/tbs_c01.dbf',
  '/u01/app/oracle/oradata/PROD1/aaa01.dbf',
  '/u01/app/oracle/oradata/PROD1/aaa02.dbf'
CHARACTER SET AL32UTF8
;
-- Commands to re-create incarnation table
-- Below log names MUST be changed to existing filenames on
-- disk. Any one log file from each branch can be used to
-- re-create incarnation records.
-- ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/archive1/1_1_762083164.dbf';
-- ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/archive1/1_1_1001001677.dbf';
-- Recovery is required if any of the datafiles are restored backups,
-- or if the last shutdown was not normal or immediate.
RECOVER DATABASE
-- All logs need archiving and a log switch is needed.
ALTER SYSTEM ARCHIVE LOG ALL;
-- Database can now be opened normally.
ALTER DATABASE OPEN;
-- Commands to add tempfiles to temporary tablespaces.
-- Online tempfiles have complete space information.
-- Other tempfiles may require adjustment.
ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/PROD1/temp01.dbf'
     SIZE 30408704  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;
ALTER TABLESPACE TMP_ABC ADD TEMPFILE '/u01/app/oracle/oradata/PROD1/tmpabc01.dbf'
     SIZE 2097152  REUSE AUTOEXTEND OFF;
-- End of tempfile additions.
--
--     Set #2. RESETLOGS case
--
-- The following commands will create a new control file and use it
-- to open the database.
-- Data used by Recovery Manager will be lost.
-- The contents of online logs will be lost and all backups will
-- be invalidated. Use this only if online logs are damaged.
-- After mounting the created controlfile, the following SQL
-- statement will place the database in the appropriate
-- protection mode:
--  ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "PROD1" RESETLOGS  ARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 '/u01/app/oracle/oradata/PROD1/redo01.log'  SIZE 50M BLOCKSIZE 512,
  GROUP 2 '/u01/app/oracle/oradata/PROD1/redo02.log'  SIZE 50M BLOCKSIZE 512,
  GROUP 3 '/u01/app/oracle/oradata/PROD1/redo03.log'  SIZE 50M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
  '/u01/app/oracle/oradata/PROD1/system01.dbf',
  '/u01/app/oracle/oradata/PROD1/sysaux01.dbf',
  '/u01/app/oracle/oradata/PROD1/undotbs01.dbf',
  '/u01/app/oracle/oradata/PROD1/users01.dbf',
  '/u01/app/oracle/oradata/PROD1/example01.dbf',
  '/u01/app/oracle/oradata/PROD1/abc01.dbf',
  '/u01/app/oracle/oradata/PROD1/abcd01.dbf',
  '/u01/app/oracle/oradata/PROD1/tbs_c01.dbf',
  '/u01/app/oracle/oradata/PROD1/aaa01.dbf',
  '/u01/app/oracle/oradata/PROD1/aaa02.dbf'
CHARACTER SET AL32UTF8
;
-- Commands to re-create incarnation table
-- Below log names MUST be changed to existing filenames on
-- disk. Any one log file from each branch can be used to
-- re-create incarnation records.
-- ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/archive1/1_1_762083164.dbf';
-- ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/archive1/1_1_1001001677.dbf';
-- Recovery is required if any of the datafiles are restored backups,
-- or if the last shutdown was not normal or immediate.
RECOVER DATABASE USING BACKUP CONTROLFILE
-- Database can now be opened zeroing the online logs.
ALTER DATABASE OPEN RESETLOGS;
-- Commands to add tempfiles to temporary tablespaces.
-- Online tempfiles have complete space information.
-- Other tempfiles may require adjustment.
ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/PROD1/temp01.dbf'
     SIZE 30408704  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;
ALTER TABLESPACE TMP_ABC ADD TEMPFILE '/u01/app/oracle/oradata/PROD1/tmpabc01.dbf'
     SIZE 2097152  REUSE AUTOEXTEND OFF;
-- End of tempfile additions.
--
control file

里面涵蓋兩段重要內容:Set #1. NORESETLOGS case 和 Set #2. RESETLOGS case

后期可根據實際情況,通過對應代碼段手工重建控制文件本篇不涉及,請移至己亥清爽恢復系列查看

3.1.2 TRACE指定路徑備份

也可以直接trace的時候手工指定存儲路徑: TO TRACLE AS 路徑

SQL> alter database backup controlfile to trace as '/u01/app/oracle/backup/con.ctl';

Database altered.

SQL> !ls /u01/app/oracle/backup/
con.ctl  online.ctl  trac.ctl

3.2 BINARY備份

  BINARY二進制備份,可看作是控制文件的熱備,二進制文件和trace文件不同,前者和原控制文件一樣,無法通過命令查看,而后者可以手工查看。前者(binary)多用於手工還原恢復控制文件,而后者(trace)多用於手工重建控制文件。

SQL> alter database backup controlfile to '/u01/app/oracle/backup/binarycon.ctl';

Database altered.

SQL> !ls /u01/app/oracle/backup/
binarycon.ctl  con.ctl    online.ctl  trac.ctl


免責聲明!

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



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