• 控制文件丢失


    测试环境oracle版本:19.3

    场景1:控制文件有冗余

    1、构造故障场景

    (1)查看当前控制文件配置

    SQL> show parameter control_files

    (2)构造冗余的控制文件

    SQL> alter system set control_files='/oradata/CC/control01.ctl','/oracle/oradata/control02.ctl' scope=spfile;

    SQL> shutdown immediate

    $ cp /oradata/CC/control01.ctl /oracle/oradata/control02.ctl

    SQL> startup

    SQL> show parameter control_files

    (3)构造故障

    $ rm -f /oracle/oradata/control02.ctl

    SQL> shutdown immediate

    2、解决思路

    由于一个控制文件存在,我们可以采取操作系统层拷贝的方式恢复;也可以修改spfile为一个控制文件的配置

    3、解决步骤

    方法1: 拷贝剩余控制文件到另一个目录

    SQL> shutdown abort

    $ cp /oradata/CC/control01.ctl /oracle/oradata/control02.ctl

    SQL> startup

    检查alert日志,确保没有控制文件相关报错

    此方法较为直观简单;分钟级即可恢复,无风险

    方法2:修改control_files参数为剩余的控制文件配置

    SQL> shutdown abort

    SQL> startup nomount

    SQL> alter system set control_files='/oradata/CC/control01.ctl' scope=spfile;

    SQL> shutdown immediate

    SQL> startup

    SQL> show parameter control_files

    4、风险预估

    此方法涉及修改spfile,比方法1稍复杂;分钟级即可恢复,无风险

    场景2:控制文件无冗余有备份(归档开启)

    若控制文件全部丢失,但是有备份,可以利用备份恢复控制文件

    1、构造故障场景

    (1)备份控制文件

    RMAN> backup current controlfile;

    上面的是控制文件备份集,下面的是自动备份,两个都可以作为备份集恢复控制文件

    或者查看所有的控制文件备份:

    RMAN> crosscheck backup of controlfile;

    (2)构造故障

    SQL> show parameter control_files

    $ rm -f /oradata/CC/control01.ctl

    SQL> shutdown immediate

    2、解决思路:

    需要检查是否有控制文件的最新备份,将备份恢复,再恢复数据库即可

    3、解决步骤

    SQL> shutdown abort

    $ rman target /

    RMAN> startup nomount

    查看控制文件备份:以下显示控制文件自动备份到$ORACLE_HOME/dbs下

    RMAN> show all;

    $ cd $ORACLE_HOME/dbs

    $ ls -ltr

    DBID=2288695261

    $ rman target /

    RMAN> set dbid=2288695261;

    RMAN> restore controlfile from autobackup;

    RMAN> alter database mount;

    RMAN> recover database;

     RMAN> alter database open resetlogs;

    SQL> select open_mode from v$database;

    4、风险预估

    前提是有最新的控制文件的备份,且归档无缺失,此种情况下无数据丢失,恢复的时间取决于redo大小

    场景3:无冗余无备份

    未开启归档、控制文件没有备份、没有冗余的情况下,手动创建控制文件

    1、构造故障场景

    (1)关归档

    SQL> shutdown immediate

    SQL> startup mount

    SQL> alter database noarchivelog;

    SQL> alter database open;

    SQL> archive log list

    (2)构造故障

    SQL> show parameter control_files

     $ rm -f /oradata/CC/control01.ctl

    SQL> shutdown immediate

    2、解决思路

    控制文件按照固定格式创建控制文件,手动创建前确定库名、字符集、logfile位置、datafile位置

    3、解决步骤

    SQL> shutdown abort

    SQL> startup nomount

    (1)创建控制文件

    SQL> CREATE CONTROLFILE REUSE DATABASE "CC" NORESETLOGS FORCE LOGGING NOARCHIVELOG

    MAXLOGFILES 16

    MAXLOGMEMBERS 3

    MAXDATAFILES 1000

    MAXINSTANCES 8

    MAXLOGHISTORY 2920

    LOGFILE

    group 1 '/oradata/CC/redo01.log' size 2G BLOCKSIZE 512,

    group 2 '/oradata/CC/redo02.log' size 2G BLOCKSIZE 512,

    group 3 '/oradata/CC/redo03.log' size 2G BLOCKSIZE 512,

    group 4 '/oradata/CC/redo04.log' size 2G BLOCKSIZE 512,

    group 5 '/oradata/CC/redo05.log' size 2G BLOCKSIZE 512,

    group 6 '/oradata/CC/redo06.log' size 2G BLOCKSIZE 512,

    group 7 '/oradata/CC/redo07.log' size 2G BLOCKSIZE 512,

    group 8 '/oradata/CC/redo08.log' size 2G BLOCKSIZE 512,

    group 9 '/oradata/CC/redo09.log' size 2G BLOCKSIZE 512

    -- STANDBY LOGFILE

    -- GROUP 11 '/oradata/dgtests/redo11.log' SIZE 500M BLOCKSIZE 512,

    -- GROUP 13 '/oradata/dgtests/redo13.log' SIZE 500M BLOCKSIZE 512

    DATAFILE

    '/oradata/CC/idx_abc_001.dbf',

    '/oradata/CC/idx_abc_002.dbf',

    '/oradata/CC/idx_apig_001.dbf',

    '/oradata/CC/idx_balc_001.dbf',

    '/oradata/CC/idx_bcsc_001.dbf',

    '/oradata/CC/idx_btc_001.dbf',

    '/oradata/CC/idx_cc_001.dbf',

    '/oradata/CC/idx_cc_02.dbf',

    '/oradata/CC/idx_cic_001.dbf',

    '/oradata/CC/idx_comc_001.dbf',

    '/oradata/CC/idx_cpc_001.dbf',

    '/oradata/CC/idx_crm_001.dbf',

    '/oradata/CC/idx_ctr_001.dbf',

    '/oradata/CC/idx_dap_001.dbf',

    '/oradata/CC/idx_digchan_001.dbf',

    '/oradata/CC/idx_drm_001.dbf',

    '/oradata/CC/idx_ecclub_001.dbf',

    '/oradata/CC/idx_ecinv_001.dbf',

    '/oradata/CC/idx_ecord_001.dbf',

    '/oradata/CC/idx_ecprod_001.dbf',

    '/oradata/CC/idx_esales_001.dbf',

    '/oradata/CC/idx_etl_001.dbf',

    '/oradata/CC/idx_ftf_001.dbf',

    '/oradata/CC/idx_inv_001.dbf',

    '/oradata/CC/idx_inv_002.dbf',

    '/oradata/CC/idx_jnc_001.dbf',

    '/oradata/CC/idx_med_001.dbf',

    '/oradata/CC/idx_mid_001.dbf',

    '/oradata/CC/idx_pbc_001.dbf',

    '/oradata/CC/idx_pcb_001.dbf',

    '/oradata/CC/idx_pcc_001.dbf',

    '/oradata/CC/idx_prc_001.dbf',

    '/oradata/CC/idx_quot_001.dbf',

    '/oradata/CC/idx_rbc_001.dbf',

    '/oradata/CC/idx_rbc_002.dbf',

    '/oradata/CC/idx_rlc_001.dbf',

    '/oradata/CC/idx_rpt_001.dbf',

    '/oradata/CC/idx_sett_001.dbf',

    '/oradata/CC/idx_sfa_001.dbf',

    '/oradata/CC/idx_sic_001.dbf',

    '/oradata/CC/idx_spc_001.dbf',

    '/oradata/CC/idx_spn_001.dbf',

    '/oradata/CC/idx_str_001.dbf',

    '/oradata/CC/idx_ucc_001.dbf',

    '/oradata/CC/idx_uosflow_001.dbf',

    '/oradata/CC/idx_vcoff_001.dbf',

    '/oradata/CC/sysaux01.dbf',

    '/oradata/CC/system01.dbf',

    '/oradata/CC/tab_abc_001.dbf',

    '/oradata/CC/tab_abc_002.dbf',

    '/oradata/CC/tab_abc_003.dbf',

    '/oradata/CC/tab_apig_001.dbf',

    '/oradata/CC/tab_balc_002.dbf',

    '/oradata/CC/tab_bcsc_001.dbf',

    '/oradata/CC/tab_btc_001.dbf',

    '/oradata/CC/tab_cc_001.dbf',

    '/oradata/CC/tab_cc_002.dbf',

    '/oradata/CC/tab_cc_003.dbf',

    '/oradata/CC/tab_cic_001.dbf',

    '/oradata/CC/tab_comc_001.dbf',

    '/oradata/CC/tab_cpc_001.dbf',

    '/oradata/CC/tab_crm_001.dbf',

    '/oradata/CC/tab_ctr_001.dbf',

    '/oradata/CC/tab_dap_001.dbf',

    '/oradata/CC/tab_digchan_001.dbf',

    '/oradata/CC/tab_drm_001.dbf',

    '/oradata/CC/tab_ecclub_001.dbf',

    '/oradata/CC/tab_ecinv_001.dbf',

    '/oradata/CC/tab_ecord_001.dbf',

    '/oradata/CC/tab_ecprod_001.dbf',

    '/oradata/CC/tab_esales_001.dbf',

    '/oradata/CC/tab_etl_001.dbf',

    '/oradata/CC/tab_ftf_001.dbf',

    '/oradata/CC/tab_int_001.dbf',

    '/oradata/CC/tab_inv_001.dbf',

    '/oradata/CC/tab_inv_002.dbf',

    '/oradata/CC/tab_inv_003.dbf',

    '/oradata/CC/tab_jnc_001.dbf',

    '/oradata/CC/tab_med_001.dbf',

    '/oradata/CC/tab_mid_001.dbf',

    '/oradata/CC/tab_pbc_001.dbf',

    '/oradata/CC/tab_pcb_001.dbf',

    '/oradata/CC/tab_pcc_001.dbf',

    '/oradata/CC/tab_prc_001.dbf',

    '/oradata/CC/tab_quot_001.dbf',

    '/oradata/CC/tab_rbc_001.dbf',

    '/oradata/CC/tab_rbc_002.dbf',

    '/oradata/CC/tab_rbc_003.dbf',

    '/oradata/CC/tab_rbc_004.dbf',

    '/oradata/CC/tab_rlc_001.dbf',

    '/oradata/CC/tab_rpt_001.dbf',

    '/oradata/CC/tab_sett_001.dbf',

    '/oradata/CC/tab_sfa_001.dbf',

    '/oradata/CC/tab_sic_001.dbf',

    '/oradata/CC/tab_spc_001.dbf',

    '/oradata/CC/tab_spn_001.dbf',

    '/oradata/CC/tab_str_001.dbf',

    '/oradata/CC/tab_ucc_001.dbf',

    '/oradata/CC/tab_uosflow_001.dbf',

    '/oradata/CC/tab_vcoff_001.dbf',

    '/oradata/CC/tab_vcoff_002.dbf',

    '/oradata/CC/test1.dbf',

    '/oradata/CC/test2.dbf',

    '/oradata/CC/test.dbf',

    '/oradata/CC/undotbs01.dbf',

    '/oradata/CC/undotbs02.dbf',

    '/oradata/CC/undotbs03.dbf',

    '/oradata/CC/users01.dbf'

    CHARACTER SET AL32UTF8

    ;

    按照此格式创建控制文件,格式都是一样的,要修改的一般是数据库名、是否归档、字符集等

    然后datafile和logfile根据实际位置和大小填充(千万不要漏掉数据文件)

    创建控制文件后,实例会自动mount

    (2)recover database并open

    SQL> recover database;

    SQL> alter database open;

    (3)添加tempfile

    ALTER TABLESPACE TEMP ADD TEMPFILE '/oradata/CC/temp01.dbf' REUSE,'/oradata/CC/temp02.dbf' REUSE;

    检查alert日志,若有报错,进行相应处理

    4、风险评估

    单控制文件丢失不会造成数据丢失,恢复的时间取决于redo大小

  • 相关阅读:
    json专题
    postman接收后端返回的文件流并自动下载
    多少得有点升级,才能对得起价格!iPhone15系列电池寿命见长
    如何获取springboot中所有的bean
    回应张逸老师(二)小甜甜和牛夫人?
    AgileConfig-1.9.4 发布,支持 OpenTelemetry
    聊一聊前端面临的安全威胁与解决对策
    解决windows下安装python并终端运行python弹出windows商店的最终解决方案
    I/O模型和BIO
    逆向分析 工具、加壳、安全防护篇
  • 原文地址:https://blog.csdn.net/du18020126395/article/details/127810637