控制文件管理
[大纲]
- 控制文件的结构
- 控制文件的复用
- 控制文件的重建
- 控制文件的管理
一、数据库控制文件
控制文件中记载了数据库的物理结构等重要的数据库信息,如数据文件和日志文件信息。控制文件是用 于维护数据库完整性的重要文件。Oracle 正是使用该文件在实例和数据库之间建立关联的。当发生实例故 障时,控制文件记载的信息可用于实例的恢复。
1.控制文件概述
每个Oracle 数据库都有一个控制文件,它是一个记彔数据库物理结构的小型二进制文件。Oracle 数据 库通常使用控制文件来定位数据库文件并管理数据库的状态。
控制文件包含以下信息:
- 数据库名称和数据库唯一标识符(DBID)
- 数据库创建的时间戳
- 有关数据文件,联机重做日志文件和归档重做日志文件的信息
- 检查点信息,日志切换是的日志序号,表空间信息
- RMAN备份
控制文件用于以下目的:
- 它包含有关打开数据库所需的数据文件,联机重做日志文件等信息。(mount)
- 控制文件跟踪数据库更改的结构。 例如,当管理员添加,重命名或删除数据文件或联机重做日志文件时,数据库会更新控制文件以反映此更改。
- 在数据库未打开时包含必须可访问的元数据。
例如,控制文件包含恢复数据库所需的信息,包括检查点。它指示 redo stream 中需要开始实例恢复的 SCN。 在检查点 SCN 之前提交的更改都保证保存在数据文件的磁盘上。检查点进程至少每三秒在控制文件中记彔有关 联机重做日志中检查点位置的信息。
Oracle 数据库在数据库使用期间不断读取和写入控制文件,并且叧要数据库处于打开状态,就必须可以写入。例如,恢复数据库涉及从控制文件中读取数据库中包含的所有数据文件的名称。例如添加数据文件,更新存储在控制文件中的信息。
2.复用控制文件Oracle
数据库允许同时打开多个相同的控制文件并将其写入同一数据库。通过在不同磁盘上复用控制文件,可以实现数据库冗余,从而避免单点故障。(Oracle 强烈建议您的数据库至少包含两个控制文件,并且它们位于不同的物理磁盘上)
如果控制文件因磁盘故障而损坏,则必须关闭关联的实例。可以使用来自另一个磁盘的控制文件的完整副本来恢复损坏的控制文件,并且可以重新启动实例。在这种情况下,不需要介质恢复。
复用控制文件的运行情况如下:
- 数据库从 CONTROL_FILES 数据库初始化参数文件中列出的所有控制文件名。
- 数据库操作期间叧读取从 CONTROL_FILES 参数中列出的第一个文件。
- 如果任何控制文件在数据库操作期间变得丌可用,则该实例将无法运行并终止。
3.控制文件
3.1 可变部分(循环重用记)
例 如 RMAN 备 份 信 息 。 到 了 control_file_record_keep_time 之 后 , 就 会 被 覆 盖 。 参 数control_file_record_keep_time 是一个位于控制文件中比较重要的参数。它决定了 控制文件里可重复使用的记彔所能保存的最小天数。当一条新的记彔需要添加到可重用记彔 的空间时,并且最老的记彔在可重用记彔空间中还没有老化,即实际保留的天数未超过这 个参数规定的天数,则控制文件中可重用记彔部分的空间将被自动扩展,此时控制文件尺寸 将会变大。
3.2 不可变部分(非重用记)
关于数据库的那些信息,文件位置,大小,日志位置,数据库名,等等是不会丢失的!控制文件中会为每个数据文件预留 180 字节的空间,该空间将用于记载数据文件的名称、尺寸、状态以及检查点等信息,假定数据库最多可以包含 1000 个数据文件,那么控制文件就要为数据文件分配大约 180KB 的空间。在执行 CREATEDATABASE 命令建立数据库时,通过设置永久参数可以设定数据库可以包含的最大数据文件以及重做日志个数等,这些永久参数的设置会影响控制文件的尺寸。这些参数是:
• 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 existSQL> 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.dbf9 rows selected.SQL>
• MAXLOGFILES:用于指定数据库中重做日志组的最大个数。
• MAXLOGMEMBERS:用于指定每个日志组的最大日志成员个数。
• MAXLOGHISTORY:用于指定控制文件可记载日志历史的最大个数。
• MAXINSTANCES:用于指定可以同时访问数据库的最大实例个
二、管理控制文件
1.创建控制文件
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.logSQL> 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.dbf9 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.ctlSQL>
列出数据库所有数据库文件和重做日志文件;该 CREATE CONTROLFILE 语句可能会损坏指定的数据文件和重做日志文件。省略文件名可能会导致该文件中的数据丢失,或者无法访问整个数据库。
CREATE CONTROLFILESET DATABASE prodLOGFILE 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') RESETLOGSDATAFILE '/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 5MMAXLOGFILES 50MAXLOGMEMBERS 3MAXLOGHISTORY 400MAXDATAFILES 200MAXINSTANCES 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';
---生成控制文件的文本文件并查看其控制文件的具体信息
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 111 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 completeCurrent 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.019STARTUP NOMOUNT CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS NOARCHIVELOGMAXLOGFILES 16MAXLOGMEMBERS 3MAXDATAFILES 1024MAXINSTANCES 8MAXLOGHISTORY 292 LOGFILEGROUP 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 NOARCHIVELOGMAXLOGFILES 16MAXLOGMEMBERS 3MAXDATAFILES 1024MAXINSTANCES 8MAXLOGHISTORY 292 LOGFILEGROUP 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]$
3:查看控制文件信息
SQL> show parameter conNAME 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/control01.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.datNAME 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.oraSQL> 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.dbfSQL>
4:新增数据库控制文件
SQL> select instance_name ,status from v$instance;INSTANCE_NAME STATUS ---------------- ------------ orcl OPENSQL> show parameter coantrol_file SQL> show parameter control_fileNAME TYPE VALUE ------------------------------------ ----------- ------------------------------ control_file_record_keep_time integer 7 control_files string /u01/app/oracle/oradata/orcl/control01.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.ctlSQL> 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 2019Copyright (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.ctlSQL>
5:删除数据库 控制文件
SQL> show parameter control_file;NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ control_file_record_keep_time integer 7 control_files string /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> desc v$controlfileName Null? Type----------------------------------------- -------- ----------------------------STATUS VARCHAR2(7)NAME VARCHAR2(513)IS_RECOVERY_DEST_FILE VARCHAR2(3)BLOCK_SIZE NUMBERFILE_SIZE_BLKS NUMBERCON_ID NUMBERSQL> 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.ctlSQL> 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_fileNAME TYPE VALUE ------------------------------------ ----------- ------------------------------ control_file_record_keep_time integer 7 control_files string /u01/app/oracle/oradata/orcl/control01.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 NOARCHIVELOGMAXLOGFILES 16MAXLOGMEMBERS 3MAXDATAFILES 1024MAXINSTANCES 8MAXLOGHISTORY 292 LOGFILEGROUP 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;