第十章:控制文件





控制文件管理


[大綱]

  •    控制文件的結構
  •  控制文件的複用
  •  控制文件的重建
  •  控制文件的管理


1、數據庫控制文件


        控制文件中記載了數據庫的物理結構等重要的數據庫信息,如數據文件和日誌文件信息。控制文件是用 於維護數據庫完整性的重要文件。Oracle 正是使用該文件在實例和數據庫之間創建關聯的。當發生實例故 障時,控制文件記載的信息可用於實例的恢復。sql


1.控制文件概述

每一個Oracle 數據庫都有一個控制文件,它是一個記彔數據庫物理結構的小型二進制文件。Oracle 數據 庫一般使用控制文件來定位數據庫文件並管理數據庫的狀態。
       控制文件包含如下信息:數據庫

  •       數據庫名稱和數據庫惟一標識符(DBID)
  •       數據庫建立的時間戳
  •      有關數據文件,聯機重作日誌文件和歸檔重作日誌文件的信息 
  •       檢查點信息,日誌切換是的日誌序號,表空間信息 
  •       RMAN備份


控制文件用於如下目的:  oracle

  •       它包含有關打開數據庫所需的數據文件,聯機重作日誌文件等信息。(mount)
  •       控制文件跟蹤數據庫更改的結構。 例如,當管理員添加,重命名或刪除數據文件或聯機重作日誌文件時,數據庫會更新控制文件以反映此更改。
  •      在數據庫未打開時包含必須可訪問的元數據。
  •     例如,控制文件包含恢復數據庫所需的信息,包括檢查點。它指示 redo stream 中須要開始實例恢復的 SCN。 在檢查點 SCN 以前提交的更改都保證保存在數據文件的磁盤上。檢查點進程至少每三秒在控制文件中記彔有關 聯機重作日誌中檢查點位置的信息。
    app

         Oracle 數據庫在數據庫使用期間不斷讀取和寫入控制文件,而且叧要數據庫處於打開狀態,就必須能夠寫入。例如,恢復數據庫涉及從控制文件中讀取數據庫中包含的全部數據文件的名稱。例如添加數據文件,更新存儲在控制文件中的信息。ide



      


2.複用控制文件Oracle


       數據庫容許同時打開多個相同的控制文件並將其寫入同一數據庫。經過在不一樣磁盤上覆用控制文件,能夠實現數據庫冗餘,從而避免單點故障。(Oracle 強烈建議您的數據庫至少包含兩個控制文件,而且它們位於不一樣的物理磁盤上)大數據

        若是控制文件因磁盤故障而損壞,則必須關閉關聯的實例。可使用來自另外一個磁盤的控制文件的完整副原本恢復損壞的控制文件,而且能夠從新啓動實例。在這種狀況下,不須要介質恢復。this

      複用控制文件的運行狀況以下: spa

  •   數據庫從 CONTROL_FILES 數據庫初始化參數文件中列出的全部控制文件名。
  •    數據庫操做期間叧讀取從 CONTROL_FILES 參數中列出的第一個文件。
  •    若是任何控制文件在數據庫操做期間變得丌可用,則該實例將沒法運行並終止。



3.控制文件



image



3.1 可變部分(循環重用記)



       例 如 RMAN 備 份 信 息 。 到 了 control_file_record_keep_time 之 後 , 就 會 被 覆 蓋 。 參 數control_file_record_keep_time 是一個位於控制文件中比較重要的參數。它決定了 控制文件裏可重複使用的記彔所能保存的最小天數。當一條新的記彔須要添加到可重用記彔 的空間時,而且最老的記彔在可重用記彔空間中尚未老化,即實際保留的天數未超過這 個參數規定的天數,則控制文件中可重用記彔部分的空間將被自動擴展,此時控制文件尺寸 將會變大。操作系統

image


3.2 不可變部分(非重用記)

      關於數據庫的那些信息,文件位置,大小,日誌位置,數據庫名,等等是不會丟失的!控制文件中會爲每一個數據文件預留 180 字節的空間,該空間將用於記載數據文件的名稱、尺寸、狀態以及檢查點等信息,假定數據庫最多能夠包含 1000 個數據文件,那麼控制文件就要爲數據文件分配大約 180KB 的空間。在執行 CREATEDATABASE 命令創建數據庫時,經過設置永久參數能夠設定數據庫能夠包含的最大數據文件以及重作日誌個數等,這些永久參數的設置會影響控制文件的尺寸。這些參數是:3d

• MAXDATAFILES:用於指定控制文件可記載的最大數據文件個數。

SQL> set linesize 1000;
SQL> col name for a50;
SQL>  select name from v$datafiles;
 select name from v$datafiles
                  *
ERROR at line 1:
ORA-00942: table or view does not exist


SQL> select  name from v$datafile;

NAME
--------------------------------------------------
/u01/app/oracle/oradata/orcl/system01.dbf
/u01/app/oracle/oradata/orcl/sysaux01.dbf
/u01/app/oracle/oradata/orcl/undotbs01.dbf
/u01/app/oracle/oradata/orcl/pdbseed/system01.dbf
/u01/app/oracle/oradata/orcl/users01.dbf
/u01/app/oracle/oradata/orcl/pdbseed/sysaux01.dbf
/u01/app/oracle/oradata/orcl/proc/system01.dbf
/u01/app/oracle/oradata/orcl/proc/sysaux01.dbf
/u01/app/oracle/oradata/orcl/proc/proc_users01.dbf

9 rows selected.

SQL>
View Code

• MAXLOGFILES:用於指定數據庫中重作日誌組的最大個數。

• MAXLOGMEMBERS:用於指定每一個日誌組的最大日誌成員個數。

• MAXLOGHISTORY:用於指定控制文件可記載日誌歷史的最大個數。

• MAXINSTANCES:用於指定能夠同時訪問數據庫的最大實例個








2、管理控制文件


1.建立控制文件



1.1 建立新的控制文件:

     數據庫的全部控制文件都已永久損壞,而且沒有備份控制文件。

 您想要更改數據庫名稱:

SELECT MEMBER FROM V$LOGFILE;
SELECT NAME FROM V$DATAFILE;
SELECT VALUE FROM V$PARAMETER WHERE NAME = 'control_files';
SQL> col member for a50 ;
SQL> select member from v$logfile;

MEMBER
--------------------------------------------------
/u01/app/oracle/oradata/orcl/redo03.log
/u01/app/oracle/oradata/orcl/redo02.log
/u01/app/oracle/oradata/orcl/redo01.log



SQL> select name from  v$datafile;

NAME
--------------------------------------------------
/u01/app/oracle/oradata/orcl/system01.dbf
/u01/app/oracle/oradata/orcl/sysaux01.dbf
/u01/app/oracle/oradata/orcl/undotbs01.dbf
/u01/app/oracle/oradata/orcl/pdbseed/system01.dbf
/u01/app/oracle/oradata/orcl/users01.dbf
/u01/app/oracle/oradata/orcl/pdbseed/sysaux01.dbf
/u01/app/oracle/oradata/orcl/proc/system01.dbf
/u01/app/oracle/oradata/orcl/proc/sysaux01.dbf
/u01/app/oracle/oradata/orcl/proc/proc_users01.dbf

9 rows selected.

SQL> col for value a100;
SP2-0158: unknown COLUMN option "value"
SQL> col value for a100;
SQL> select value from v$parameter where name ='control_files';

VALUE
----------------------------------------------------------------------------------------------------
/u01/app/oracle/oradata/orcl/control01.ctl, /u01/app/oracle/oradata/orcl/control02.ctl

SQL>
View Code


列出數據庫全部數據庫文件和重作日誌文件;該 CREATE CONTROLFILE 語句可能會損壞指定的數據文件和重作日誌文件。省略文件名可能會致使該文件中的數據丟失,或者沒法訪問整個數據庫。

CREATE CONTROLFILE
 SET DATABASE prod
 LOGFILE GROUP 1 ('/u01/oracle/prod/redo01_01.log',
 '/u01/oracle/prod/redo01_02.log'),
 GROUP 2 ('/u01/oracle/prod/redo02_01.log',
 '/u01/oracle/prod/redo02_02.log'),
 GROUP 3 ('/u01/oracle/prod/redo03_01.log',
 '/u01/oracle/prod/redo03_02.log')
RESETLOGS
 DATAFILE '/u01/oracle/prod/system01.dbf' SIZE 3M,
 '/u01/oracle/prod/rbs01.dbs' SIZE 5M,
 '/u01/oracle/prod/users01.dbs' SIZE 5M,
 '/u01/oracle/prod/temp01.dbs' SIZE 5M
 MAXLOGFILES 50
 MAXLOGMEMBERS 3
 MAXLOGHISTORY 400
 MAXDATAFILES 200
 MAXINSTANCES 6
ARCHIVELOG ;

實驗操做:




1.2 管理控制文件

控制文件相關視圖


V$CONTROLFILE --列出實例中全部控制文件的名字及狀態信息
V$PARAMETER --列出全部參數的位置及狀態信息
V$CONTROLFILE_RECORD_SECTION --列出控制文件中記彔的部分信息
SHOWPARAMETER CONTROL_FILES --列出控制文件的名字、狀態、位置



在複製控制文件以前關閉數據庫。能夠經過將文件複製到新名稱或位置以及更改控制文件列表中的文件名來重命名現有控制文件;

步驟:

1. 關閉數據庫。

2. 使用操做系統命令將現有控制文件複製到新位置。

3. 編輯 CONTROL_FILES 數據庫初始化參數文件中的參數以添加新控制文件名,或更改現有控制文件名。

4. 重啓數據



2.備份控制文件

     控制文件自己也有必要在適當的時候進行備份,特別是數據庫的結構行了很大的修改。那麼,可不能夠將控制文件複製到另一個位置,就算是備份了呢?這樣作沒有任何意義,由於控制文件裏面的信息是不斷更新的,若是把這樣的備份用於啓動數據庫就會失敗。Oracle9i 提供了一個系統命令,能夠將控制文件以腳本的形式備份到跟蹤(或二進制)文件中,能夠將此備份的腳本經過修改用於控制文件的重建。這條命令如:

---SQL語句:
ALTER DATABASE BACKUP CONTROLFILE to TRACE;
---備份二迚制:
ALTER DATABASE BACKUP CONTROLFILE to'/oracle/backup/control.bkp';


---生成控制文件的文本文件並查看其控制文件的具體信息

---查看控制文件的信息
--1:建立一個控制文件的信息文件
SQL> alter  database backup controlfile to trace;

Database altered.

SQL>

---2:查看 跟蹤日誌文件信息

SQL> select  name ,value  from  v$diag_info;

NAME                                     VALUE
---------------------------------------- ----------------------------------------------------------------------------------------------------
Diag Enabled                             TRUE
ADR Base                                 /u01/app/oracle
ADR Home                                 /u01/app/oracle/diag/rdbms/orcl/orcl
Diag Trace                               /u01/app/oracle/diag/rdbms/orcl/orcl/trace
Diag Alert                               /u01/app/oracle/diag/rdbms/orcl/orcl/alert
Diag Incident                            /u01/app/oracle/diag/rdbms/orcl/orcl/incident
Diag Cdump                               /u01/app/oracle/diag/rdbms/orcl/orcl/cdump
Health Monitor                           /u01/app/oracle/diag/rdbms/orcl/orcl/hm
Default Trace File                       /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_25246.trc
Active Problem Count                     1
Active Incident Count                    1

11 rows selected.

---切換到 跟蹤日誌的文件路徑
[oracle@oracle ~]$ cd /u01/app/oracle/diag/rdbms/orcl/orcl/trace/
[oracle@oracle trace]$ ls
alert_orcl.log       orcl_gen0_6711.trc   orcl_m000_6681.trc   orcl_m001_24003.trc  orcl_mmon_6796.trc  orcl_ora_8948.trc

---5:查看 跟蹤日誌文件內容
[oracle@oracle trace]$ cat alert_orcl.log

---直到剛纔生成 控制文件信息的命令位置
........
........

Thread 1 cannot allocate new log, sequence 133
Private strand flush not complete
  Current log# 3 seq# 132 mem# 0: /u01/app/oracle/oradata/orcl/redo03.log
Mon Jan 21 22:01:30 2019
Thread 1 advanced to log sequence 133 (LGWR switch)
  Current log# 1 seq# 133 mem# 0: /u01/app/oracle/oradata/orcl/redo01.log
Mon Jan 21 22:08:33 2019
Thread 1 advanced to log sequence 134 (LGWR switch)
  Current log# 2 seq# 134 mem# 0: /u01/app/oracle/oradata/orcl/redo02.log
Mon Jan 21 22:46:39 2019
alter  database backup controlfile to trace
Mon Jan 21 22:46:39 2019
Backup controlfile written to trace file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_24724.trc
Completed: alter  database backup controlfile to trace
[oracle@oracle trace]$


----7:查看生成的 控制文件信息的文本文件:
[oracle@oracle trace]$ more orcl_ora_24724.trc
.....具體內容省略.....

---8:過濾一些沒有必要的 註釋說明信息,並生成一個新的文件

[oracle@oracle trace]$ more   orcl_ora_24724.trc  | grep -v ^[--] > controlfile_info.txt

---10:查看新生成的控制文件的內容
[oracle@oracle trace]$ more controlfile_info.txt
Trace file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_24724.trc
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
ORACLE_HOME = /u01/app/oracle/product/12.1.0/dbhome_1
System name:    Linux
Node name:      oracle.example.com
Release:        4.1.12-37.4.1.el6uek.x86_64
Version:        #2 SMP Tue May 17 07:23:38 PDT 2016
Machine:        x86_64
Instance name: orcl
Redo thread mounted by this instance: 1
Oracle process number: 29
Unix process pid: 24724, image: oracle@oracle.example.com (TNS V1-V3)


*** 2019-01-21 22:46:39.019
*** SESSION ID:(125.48907) 2019-01-21 22:46:39.019
*** CLIENT ID:() 2019-01-21 22:46:39.019
*** SERVICE NAME:(SYS$USERS) 2019-01-21 22:46:39.019
*** MODULE NAME:(sqlplus@oracle.example.com (TNS V1-V3)) 2019-01-21 22:46:39.019
*** CLIENT DRIVER:(SQL*PLUS) 2019-01-21 22:46:39.019
*** ACTION NAME:() 2019-01-21 22:46:39.019
*** CONTAINER ID:(1) 2019-01-21 22:46:39.019

STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS  NOARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 1024
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 '/u01/app/oracle/oradata/orcl/redo01.log'  SIZE 50M BLOCKSIZE 512,
  GROUP 2 '/u01/app/oracle/oradata/orcl/redo02.log'  SIZE 50M BLOCKSIZE 512,
  GROUP 3 '/u01/app/oracle/oradata/orcl/redo03.log'  SIZE 50M BLOCKSIZE 512
DATAFILE
  '/u01/app/oracle/oradata/orcl/system01.dbf',
  '/u01/app/oracle/oradata/orcl/sysaux01.dbf',
  '/u01/app/oracle/oradata/orcl/undotbs01.dbf',
  '/u01/app/oracle/oradata/orcl/pdbseed/system01.dbf',
  '/u01/app/oracle/oradata/orcl/users01.dbf',
  '/u01/app/oracle/oradata/orcl/pdbseed/sysaux01.dbf',
  '/u01/app/oracle/oradata/orcl/proc/system01.dbf',
  '/u01/app/oracle/oradata/orcl/proc/sysaux01.dbf',
  '/u01/app/oracle/oradata/orcl/proc/proc_users01.dbf'
CHARACTER SET AL32UTF8
;
RECOVER DATABASE
ALTER DATABASE OPEN;
ALTER PLUGGABLE DATABASE ALL OPEN;
ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/orcl/temp01.dbf'
     SIZE 206569472  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;
ALTER SESSION SET CONTAINER = PDB$SEED;
ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/orcl/pdbseed/pdbseed_temp012018-12-23_09-47-51-PM.dbf'
     SIZE 104857600  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;
ALTER SESSION SET CONTAINER = PROC;
ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/orcl/proc/temp012018-12-23_09-47-51-PM.dbf'
     SIZE 20971520  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;
ALTER SESSION SET CONTAINER = CDB$ROOT;
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS  NOARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 1024
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 '/u01/app/oracle/oradata/orcl/redo01.log'  SIZE 50M BLOCKSIZE 512,
  GROUP 2 '/u01/app/oracle/oradata/orcl/redo02.log'  SIZE 50M BLOCKSIZE 512,
  GROUP 3 '/u01/app/oracle/oradata/orcl/redo03.log'  SIZE 50M BLOCKSIZE 512
DATAFILE
  '/u01/app/oracle/oradata/orcl/system01.dbf',
  '/u01/app/oracle/oradata/orcl/sysaux01.dbf',
  '/u01/app/oracle/oradata/orcl/undotbs01.dbf',
  '/u01/app/oracle/oradata/orcl/pdbseed/system01.dbf',
  '/u01/app/oracle/oradata/orcl/users01.dbf',
  '/u01/app/oracle/oradata/orcl/pdbseed/sysaux01.dbf',
  '/u01/app/oracle/oradata/orcl/proc/system01.dbf',
  '/u01/app/oracle/oradata/orcl/proc/sysaux01.dbf',
  '/u01/app/oracle/oradata/orcl/proc/proc_users01.dbf'
CHARACTER SET AL32UTF8
;
RECOVER DATABASE USING BACKUP CONTROLFILE
ALTER DATABASE OPEN RESETLOGS;
ALTER PLUGGABLE DATABASE ALL OPEN;
ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/orcl/temp01.dbf'
     SIZE 206569472  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;
ALTER SESSION SET CONTAINER = PDB$SEED;
ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/orcl/pdbseed/pdbseed_temp012018-12-23_09-47-51-PM.dbf'
     SIZE 104857600  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;
ALTER SESSION SET CONTAINER = PROC;
ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/orcl/proc/temp012018-12-23_09-47-51-PM.dbf'
     SIZE 20971520  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;
ALTER SESSION SET CONTAINER = CDB$ROOT;
[oracle@oracle trace]$
[oracle@oracle trace]$








View Code






3:查看控制文件信息


SQL> show parameter con

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
cluster_interconnects                string
connection_brokers                   string      ((TYPE=DEDICATED)(BROKERS=1)),
                                                  ((TYPE=EMON)(BROKERS=1))
control_file_record_keep_time        integer     7
control_files                        string      /u01/app/oracle/oradata/orcl/c
                                                 ontrol01.ctl, /u01/app/oracle/
                                                 oradata/orcl/control02.ctl
control_management_pack_access       string      DIAGNOSTIC+TUNING
db_file_name_convert                 string
dg_broker_config_file1               string      /u01/app/oracle/product/12.1.0
                                                 /dbhome_1/dbs/dr1orcl.dat

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
dg_broker_config_file2               string      /u01/app/oracle/product/12.1.0
                                                 /dbhome_1/dbs/dr2orcl.dat
dst_upgrade_insert_conv              boolean     TRUE
global_context_pool_size             string
log_archive_config                   string
log_file_name_convert                string
nls_nchar_conv_excp                  string      FALSE
pdb_file_name_convert                string
SQL>






SQL> ho ls  /u01/app/oracle/product/12.1.0/dbhome_1/dbs/
hc_orcl.dat  init.ora  initorcl.ora  lkORCL  orapworcl  spfileorcl.ora

SQL> ho ls /u01/app/oracle/oradata/orcl/
control01.ctl  pdbseed  redo01.log  redo03.log    system01.dbf  undotbs01.dbf
control02.ctl  proc     redo02.log  sysaux01.dbf  temp01.dbf    users01.dbf

SQL>




4:新增數據庫控制文件

SQL> select instance_name ,status from v$instance;

INSTANCE_NAME    STATUS
---------------- ------------
orcl             OPEN

SQL> show parameter coantrol_file
SQL> show parameter control_file

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time        integer     7
control_files                        string      /u01/app/oracle/oradata/orcl/c
                                                 ontrol01.ctl, /u01/app/oracle/
                                                 oradata/orcl/control02.ctl
SQL> set linesize 1000;
SQL> col name for a150;
SQL> select  name  from v$controlfile;

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

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

System altered.

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> exit;
Disconnected from Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
[oracle@oracle ~]$ cd /u01/app/oracle/oradata/orcl/
[oracle@oracle orcl]$ ls
control01.ctl  control02.ctl  pdbseed  proc  redo01.log  redo02.log  redo03.log  sysaux01.dbf  system01.dbf  temp01.dbf  undotbs01.dbf  users01.dbf
[oracle@oracle orcl]$ cp control01.ctl  control03.ctl
[oracle@oracle orcl]$ ls
control01.ctl  control02.ctl  control03.ctl  pdbseed  proc  redo01.log  redo02.log  redo03.log  sysaux01.dbf  system01.dbf  temp01.dbf  undotbs01.dbf  users01.dbf
[oracle@oracle orcl]$ pwd
/u01/app/oracle/oradata/orcl
[oracle@oracle orcl]$ sqlplus / as sysdba;

SQL*Plus: Release 12.1.0.2.0 Production on Tue Jan 22 23:53:04 2019

Copyright (c) 1982, 2014, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup
ORACLE instance started.

Total System Global Area 1509949440 bytes
Fixed Size                  2924640 bytes
Variable Size             905973664 bytes
Database Buffers          587202560 bytes
Redo Buffers               13848576 bytes
Database mounted.
Database opened.
SQL> select  name from v$Controlfile;

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

SQL>










5:刪除數據庫 控制文件


SQL> show parameter  control_file;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time        integer     7
control_files                        string      /u01/app/oracle/oradata/orcl/c
                                                 ontrol01.ctl, /u01/app/oracle/
                                                 oradata/orcl/control02.ctl, /u
                                                 01/app/oracle/product/12.1.0/d
                                                 bhome_1/dbs/u01/app/oracle/ora
                                                 data/orcl/control03.ctl
SQL> desc  v$controlfile
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 STATUS                                             VARCHAR2(7)
 NAME                                               VARCHAR2(513)
 IS_RECOVERY_DEST_FILE                              VARCHAR2(3)
 BLOCK_SIZE                                         NUMBER
 FILE_SIZE_BLKS                                     NUMBER
 CON_ID                                             NUMBER

SQL> set linesize 1000;
SQL> col name  for a150;
SQL> select name  from v$controlfile;

NAME
------------------------------------------------------------------------------------------------------------------------------------------------------
/u01/app/oracle/oradata/orcl/control01.ctl
/u01/app/oracle/oradata/orcl/control02.ctl
/u01/app/oracle/product/12.1.0/dbhome_1/dbs/u01/app/oracle/oradata/orcl/control03.ctl

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

System altered.

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

Total System Global Area 1509949440 bytes
Fixed Size                  2924640 bytes
Variable Size             905973664 bytes
Database Buffers          587202560 bytes
Redo Buffers               13848576 bytes
Database mounted.
Database opened.
SQL> show parameter control_file

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time        integer     7
control_files                        string      /u01/app/oracle/oradata/orcl/c
                                                 ontrol01.ctl, /u01/app/oracle/
                                                 oradata/orcl/control02.ctl







6:模擬控制文件損壞丟失


--step1>關閉數據庫,刪除03的控制文件
SQL> shutdown immediate;
--手工刪除控制文件:rm -rf  /u01/app/oracle/oradata/orcl/control03.ctl
--step2>啓動數據庫,觀察alter日誌和終端報錯
SQL> startup
--step3>解決方案
--方法一:
cp /u01/app/oracle/oradata/orcl/control02.ctl  /u01/app/oracle/oradata/orcl/control03.ctl
----方法二:
alter system set control_files='/u01/app/oracle/oradata/orcl/control01.ctl','/u01/app/oracle/oradata/orcl/control02.ctl';
--step4>重啓數據庫
SQL>alter database mount;
SQL>alter database open;







7:重建控制文件;(選作)


step1>將控制文件備份到跟蹤文件,得到控制文件的重建腳本;
SQL> ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
step2>關閉並啓動數據庫到 NOMOUNT 狀態
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS  NOARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 1024
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 '/u01/app/oracle/oradata/orcl/redo01.log'  SIZE 50M BLOCKSIZE 512,
  GROUP 2 '/u01/app/oracle/oradata/orcl/redo02.log'  SIZE 50M BLOCKSIZE 512,
  GROUP 3 '/u01/app/oracle/oradata/orcl/redo03.log'  SIZE 50M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
  '/u01/app/oracle/oradata/orcl/system01.dbf',
  '/u01/app/oracle/oradata/orcl/sysaux01.dbf',
  '/u01/app/oracle/oradata/orcl/undotbs01.dbf',
  '/u01/app/oracle/oradata/orcl/pdbseed/system01.dbf',
  '/u01/app/oracle/oradata/orcl/users01.dbf',
  '/u01/app/oracle/oradata/orcl/pdbseed/sysaux01.dbf',
  '/u01/app/oracle/oradata/orcl/proc/system01.dbf',
  '/u01/app/oracle/oradata/orcl/proc/sysaux01.dbf',
  '/u01/app/oracle/oradata/orcl/proc/proc_users01.dbf'
CHARACTER SET WE8MSWIN1252
;
RECOVER DATABASE;
ALTER DATABASE OPEN;
-- Open all the PDBs.
ALTER PLUGGABLE DATABASE ALL OPEN;

step3>重建臨時表空間
ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/orcl/temp01.dbf'
     SIZE 62914560  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;
ALTER SESSION SET CONTAINER = PDB$SEED;
ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/orcl/pdbseed/pdbseed_temp012018-11-28_01-12-22-AM.dbf'
     SIZE 20971520  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;
ALTER SESSION SET CONTAINER = PROC;
ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/orcl/proc/temp012018-11-28_01-12-22-AM.dbf' REUSE;
ALTER SESSION SET CONTAINER = CDB$ROOT;
相關文章
相關標籤/搜索