控制文件中記載了數據庫的物理結構等重要的數據庫信息,如數據文件和日誌文件信息。控制文件是用 於維護數據庫完整性的重要文件。Oracle 正是使用該文件在實例和數據庫之間創建關聯的。當發生實例故 障時,控制文件記載的信息可用於實例的恢復。sql
1.控制文件概述
每一個Oracle 數據庫都有一個控制文件,它是一個記彔數據庫物理結構的小型二進制文件。Oracle 數據 庫一般使用控制文件來定位數據庫文件並管理數據庫的狀態。
控制文件包含如下信息:數據庫
- 數據庫名稱和數據庫惟一標識符(DBID)
- 數據庫建立的時間戳
- 有關數據文件,聯機重作日誌文件和歸檔重作日誌文件的信息
- 檢查點信息,日誌切換是的日誌序號,表空間信息
- RMAN備份
控制文件用於如下目的: oracle
- 它包含有關打開數據庫所需的數據文件,聯機重作日誌文件等信息。(mount)
- 控制文件跟蹤數據庫更改的結構。 例如,當管理員添加,重命名或刪除數據文件或聯機重作日誌文件時,數據庫會更新控制文件以反映此更改。
- 在數據庫未打開時包含必須可訪問的元數據。
例如,控制文件包含恢復數據庫所需的信息,包括檢查點。它指示 redo stream 中須要開始實例恢復的 SCN。 在檢查點 SCN 以前提交的更改都保證保存在數據文件的磁盤上。檢查點進程至少每三秒在控制文件中記彔有關 聯機重作日誌中檢查點位置的信息。
appOracle 數據庫在數據庫使用期間不斷讀取和寫入控制文件,而且叧要數據庫處於打開狀態,就必須能夠寫入。例如,恢復數據庫涉及從控制文件中讀取數據庫中包含的全部數據文件的名稱。例如添加數據文件,更新存儲在控制文件中的信息。ide
2.複用控制文件Oracle
數據庫容許同時打開多個相同的控制文件並將其寫入同一數據庫。經過在不一樣磁盤上覆用控制文件,能夠實現數據庫冗餘,從而避免單點故障。(Oracle 強烈建議您的數據庫至少包含兩個控制文件,而且它們位於不一樣的物理磁盤上)大數據
若是控制文件因磁盤故障而損壞,則必須關閉關聯的實例。可使用來自另外一個磁盤的控制文件的完整副原本恢復損壞的控制文件,而且能夠從新啓動實例。在這種狀況下,不須要介質恢復。this
複用控制文件的運行狀況以下: spa
- 數據庫從 CONTROL_FILES 數據庫初始化參數文件中列出的全部控制文件名。
- 數據庫操做期間叧讀取從 CONTROL_FILES 參數中列出的第一個文件。
- 若是任何控制文件在數據庫操做期間變得丌可用,則該實例將沒法運行並終止。
3.控制文件
3.1 可變部分(循環重用記)
例 如 RMAN 備 份 信 息 。 到 了 control_file_record_keep_time 之 後 , 就 會 被 覆 蓋 。 參 數control_file_record_keep_time 是一個位於控制文件中比較重要的參數。它決定了 控制文件裏可重複使用的記彔所能保存的最小天數。當一條新的記彔須要添加到可重用記彔 的空間時,而且最老的記彔在可重用記彔空間中尚未老化,即實際保留的天數未超過這 個參數規定的天數,則控制文件中可重用記彔部分的空間將被自動擴展,此時控制文件尺寸 將會變大。操作系統
3.2 不可變部分(非重用記)
關於數據庫的那些信息,文件位置,大小,日誌位置,數據庫名,等等是不會丟失的!控制文件中會爲每一個數據文件預留 180 字節的空間,該空間將用於記載數據文件的名稱、尺寸、狀態以及檢查點等信息,假定數據庫最多能夠包含 1000 個數據文件,那麼控制文件就要爲數據文件分配大約 180KB 的空間。在執行 CREATEDATABASE 命令創建數據庫時,經過設置永久參數能夠設定數據庫能夠包含的最大數據文件以及重作日誌個數等,這些永久參數的設置會影響控制文件的尺寸。這些參數是:3d
• MAXDATAFILES:用於指定控制文件可記載的最大數據文件個數。
View CodeSQL> 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>• MAXLOGFILES:用於指定數據庫中重作日誌組的最大個數。
• MAXLOGMEMBERS:用於指定每一個日誌組的最大日誌成員個數。
• MAXLOGHISTORY:用於指定控制文件可記載日誌歷史的最大個數。
• MAXINSTANCES:用於指定能夠同時訪問數據庫的最大實例個
1.1 建立新的控制文件:
數據庫的全部控制文件都已永久損壞,而且沒有備份控制文件。
您想要更改數據庫名稱:
SELECT MEMBER FROM V$LOGFILE; SELECT NAME FROM V$DATAFILE; SELECT VALUE FROM V$PARAMETER WHERE NAME = 'control_files';
View CodeSQL> 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>
列出數據庫全部數據庫文件和重作日誌文件;該 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. 重啓數據
控制文件自己也有必要在適當的時候進行備份,特別是數據庫的結構行了很大的修改。那麼,可不能夠將控制文件複製到另一個位置,就算是備份了呢?這樣作沒有任何意義,由於控制文件裏面的信息是不斷更新的,若是把這樣的備份用於啓動數據庫就會失敗。Oracle9i 提供了一個系統命令,能夠將控制文件以腳本的形式備份到跟蹤(或二進制)文件中,能夠將此備份的腳本經過修改用於控制文件的重建。這條命令如:
---SQL語句: ALTER DATABASE BACKUP CONTROLFILE to TRACE; ---備份二迚制: ALTER DATABASE BACKUP CONTROLFILE to'/oracle/backup/control.bkp';
---生成控制文件的文本文件並查看其控制文件的具體信息
View Code---查看控制文件的信息 --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]$
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>
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>
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
--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;
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;