火冰狐 发表于 2018-9-14 10:11:35

Oracle控制文件

  一、Oracle 控制文件
  为二进制文件,初始化大小由CREATE DATABASE指定,可以使用RMAN备份
  记录了当前数据库的结构信息,同时也包含数据文件及日志文件的信息以及相关的状态,归档信息等等
  在参数文件中描述其位置,个数等等。通常采用分散放开,多路复用的原则。在mount阶段被读取,open阶段一直被使用
  维护数据库一致性(数据库启动时会比较控制文件与联机日志文件中的ckpt,即起始scn号,如相等则正常启动,否则需要介质恢复)
  一个控制文件只能属于一个数据库
  控制文件的任意修改将写入到初始化参数中指定的所有控制文件中,读取时则仅读取第一个控制文件
  控制文件只能连接一个数据库,控制文件的大小一般不要超过MB,最多为个,最少一个,互为镜像
  控制文件中包含的内容
  数据库的名字、ID、创建的时间戳
  表空间的名字
  联机日志文件、数据文件的位置、个数、名字
  联机日志的Sequence号码
  检查点的信息
  撤销段的开始或结束
  归档信息
  备份信息
  二、查看控制文件的相关信息
  1.使用相关视图来查看
  V$CONTROLFILE                   --列出实例中所有控制文件的名字及状态信息
  V$PARAMETER                     --列出所有参数的位置及状态信息
  V$CONTROLFILE_RECORD_SECTION    --列出控制文件中记录的部分信息
  SHOW PARAMETER CONTROL_FILES    --列出控制文件的名字、状态、位置等
  SQL> select * from v$controlfile;
  STATUSNAME                                             IS_ BLOCK_SIZE FILE_SIZE_BLKS
  ------- -------------------------------------------------- --- ---------- --------------
  /u01/app/oracle/oradata/orcl/control01.ctl         NO       16384            430
  /u01/app/oracle/oradata/orcl/control02.ctl         NO       16384            430
  /u01/app/oracle/oradata/orcl/control03.ctl         NO       16384            430
  SQL> select name,type,value fromv$parameter where name like '%control%';
  NAME                                 TYPE VALUE
  ------------------------------ ---------- ------------------------------------------------------------
  control_files                           2 /u01/app/oracle/oradata/orcl/control01.ctl, /u01/app/oracle/
  oradata/orcl/control02.ctl, /u01/app/oracle/oradata/orcl/con
  trol03.ctl
  control_file_record_keep_time         3 7
  SQL> select * from v$controlfile_record_section;
  TYPE                         RECORD_SIZE RECORDS_TOTAL RECORDS_USED FIRST_INDEX LAST_INDEX LAST_RECID
  ---------------------------- ----------- ------------- ------------ ----------- ---------- ----------
  DATABASE                           316             1            1         0          0          0
  CKPT PROGRESS                     8180            11            0         0          0          0
  REDO THREAD                        256             8            1         0          0          0
  REDO LOG                              72            16            9         0          0         20
  DATAFILE                           428         100            8         0          0         28
  FILENAME                           524          2298         21         0          0          0
  TABLESPACE                            68         100            7         0          0          7
  TEMPORARY FILENAME                  56         100            1         0          0          1
  RMAN CONFIGURATION                  1108            50            0         0          0          0
  LOG HISTORY                           56         292         35         1         35         35
  OFFLINE RANGE                        200         163            0         0          0          0
  TYPE                         RECORD_SIZE RECORDS_TOTAL RECORDS_USED FIRST_INDEX LAST_INDEX LAST_RECID
  ---------------------------- ----------- ------------- ------------ ----------- ---------- ----------
  ARCHIVED LOG                         584            28         20         1         20         20
  BACKUP SET                            40         409            0         0          0          0
  BACKUP PIECE                         736         200            0         0          0          0
  BACKUP DATAFILE                      116         282            0         0          0          0
  BACKUP REDOLOG                        76         215            0         0          0          0
  DATAFILE COPY                        660         223            1         1          1          1
  BACKUP CORRUPTION                     44         371            0         0          0          0
  COPY CORRUPTION                     40         409            0         0          0          0
  DELETED OBJECT                        20         818            3         1          3          3
  PROXY COPY                           852         249            0         0          0          0
  BACKUP SPFILE                         36         454            0         0          0          0
  TYPE                         RECORD_SIZE RECORDS_TOTAL RECORDS_USED FIRST_INDEX LAST_INDEX LAST_RECID
  ---------------------------- ----------- ------------- ------------ ----------- ---------- ----------
  DATABASE INCARNATION                  56         292            2         1          2          2
  FLASHBACK LOG                         84          2048            0         0          0          0
  RECOVERY DESTINATION               180             1            1         0          0          0
  INSTANCE SPACE RESERVATION            28          1055            1         0          0          0
  REMOVABLE RECOVERY FILES            32          1000            0         0          0          0
  RMAN STATUS                        116         141            0         0          0          0
  THREAD INSTANCE NAME MAPPING          80             8            8         0          0          0
  MTTR                                 100             8            1         0          0          0
  DATAFILE HISTORY                     568            57            0         0          0          0
  STANDBY DATABASE MATRIX            400            10         10         0          0          0
  GUARANTEED RESTORE POINT             212          2048            0         0          0          0
  TYPE                         RECORD_SIZE RECORDS_TOTAL RECORDS_USED FIRST_INDEX LAST_INDEX LAST_RECID
  ---------------------------- ----------- ------------- ------------ ----------- ---------- ----------
  RESTORE POINT                        212          2083            0         0          0          0
  SQL> show parameter control_files;
  NAME                                 TYPE      VALUE
  ------------------------------------ ----------- ------------------------------
  control_files                        string      /u01/app/oracle/oradata/orcl/c
  ontrol01.ctl, /u01/app/oracle/
  oradata/orcl/control02.ctl, /u
  01/app/oracle/oradata/orcl/con
  trol03.ctl
  SQL> select controlfile_sequence# from v$database;
  CONTROLFILE_SEQUENCE#
  ---------------------
  985
  2.使用STRINGS命令来查看控制文件中的具体内容
  SQL> host strings /u01/app/oracle/oradata/orcl/control01.ctl | more
  }|{z
  JORCL
  L-+RG
  +ORCL
  +ORCL
  orcl
  orcl
  -+-='
  -+-='
  /u01/app/oracle/oradata/orcl/redo03.log
  /u01/app/oracle/oradata/orcl/redo3.log
  /u01/app/oracle/oradata/orcl/redo02.log
  /u01/app/oracle/oradata/orcl/redo2.log
  /u01/app/oracle/oradata/orcl/redo01.log
  /u01/app/oracle/oradata/orcl/tbs1_2.dbf
  /u01/app/oracle/oradata/orcl/tbs1_1.dbf
  /u01/app/oracle/oradata/orcl/example01.dbf
  /u01/app/oracle/oradata/orcl/users01.dbf
  /u01/app/oracle/oradata/orcl/sysaux01.dbf
  /u01/app/oracle/oradata/orcl/undotbs01.dbf
  /u01/app/oracle/oradata/orcl/system01.dbf
  u01/app/oracle/oradata/orcl/undotbs02.dbf
  /u01/app/oracle/oradata/orcl/redo03.log
  /u01/app/oracle/oradata/orcl/redo3.log
  /u01/app/oracle/oradata/orcl/redo02.log
  /u01/app/oracle/oradata/orcl/redo2.log
  /u01/app/oracle/oradata/orcl/redo01.log
  /u01/app/oracle/oradata/orcl/tbs1_2.dbf
  /u01/app/oracle/oradata/orcl/tbs1_1.dbf
  /u01/app/oracle/oradata/orcl/example01.dbf
  /u01/app/oracle/oradata/orcl/users01.dbf
  /u01/app/oracle/oradata/orcl/sysaux01.dbf
  /u01/app/oracle/oradata/orcl/undotbs01.dbf
  /u01/app/oracle/oradata/orcl/system01.dbf
  u01/app/oracle/oradata/orcl/undotbs02.dbf
  SYSTEM
  UNDOTBS1
  SYSAUX
  USERS
  EXAMPLE
  TBS1
  TEMP
  3.备份控制文件到平面文件(然后查看控制文件中的具体内容)

  SQL>>
  Database>  --或者使用
  SQL> host strings /u01/app/oracle/oradata/orcl/control01.ctl > /u01/app/oracle/ctl.txt
  SQL> host cat /u01/app/oracle/ctl.txt;

  -- The following are current System-scope REDO Log Archival>  -- 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="orcl"
  --
  -- LOG_ARCHIVE_CONFIG='SEND, RECEIVE, NODG_CONFIG'
  -- LOG_ARCHIVE_MAX_PROCESSES=2
  -- STANDBY_FILE_MANAGEMENT=MANUAL
  -- STANDBY_ARCHIVE_DEST=?/dbs/arch
  -- FAL_CLIENT=''
  -- FAL_SERVER=''
  --
  -- LOG_ARCHIVE_DEST_10='LOCATION=USE_DB_RECOVERY_FILE_DEST'
  -- LOG_ARCHIVE_DEST_10='OPTIONAL REOPEN=300 NODELAY'
  -- LOG_ARCHIVE_DEST_10='ARCH NOAFFIRM NOEXPEDITE NOVERIFY SYNC'
  -- LOG_ARCHIVE_DEST_10='REGISTER NOALTERNATE NODEPENDENCY'
  -- LOG_ARCHIVE_DEST_10='NOMAX_FAILURE NOQUOTA_SIZE NOQUOTA_USED NODB_UNIQUE_NAME'
  -- LOG_ARCHIVE_DEST_10='VALID_FOR=(PRIMARY_ROLE,ONLINE_LOGFILES)'
  -- LOG_ARCHIVE_DEST_STATE_10=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 "ORCL" NORESETLOGSNOARCHIVELOG
  MAXLOGFILES 16
  MAXLOGMEMBERS 3
  MAXDATAFILES 100
  MAXINSTANCES 8
  MAXLOGHISTORY 292
  LOGFILE
  GROUP 1 '/u01/app/oracle/oradata/orcl/redo01.log'SIZE 50M,
  GROUP 2 (
  '/u01/app/oracle/oradata/orcl/redo02.log',
  '/u01/app/oracle/oradata/orcl/redo2.log'

  )>  GROUP 3 (
  '/u01/app/oracle/oradata/orcl/redo03.log',
  '/u01/app/oracle/oradata/orcl/redo3.log'

  )>  GROUP 4 '/u01/app/oracle/oradata/orcl/redo04.log 'SIZE 50M,
  GROUP 7 (
  '/u01/app/oracle/oradata/orcl/redo07.log ',
  '/u01/app/oracle/oradata/orcl/redo7.log '

  )>  GROUP 8 (
  '/u01/app/oracle/oradata/orcl/redo08.log',
  '/u01/app/oracle/oradata/orcl/redo8.log'

  )>  -- STANDBY LOGFILE
  DATAFILE
  '/u01/app/oracle/oradata/orcl/system01.dbf',
  '/u01/app/oracle/oradata/orcl/undotbs01.dbf',
  '/u01/app/oracle/oradata/orcl/sysaux01.dbf',
  '/u01/app/oracle/oradata/orcl/users01.dbf',
  '/u01/app/oracle/oradata/orcl/example01.dbf',
  '/u01/app/oracle/oradata/orcl/tbs1_1.dbf',
  '/u01/app/oracle/oradata/orcl/tbs1_2.dbf'
  CHARACTER SET WE8ISO8859P1
  ;
  -- 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.

  -->  --                                 /ORCL/archivelog/2010_05_20/o1_mf_1_1_%u_.arc';

  -->  --                                 /ORCL/archivelog/2010_05_20/o1_mf_1_1_%u_.arc';
  -- Recovery is required if any of the datafiles are restored backups,
  -- or if the last shutdown was not normal or immediate.
  RECOVER DATABASE
  -- 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/orcl/temp01.dbf'

  >  -- 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 "ORCL" RESETLOGSNOARCHIVELOG
  MAXLOGFILES 16
  MAXLOGMEMBERS 3
  MAXDATAFILES 100
  MAXINSTANCES 8
  MAXLOGHISTORY 292
  LOGFILE
  GROUP 1 '/u01/app/oracle/oradata/orcl/redo01.log'SIZE 50M,
  GROUP 2 (
  '/u01/app/oracle/oradata/orcl/redo02.log',
  '/u01/app/oracle/oradata/orcl/redo2.log'

  )>  GROUP 3 (
  '/u01/app/oracle/oradata/orcl/redo03.log',
  '/u01/app/oracle/oradata/orcl/redo3.log'

  )>  GROUP 4 '/u01/app/oracle/oradata/orcl/redo04.log 'SIZE 50M,
  GROUP 7 (
  '/u01/app/oracle/oradata/orcl/redo07.log ',
  '/u01/app/oracle/oradata/orcl/redo7.log '

  )>  GROUP 8 (
  '/u01/app/oracle/oradata/orcl/redo08.log',
  '/u01/app/oracle/oradata/orcl/redo8.log'

  )>  -- STANDBY LOGFILE
  DATAFILE
  '/u01/app/oracle/oradata/orcl/system01.dbf',
  '/u01/app/oracle/oradata/orcl/undotbs01.dbf',
  '/u01/app/oracle/oradata/orcl/sysaux01.dbf',
  '/u01/app/oracle/oradata/orcl/users01.dbf',
  '/u01/app/oracle/oradata/orcl/example01.dbf',
  '/u01/app/oracle/oradata/orcl/tbs1_1.dbf',
  '/u01/app/oracle/oradata/orcl/tbs1_2.dbf'
  CHARACTER SET WE8ISO8859P1
  ;
  -- 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.

  -->  --                                 /ORCL/archivelog/2010_05_20/o1_mf_1_1_%u_.arc';

  -->  --                                    /ORCL/archivelog/2010_05_20/o1_mf_1_1_%u_.arc';
  -- 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/orcl/temp01.dbf'

  >  -- End of tempfile additions.
  4.转储控制文件内容(查看控制文件中的具体内容)
  alter session set events 'immediate trace name CONTROLF level 12'; level表示级别
  或                     --level1块头的内容 --level2 数据文件内容 --levle 10 |12 所有内容
  oradebug setmypid
  oradebug dump controlf 12

  SQL>>
  System>  SQL> show parameter user_dump;
  NAME                                 TYPE      VALUE
  ------------------------------------ ----------- ------------------------------
  user_dump_dest                     string      /u01/app/oracle/admin/orcl/udu
  mp
  --查看路径中最新的文件
  # vim /u01/app/oracle/admin/orcl/udump/orcl_ora_5110.trc
  --以下仅列出部分信息

  Oracle Database 10g Enterprise Edition>  With the Partitioning, OLAP and Data Mining options
  ORACLE_HOME = /u01/app/oracle/10g
  System name:    Linux
  Node name:      robinson.com
  Release:      2.6.18-164.el5xen
  Version:      #1 SMP Tue Aug 18 16:06:30 EDT 2009
  Machine:      i686
  Instance name: orcl
  Redo thread mounted by this instance: 1
  Oracle process number: 19
  Unix process pid: 5110, image: oracle@robinson.com (TNS V1-V3)
  *** 2010-05-20 18:52:30.104
  *** SERVICE NAME:(SYS$USERS) 2010-05-20 18:52:30.084

  *** SESSION>  DUMP OF CONTROL FILES, Seq # 985 = 0x3d9
  V10 STYLE FILE HEADER:
  Compatibility Vsn = 169869568=0xa200100

  Db>
  Activation>
  Control Seq=985=0x3d9, File>  File Number=0, Blksiz=16384, File Type=1 CONTROL
  Logical block number 1 (header block)
  Dump of memory from 0xB7EF7E00 to 0xB7EFBE00
  --使用oradebug setmypid
  SQL> oradebug setmypid--标记当前进程
  Statement processed.
  --获得当前的spid
  SQL> select spid from v$process where addr =
  2      (select paddr from v$session where sid =
  3          (select sid from v$mystat where rownum = 1));
  SPID
  ------------
  5110
  SQL> oradebug dump controlf 3;--3表示包含头文件和数据文件内容
  Statement processed.
  --查看user_dump_dest路径
  SQL> show parameter user_d
  NAME                                 TYPE      VALUE
  ------------------------------------ ----------- ------------------------------
  user_dump_dest                     string      /u01/app/oracle/admin/orcl/udu
  mp
  --找到当前spid的trc文件
  SQL>! ls /u01/app/oracle/admin/orcl/udump/*5110.*            --*/
  /u01/app/oracle/admin/orcl/udump/orcl_ora_5110.trc
  SQL>! cat /u01/app/oracle/admin/orcl/udump/orcl_ora_5110.trc
  --下面列出的为部分内容
  ***************************************************************************
  RMAN CONFIGURATION RECORDS
  ***************************************************************************

  (size = 1108, compat>  last-recid= 0, old-recno = 0, last-recno = 0)
  (extent = 1, blkno = 90, numrecs = 50)
  ***************************************************************************
  FLASHBACK LOGFILE RECORDS
  ***************************************************************************

  (size = 84, compat>  last-recid= 0, old-recno = 0, last-recno = 0)
  (extent = 1, blkno = 139, numrecs = 2048)
  ***************************************************************************
  THREAD INSTANCE MAPPING RECORDS
  ***************************************************************************

  (size = 80, compat>  last-recid= 0, old-recno = 0, last-recno = 0)
  (extent = 1, blkno = 156, numrecs = 8)
  orcl recno=1
  UNNAMED_INSTANCE_2 recno=2
  UNNAMED_INSTANCE_3 recno=3
  UNNAMED_INSTANCE_4 recno=4
  UNNAMED_INSTANCE_5 recno=5
  UNNAMED_INSTANCE_6 recno=6
  UNNAMED_INSTANCE_7 recno=7
  UNNAMED_INSTANCE_8 recno=8
  ***************************************************************************
  MTTR RECORDS
  ***************************************************************************

  (size = 100, compat>  last-recid= 0, old-recno = 0, last-recno = 0)
  (extent = 1, blkno = 157, numrecs = 8)
  MTTR record for thread 1
  MTTR statistics status: 3
  Init time: Avg: 47090974 us, Times measured: 4
  File open time: Avg: 11225 us, Times measured: 21
  Log block read time: Avg: 20 us, Times measured: 65536
  Data block read/claim time: Avg: 170 us, Times measured: 1000
  Data block write time: Avg: 390 us
  1000 change vector apply time: Avg: 112435 us, Times measured: 37
  Ratio Information:
  # of log blocks measured: 207891
  # of data blocks measured: 12536
  # of change vectors measured: 564444
  ***************************************************************************
  STANDBY DATABASE MAP RECORDS
  ***************************************************************************

  (size = 400, compat>  last-recid= 0, old-recno = 0, last-recno = 0)
  (extent = 1, blkno = 160, numrecs = 10)
  ***************************************************************************
  RESTORE POINT RECORDS
  ***************************************************************************

  (size = 212, compat>  last-recid= 0, old-recno = 0, last-recno = 0)
  (extent = 1, blkno = 161, numrecs = 2048)
  三、控制文件的管理
  规划原则:多路复用,建议存放到不同的磁盘或同一磁盘不同的分区
  个数与位置及状态管理:
  查看控制文件的状态是否与参数定义中的相吻合,当数据库发生结构修改时,将修改内容同时写入控制文件
  备份管理
  恢复管理
  新建控制文件语句
  spfile或pfile都可以实现对控制文件的个数及位置管理
  spfile步骤

  修改spfile参数中的control_files   -->  一致性关闭数据库
  增加或减少控制文件(cp or mv)
  启动数据库使用spfile
  验证结果
  pfile步骤
  一致性关闭数据库
  修改pfile参数(vi或vim)   修改*.control_files=......这一段
  增加或减少控制文件(cp or mv)
  启动数据库使用pfile
  验证结果
  --演示spfile修改控制文件
  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/oradata/orcl/con
  trol03.ctl
  --将控制文件减少到一个

  SQL>>
  System>  SQL> shutdown immediate;
  Database closed.
  Database dismounted.
  ORACLE instance shut down.
  SQL> startup mount
  ORACLE instance started.
  Total System Global Area251658240 bytes

  Fixed>
  Variable>  Database Buffers          159383552 bytes
  Redo Buffers                2973696 bytes
  Database mounted.
  --再次查看参数文件,已显示为一个
  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
  --增加控制文件(在nomount状态下即可修改)

  SQL>>  2'/u01/app/oracle/oradata/orcl/control02.ctl',
  3'/u01/app/oracle/oradata/orcl/control03.ctl'
  4scope = spfile;

  System>  --启动时可以看到在实例阶段出现了版本号不一致的问题
  SQL> startup force
  ORACLE instance started.
  Total System Global Area251658240 bytes

  Fixed>
  Variable>  Database Buffers          159383552 bytes
  Redo Buffers                2973696 bytes
  ORA-00214: control file '/u01/app/oracle/oradata/orcl/control01.ctl' version
  1051 inconsistent with file '/u01/app/oracle/oradata/orcl/control02.ctl'
  version 1049
  --处理办法,用版本号高的控制文件覆盖版本号低的控制文件
  SQL> host cp /u01/app/oracle/oradata/orcl/control01.ctl /u01/app/oracle/oradata/orcl/control02.ctl;
  SQL> host cp /u01/app/oracle/oradata/orcl/control01.ctl /u01/app/oracle/oradata/orcl/control03.ctl;

  SQL>>
  Database>
  SQL>>
  Database>  对于控制文件丢失的情况下,通过查看参数文件中设置,使用操作系统命令逐个查看这些文件是否存在
  SQL> host ls /u01/app/oracle/oradata/orcl/control01.ctl
  /u01/app/oracle/oradata/orcl/control01.ctl
  SQL> host ls /u01/app/oracle/oradata/orcl/control02.ctl
  /u01/app/oracle/oradata/orcl/control02.ctl
  查看控制文件所在的目录可用空间及控制文件的大小,建议不要超过100MB
  SQL> host ls /u01/app/oracle/oradata/orcl/c*.ctl -lh
  -rw-r----- 1 oracle oinstall 6.8M May 23 10:55 /u01/app/oracle/oradata/orcl/control01.ctl
  -rw-r----- 1 oracle oinstall 6.8M May 23 10:55 /u01/app/oracle/oradata/orcl/control02.ctl
  -rw-r----- 1 oracle oinstall 6.8M May 23 10:55 /u01/app/oracle/oradata/orcl/control03.ctl
  SQL> ! df -h
  Filesystem            SizeUsed Avail Use% Mounted on
  /dev/sda2             6.4G3.9G2.2G64% /
  /dev/sdd1             6.8G3.7G2.8G58% /u01
  /dev/sdc2             1.2G   34M1.1G   3% /home
  /dev/sdc1             760M   17M704M   3% /tmp
  /dev/sda1             456M   18M415M   5% /boot
  tmpfs               450M   0450M   0% /dev/shm
  none                  450M104K450M   1% /var/lib/xenstored
  控制文件的备份
  热备:
  alter database backup controlfile to '';--热备份控制文件
  alter database backup controlfile to trace as '' ;--得到建立控制文件的脚本
  RMAN:
  backup current controlfile;
  backup database include current controlfile;
  -- 或者设置RMAN 为自动备份
  RMAN > configure controlfile autobackup on;
  --演示备份
  --用于归档模式下的恢复,直接覆盖到控制文件

  SQL>>
  Database>  --用于重建控制文件

  SQL>>
  Database>  --使用RMAN备份
  RMAN> connect target /;
  connected to target database: ORCL (DBID=1242732291)
  RMAN> backup current controlfile;   --handle为备份文件的路径
  Starting backup at 23-MAY-10
  using target database control file instead of recovery catalog
  allocated channel: ORA_DISK_1
  channel ORA_DISK_1: sid=148 devtype=DISK
  channel ORA_DISK_1: starting full datafile backupset
  channel ORA_DISK_1: specifying datafile(s) in backupset
  including current control file in backupset
  channel ORA_DISK_1: starting piece 1 at 23-MAY-10
  channel ORA_DISK_1: finished piece 1 at 23-MAY-10
  piece handle=/u01/app/oracle/flash_recovery_area/ORCL/backupset/
  2010_05_23/o1_mf_ncnnf_TAG20100523T131841_5zkgon2l_.bkp tag=TAG20100523T131841 comment=NONE
  channel ORA_DISK_1: backup set complete, elapsed time: 00:00:05
  Finished backup at 23-MAY-10
  RMAN> backup database include current controlfile;
  Starting backup at 23-MAY-10
  using target database control file instead of recovery catalog
  allocated channel: ORA_DISK_1
  channel ORA_DISK_1: sid=141 devtype=DISK
  channel ORA_DISK_1: starting full datafile backupset
  channel ORA_DISK_1: specifying datafile(s) in backupset
  input datafile fno=00001 name=/u01/app/oracle/oradata/orcl/system01.dbf
  input datafile fno=00003 name=/u,01/app/oracle/oradata/orcl/sysaux01.dbf
  input datafile fno=00005 name=/u01/app/oracle/oradata/orcl/example01.dbf
  input datafile fno=00006 name=/u01/app/oracle/oradata/orcl/tbs1_1.dbf
  input datafile fno=00007 name=/u01/app/oracle/oradata/orcl/tbs1_2.dbf
  input datafile fno=00002 name=/u01/app/oracle/oradata/orcl/undotbs01.dbf
  input datafile fno=00004 name=/u01/app/oracle/oradata/orcl/users01.dbf
  channel ORA_DISK_1: starting piece 1 at 23-MAY-10
  channel ORA_DISK_1: finished piece 1 at 23-MAY-10
  piece handle=/u01/app/oracle/flash_recovery_area/ORCL/backupset/
  2010_05_23/o1_mf_nnndf_TAG20100523T132647_5zkh4sk2_.bkp tag=TAG20100523T132647 comment=NONE
  channel ORA_DISK_1: backup set complete, elapsed time: 00:05:25
  channel ORA_DISK_1: starting full datafile backupset
  channel ORA_DISK_1: specifying datafile(s) in backupset
  including current control file in backupset
  including current SPFILE in backupset
  channel ORA_DISK_1: starting piece 1 at 23-MAY-10
  channel ORA_DISK_1: finished piece 1 at 23-MAY-10
  piece handle=/u01/app/oracle/flash_recovery_area/ORCL/backupset/
  2010_05_23/o1_mf_ncsnf_TAG20100523T132647_5zkhh5st_.bkp tag=TAG20100523T132647 comment=NONE
  channel ORA_DISK_1: backup set complete, elapsed time: 00:00:14
  Finished backup at 23-MAY-10
  RMAN> show all;
  RMAN configuration parameters are:
  CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
  CONFIGURE BACKUP OPTIMIZATION OFF; # default
  CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
  CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
  CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
  CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
  CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
  CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
  CONFIGURE MAXSETSIZE TO UNLIMITED; # default
  CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
  CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
  CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
  CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/10g/dbs/snapcf_orcl.f'; # default
  RMAN> configure controlfile autobackup on;   --将控制文件自动备份功能置为on;
  new RMAN configuration parameters:
  CONFIGURE CONTROLFILE AUTOBACKUP ON;
  new RMAN configuration parameters are successfully stored
  控制文件的恢复管理
  控制文件版本不一致的问题
  用较新版本的控制文件覆盖旧版本的控制文件
  直接修改参数control_file
  丢失问题
  归档模式下
  当归档日志全的时候,先做全备,然后使用备份的控制文件恢复即可
  当归档日志不全的时候,先做全备,然后建立新的控制文件即可
  非归档模式下
  先做全备,然后建立新的控制文件即可
  新建控制文件语句
  数据库处于mount及open状态
  执行alter database backup controlfile to trace as '';得到建立语句
  注意archievelog resetlogs 两个参数的区别
  版本不一致演示
  SQL> startup
  ORACLE instance started.
  Total System Global Area251658240 bytes

  Fixed>
  Variable>  Database Buffers          159383552 bytes
  Redo Buffers                2973696 bytes
  ORA-00214: control file '/u01/app/oracle/oradata/orcl/control01.ctl' version
  1051 inconsistent with file '/u01/app/oracle/oradata/orcl/control02.ctl'
  version 1049
  --处理办法,用版本号高的控制文件覆盖版本号低的控制文件
  SQL> host cp /u01/app/oracle/oradata/orcl/control01.ctl /u01/app/oracle/oradata/orcl/control02.ctl;
  SQL> host cp /u01/app/oracle/oradata/orcl/control01.ctl /u01/app/oracle/oradata/orcl/control03.ctl;

  SQL>>
  Database>
  SQL>>
  Database>  --控制文件部分丢失的演示,原本有两个控制文件,丢失一个
  --处理办法:
  1.将存在的控制文件复制到目的路径并更改控制文件名字为正确的控制文件名称
  2.修改控控文件参数将丢失的控制文件去掉(一般不建议使用)

  SQL>>  2'/u01/app/oracle/oradata/orcl/control02.ctl' scope = spfile;

  System>  SQL> shutdown immediate;
  Database closed.
  Database dismounted.
  ORACLE instance shut down.
  SQL> startup
  ORACLE instance started.
  Total System Global Area251658240 bytes

  Fixed>
  Variable>  Database Buffers          171966464 bytes
  Redo Buffers                2973696 bytes

  ORA-00205: error in>  $ tail -n 100 /u01/app/oracle/admin/orcl/bdump/alert_orcl.log
  ..........................
  Tue Jun8 19:03:42 2010
  starting up 1 shared server(s) ...

  MMON started with pid=11, OS>
  CJQ0 started with pid=10, OS>  Tue Jun8 19:03:44 2010
  ALTER DATABASE   MOUNT
  Tue Jun8 19:03:44 2010
  ORA-00202: control file: '/u01/app/oracle/10g/dbs/ /u01/app/oracle/oradata/orcl/c ontrol01.ctl'
  ORA-27037: unable to obtain file status
  Linux Error: 2: No such file or directory
  Additional information: 3
  Tue Jun8 19:03:47 2010

  ORA-205 signalled during:>  --从警告日志中得知,文件名为c ontrol01.ctl的文件不存在,故将其改为正确的文件名

  SQL>>  2'/u01/app/oracle/oradata/orcl/control02.ctl' scope = spfile;

  System>  SQL> startup force
  ORACLE instance started.
  Total System Global Area251658240 bytes

  Fixed>
  Variable>  Database Buffers          163577856 bytes
  Redo Buffers                2973696 bytes
  Database mounted.
  Database opened.
  非归档模式下,当所有的控制文件都丢失,只能重建控制文件来解决
  Total System Global Area251658240 bytes

  Fixed>
  Variable>  Database Buffers          167772160 bytes
  Redo Buffers                2973696 bytes

  ORA-00205: error in>  $tail -n 100 /u01/app/oracle/admin/orcl/bdump/alert_orcl.log
  ALTER DATABASE   MOUNT
  Thu Jul 15 12:13:15 2010
  ORA-00202: control file: '/u01/app/oracle/oradata/orcl/control01.ctl'
  ORA-27037: unable to obtain file status
  Linux Error: 2: No such file or directory
  --重建控制文件主要有三个需要考虑的是
  --搞清各个日志文件的大小及位置
  --搞清各个数据文件的位置
  --设置正确的字符集
  SQL> CREATE CONTROLFILE REUSE DATABASE "orcl" NOARCHIVELOG NORESTLOGS
  2MAXLOGFILES 16
  3MAXLOGMEMBER 3
  4MAXDATAFILES 20
  5MAXINSTANCES 8
  6MAXLOGHISTORY 3
  7LOGFILE
  8    GROUP 1(
  9      'u01/app/oracle/oradata/orcl/redo1.log',
  10      '/u01/app/oracle/oradata/orcl/redo01.log'

  11       )>  12    GROUP 2(
  13      '/u01/app/oracle/oradata/orcl/redo2.log',
  14      '/u01/app/oracle/oradata/orcl/redo02.log'

  15       )>  16    GROUP 3(
  17      '/u01/app/oracle/oradata/orcl/redo3.log',
  18      '/u01/app/oracle/oradata/orcl/redo03.log'

  19       )>  20DATAFILE
  21    '/u01/app/oracle/oradata/orcl/tbs1_2.dbf',
  22    '/u01/app/oracle/oradata/orcl/tbs1_1.dbf',
  23    '/u01/app/oracle/oradata/orcl/example01.dbf',
  24    '/u01/app/oracle/oradata/orcl/users01.dbf',
  25    '/u01/app/oracle/oradata/orcl/sysaux01.dbf',
  26    '/u01/app/oracle/oradata/orcl/system01.dbf',
  27    '/u01/app/oracle/oradata/orcl/undotbs01.dbf'
  28CHARACTER SET WE8ISO8859P1;
  CREATE CONTROLFILE REUSE DATABASE "orcl" NOARCHIVELOG NORESTLOGS
  *
  ERROR at line 1:
  ORA-01967: invalid option for CREATE CONTROLFILE
  SQL> save /u01/app/oracle/oradata/rectl.sql;
  Created file /u01/app/oracle/oradata/rectl.sql
  SQL> ho vim /u01/app/oracle/oradata/rectl.sql
  SQL> @/u01/app/oracle/oradata/rectl.sql
  Control file created.
  --下面给出正确执行后的语句内容
  SQL> host cat /u01/app/oracle/oradata/rectl.sql
  CREATE CONTROLFILE REUSE DATABASE "orcl" NOARCHIVELOG NORESETLOGS
  MAXLOGFILES 16
  MAXLOGMEMBERS 3
  MAXDATAFILES 20
  MAXINSTANCES 8
  MAXLOGHISTORY 3
  LOGFILE
  GROUP 1(
  '/u01/app/oracle/oradata/orcl/redo01.log'

  )>  GROUP 2(
  '/u01/app/oracle/oradata/orcl/redo2.log',
  '/u01/app/oracle/oradata/orcl/redo02.log'

  )>  GROUP 3(
  '/u01/app/oracle/oradata/orcl/redo3.log',
  '/u01/app/oracle/oradata/orcl/redo03.log'

  )>  DATAFILE
  '/u01/app/oracle/oradata/orcl/tbs1_2.dbf',
  '/u01/app/oracle/oradata/orcl/tbs1_1.dbf',
  '/u01/app/oracle/oradata/orcl/example01.dbf',
  '/u01/app/oracle/oradata/orcl/users01.dbf',
  '/u01/app/oracle/oradata/orcl/sysaux01.dbf',
  '/u01/app/oracle/oradata/orcl/system01.dbf',
  '/u01/app/oracle/oradata/orcl/undotbs01.dbf'
  CHARACTER SET WE8ISO8859P1
  /
  --将数据库切换到open 状态

  SQL>>
  Database>  SQL> select * from dual;
  D
  -
  X
  --查看已经新产生了控制文件
  SQL> host ls $ORACLE_BASE/oradata/orcl/control* -l--可以看到新增了控制文件control01.ctl和control02.ctl
  -rw-r----- 1 oracle oinstall 6012928 Jul 15 12:58 /u01/app/oracle/oradata/orcl/control01.ctl
  -rw------- 1 oracle oinstall 7389184 Jul 15 12:04 /u01/app/oracle/oradata/orcl/control01.ctl.bak
  -rw-r----- 1 oracle oinstall 6012928 Jul 15 12:58 /u01/app/oracle/oradata/orcl/control02.ctl
  归档模式下控制文件全部丢失的处理
  --首先将数据库切换到归档模式
  SQL> shutdown immediate;
  Database closed.
  Database dismounted.
  ORACLE instance shut down.
  SQL> startup mount;
  ORACLE instance started.
  Total System Global Area251658240 bytes

  Fixed>
  Variable>  Database Buffers          167772160 bytes
  Redo Buffers                2973696 bytes
  Database mounted.

  SQL>>
  Database>
  SQL>>
  Database>  --查看归档的状态
  SQL> archive log list;
  Database log mode            Archive Mode
  Automatic archival             Enabled
  Archive destination            USE_DB_RECOVERY_FILE_DEST
  Oldest online log sequence   1
  Next log sequence to archive   3
  Current log sequence         3
  --备份控制文件

  SQL>>
  Database>  SQL> create table tb_temp(id int,col1 varchar2(20));
  Table created.
  SQL> insert into tb_temp select 1,'Robinson' from dual;
  1 row created.
  SQL> commit;
  Commit complete.

  SQL>>
  System>  SQL> archive log list; --日志切换后sequence由变成
  Database log mode            Archive Mode
  Automatic archival             Enabled
  Archive destination            USE_DB_RECOVERY_FILE_DEST
  Oldest online log sequence   2
  Next log sequence to archive   4
  Current log sequence         4
  --模拟控制文件全部丢失
  SQL> startup
  ORACLE instance started.
  Total System Global Area251658240 bytes

  Fixed>
  Variable>  Database Buffers          167772160 bytes
  Redo Buffers                2973696 bytes

  ORA-00205: error in>  SQL> show parameter control
  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> ho ls /u01/app/oracle/oradata/orcl/contr*
  ls: /u01/app/oracle/oradata/orcl/contr*: No such file or directory
  --建议先对数据库作备份再将备份的控制文件复制到参数文件中指定的位置
  SQL> ho cp /u01/app/oracle/oradata/orcl/rectl.bak /u01/app/oracle/oradata/orcl/control01.ctl
  SQL> ho cp /u01/app/oracle/oradata/orcl/rectl.bak /u01/app/oracle/oradata/orcl/control02.ctl

  SQL>>
  Database>
  SQL>>  alter database open
  *
  ERROR at line 1:
  ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
  SQL> shutdown immediate;
  ORA-01109: database not open
  Database dismounted.
  ORACLE instance shut down.
  SQL> startup mount;
  ORACLE instance started.
  Total System Global Area251658240 bytes

  Fixed>
  Variable>  Database Buffers          167772160 bytes
  Redo Buffers                2973696 bytes
  Database mounted.

  SQL>>
  Database>  SQL> select * from dual;
  D
  -
  X
  SQL> select * from tb_temp;--表成功被恢复
  ID COL1
  ---------- --------------------
  1 Robinson
  SQL> drop table tb_temp purge;
  Table dropped.
  SQL> archive log list;   --日志的sequence号被置为
  Database log mode            Archive Mode
  Automatic archival             Enabled
  Archive destination            USE_DB_RECOVERY_FILE_DEST
  Oldest online log sequence   1
  Next log sequence to archive   1
  Current log sequence         1
  oracle视频教程请关注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html

页: [1]
查看完整版本: Oracle控制文件