• oracle data guard备库备份恢复


      客户有套data guard环境,主库在阿里云上,备库在本地机房,现在想定期做备份,但是因为一些原因,备份阿里云上的主库实现会有些问题,所以只能备份本地的备库。目前需求就是测试备库的备份文件是否可以进行恢复,当误删除等操作之后,能否通过备份找回数据。以下为具体的测试:

    1. 在data guard的备库进行完整+归档的备份

    RMAN> run {
    2> allocate channel t1 type disk;
    3> allocate channel t2 type disk;
    4> allocate channel t3 type disk;
    5> allocate channel t4 type disk;
    6> backup as compressed backupset INCREMENTAL LEVEL 0 FORMAT '/u01/app/oracle/racdb_data_%T_%s' database;
    7> backup format '/u01/app/oracle/racdb_arch_%T_%s' skip inaccessible archivelog ALL not backed up;
    8> backup format '/u01/app/oracle/racdb_cont_%T_%s' current controlfile;
    9> release channel t1;
    10> release channel t2;
    11> release channel t3;
    12> release channel t4;
    13> }

    2. 将文件拷贝到测试库上

    [oracle@dg1 oracle]$ scp racdb_* 192.168.100.100:/u01/app/oracle/
    oracle@192.168.100.100's password: 
    racdb_arch_20171018_24                                                                                    100% 3646KB   3.6MB/s   00:00    
    racdb_arch_20171018_25                                                                                    100%   30MB  30.1MB/s   00:01    
    racdb_arch_20171018_26                                                                                    100% 2995KB   2.9MB/s   00:00    
    racdb_arch_20171018_27                                                                                    100%   59MB  59.2MB/s   00:01    
    racdb_arch_20171018_28                                                                                    100%   21MB  20.9MB/s   00:00    
    racdb_cont_20171018_29                                                                                    100% 9856KB   9.6MB/s   00:00    
    racdb_data_20171018_19                                                                                    100%  194MB  48.6MB/s   00:04    
    racdb_data_20171018_20                                                                                    100%   77MB  77.0MB/s   00:01    
    racdb_data_20171018_21                                                                                    100%   30MB  30.2MB/s   00:01    
    racdb_data_20171018_22                                                                                    100% 1104KB   1.1MB/s   00:00    
    racdb_data_20171018_23                                                                                    100%   96KB  96.0KB/s   00:00    

    3. 在主库上生成pfile文件,并拷贝到测试库上

    SQL> create pfile='/home/oracle/pfileabbott' from spfile;
    
    File created.
    
    [oracle@dg1 ~]$ scp pfileabbott 192.168.100.100:/home/oracle
    oracle@192.168.100.100's password: 
    pfileabbott                                                                                               100% 1375     1.3KB/s   00:00  

    4. 在测试库上修改参数文件

    [oracle@Abbott ~]$ mv pfileabbott $ORACLE_HOME/dbs/initabbott.ora
    [oracle@Abbott ~]$ cd $ORACLE_HOME/dbs
    [oracle@Abbott dbs]$ export ORACLE_SID=abbott
    [oracle@Abbott dbs]$ vi initabbott.ora 
    *.audit_file_dest='/u01/app/oracle/admin/abbott/adump'
    *.audit_trail='db'
    *.compatible='11.2.0.4.0'
    *.control_files='/u01/app/oracle/oradata/abbott/control01.ctl','/u01/app/oracle/fast_recovery_area/abbott/control02.ctl'
    *.db_block_size=8192
    *.db_domain=''
    *.db_name='abbott'
    *.db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'
    *.db_recovery_file_dest_size=4385144832
    *.diagnostic_dest='/u01/app/oracle'
    *.dispatchers='(PROTOCOL=TCP) (SERVICE=abbottXDB)'
    *.log_archive_dest_1='LOCATION=/u01/app/oracle/archivelog'
    *.log_archive_format='%t_%s_%r.arc'
    *.log_archive_max_processes=30
    *.open_cursors=300
    *.pga_aggregate_target=655360000
    *.processes=150
    *.remote_login_passwordfile='EXCLUSIVE'
    *.sga_target=1967128576
    *.standby_file_management='AUTO'
    *.undo_tablespace='UNDOTBS1'

    5. 测试库开启到nomount

    [oracle@Abbott dbs]$ sqlplus / as sysdba
    
    SQL*Plus: Release 11.2.0.4.0 Production on Tue Oct 17 08:24:18 2017
    
    Copyright (c) 1982, 2013, Oracle.  All rights reserved.
    
    Connected to an idle instance.
    
    SQL> startup nomount;
    ORACLE instance started.
    
    Total System Global Area 1970864128 bytes
    Fixed Size                  2254544 bytes
    Variable Size             520096048 bytes
    Database Buffers         1442840576 bytes
    Redo Buffers                5672960 bytes
    SQL> 

    6. 恢复控制文件

    [oracle@Abbott ~]$ rman target /
    
    Recovery Manager: Release 11.2.0.4.0 - Production on Tue Oct 17 09:29:20 2017
    
    Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.
    
    connected to target database: ABBOTT (not mounted)
    
    RMAN> restore controlfile from '/u01/app/oracle/racdb_cont_20171018_29';
    
    Starting restore at 17-OCT-17
    using target database control file instead of recovery catalog
    allocated channel: ORA_DISK_1
    channel ORA_DISK_1: SID=134 device type=DISK
    
    channel ORA_DISK_1: restoring control file
    channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
    output file name=/u01/app/oracle/oradata/abbott/control01.ctl
    output file name=/u01/app/oracle/fast_recovery_area/abbott/control02.ctl
    Finished restore at 17-OCT-17
    
    RMAN> alter database mount;
    
    database mounted
    released channel: ORA_DISK_1

    7. 恢复数据文件

    RMAN> restore database;
    
    Starting restore at 17-OCT-17
    allocated channel: ORA_DISK_1
    channel ORA_DISK_1: SID=150 device type=DISK
    
    channel ORA_DISK_1: starting datafile backup set restore
    channel ORA_DISK_1: specifying datafile(s) to restore from backup set
    channel ORA_DISK_1: restoring datafile 00003 to /u01/app/oracle/oradata/abbott/undotbs01.dbf
    channel ORA_DISK_1: restoring datafile 00005 to /u01/app/oracle/oradata/abbott/example01.dbf
    channel ORA_DISK_1: reading from backup piece /u01/app/oracle/racdb_data_20171018_21
    channel ORA_DISK_1: piece handle=/u01/app/oracle/racdb_data_20171018_21 tag=TAG20171018T153509
    channel ORA_DISK_1: restored backup piece 1
    channel ORA_DISK_1: restore complete, elapsed time: 00:00:15
    channel ORA_DISK_1: starting datafile backup set restore
    channel ORA_DISK_1: specifying datafile(s) to restore from backup set
    channel ORA_DISK_1: restoring datafile 00002 to /u01/app/oracle/oradata/abbott/sysaux01.dbf
    channel ORA_DISK_1: restoring datafile 00004 to /u01/app/oracle/oradata/abbott/users01.dbf
    channel ORA_DISK_1: reading from backup piece /u01/app/oracle/racdb_data_20171018_20
    channel ORA_DISK_1: piece handle=/u01/app/oracle/racdb_data_20171018_20 tag=TAG20171018T153509
    channel ORA_DISK_1: restored backup piece 1
    channel ORA_DISK_1: restore complete, elapsed time: 00:00:25
    channel ORA_DISK_1: starting datafile backup set restore
    channel ORA_DISK_1: specifying datafile(s) to restore from backup set
    channel ORA_DISK_1: restoring datafile 00001 to /u01/app/oracle/oradata/abbott/system01.dbf
    channel ORA_DISK_1: reading from backup piece /u01/app/oracle/racdb_data_20171018_19
    channel ORA_DISK_1: piece handle=/u01/app/oracle/racdb_data_20171018_19 tag=TAG20171018T153509
    channel ORA_DISK_1: restored backup piece 1
    channel ORA_DISK_1: restore complete, elapsed time: 00:00:45
    Finished restore at 17-OCT-17

    8. 恢复数据库

    RMAN> recover database;
    
    Starting recover at 17-OCT-17
    using channel ORA_DISK_1
    
    starting media recovery
    
    channel ORA_DISK_1: starting archived log restore to default destination
    channel ORA_DISK_1: restoring archived log
    archived log thread=1 sequence=196
    channel ORA_DISK_1: reading from backup piece /u01/app/oracle/racdb_arch_20171018_28
    channel ORA_DISK_1: piece handle=/u01/app/oracle/racdb_arch_20171018_28 tag=TAG20171018T153550
    channel ORA_DISK_1: restored backup piece 1
    channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
    archived log file name=/u01/app/oracle/archivelog1_196_953375126.arc thread=1 sequence=196
    unable to find archived log
    archived log thread=1 sequence=197
    RMAN-00571: ===========================================================
    RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
    RMAN-00571: ===========================================================
    RMAN-03002: failure of recover command at 10/17/2017 09:33:30
    RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 197 and starting SCN of 1907246

    9. 将数据库open

    RMAN> alter database open;
    
    database opened
    
    RMAN> quit
    
    Recovery Manager complete.

    10. 连接数据库后,无法创建表等,因为控制文件是standby controlfile,所以打开的模式为READ ONLY

    [oracle@Abbott ~]$ sqlplus / as sysdba
    
    SQL*Plus: Release 11.2.0.4.0 Production on Tue Oct 17 09:41:46 2017
    
    Copyright (c) 1982, 2013, Oracle.  All rights reserved.
    
    
    Connected to:
    Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options
    
    SQL> create table t1(a int);
    create table t1(a int)
    *
    ERROR at line 1:
    ORA-00604: error occurred at recursive SQL level 1
    ORA-16000: database open for read-only access
    
    
    SQL> select open_mode , database_role, flashback_on from v$database; 
    
    OPEN_MODE            DATABASE_ROLE    FLASHBACK_ON
    -------------------- ---------------- ------------------
    READ ONLY            PHYSICAL STANDBY NO

    11. 尝试启用备库,因缺少standby log报错

    SQL> alter database activate standby database; 
    alter database activate standby database
    *
    ERROR at line 1:
    ORA-00314: log 4 of thread 1, expected sequence# 197 doesn't match 0
    ORA-00312: online log 4 thread 1: '/u01/app/oracle/oradata/abbott/std_log4.log'
    
    
    SQL> select * from v$standby_log;
    select * from v$standby_log
                  *
    ERROR at line 1:
    ORA-00339: archived log does not contain any redo
    ORA-00334: archived log: '/u01/app/oracle/oradata/abbott/std_log4.log'

    12. 因此对缺少的log进行clear及drop(当然,这里也可以把standby redo拷贝过来,并进行open)

    SQL> alter database drop logfile group 4;
    alter database drop logfile group 4
    *
    ERROR at line 1:
    ORA-00314: log 4 of thread 1, expected sequence# 197 doesn't match 0
    ORA-00312: online log 4 thread 1: '/u01/app/oracle/oradata/abbott/std_log4.log'
    
    
    SQL>  ALTER DATABASE CLEAR LOGFILE GROUP 4;
    
    Database altered.
    
    SQL> alter database drop logfile group 4;
    
    Database altered.

    13. 再次arctive备库,启动正常,并且open之后可读写

    SQL> alter database activate standby database;   
    
    Database altered.
    
    SQL> select open_mode , database_role, flashback_on from v$database;
    
    OPEN_MODE            DATABASE_ROLE    FLASHBACK_ON
    -------------------- ---------------- ------------------
    MOUNTED              PRIMARY          NO
    
    SQL> alter database open;
    
    Database altered.
    
    SQL> select open_mode , database_role, flashback_on from v$database; 
    
    OPEN_MODE            DATABASE_ROLE    FLASHBACK_ON
    -------------------- ---------------- ------------------
    READ WRITE           PRIMARY          NO
    
    SQL> create table t1(a int);
    
    Table created.
    
    SQL> 
    SQL> archive log list;
    Database log mode              Archive Mode
    Automatic archival             Enabled
    Archive destination            /u01/app/oracle/archivelog
    Oldest online log sequence     1
    Next log sequence to archive   1
    Current log sequence           1
    SQL> 
  • 相关阅读:
    放弃antd table,基于React手写一个虚拟滚动的表格
    思考:声明式编程与命令式编程
    前端入门指南(菜鸟篇-下)
    前端入门指南(菜鸟篇-上)
    centos7 磁盘管理—— lvm的使用
    Linux 用 sftp scp命令 互传文件
    linux 通过md5查找重复文件
    Linux sort uniq 命令。简单运用
    Linux sed 命令
    shell 脚本,将/etc/目录下所有的软链接文件输出
  • 原文地址:https://www.cnblogs.com/zx3212/p/7687989.html
Copyright © 2020-2023  润新知