zoukankan      html  css  js  c++  java
  • 数据库做不完全恢复(可用于备份集异地恢复)

    环境:

    OS:Centos 7

    DB:12.2.0.1

    数据库做不完全恢复
    1.首先做个全备
    run
    {
    allocate channel ch1 device type disk;
    backup as compressed backupset full filesperset 5 database format '/u01/rman_backup/db_fullbackup_%d_%s_%p_%T';
    sql 'alter system archive log current';
    backup as compressed backupset archivelog all delete input format '/u01/rman_backup/arch_%d_%s_%p_%T';
    backup current controlfile format '/u01/rman_backup/ctl_%d_%s_%p_%T';
    backup spfile format '/u01/rman_backup/spfile_%d_%s_%p_%T';
    release channel ch1;
    crosscheck backup;
    crosscheck archivelog all;
    delete noprompt expired backup;
    delete noprompt obsolete;
    }

    2.模拟删除全部的归档日志
    rm /u01/app/oracle/oradata/ora12c/redo01.log
    rm /u01/app/oracle/oradata/ora12c/redo02.log
    rm /u01/app/oracle/oradata/ora12c/redo03.log

    3.数据库重启动
    SQL> shutdown immediate
    Database closed.
    Database dismounted.
    ORACLE instance shut down.
    SQL> startup
    ORACLE instance started.

    Total System Global Area  771751936 bytes
    Fixed Size                  8797536 bytes
    Variable Size             629146272 bytes
    Database Buffers          130023424 bytes
    Redo Buffers                3784704 bytes
    Database mounted.
    ORA-03113: end-of-file on communication channel
    Process ID: 24209
    Session ID: 1 Serial number: 41927

    发现无法启动,后台日志如下:
    Errors in file /u01/app/oracle/diag/rdbms/ora12c/ora12c/trace/ora12c_lgwr_24169.trc:
    ORA-00313: open failed for members of log group 1 of thread 1
    ORA-00312: online log 1 thread 1: '/u01/app/oracle/oradata/ora12c/redo01.log'
    ORA-27037: unable to obtain file status
    Linux-x86_64 Error: 2: No such file or directory
    Additional information: 7
    2019-12-18T16:54:07.141494-05:00
    Errors in file /u01/app/oracle/diag/rdbms/ora12c/ora12c/trace/ora12c_lgwr_24169.trc:
    ORA-00313: open failed for members of log group 1 of thread 1
    ORA-00312: online log 1 thread 1: '/u01/app/oracle/oradata/ora12c/redo01.log'
    ORA-27037: unable to obtain file status
    Linux-x86_64 Error: 2: No such file or directory
    Additional information: 7
    2019-12-18T16:54:07.142117-05:00
    Errors in file /u01/app/oracle/diag/rdbms/ora12c/ora12c/trace/ora12c_ora_24209.trc:
    ORA-00313: open failed for members of log group 1 of thread
    ORA-00312: online log 1 thread 1: '/u01/app/oracle/oradata/ora12c/redo01.log'

    4.查看数据库最后的归档日志
    启动到mount状态,看下当前的归档日志情况
    SQL>startup mount
    SQL>set linesize 1000;
    SQL>column sequence# format 999999;
    SQL>column Name format a64;
    SQL> select sequence#,name,resetlogs_id from v$archived_log;

    SEQUENCE# NAME                                                             RESETLOGS_ID
    --------- ---------------------------------------------------------------- ------------
            2                                                                    1027345947
            3                                                                    1027345947
            1                                                                    1027353855
            2                                                                    1027353855
            0                                                                    1027353855
            1 /u01/app/oracle/oradata/ora12c/redo01.log                          1027353855
            2 /u01/app/oracle/oradata/ora12c/redo02.log                          1027353855
            0 /u01/app/oracle/oradata/ora12c/redo03.log                          1027353855
            1                                                                                                     1027355918
            2 /u01/app/oracle/archive_log/1_2_1027355918.dbf                     1027355918

    10 rows selected.

    可以看到最后的归档日志是2,我们查看下该归档日志是否存在
    [oracle@localhost archive_log]$ ls -1 /u01/app/oracle/archive_log/1_2_1027355918.dbf
    /u01/app/oracle/archive_log/1_2_1027355918.dbf


    或是在rman模式下查看
    RMAN> list archivelog all;

    List of Archived Log Copies for database with db_unique_name ORA12C
    =====================================================================

    Key     Thrd Seq     S Low Time           
    ------- ---- ------- - -------------------
    10      1    2       A 2019-12-18 16:43:19
            Name: /u01/app/oracle/archive_log/1_2_1027355918.dbf


    5.进行不完全恢复

    启动数据库到mount状态
    RMAN> shutdown immediate
    RMAN> startup nomount

    恢复控制文件

    RMAN> restore controlfile from '/u01/rman_backup/db_fullbackup_ORA12C_20_1_20191218'; ##这个备份集可以使用list backup查看包含控制文件的是那个备份集
    RMAN> alter database mount;

    检查是否可以恢复
    run{
    set until sequence 3 thread 1; ##这里不包含3归档,只到2
    restore database preview;
    }

    进行恢复
    run{
    set until sequence 3 thread 1; ##这里不包含3归档,只到2
    restore database;
    recover database;
    }

    最后打开数据库
    RMAN> alter database open resetlogs;

    Statement processed

    若是在异机恢复的话,因业务的要求有可能进行多次不完全恢复,可以采用只读的方式打开数据,通过dblink连接,让业务比较数据

    alter database open read only;
    只读方式启动pdb
    SQL> alter pluggable database ORA12CPDB1 open read only;

  • 相关阅读:
    一月份反思内容:BUG & Communicate
    重构一个繁琐的数据结构
    GTD(Get Things Done)
    SortedList<TKey,TValue> 和 SortedDictionary<TKey,TValue>
    对Ado.net Entity Data Model Designer很失望
    A class to clone objects
    collection.All(x=> whatever(x)) 与 collection.Any(x=>whatever(x))
    Asp.net MVC里的TempData是一个整体
    Some tips about ubuntu server | or it may works on other linux distributions too
    每个程序员都必须遵守的编程原则
  • 原文地址:https://www.cnblogs.com/hxlasky/p/12061016.html
Copyright © 2011-2022 走看看