准备工作

原服务器软件部署:Redhat 6.6 + Oracle 12.2.0.1 rac

Oracle12c单实例安装

1、创建恢复服务器,设置大于原库数据大小的磁盘容量。设置相同的服务器主机名参照原服务器系统及软件版本和位数配置恢复的服务器,避免恢复过程中版本差异导致的问题;

2、将rman数据文件备份、归档日志备份复制到恢复服务器中( rman备份最好制定备份位置为NFS等共享存储上,还原时可以省去传递备份的时间);

3、创建相关的目录

例如,目标服务器安装ORACLE实例时,选择了“只安装实例”选项,那么在RMAN还原之前,我们必须创建下面一些目录(这些不是必须的,有些环境甚至完全不必要。具体根据实际情况判断):

  • 创建$ORACLE_BASE/admin/$ORACLE_SID/下的六个目录;
  • $ORACLE_BASE/oradata下创建$ORACLE_SID目录;
  • RMAN备份路径目录(这个地方最好与源数据库一致,创建好后,把源数据库备份的数据文件复制到这个目录里);--非必须。
  • 归档日志目录(同样,创建好后,把需要的归档日志文件复制到此目录) --非必须。
#mkdir -p /u01/app/oracle/admin/gnnt2/{adump,bdump,cdump,dpdump,pfile,udump}
#mkdir -p /u01/app/oracle/oradata/$ORACLE_SID

注意:这些工作是前期准备工作,不能到RMAN还原恢复的时候才做。

服务器A备份数据库

rman备份脚本

原库数据较大,为了节约备份空间,采用增量备份。有关增量备份的概念转至我的博文https://www.cnblogs.com/-abm/p/9963917.html

 计划任务

[oracle@swnode2 /]$ crontab -l
10 0 * * 0 /bin/sh /home/oracle/rmanbackup0.sh
10 0 * * 1 /bin/sh /home/oracle/rmanbackup1.sh
10 0 * * 2 /bin/sh /home/oracle/rmanbackup1.sh
10 0 * * 3 /bin/sh /home/oracle/rmanbackup2.sh
10 0 * * 4 /bin/sh /home/oracle/rmanbackup1.sh
10 0 * * 5 /bin/sh /home/oracle/rmanbackup1.sh
10 0 * * 6 /bin/sh /home/oracle/rmanbackup1.sh
说明: 每周日凌晨执行0级全量备份,
每周三凌晨执行一次累计增量备份,其他时间都为差异增量备份

0级备份

[oracle@swnode2 ~]$ cat rmanbackup0.sh
#!/bin/bash
#Creation: --
#Version: 1.0.
export ORACLE_SID=gnnt2
export ORACLE_BASE=/oracle/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/12.2./db_1
export PATH=$ORACLE_HOME/bin:$PATH DATE=`date +%Y-%m-%d`
LOG=/home/oracle/logs/log_rman_0_$DATA echo "================================================================================="
>>$LOG
echo "Begin backup at : `date`" >> $LOG
rman target / <<EOF >> $LOG run
{
allocate channel c1 device type disk;
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF DAYS;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/DBback/%d.%F.conf';
backup as compressed backupset incremental level database format '/DBback/0_%d_pdb_shwjs_%T_%s_%p.DBFILE';
crosscheck backup;
sql 'alter system archive log current';
sql 'alter system archive log current';
sql 'alter system archive log current';
sql 'alter system archive log current';
backup as compressed backupset archivelog all not backed up format '/DBback/arch_bak/arch_%d_%T_%s_%p.ACR';
crosscheck archivelog all;
report obsolete;
delete noprompt expired backup;
delete noprompt obsolete;
DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-8';
delete noprompt backup of archivelog all completed before 'sysdate-8';
release channel c1;
}
exit
EOF
echo "End backup at : `date`" >>$LOG #echo "Begin scp at : `date`" >>$LOG
#scp ${}/*`date +%Y%m%d`* oracle@192.168.1.61:/tmp/
#echo "End scp at : `date`" >>$LOG
echo "=================================================================================" >>$LOG exit 0

1级备份(差异增量)

[oracle@swnode2 ~]$ cat rmanbackup1.sh
#!/bin/bash
#Creation: --
#Version: 1.0.
export ORACLE_SID=gnnt2
export ORACLE_BASE=/oracle/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/12.2./db_1
export PATH=$ORACLE_HOME/bin:$PATH DATE=`date +%Y-%m-%d`
LOG=/home/oracle/logs/log_rman_1_$DATA echo "================================================================================="
>>$LOG
echo "Begin backup at : `date`" >> $LOG
rman target / <<EOF >> $LOG run
{
allocate channel c1 device type disk;
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF DAYS;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/DBback/%d.%F.conf';
backup as compressed backupset incremental level database format '/DBback/1_%d_pdb_shwjs_%T_%s_%p.DBFILE';
crosscheck backup;
sql 'alter system archive log current';
sql 'alter system archive log current';
sql 'alter system archive log current';
sql 'alter system archive log current';
backup as compressed backupset archivelog all not backed up format '/DBback/arch_bak/arch_%d_%T_%s_%p.ACR';
crosscheck archivelog all;
report obsolete;
delete noprompt expired backup;
delete noprompt obsolete;
DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-8';
delete noprompt backup of archivelog all completed before 'sysdate-8';
release channel c1;
}
exit
EOF
echo "End backup at : `date`" >>$LOG #echo "Begin scp at : `date`" >>$LOG
#scp ${}/*`date +%Y%m%d`* oracle@192.168.1.61:/tmp/
#echo "End scp at : `date`" >>$LOG
echo "=================================================================================" >>$LOG exit 0

2级备份(累计增量)

[oracle@swnode2 ~]$ cat rmanbackup2.sh
#!/bin/bash
#Creation: --
#Version: 1.0.
export ORACLE_SID=gnnt2
export ORACLE_BASE=/oracle/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/12.2./db_1
export PATH=$ORACLE_HOME/bin:$PATH DATE=`date +%Y-%m-%d`
LOG=/home/oracle/logs/log_rman_0_$DATA echo "================================================================================="
>>$LOG
echo "Begin backup at : `date`" >> $LOG
rman target / <<EOF >> $LOG run
{
allocate channel c1 device type disk;
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF DAYS;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/DBback/%d.%F.conf';
backup as compressed backupset incremental level 1 cumulative database format '/DBback/2_%d_pdb_shwjs_%T_%s_%p.DBFILE';
crosscheck backup;
sql 'alter system archive log current';
sql 'alter system archive log current';
sql 'alter system archive log current';
sql 'alter system archive log current';
backup as compressed backupset archivelog all not backed up format '/DBback/arch_bak/arch_%d_%T_%s_%p.ACR';
crosscheck archivelog all;
report obsolete;
delete noprompt expired backup;
delete noprompt obsolete;
DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-8';
delete noprompt backup of archivelog all completed before 'sysdate-8';
release channel c1;
}
exit
EOF
echo "End backup at : `date`" >>$LOG #echo "Begin scp at : `date`" >>$LOG
#scp ${}/*`date +%Y%m%d`* oracle@192.168.1.61:/tmp/
#echo "End scp at : `date`" >>$LOG
echo "=================================================================================" >>$LOG exit 0

RMAN恢复过程

A数据库为要被还原的数据库,B数据库为Rman还原库

拷贝A数据库服务器上的pfile至B并修改

建议备份恢复前提前准备好恢复数据库上pfile,具体方法如下

1、获取原库的pfile,并修改

SQL> create pfile='/RmanBackup/init.ora' from spfile;
文件已创建。 将pfile文件复制到恢复主机上,
修改其中的部分配置为备库的具体值。主要修改数据存储路径(红色标识),创建修改后的路径,与配置文件对应

#cd /u01/app/oracle/product/12.2.0/db_1/dbs/


[oracle@swnode2 dbs]$ cat initgnnt2.ora
gnnt1.__data_transfer_cache_size=0
gnnt2.__data_transfer_cache_size=0
gnnt2.__db_cache_size=39594229760
gnnt1.__db_cache_size=39325794304
gnnt1.__inmemory_ext_roarea=0
gnnt2.__inmemory_ext_roarea=0
gnnt1.__inmemory_ext_rwarea=0
gnnt2.__inmemory_ext_rwarea=0
gnnt1.__java_pool_size=805306368
gnnt2.__java_pool_size=671088640
gnnt1.__large_pool_size=939524096
gnnt2.__large_pool_size=805306368
gnnt1.__oracle_base='/oracle/app/oracle'#ORACLE_BASE set from environment
gnnt2.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
gnnt1.__pga_aggregate_target=13824425984
gnnt2.__pga_aggregate_target=13824425984
gnnt1.__sga_target=55029268480
gnnt2.__sga_target=55029268480
gnnt1.__shared_io_pool_size=536870912
gnnt2.__shared_io_pool_size=0
gnnt2.__shared_pool_size=13824425984
gnnt1.__shared_pool_size=13287555072
gnnt1.__streams_pool_size=0
gnnt2.__streams_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/gnnt/adump'
*.audit_trail='NONE'
*.cluster_database=false #单实例故使用false
*.compatible='12.2.0'
*.control_file_record_keep_time=15
*.control_files='/data/conf_dir/current.261.972470897'
*.db_block_size=8192
*.db_create_file_dest='/u01/app/oracle/oradata'
*.db_name='gnnt'
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=gnntXDB)'
*.enable_pluggable_database=true
family:dw_helper.instance_mode='read-only'
gnnt2.instance_number=2
gnnt1.instance_number=1
*.local_listener='-oraagent-dummy-'
*.log_archive_dest_1='LOCATION=/u01/app/oracle/acfs_arch'
*.log_archive_format='%t_%s_%r.dbf'
*.nls_language='SIMPLIFIED CHINESE'
*.nls_territory='CHINA'
*.open_cursors=300
*.pga_aggregate_target=13107m
*.processes=15000
*.remote_login_passwordfile='exclusive'
*.sga_target=52428m
gnnt2.thread=2
gnnt1.thread=1
gnnt1.undo_tablespace='UNDOTBS1'
gnnt2.undo_tablespace='UNDOTBS2'

2、rman下用修改后的pfile启动至nomount状态,恢复控制文件

RMAN> startup nomount pfile='/u01/app/oracle/product/12.2.0/db_1/dbs/initgnnt2.ora';
Oracle instance started
Total System Global Area bytes
Fixed Size bytes
Variable Size bytes
Database Buffers bytes
Redo Buffers bytes

恢复控制文件(这一步必须nomount状态)

RMAN> restore controlfile from '/data/conf_ORCL_c-1508459345-20181125-00';

Starting restore at -NOV-
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID= device type=DISK channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: ::
output file name=/u01/app/oracle/oradata/racdb11/current.256.980678617
output file name=/u01/app/oracle/oradata/racdb11/current.257.980678613
Finished restore at -NOV-

3、启动到mount状态,恢复数据库

RMAN> alter database mount;

Statement processed
released channel: ORA_DISK_1

5、注册备份目录到控制文件,-----------把拷贝过来的备份文件目录注册到控制文件,告诉控制文件我的备份在这个目录

RMAN> CATALOG START WITH '/DBback/';

restore还原数据库文件

1、修改数据文件位置

由于RAC用的是ASM存储管理的,现在是本地文件,需要修改数据文件名所以要newname一下
使用以下语句查出来所有的数据文件,改为本地文件名字

SQL>select 'SET NEWNAME FOR DATAFILE '|| file# ||' to ' ||''''|| name ||''''|| ';' from v$datafile;

查询到的结果修改,去掉SQL格式,修改正确的路径。

rman下 run{}中执行还原

run{
allocate channel d1 type disk;
allocate channel d2 type disk;
allocate channel d3 type disk;
allocate channel d4 type disk;
SET NEWNAME FOR DATAFILE to '/u01/app/oracle/oradata/DATAFILE/system.257.972470727';
SET NEWNAME FOR DATAFILE to '/u01/app/oracle/oradata/DATAFILE/sysaux.258.972470787';
SET NEWNAME FOR DATAFILE to '/u01/app/oracle/oradata/DATAFILE/undotbs1.259.972470823';
SET NEWNAME FOR DATAFILE to '/u01/app/oracle/oradata/4700A987085B3DFAE05387E5E50A8C7B/DATAFILE/system.270.972471005';
SET NEWNAME FOR DATAFILE to '/u01/app/oracle/oradata/4700A987085B3DFAE05387E5E50A8C7B/DATAFILE/sysaux.269.972471005';
SET NEWNAME FOR DATAFILE to '/u01/app/oracle/oradata/DATAFILE/users.260.972470825';
SET NEWNAME FOR DATAFILE to '/u01/app/oracle/oradata/4700A987085B3DFAE05387E5E50A8C7B/DATAFILE/undotbs1.271.972471005';
SET NEWNAME FOR DATAFILE to '/u01/app/oracle/oradata/DATAFILE/undotbs2.273.972471285';
SET NEWNAME FOR DATAFILE to '/u01/app/oracle/oradata/68E9F82A20250D37E053650DA8C0828F/DATAFILE/system.282.972471893';
SET NEWNAME FOR DATAFILE to '/u01/app/oracle/oradata/68E9F82A20250D37E053650DA8C0828F/DATAFILE/sysaux.283.972471893';
SET NEWNAME FOR DATAFILE to '/u01/app/oracle/oradata/68E9F82A20250D37E053650DA8C0828F/DATAFILE/undotbs1.281.972471893';
SET NEWNAME FOR DATAFILE to '/u01/app/oracle/oradata/68E9F82A20250D37E053650DA8C0828F/DATAFILE/undo_2.285.972471941';
SET NEWNAME FOR DATAFILE to '/u01/app/oracle/oradata/68E9F82A20250D37E053650DA8C0828F/DATAFILE/users.286.972471947';
SET NEWNAME FOR DATAFILE to '/u01/app/oracle/oradata/6900B0297CC66549E053650DA8C0B038/DATAFILE/system.292.972569467';
SET NEWNAME FOR DATAFILE to '/u01/app/oracle/oradata/6900B0297CC66549E053650DA8C0B038/DATAFILE/sysaux.293.972569467';
SET NEWNAME FOR DATAFILE to '/u01/app/oracle/oradata/6900B0297CC66549E053650DA8C0B038/DATAFILE/undotbs1.291.972569465';
SET NEWNAME FOR DATAFILE to '/u01/app/oracle/oradata/6900B0297CC66549E053650DA8C0B038/DATAFILE/users.289.973098773';
SET NEWNAME FOR DATAFILE to '/u01/app/oracle/oradata/6900B0297CC66549E053650DA8C0B038/DATAFILE/users.287.973099325';
SET NEWNAME FOR DATAFILE to '/u01/app/oracle/oradata/6900B0297CC66549E053650DA8C0B038/DATAFILE/users.288.973099375';
SET NEWNAME FOR DATAFILE to '/u01/app/oracle/oradata/6900B0297CC66549E053650DA8C0B038/DATAFILE/users.290.973099407';
SET NEWNAME FOR DATAFILE to '/u01/app/oracle/oradata/6900B0297CC66549E053650DA8C0B038/DATAFILE/undo_2.295.974139333';
SET NEWNAME FOR DATAFILE to '/u01/app/oracle/oradata/6900B0297CC66549E053650DA8C0B038/DATAFILE/users05.dbf';
SET NEWNAME FOR DATAFILE to '/u01/app/oracle/oradata/6900B0297CC66549E053650DA8C0B038/DATAFILE/users06.dbf';
SET NEWNAME FOR DATAFILE to '/u01/app/oracle/oradata/6900B0297CC66549E053650DA8C0B038/DATAFILE/users07.dbf';
SET NEWNAME FOR DATAFILE to '/u01/app/oracle/oradata/DATAFILE/system01.dbf';
SET NEWNAME FOR DATAFILE to '/u01/app/oracle/oradata/DATAFILE/sysaux.dbf';
SET NEWNAME FOR DATAFILE to '/u01/app/oracle/oradata/6900B0297CC66549E053650DA8C0B038/DATAFILE/sysaux01.dbf';
SET NEWNAME FOR DATAFILE to '/u01/app/oracle/oradata/6900B0297CC66549E053650DA8C0B038/DATAFILE/users08.dbf';
SET NEWNAME FOR DATAFILE to '/u01/app/oracle/oradata/6900B0297CC66549E053650DA8C0B038/DATAFILE/users09.dbf';
SET NEWNAME FOR DATAFILE to '/u01/app/oracle/oradata/6900B0297CC66549E053650DA8C0B038/DATAFILE/users10.dbf';
SET NEWNAME FOR DATAFILE to '/u01/app/oracle/oradata/6900B0297CC66549E053650DA8C0B038/DATAFILE/users11.dbf';
SET NEWNAME FOR DATAFILE to '/u01/app/oracle/oradata/6900B0297CC66549E053650DA8C0B038/DATAFILE/users.306.997209999';
SET NEWNAME FOR DATAFILE to '/u01/app/oracle/oradata/6900B0297CC66549E053650DA8C0B038/DATAFILE/users.307.1000716387';
SET NEWNAME FOR DATAFILE to '/u01/app/oracle/oradata/6900B0297CC66549E053650DA8C0B038/DATAFILE/users.308.1000717873';
restore database;
switch datafile all;
release channel d4;
release channel d3;
release channel d2;
release channel d1;
}

内容较多,点击展开

recover database

这里有以下几种不完全恢复方式

1、恢复到问题时间点

[oracle@swnode2 oradata]$ export NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss'
[oracle@swnode2 oradata]$ rman target / Recovery Manager: Release 12.2.0.1. - Production on Sun Nov :: Copyright (c) , , Oracle and/or its affiliates. All rights reserved. connected to target database: ORCL (DBID=, not open) RMAN> recover database until time '2018-11-27 19:00:00';
----------------------------------------------------------------------------------------------------------------------
也可以
RMAN> sql "alter session set nls_date_format=''yyyy-mm-dd hh24:mi:ss''";
RMAN> recover database until time '2018-11-27 19:00:00';

 2、恢复到指定scn

也可以基于scn恢复,如何获取归档日志最后的scn号呢?

这个scn根据在rman下通过查看备份集详情获得

RMAN>list backupset;
BS Key Size Device Type Elapsed Time Completion Time
------- ---------- ----------- ------------ ---------------
.42G DISK :: -NOV-
BP Key: Status: AVAILABLE Compressed: YES Tag: TAG20181127T033133
Piece Name: /DBback/arch_bak/arch_GNNT_20181127_1834_1.ACR List of Archived Logs in backup set
Thrd Seq Low SCN Low Time Next SCN Next Time
---- ------- ---------- --------- ---------- ---------
-NOV- -NOV-
-NOV- -NOV-
-NOV- -NOV-
-NOV- -NOV-
-NOV- -NOV-
-NOV- -NOV-
-NOV- -NOV-
-NOV- -NOV-
-NOV- -NOV-
-NOV- -NOV-
-NOV- -NOV-
-NOV- -NOV-
-NOV- -NOV-
-NOV- -NOV-
-NOV- -NOV-
-NOV- -NOV-
-NOV- -NOV-
-NOV- -NOV-
-NOV- -NOV-
-NOV- -NOV-
-NOV- -NOV-
-NOV- -NOV-
-NOV- -NOV-
-NOV- -NOV-
-NOV- -NOV-
-NOV- -NOV-
-NOV- -NOV-
-NOV- -NOV-
-NOV- -NOV-
-NOV- -NOV-
-NOV- -NOV-
-NOV- -NOV-
-NOV- -NOV-
-NOV- -NOV-
-NOV- -NOV-
-NOV- -NOV-
-NOV- -NOV- BS Key Type LV Size Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
Full 20.53M DISK :: -NOV-
BP Key: Status: AVAILABLE Compressed: NO Tag: TAG20181127T035320
Piece Name: /DBback/GNNT.c---.conf
SPFILE Included: Modification time: -NOV-
SPFILE db_unique_name: GNNT
Control File Included: Ckp SCN: Ckp time: -NOV-

基于scn的恢复命令

RMAN>recover database until scn=626964005;
RMAN> recover database until scn=;

Starting recover at -- ::
using channel ORA_DISK_1
channel ORA_DISK_1: starting incremental datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
destination for restore of datafile : /data/oradata/system.292.972569467
destination for restore of datafile : /data/oradata/sysaux.293.972569467
destination for restore of datafile : /data/oradata/undotbs1.291.972569465
destination for restore of datafile : /data/oradata/users.289.973098773
destination for restore of datafile : /data/oradata/users.287.973099325
destination for restore of datafile : /data/oradata/users.288.973099375
destination for restore of datafile : /data/oradata/users.290.973099407
destination for restore of datafile : /data/oradata/undo_2.295.974139333
destination for restore of datafile : /data/oradata/users05.dbf
destination for restore of datafile : /data/oradata/users06.dbf
destination for restore of datafile : /data/oradata/users07.dbf
destination for restore of datafile : /data/oradata/sysaux01.dbf
destination for restore of datafile : /data/oradata/users08.dbf
destination for restore of datafile : /data/oradata/users09.dbf
destination for restore of datafile : /data/oradata/users10.dbf
destination for restore of datafile : /data/oradata/users11.dbf
channel ORA_DISK_1: reading from backup piece /DBback/1_GNNT_pdb_shwjs_20181126_1824_1.DBFILE
channel ORA_DISK_1: errors found reading piece handle=/DBback/1_GNNT_pdb_shwjs_20181126_1824_1.DBFILE
channel ORA_DISK_1: failover to piece handle=/data/1_GNNT_pdb_shwjs_20181126_1824_1.DBFILE tag=TAG20181126T001008
channel ORA_DISK_1: restored backup piece
channel ORA_DISK_1: restore complete, elapsed time: ::
channel ORA_DISK_1: starting incremental datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
destination for restore of datafile : /data/oradata/system.257.972470727
destination for restore of datafile : /data/oradata/sysaux.258.972470787
destination for restore of datafile : /data/oradata/undotbs1.259.972470823
destination for restore of datafile : /data/oradata/users.260.972470825
destination for restore of datafile : /data/oradata/undotbs2.273.972471285
destination for restore of datafile : /data/oradata/system01.dbf
destination for restore of datafile : /data/oradata/sysaux.dbf
channel ORA_DISK_1: reading from backup piece /DBback/1_GNNT_pdb_shwjs_20181126_1825_1.DBFILE
channel ORA_DISK_1: errors found reading piece handle=/DBback/1_GNNT_pdb_shwjs_20181126_1825_1.DBFILE
channel ORA_DISK_1: failover to piece handle=/data/1_GNNT_pdb_shwjs_20181126_1825_1.DBFILE tag=TAG20181126T001008
channel ORA_DISK_1: restored backup piece
channel ORA_DISK_1: restore complete, elapsed time: ::
channel ORA_DISK_1: starting incremental datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
destination for restore of datafile : /data/oradata/undotbs1.291.972569465
destination for restore of datafile : /data/oradata/undo_2.295.974139333
destination for restore of datafile : /data/oradata/sysaux01.dbf
destination for restore of datafile : /data/oradata/users09.dbf
destination for restore of datafile : /data/oradata/users10.dbf
destination for restore of datafile : /data/oradata/users11.dbf
channel ORA_DISK_1: reading from backup piece /DBback/1_GNNT_pdb_shwjs_20181127_1830_1.DBFILE
channel ORA_DISK_1: errors found reading piece handle=/DBback/1_GNNT_pdb_shwjs_20181127_1830_1.DBFILE
channel ORA_DISK_1: failover to piece handle=/data/1_GNNT_pdb_shwjs_20181127_1830_1.DBFILE tag=TAG20181127T001010
channel ORA_DISK_1: restored backup piece
channel ORA_DISK_1: restore complete, elapsed time: :: starting media recovery archived log for thread with sequence is already on disk as file /data/acfs_arch/1_3585_972470900.dbf
archived log for thread with sequence is already on disk as file /data/acfs_arch/1_3586_972470900.dbf
archived log for thread with sequence is already on disk as file /data/acfs_arch/2_2937_972470900.dbf
channel ORA_DISK_1: starting archived log restore to default destination
channel ORA_DISK_1: restoring archived log
archived log thread= sequence=
channel ORA_DISK_1: restoring archived log
archived log thread= sequence=
channel ORA_DISK_1: restoring archived log
archived log thread= sequence=
channel ORA_DISK_1: restoring archived log
archived log thread= sequence=
channel ORA_DISK_1: restoring archived log
archived log thread= sequence=
channel ORA_DISK_1: reading from backup piece /DBback/arch_bak/arch_GNNT_20181126_1828_1.ACR
channel ORA_DISK_1: errors found reading piece handle=/DBback/arch_bak/arch_GNNT_20181126_1828_1.ACR
channel ORA_DISK_1: failover to piece handle=/data/arch_bak/arch_GNNT_20181126_1828_1.ACR tag=TAG20181126T030616
channel ORA_DISK_1: restored backup piece
channel ORA_DISK_1: restore complete, elapsed time: ::
archived log file name=/data/acfs_arch/2_2917_972470900.dbf thread= sequence=
archived log file name=/data/acfs_arch/1_3567_972470900.dbf thread= sequence=
archived log file name=/data/acfs_arch/1_3568_972470900.dbf thread= sequence=
archived log file name=/data/acfs_arch/1_3569_972470900.dbf thread= sequence=
archived log file name=/data/acfs_arch/2_2918_972470900.dbf thread= sequence=
channel ORA_DISK_1: starting archived log restore to default destination
channel ORA_DISK_1: restoring archived log
archived log thread= sequence=
channel ORA_DISK_1: restoring archived log
archived log thread= sequence=
channel ORA_DISK_1: restoring archived log
archived log thread= sequence=
channel ORA_DISK_1: restoring archived log
archived log thread= sequence=
channel ORA_DISK_1: restoring archived log
archived log thread= sequence=
channel ORA_DISK_1: restoring archived log
archived log thread= sequence=
channel ORA_DISK_1: restoring archived log
archived log thread= sequence=
channel ORA_DISK_1: restoring archived log
archived log thread= sequence=
channel ORA_DISK_1: restoring archived log
archived log thread= sequence=
channel ORA_DISK_1: restoring archived log
archived log thread= sequence=
channel ORA_DISK_1: restoring archived log
archived log thread= sequence=
channel ORA_DISK_1: restoring archived log
archived log thread= sequence=
channel ORA_DISK_1: restoring archived log
archived log thread= sequence=
channel ORA_DISK_1: restoring archived log
archived log thread= sequence=
channel ORA_DISK_1: restoring archived log
archived log thread= sequence=
channel ORA_DISK_1: restoring archived log
archived log thread= sequence=
channel ORA_DISK_1: restoring archived log
archived log thread= sequence=
channel ORA_DISK_1: restoring archived log
archived log thread= sequence=
channel ORA_DISK_1: restoring archived log
archived log thread= sequence=
channel ORA_DISK_1: restoring archived log
archived log thread= sequence=
channel ORA_DISK_1: restoring archived log
archived log thread= sequence=
channel ORA_DISK_1: restoring archived log
archived log thread= sequence=
channel ORA_DISK_1: restoring archived log
archived log thread= sequence=
channel ORA_DISK_1: restoring archived log
archived log thread= sequence=
channel ORA_DISK_1: restoring archived log
archived log thread= sequence=
channel ORA_DISK_1: restoring archived log
archived log thread= sequence=
channel ORA_DISK_1: restoring archived log
archived log thread= sequence=
channel ORA_DISK_1: restoring archived log
archived log thread= sequence=
channel ORA_DISK_1: restoring archived log
archived log thread= sequence=
channel ORA_DISK_1: restoring archived log
archived log thread= sequence=
channel ORA_DISK_1: restoring archived log
archived log thread= sequence=
channel ORA_DISK_1: restoring archived log
archived log thread= sequence=
channel ORA_DISK_1: restoring archived log
archived log thread= sequence=
channel ORA_DISK_1: reading from backup piece /DBback/arch_bak/arch_GNNT_20181127_1834_1.ACR
channel ORA_DISK_1: errors found reading piece handle=/DBback/arch_bak/arch_GNNT_20181127_1834_1.ACR
channel ORA_DISK_1: failover to piece handle=/data/arch_bak/arch_GNNT_20181127_1834_1.ACR tag=TAG20181127T033133
channel ORA_DISK_1: restored backup piece
channel ORA_DISK_1: restore complete, elapsed time: ::
archived log file name=/data/acfs_arch/2_2919_972470900.dbf thread= sequence=
archived log file name=/data/acfs_arch/1_3570_972470900.dbf thread= sequence=
archived log file name=/data/acfs_arch/1_3571_972470900.dbf thread= sequence=
archived log file name=/data/acfs_arch/2_2920_972470900.dbf thread= sequence=
archived log file name=/data/acfs_arch/2_2921_972470900.dbf thread= sequence=
archived log file name=/data/acfs_arch/1_3572_972470900.dbf thread= sequence=
archived log file name=/data/acfs_arch/2_2922_972470900.dbf thread= sequence=
archived log file name=/data/acfs_arch/1_3573_972470900.dbf thread= sequence=
archived log file name=/data/acfs_arch/2_2923_972470900.dbf thread= sequence=
archived log file name=/data/acfs_arch/1_3574_972470900.dbf thread= sequence=
archived log file name=/data/acfs_arch/2_2924_972470900.dbf thread= sequence=
archived log file name=/data/acfs_arch/1_3575_972470900.dbf thread= sequence=
archived log file name=/data/acfs_arch/1_3576_972470900.dbf thread= sequence=
archived log file name=/data/acfs_arch/2_2925_972470900.dbf thread= sequence=
archived log file name=/data/acfs_arch/1_3577_972470900.dbf thread= sequence=
archived log file name=/data/acfs_arch/1_3578_972470900.dbf thread= sequence=
archived log file name=/data/acfs_arch/1_3579_972470900.dbf thread= sequence=
archived log file name=/data/acfs_arch/2_2926_972470900.dbf thread= sequence=
archived log file name=/data/acfs_arch/1_3580_972470900.dbf thread= sequence=
archived log file name=/data/acfs_arch/1_3581_972470900.dbf thread= sequence=
archived log file name=/data/acfs_arch/2_2927_972470900.dbf thread= sequence=
archived log file name=/data/acfs_arch/2_2928_972470900.dbf thread= sequence=
archived log file name=/data/acfs_arch/2_2929_972470900.dbf thread= sequence=
archived log file name=/data/acfs_arch/1_3582_972470900.dbf thread= sequence=
archived log file name=/data/acfs_arch/2_2930_972470900.dbf thread= sequence=
archived log file name=/data/acfs_arch/2_2931_972470900.dbf thread= sequence=
archived log file name=/data/acfs_arch/2_2932_972470900.dbf thread= sequence=
archived log file name=/data/acfs_arch/1_3583_972470900.dbf thread= sequence=
archived log file name=/data/acfs_arch/2_2933_972470900.dbf thread= sequence=
archived log file name=/data/acfs_arch/2_2934_972470900.dbf thread= sequence=
archived log file name=/data/acfs_arch/2_2935_972470900.dbf thread= sequence=
archived log file name=/data/acfs_arch/1_3584_972470900.dbf thread= sequence=
archived log file name=/data/acfs_arch/2_2936_972470900.dbf thread= sequence=
archived log file name=/data/acfs_arch/2_2937_972470900.dbf thread= sequence=
archived log file name=/data/acfs_arch/1_3585_972470900.dbf thread= sequence=
archived log file name=/data/acfs_arch/1_3586_972470900.dbf thread= sequence=
media recovery complete, elapsed time: ::
Finished recover at -- ::

点击展开

 3、12c新特性还原

RMAN 自动恢复到 REDO 终点的步骤简化

语法如下

RMAN> RECOVER DATABASE UNTIL AVAILABLE REDO;    //限制:只针对全库恢复使用这个命令

还原后的调整

修改数据库redo log位置,可根据下面sql查询出来的结果,将asm位置修改为正确目录

SQL> select 'alter database rename file '''||member||q'[' to '/u01/app/oracle/fast_recovery_area/redo';]' from v$logfile;   
//需创建红色标识目录
 将查询到的结果修改redo后面的编号,进行执行
alter database rename file '+DATA/GNNT/ONLINELOG/group_8.267.972470901' to '/u01/app/oracle/fast_recovery_area/redo1';
alter database rename file '+DATA/GNNT/ONLINELOG/group_7.266.972470901' to '/u01/app/oracle/fast_recovery_area/redo2';
alter database rename file '+DATA/GNNT/ONLINELOG/group_6.265.972470901' to '/u01/app/oracle/fast_recovery_area/redo3';
alter database rename file '+DATA/GNNT/ONLINELOG/group_5.264.972470901' to '/u01/app/oracle/fast_recovery_area/redo4';
alter database rename file '+DATA/GNNT/ONLINELOG/group_2.263.972470901' to '/u01/app/oracle/fast_recovery_area/redo5';
alter database rename file '+DATA/GNNT/ONLINELOG/group_1.262.972470901' to '/u01/app/oracle/fast_recovery_area/redo6';
alter database rename file '+DATA/GNNT/ONLINELOG/group_3.274.972471515' to '/u01/app/oracle/fast_recovery_area/redo7';
alter database rename file '+DATA/GNNT/ONLINELOG/group_4.275.972471541' to '/u01/app/oracle/fast_recovery_area/redo8';
alter database rename file '+DATA/GNNT/ONLINELOG/group_9.276.972471563' to '/u01/app/oracle/fast_recovery_area/redo9';
alter database rename file '+DATA/GNNT/ONLINELOG/group_10.277.972471587' to '/u01/app/oracle/fast_recovery_area/redo10';
alter database rename file '+DATA/GNNT/ONLINELOG/group_11.278.972471609' to '/u01/app/oracle/fast_recovery_area/redo11';
alter database rename file '+DATA/GNNT/ONLINELOG/group_12.279.972471631' to '/u01/app/oracle/fast_recovery_area/redo12';

创建spfile:create spfile from pfile

问题解决

完成后尝试打开数据库

可能问题1:
RMAN> alter database open;

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of sql statement command at 11/25/2018 18:22:48
ORA-19751: could not create the change tracking file
ORA-19750: change tracking file: '+DATA/ORCL/CHANGETRACKING/ctf.282.992257129'
ORA-17502: ksfdcre:1 Failed to create file +DATA/ORCL/CHANGETRACKING/ctf.282.992257129
ORA-17501: logical block size 4294967295 is invalid
ORA-29701: ?????????????????
ORA-17503: ksfdopn:2 Failed to open file +DATA/ORCL/CHANGETRACKING/ctf.282.992257129
ORA-15001: diskgroup "DATA" does not exist or is not mounted
ORA-15374: invalid cluster configuration

问题解决https://blog.csdn.net/jaso5935/article/details/41117733

可能问题2:

SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open

SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-00392: log 7 of thread 1 is being cleared, operation not allowed
ORA-00312: online log 7 thread 1:
'/data/u01/app/oracle/fast_recovery_area/ORCL/redo2'

解决链接:https://www.linuxidc.com/Linux/2014-11/108886.html

SQL> select group#,bytes//||'M',status from v$log;

    GROUP# BYTES//||'M'                      STATUS
---------- ----------------------------------------- ----------------
800M CLEARING
800M CLEARING
800M CLEARING
800M CLEARING
800M CLEARING_CURRENT
800M CLEARING
800M CLEARING
800M CLEARING_CURRENT
800M CLEARING
800M CLEARING
800M CLEARING GROUP# BYTES//||'M' STATUS
---------- ----------------------------------------- ----------------
800M CLEARING rows selected. SQL> alter database clear logfile group ;
alter database clear logfile group ;
alter database clear logfile group ;
alter database clear logfile group ;
alter database clear logfile group ;
alter database clear logfile group ;
alter database clear logfile group ;
alter database clear logfile group ;
alter database clear logfile group ;
alter database clear logfile group ;
alter database clear logfile group ;
alter database clear logfile group ;
Database altered.
SQL> select group#,bytes//||'M',status from v$log; GROUP# BYTES//||'M' STATUS
---------- ----------------------------------------- ----------------
800M UNUSED
800M UNUSED
800M UNUSED
800M UNUSED
800M CURRENT
800M UNUSED
800M UNUSED
800M CURRENT
800M UNUSED
800M UNUSED
800M UNUSED GROUP# BYTES//||'M' STATUS
---------- ----------------------------------------- ----------------
800M UNUSED rows selected. SQL> alter database open resetlogs; Database altered.

问题解决

可能问题3:

RMAN> recover database until available redo;

Starting recover at 04-DEC-18
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=5643 device type=DISK
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 12/04/2018 20:28:24
ORA-19698: /u01/app/oracle/fast_recovery_area/ORCL/redo5 is from different database: id=1508459345, db_name=ORCL

问题解决

命令行删除报错的redo,后重新执行recover
[oracle@swnode2 ~]$ rm /u01/app/oracle/fast_recovery_area/ORCL/redo
redo/ redo1 redo2 redo3 redo4 redo5 redo7 redo8
[oracle@swnode2 ~]$ rm /u01/app/oracle/fast_recovery_area/ORCL/redo*

恢复完成!!!

恢复完成测试启动、关闭、查询、查看Oracle运行日志。

最后一步:远程连接配置监听

1、新恢复的数据库没有密码文件,我们需要手动创建

创建前查看到没有用户密码信息
SQL> select * from v$pwfile_users; no rows selected 手动创建
[oracle@swnode2 dbs]$orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=xxxxxx force=y entries=5 //这里不创建密码文件的话sys用户登录会报 ORA-01017

2、注册监听

动态注册:

[oracle@swnode2 dbs]$ sqlplus sys/password@192.168.12.121:/gnnt  as sysdba

SQL*Plus: Release 12.2.0.1. Production on Fri Dec  :: 

Copyright (c) , , Oracle.  All rights reserved.

Last Successful login time: Fri Dec   :: +:

Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1. - 64bit Production
SQL> show parameter db_name NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_name string gnnt SQL> alter system set local_listener=''; System altered. SQL> alter system register; System altered. SQL> quit

查看监听状态

[oracle@swnode2 dbs]$ lsnrctl status

LSNRCTL for Linux: Version 12.2.0.1. - Production on -DEC- ::

Copyright (c) , , Oracle.  All rights reserved.

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 12.2.0.1. - Production
Start Date -DEC- ::
Uptime days hr. min. sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Log File /u01/app/oracle/diag/tnslsnr/swnode2/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=swnode2)(PORT=)))
Services Summary...
Service "68e9f82a20250d37e053650da8c0828f" has instance(s).
Instance "gnnt2", status READY, has handler(s) for this service...
Service "6900b0297cc66549e053650da8c0b038" has instance(s).
Instance "gnnt2", status READY, has handler(s) for this service...
Instance "gnnt2", status READY, has handler(s) for this service...
Service "gnnt" has instance(s).
Instance "gnnt2", status READY, has handler(s) for this service...
Service "gnntXDB" has instance(s).
Instance "gnnt2", status READY, has handler(s) for this service...
Service "gnntpdb01" has instance(s).
Instance "gnnt2", status READY, has handler(s) for this service...
Service "pdb_shwjs" has instance(s).
Instance "gnnt2", status READY, has handler(s) for this service...
Instance "gnnt2", status READY, has handler(s) for this service...
The command completed successfully

远程连接测试

 #sqlplus sys/psswd@IP:/sid  as sysdba

12c RAC 用Rman 恢复到异机单实例的更多相关文章

  1. Oracle RAC备份异机单实例恢复演练

    本文只节选了操作方案的部分章节: 3.   操作步骤 3.1. 异机单实例Oracle数据库软件安装 在异机上进行单实例Oracle数据库软件安装.该步骤过程不再本文中重复描述,如果对安装过程存在疑问 ...

  2. oracle备份恢复之rman恢复到异机

    注意事项: 1 此处实验环境为同平台,同字节序,同版本,源机器和目标机器相同的目录结构. 2 目标机器只需要安装oracle数据库软件即可. 3 第一次利用备份恢复测试环境,之后从源机器拷贝备份到目标 ...

  3. rman备份与异机恢复

    一.rman备份脚本并为定时任务 #!/bin/bashsource ~/.bash_profileexport LANG=en_USBACKUP_DATE=`date +%d`#RMAN_LOG_F ...

  4. rman 备份并异机恢复

    1.RMAN 备份脚本 RUN { CONFIGURE RETENTION POLICY DAYS; CONFIGURE CONTROLFILE AUTOBACKUP ON; CONFIGURE CO ...

  5. RAC 之 RMAN 恢复

    RAC 下的RMAN 讲究的是备份和还原的策略要一致.备份策略的不同,会导致备份结果的分步不同,进而影响恢复的策略和步骤.一般情况下,恢复策略和备份策略必须是对应的.如果备份策略进行了修改,那么恢复也 ...

  6. RAC之RMAN恢复

    之前整理的RMAN 有关还原的文章: RMAN 系列(五) ---- RMAN 还原 与 恢复 http://blog.csdn.net/tianlesoftware/archive/2010/07/ ...

  7. Oracle备份恢复之冷备份恢复与异机还原

    (同平台:rhel6.4~rhel6.4:同版本:oracle 11g 11.2.0.1~ oracle 11g 11.2.0.1) 冷备份发生在数据库关闭状态下,直接拷贝物理文件的备份方式,备份数据 ...

  8. Oracle备份恢复之热备份恢复及异机恢复

    原理: 数据库必须运行在归档模式下,否则备份没有意义.备份前冻结块头,使scn号不变化,然后cp物理文件,最后解冻块头.此过程dml语句可以正常执行,动作被写在日志文件里面,当解冻scn号后,日志文件 ...

  9. rman全备份异机恢复

    一.测试环境 [oracle@localhost ~]$ uname -a Linux localhost.localdomain -.el6.x86_64 # SMP Tue May :: EDT ...

随机推荐

  1. Salt组件之管理对象Target

    管理对象 Target 在Master上我们可以采用不同Target去管理不同的Minion.这些Target都是通过去管理和匹配Minion的ID来做的一些集合. 1.正则匹配,参数-E,你可以写任 ...

  2. Kali小技巧

    说明:此方法适用于Debian.Ubuntu等带apt工具的操作系统. sudo apt-get autoremove --purge 软件名 # 命令&参数解释: # sudo--获取 ro ...

  3. PHP sscanf() 函数

    实例 Parse a string: <?php高佣联盟 www.cgewang.com$str = "age:30 weight:60kg";sscanf($str,&qu ...

  4. PDO::commit

    PDO::commit提交一个事务(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0) 说明 语法 bool PDO::commit ( void )高佣联盟 www.c ...

  5. Maven打包方式

    转自:https://blog.csdn.net/qq_26597927/article/details/80170073 Maven打包三种方法(推荐第三种) 2018年05月02日 18:30:2 ...

  6. 埋在MySQL数据库应用中的17个关键问题!

    作者:扎瓦陈序元 来源:https://blog.csdn.net/weixin_42882439 MySQL的使用非常普遍,跟MySQL有关的话题也非常多,如性能优化.高可用性.强一致性.安全.备份 ...

  7. Spring中使用MyBatis Generator

    简介 MyBatis Generator 是由MyBatis官方提供的MyBatis代码生成器.可以根据数据库表生成相关代码,比如POJO.Mapper接口.SQL Map xml等. 使用方式 MB ...

  8. TF签名是什么?比企业签名好在哪里?

      现在苹果企业签名的服务大致分为三类,苹果企业签名.超级签名和TF签名,而TF签名TF签名又称 TestFlight 签名,是目前最稳定的签名方式. ​   「优势」   关键词:零风险;限制少;安 ...

  9. 005_针对于go语言中速率限制的思考

    在之前的go语言的速率限制这篇文章里,我们尝试了普通的速率限制,和脉冲型速率限制.其中,脉冲型速率限制是放开了限制,里面有3个请求是一次性到达,然后再按照200ms的速度限制的,之前的代码如下所示: ...

  10. 008_go语言中的Arrays数组

    代码演示 package main import "fmt" func main() { var a [5]int fmt.Println("emp:", a) ...