第十章:控制文件





控制文件管理


[大纲]

  •    控制文件的结构
  •  控制文件的复用
  •  控制文件的重建
  •  控制文件的管理


一、数据库控制文件


        控制文件中记载了数据库的物理结构等重要的数据库信息,如数据文件和日志文件信息。控制文件是用 于维护数据库完整性的重要文件。Oracle 正是使用该文件在实例和数据库之间建立关联的。当发生实例故 障时,控制文件记载的信息可用于实例的恢复。


1.控制文件概述

每个Oracle 数据库都有一个控制文件,它是一个记彔数据库物理结构的小型二进制文件。Oracle 数据 库通常使用控制文件来定位数据库文件并管理数据库的状态。
       控制文件包含以下信息:

  •       数据库名称和数据库唯一标识符(DBID)
  •       数据库创建的时间戳
  •      有关数据文件,联机重做日志文件和归档重做日志文件的信息 
  •       检查点信息,日志切换是的日志序号,表空间信息 
  •       RMAN备份


控制文件用于以下目的: 

  •       它包含有关打开数据库所需的数据文件,联机重做日志文件等信息。(mount)
  •       控制文件跟踪数据库更改的结构。 例如,当管理员添加,重命名或删除数据文件或联机重做日志文件时,数据库会更新控制文件以反映此更改。
  •      在数据库未打开时包含必须可访问的元数据。

    例如,控制文件包含恢复数据库所需的信息,包括检查点。它指示 redo stream 中需要开始实例恢复的 SCN。 在检查点 SCN 之前提交的更改都保证保存在数据文件的磁盘上。检查点进程至少每三秒在控制文件中记彔有关 联机重做日志中检查点位置的信息。

         Oracle 数据库在数据库使用期间不断读取和写入控制文件,并且叧要数据库处于打开状态,就必须可以写入。例如,恢复数据库涉及从控制文件中读取数据库中包含的所有数据文件的名称。例如添加数据文件,更新存储在控制文件中的信息。



      


2.复用控制文件Oracle


       数据库允许同时打开多个相同的控制文件并将其写入同一数据库。通过在不同磁盘上复用控制文件,可以实现数据库冗余,从而避免单点故障。(Oracle 强烈建议您的数据库至少包含两个控制文件,并且它们位于不同的物理磁盘上)

        如果控制文件因磁盘故障而损坏,则必须关闭关联的实例。可以使用来自另一个磁盘的控制文件的完整副本来恢复损坏的控制文件,并且可以重新启动实例。在这种情况下,不需要介质恢复。

      复用控制文件的运行情况如下:

  •   数据库从 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 命令建立数据库时,通过设置永久参数可以设定数据库可以包含的最大数据文件以及重做日志个数等,这些永久参数的设置会影响控制文件的尺寸。这些参数是:

• 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:用于指定可以同时访问数据库的最大实例个








二、管理控制文件


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;

转载于:https://www.cnblogs.com/ios9/p/10263250.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值