• Oracle控制文件操作



    控制文件是连接instance和 database的纽带。记录了database的结构信息。
    控制文件是1个2进制文件。记录的是当前database的状态。
    控制文件可以有多个,在参数文件中通过control_files参数指定位置,在需要向控制文件写入时,会同步的向多个控制文件写入。读取控制文件时,只会读取第一个控制文件。如果任意一个控制文件损坏,则实例会abort。
    控制文件只能和1个database相关联。
    控制文件是在创建database的时候创建的。也可以在启动到nomount状态时重建。
    与control file相关的视图
    v$controlfile:当前instance中所有的控制文件的信息。
    v$controlfile_record_section: 控制文件中所有的section信息。


    查看当前控制文件信息:
     select * from v$controlfile;
     select * from v$parameter where name like '%control%';
     show parameter control;
     select * from v$controlfile_record_section;

    用命令修改控制文件的路径

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

    使用spfile增加控制文件个数或修改控制文件路径
    (1)利用v$controlfile 来获取现有控制文件名字和位置.
    (2)修改spfile,使用
    alter system set control_files=
    'D:DISK3CONTROL01.CTL',
    'D:DISK6CONTROL02.CTL',
    'D:DISK9CONTROL03.CTL' SCOPE=SPFIL;
    (3)正常关闭数据库,(shutdown,shutdown immediate).
    (4)使用操作系统的复制命令将现有控制文件复制到指定位置.
    (5)重新启动oracle数据库(startup)
    (6)利用数据字段v$controlfile来验证新的控制文件名字是否正确.
    (7)如有错误,重复上述操作:如果无误,删除原有的控制文件.

     

    使用pfile增加控制文件个数或修改控制文件路径
     1.干净的关闭数据库。
     2.在操作系统上复制1个新的控制文件并改名。
     3.在initSID.ora中的control_files参数中添加之前的参数文件。
     4.启动数据库。

    在oracle运行过程中备份控制文件
     1.alter database backup controlfile to 'D:aaa.bak';
     2.alter database backup controlfile to trace;  把控制文件翻译成创建控制文件的脚本,路径在用户警告文件的目录下(可以通过show parameter user_dump;查看),后缀名为trc。

    或根据下面方式找到:

    SELECT d.VALUE
    || '/'
    || LOWER (RTRIM (i.INSTANCE, CHR (0)))
    || '_ora_'
    || p.spid
    || '.trc' trace_file_name
    FROM (SELECT p.spid
    FROM v$mystat m, v$session s, v$process p
    WHERE m.statistic# = 1 AND s.SID = m.SID AND p.addr = s.paddr) p,
    (SELECT t.INSTANCE
    FROM v$thread t, v$parameter v
    WHERE v.NAME = 'thread'
    AND (v.VALUE = 0 OR t.thread# = TO_NUMBER (v.VALUE))) i,
    (SELECT VALUE
    FROM v$parameter
    WHERE NAME = 'user_dump_dest') d
    /

    3.

    run{
    backup current controlfile format'/backup1/controlfile_%d_%s.ctl';
    }

    控制文件的的恢复

    resetlog方式打开数据只要拥有当前的日志文件是可以实现完全恢复的。 
    是否需要使用resetlogs方式打开,则取决于是否使用的是备份的控制文件。
    如果使用的是备份的控制文件则需要使用resetlogs方式打开数据库;
    如果拥有当前的控制文件或者通过重建控制文件来恢复,就不需要通过resetlogs方式打开。

    RMAN>restore controlfile to '/tmp/control01.ctl' from 'c-3152029224-20051221-00'

    -------恢复控制文件用户resetlogs方式打开

    run{
    startup force nomount;

    set dbid=
    restore controlfile from autobackup;
    alter database mount;
    recover database;
    alter database open resetlogs;
    }

    -------恢复控制文件用正常方式打开
    1.startup nomount;
    2.RMAN>restore controlfile from autobackup;
    3.alter database mount;
    4.SQL>alter database backup controlfile to trace;
    5.找到trace文件
    SELECT d.VALUE
    || '/'
    || LOWER (RTRIM (i.INSTANCE, CHR (0)))
    || '_ora_'
    || p.spid
    || '.trc' trace_file_name
    FROM (SELECT p.spid
    FROM v$mystat m, v$session s, v$process p
    WHERE m.statistic# = 1 AND s.SID = m.SID AND p.addr = s.paddr) p,
    (SELECT t.INSTANCE
    FROM v$thread t, v$parameter v
    WHERE v.NAME = 'thread'
    AND (v.VALUE = 0 OR t.thread# = TO_NUMBER (v.VALUE))) i,
    (SELECT VALUE
    FROM v$parameter
    WHERE NAME = 'user_dump_dest') d
    /
    6.重建控制文件打开数据库

    重建控制文件方法如下:

    A,确定控制文件,重做日志文件,数据文件位置(A某些情况下需要);

    select * from v$controlfile;

    select * from v$logfile;

    select file#,name from v$datafile;

    B,生成可以重建控制文件的脚本

    alter database backup controlfile to trace;

    C,获取trc文件位置的脚本

    SELECT    d.VALUE
           || '/'
           || LOWER (RTRIM (i.INSTANCE, CHR (0)))
           || '_ora_'
           || p.spid
           || '.trc' trace_file_name
      FROM (SELECT p.spid
              FROM v$mystat m, v$session s, v$process p
             WHERE m.statistic# = 1 AND s.SID = m.SID AND p.addr = s.paddr) p,
           (SELECT t.INSTANCE
              FROM v$thread t, v$parameter v
             WHERE v.NAME = 'thread'
               AND (v.VALUE = 0 OR t.thread# = TO_NUMBER (v.VALUE))) i,
           (SELECT VALUE
              FROM v$parameter
             WHERE NAME = 'user_dump_dest') d
    /

    D,查看trc文件内容

    [oracle@orcl admin]$ cat /home/oracle/admin/orcl/udump/orcl_ora_10202.trc

    /home/oracle/admin/orcl/udump/orcl_ora_10202.trc

    Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

    With the Partitioning, OLAP and Data Mining options

    ORACLE_HOME = /home/oracle/oracle

    System name:   Linux

    Node name:     orcl

    Release:       2.6.18-164.el5

    Version:       #1 SMP Tue Aug 18 15:51:54 EDT 2009

    Machine:       i686

    Instance name: orcl

    Redo thread mounted by this instance: 1

    Oracle process number: 15

    Unix process pid: 10202, image: oracle@orcl (TNS V1-V3)

    *** SERVICE NAME:(SYS$USERS) 2012-05-27 12:14:16.466

    *** SESSION ID:(159.3) 2012-05-27 12:14:16.466

    *** 2012-05-27 12:14:16.466

    -- The following are current System-scope REDO Log Archival related

    -- 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" NORESETLOGS NOARCHIVELOG

       MAXLOGFILES 16

       MAXLOGMEMBERS 3

       MAXDATAFILES 100

       MAXINSTANCES 8

       MAXLOGHISTORY 292

    LOGFILE

     GROUP 1 '/home/oracle/oradata/orcl/redo01.log' SIZE 50M,

     GROUP 2 '/home/oracle/oradata/orcl/redo02.log' SIZE 50M,

     GROUP 3 '/home/oracle/oradata/orcl/redo03.log' SIZE 50M

    -- STANDBY LOGFILE

    DATAFILE

     '/home/oracle/oradata/orcl/system01.dbf',

     '/home/oracle/oradata/orcl/undotbs01.dbf',

     '/home/oracle/oradata/orcl/sysaux01.dbf',

     '/home/oracle/oradata/orcl/users01.dbf',

     '/home/oracle/oradata/orcl/example01.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.

    -- ALTER DATABASE REGISTER LOGFILE '/home/oracle/flash_recovery_area/ORCL/archivelog/2012_05_27/o1_mf_1_1_%u_.arc';

    -- ALTER DATABASE REGISTER LOGFILE '/home/oracle/flash_recovery_area/ORCL/archivelog/2012_05_27/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 '/home/oracle/oradata/orcl/temp01.dbf'

        SIZE 22020096 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;

    -- 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" RESETLOGS NOARCHIVELOG

       MAXLOGFILES 16

       MAXLOGMEMBERS 3

       MAXDATAFILES 100

       MAXINSTANCES 8

       MAXLOGHISTORY 292

    LOGFILE

     GROUP 1 '/home/oracle/oradata/orcl/redo01.log' SIZE 50M,

     GROUP 2 '/home/oracle/oradata/orcl/redo02.log' SIZE 50M,

     GROUP 3 '/home/oracle/oradata/orcl/redo03.log' SIZE 50M

    -- STANDBY LOGFILE

    DATAFILE

     '/home/oracle/oradata/orcl/system01.dbf',

     '/home/oracle/oradata/orcl/undotbs01.dbf',

     '/home/oracle/oradata/orcl/sysaux01.dbf',

     '/home/oracle/oradata/orcl/users01.dbf',

     '/home/oracle/oradata/orcl/example01.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.

    -- ALTER DATABASE REGISTER LOGFILE '/home/oracle/flash_recovery_area/ORCL/archivelog/2012_05_27/o1_mf_1_1_%u_.arc';

    -- ALTER DATABASE REGISTER LOGFILE '/home/oracle/flash_recovery_area/ORCL/archivelog/2012_05_27/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 '/home/oracle/oradata/orcl/temp01.dbf'

        SIZE 22020096 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;

    -- End of tempfile additions.

    E,获取创建控制文件的脚本,根据数据库不同状况,可以选择是使用RESETLOGS(没有重做日志的情况)/NORESETLOGS(有重做日志的情况)来重建控制文件,下面为NORESETLOGS.

    STARTUP NOMOUNT

    CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS NOARCHIVELOG

       MAXLOGFILES 16

       MAXLOGMEMBERS 3

       MAXDATAFILES 100

       MAXINSTANCES 8

       MAXLOGHISTORY 292

    LOGFILE

     GROUP 1 '/home/oracle/oradata/orcl/redo01.log' SIZE 50M,

     GROUP 2 '/home/oracle/oradata/orcl/redo02.log' SIZE 50M,

     GROUP 3 '/home/oracle/oradata/orcl/redo03.log' SIZE 50M

    -- STANDBY LOGFILE

    DATAFILE

     '/home/oracle/oradata/orcl/system01.dbf',

     '/home/oracle/oradata/orcl/undotbs01.dbf',

     '/home/oracle/oradata/orcl/sysaux01.dbf',

     '/home/oracle/oradata/orcl/users01.dbf',

     '/home/oracle/oradata/orcl/example01.dbf'

    CHARACTER SET WE8ISO8859P1;

    RECOVER DATABASE

    ALTER DATABASE OPEN;

    ALTER TABLESPACE TEMP ADD TEMPFILE '/home/oracle/oradata/orcl/temp01.dbf'

        SIZE 22020096 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;

    F,运行脚本重建控制文件

    SQL> set echo on

    SQL> STARTUP NOMOUNT

    CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS NOARCHIVELOG

       MAXLOGFILES 16

       MAXLOGMEMBERS 3

       MAXDATAFILES 100

       MAXINSTANCES 8

       MAXLOGHISTORY 292

    LOGFILE

     GROUP 1 '/home/oracle/oradata/orcl/redo01.log' SIZE 50M,

     GROUP 2 '/home/oracle/oradata/orcl/redo02.log' SIZE 50M,

     GROUP 3 '/home/oracle/oradata/orcl/redo03.log' SIZE 50M

    -- STANDBY LOGFILE

    DATAFILE

     '/home/oracle/oradata/orcl/system01.dbf',

     '/home/oracle/oradata/orcl/undotbs01.dbf',

     '/home/oracle/oradata/orcl/sysaux01.dbf',

     '/home/oracle/oradata/orcl/users01.dbf',

     '/home/oracle/oradata/orcl/example01.dbf'

    CHARACTER SET WE8ISO8859P1;

    RECOVER DATABASE

    ALTER DATABASE OPEN;

    ALTER TABLESPACE TEMP ADD TEMPFILE '/home/oracle/oradata/orcl/temp01.dbf'

        SIZE 22020096 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;

    ORACLE instance started.

    Total System Global Area 167772160 bytes

    Fixed Size                 1218316 bytes

    Variable Size             71305460 bytes

    Database Buffers          92274688 bytes

    Redo Buffers               2973696 bytes

    SQL>  2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18

    Control file created.

    SQL> Media recovery complete.

    SQL>

    Database altered.

    SQL>  2

    Tablespace altered.

  • 相关阅读:
    Thinkphp5.0实战开发一------命名空间详解
    软件测试技术实验二
    软件测试技术作业3---PrintPrimes()
    软件测试技术实验一
    Github使用教程(二)------ Github客户端使用方法
    Github使用教程(一)------ 初识Github
    软件测试技术作业2
    软件测试作业1 — 令我印象最深的BUG
    Github网站加载不完全,响应超时,如何解决
    利用puppeteer实现PDF文件导出
  • 原文地址:https://www.cnblogs.com/pangblog/p/3304123.html
Copyright © 2020-2023  润新知