Tar方式安装异地单机恢复rac下部分表空间并前滚日志文件的实验

实验目的:
     直接用拷贝的方式安装数据库,并恢复 部分rac下备份的数据文件,不断应用日志前滚,直到最新的在线日志后再打开

实验结论:
1:相同平台下可以直接 tar软件包形式安装

2:Rac下的备份文件可以在异地单机下部分表空间做恢复

3:采用手工指定日志方式可以恢复到跟原库数据无限接近时刻.

约定:RAC环境原库为A  ,需要恢复的库为B


1>B库建用户,设置变量等
groupadd -g 6000 oinstall

useradd -g oinstall oracle

[root@liuhuigege ~]# passwd oracle
mkdir -p /u01/app/oracle
编辑环境变量.bash_profile

ORACLE_SID=bb1; export ORACLE_SID 

ORACLE_UNQNAME=bb1; export ORACLE_UNQNAME 

JAVA_HOME=/usr/local/java; export JAVA_HOME 

ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE 

ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1; export ORACLE_HOME 

ORACLE_PATH=/u01/app/common/oracle/sql; export ORACLE_PATH 

ORACLE_TERM=xterm; export ORACLE_TERM 

 NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"; export NLS_DATE_FORMAT 

TNS_ADMIN=$ORACLE_HOME/network/admin; export TNS_ADMIN 

ORA_NLS11=$ORACLE_HOME/nls/data; export ORA_NLS11 

 PATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin:$ORACLE_HOME/bin 

PATH=${PATH}:/u01/app/common/oracle/bin 

export PATH 

 LD_LIBRARY_PATH=$ORACLE_HOME/lib 

LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/oracm/lib 

LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib 

export LD_LIBRARY_PATH 

 CLASSPATH=$ORACLE_HOME/JRE 

CLASSPATH=${CLASSPATH}:$ORACLE_HOME/jlib 

CLASSPATH=${CLASSPATH}:$ORACLE_HOME/rdbms/jlib 

CLASSPATH=${CLASSPATH}:$ORACLE_HOME/network/jlib 

export CLASSPATH 

 THREADS_FLAG=native; export THREADS_FLAG 

 export TEMP=/tmp 

export TMPDIR=/tmp 

修改/etc/hosts文件,添加当前ip地址,否则sqlplus /as sysdba连接进去会报告connected

拷贝安装后的文件夹到B库(也可以tar)
scp -r diag 192.168.11.43:/u01/app/oracle
.........

2>R AC(A)环境下的 rman的备份在异地单机 (B)下的恢复
A下产生启动文件

SQL> create pfile='/u01/app/oracle/product/11.2.0/dbhome_1/dbs/bb1.ora' from spfile;

拷贝到备库

[oracle@W1 dbs]$ scp bb1.ora 192.168.11.43:/u01/app/oracle/product/11.2.0/dbhome_1/dbs/initbb1.ora

精简为最小启动参数如下 :

[oracle@liuhuigege dbs]$ cat initbb1.ora

*.compatible='11.2.0.4.0'

*.control_files='/u01/app/oracle/oradata/control01.ctl'

*.db_block_size=8192

*.db_name='bbtech'

*.diagnostic_dest='/u01/app/oracle'

*.dispatchers='(PROTOCOL=TCP) (SERVICE=bbXDB)'

*.open_cursors=300

*.pga_aggregate_target=300M

*.processes=1000

*.sga_target=1000M

undo_tablespace='UNDOTBS1'

拷贝 A备份文件到 B的对应目录下面
startup nomount;
恢复控制文件

RMAN> restore controlfile from '/u01/rman/rmanbak/c-2298175399-20151118-01';

SQL> alter database mount;

修改文件路径 ,只恢复部分需要的数据文件
run{

set newname for datafile 1 to '/u01/app/oracle/oradata/system01.dbf';

set newname for datafile 2 to '/u01/app/oracle/oradata/sysaux01.dbf';

set newname for datafile 3 to '/u01/app/oracle/oradata/undotbs01.dbf';

set newname for datafile 4 to '/u01/app/oracle/oradata/users01.dbf';

set newname for datafile 5 to '/u01/app/oracle/oradata/undotbs02.dbf';

set newname for datafile 6 to '/u01/app/oracle/oradata/pay_data01.dbf';

set newname for datafile 7 to '/u01/app/oracle/oradata/bebe01.dbf';

restore datafile 1,2,3,4,5,6,7;

switch datafile all;

}

执行恢复

RMAN> recover database skip forever tablespace CLOWNFISH,YAYA,AUDFILE,CORAL,RISK,DOLPHIN,GGS,SEA,PUBLISH,SMS;

观察恢复日志

Starting recover at 2015-11-19 15:11:49

using channel ORA_DISK_1

Executing: alter database datafile 8 offline drop <--自动offline不需要的的文件,后面recover不需要

Executing: alter database datafile 9 offline drop

Executing: alter database datafile 10 offline drop

Executing: alter database datafile 11 offline drop

Executing: alter database datafile 12 offline drop

Executing: alter database datafile 13 offline drop

Executing: alter database datafile 14 offline drop

Executing: alter database datafile 15 offline drop

Executing: alter database datafile 16 offline drop

Executing: alter database datafile 18 offline drop

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=775

channel ORA_DISK_1: restoring archived log

archived log thread=2 sequence=572

channel ORA_DISK_1: reading from backup piece /u01/rman/rmanbak/arch_BBTECH_20151118_881.bak

channel ORA_DISK_1: piece handle=/u01/rman/rmanbak/arch_BBTECH_20151118_881.bak tag=TAG20151118T012014

channel ORA_DISK_1: restored backup piece 1

channel ORA_DISK_1: restore complete, elapsed time: 00:00:25

archived log file name=/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch1_775_882555951.dbf thread=1 sequence=775

archived log file name=/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch2_572_882555951.dbf thread=2 sequence=572

unable to find archived log

archived log thread=2 sequence=573

RMAN-00571: ===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571: ===========================================================

RMAN-03002: failure of recover command at 11/19/2015 15:12:31

RMAN-06054: media recovery requesting unknown archived log for thread 2 with sequence 573 and starting SCN of 46267769   
<--recover
到的最近的scn


下面拷贝Rac(A)上备份后的所有归档文件和当前在线日志文件到B
ASMCMD> cp 2_573_882555951.dbf 2_574_882555951.dbf 2_575_882555951.dbf 2_576_882555951.dbf 2_577_882555951.dbf  /home/grid

ASMCMD> cp group_11.265.883673677 /home/grid   <---状态为 INACTIVE,对应 780日志

ASMCMD> cp group_9.365.883673197 /home/grid     <---状态为 INACTIVE

ASMCMD> cp group_12.381.883673785 /home/grid  <---状态为 CURRENT (此时新建lsl.test_reo表,并插入2条记录做测试)

                cp group_10.325.883673489 /home/grid        <--current (是在线拷贝的)

[root@W2 grid]# scp 2_57*  192.168.11.43:/home/oracle 

[root@liuhuigege oracle]# chown oracle:oinstall group_1*

手工指定从A库拷贝过来的日志文件,包括A库的在线日志文件
SQL> recover database using backup controlfile;
在最好应用A库的在线日志时候遭遇Bug错误,但再次执行一次就好了.         ORA-600 [kdblkcheckerror] (文档 ID 882875.1)
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

/home/oracle/group_9.365.883673197

ORA-10562: Error occurred while applying redo to data block (file# 1, block#

3305)

ORA-10564: tablespace SYSTEM

ORA-01110: data file 1: '/u01/app/oracle/oradata/system01.dbf'

ORA-10561: block type 'TRANSACTION MANAGED DATA BLOCK', data object# 484

ORA-00600: internal error code, arguments: [kdBlkCheckError], [1], [3305],

[6255], [], [], [], [], [], [], [], []

ORA-01112: media recovery not started

数据文件检查点一致,但跟控制文件不一致
SQL> select a.name,a.checkpoint_change# "start_SCN",b.checkpoint_change# "last_SCN"

   from v$datafile_header a, v$datafile b

   where a.file#=b.file#;

SQL> alter database open resetlogs;

ERROR at line 1:

ORA-01113: file 1 needs media recovery

ORA-01110: data file 1: '/u01/app/oracle/oradata/system01.dbf'


决定重建B库控制文件

SQL> alter database backup controlfile to trace as '/home/oracle/con.ctl';
编辑只取需要的数据文件,再次查询已经一致了

STARTUP NOMOUNT

CREATE CONTROLFILE REUSE DATABASE "BBTECH" RESETLOGS FORCE LOGGING ARCHIVELOG

    MAXLOGFILES 192

    MAXLOGMEMBERS 3

    MAXDATAFILES 1024

    MAXINSTANCES 32

    MAXLOGHISTORY 292

LOGFILE

  GROUP 1 '/u01/app/oracle/oradata/redo01.dbf'  SIZE 400M BLOCKSIZE 512,

  GROUP 2 '/u01/app/oracle/oradata/redo02.dbf'  SIZE 400M BLOCKSIZE 512

DATAFILE

  '/u01/app/oracle/oradata/system01.dbf',

  '/u01/app/oracle/oradata/sysaux01.dbf',

  '/u01/app/oracle/oradata/undotbs01.dbf',

  '/u01/app/oracle/oradata/users01.dbf',

  '/u01/app/oracle/oradata/undotbs02.dbf',

  '/u01/app/oracle/oradata/pay_data01.dbf',

  '/u01/app/oracle/oradata/bebe01.dbf'

CHARACTER SET AL32UTF8;

此时打开又新的错误

SQL> alter database open resetlogs;

ERROR at line 1:

ORA-38856: cannot mark instance UNNAMED_INSTANCE_2 (redo thread 2) as enabled

因为在原库A上有4组在线日志,这里也需要添加2

ALTER DATABASE ADD LOGFILE THREAD 2 GROUP 3 '/u01/app/oracle/oradata/redo03.dbf' SIZE 400M;

ALTER DATABASE ADD LOGFILE THREAD 2 GROUP 4 '/u01/app/oracle/oradata/redo04.dbf' SIZE 400M;

SQL> ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/temp01.dbf' size 50M;
SQL> alter database open resetlogs;

Database altered

终于ok了,而且A新建的表记录也可以查询到,无数据丢失了.

ORA-38856 is the expected error during open database resetlogs when the set of enabled instances (redo threads) in the controlfile does not match the set of enabled instances (redo threads) in datafile checkpoint. This is expected behavior in a normal RAC restore/recover/open resetlogs situation.

这句话的意思是:数据库resetlogs的时候发现控制文件中的redo threads和数据文件checkpointredo threads不一致,从而出现该问题。数据库在异常恢复过程中需要读取节点2redo信息,现在无法读取从而出现该错误。

 

除了上面另添加2组日志,也可以设置隐含参数 _ no_recovery_through_resetlogs=TRUE

RMAN Duplicate from RAC backup fails ORA-38856 (文档 ID 334899.1)











来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/61604/viewspace-1842152/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/61604/viewspace-1842152/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值