利用RMAN恢复整个数据库案例一
适合场合:恢复的目录一致,同时备份的过程中有归档日志
恢复的数据库目录和down机的数据库一致,还有一个就是RMAN备份的时候已经备份了归档日志。
备份脚本:
run{
allocalte channel ch1 type disk;
sql ‘alter system archive log current’;
backup as compressed backupset database format ‘/u02/rman/testdb_%T_%U’;
sql ‘alter system archive log current’;
backup as compressed backupset archivelog all format ‘/u02/rman/testarc_%T_%U’;
bakup current controlfile format ‘/u02/rman/testcon_%T_%U’;
release channel ch1;
}
delete force noprompt expired backup;
delete force noprompt obsoelet;
1. 安装Oracle服务器软件
版本尽量对应,安装过程中选择只安装软件,不创建数据库
2. 设置环境变量
su – oracle
vim ~/.bash_profile
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/10g/db_1
export ORACLE_SID=test --这个一定要对应
export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin
unset USERNAME
生效:source ~/.bash_profile
3. 创建相应的目录和文件,和之前服务器的一致,信息可以从rman备份的log文件看到,包括如下:
mkdir $ORACLE_BASE/admin/SID/{a,b,c,d,u}dump –p
mkdir $ORACLE_BASE/admin/SID/pfile–p
mkdir $ORACLE_BASE/oradata/SID –p
创建口令文件:
orapwd file=$ORACLE_HOME/dbs/orapwtest password=oracle entires=10
4. 拷贝备份和归档到恢复机器对应的路径下,特别是rman备份的路径,否则会报错
5. 配置主机名,监听,IP
6. 恢复数据库的过程
1)rman target / nocatalog
Recovery Manager: Release 10.2.0.4.0 - Production on Thu Sep 16 13:55:31 2010
Copyright (c) 1982, 2007, Oracle. All rights reserved.
connected to target database (not started)
2)RMAN> startup nomount;
startup failed: ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/u01/app/oracle/10g/db_1/dbs/inittest.ora'
starting Oracle instance without parameter file for retrival of spfile
Oracle instance started
上面的意思是说:没有实例需要的初始化参数文件,由于没有参数文件,所以会报错,但实例已经启动
Total System Global Area 159383552 bytes
Fixed Size 1266344 bytes
Variable Size 54529368 bytes
Database Buffers 100663296 bytes
Redo Buffers 2924544 bytes
3)恢复初始化参数文件
这里需要注意的是,要找对对应的备份文件,逐一尝试,一般找备份比较后而且小的
RMAN> restore spfile from '/u02/rman/testdb_20100916_05lo1lg0_1_1';
Starting restore at 16-SEP-10
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=36 devtype=DISK
channel ORA_DISK_1: autobackup found: /u02/rman/testdb_20100916_05lo1lg0_1_1
channel ORA_DISK_1: SPFILE restore from autobackup complete
Finished restore at 16-SEP-10
4)恢复控制文件
RMAN> shutdown immediate;
Oracle instance shut down
RMAN> startup nomount;
connected to target database (not started)
Oracle instance started
Total System Global Area 167772160 bytes
Fixed Size 1266392 bytes
Variable Size 62917928 bytes
Database Buffers 100663296 bytes
Redo Buffers 2924544 bytes
RMAN> restore controlfile from '/u02/rman/testcon_20100916_07lo1lg8_1_1';
Starting restore at 16-SEP-10
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=101 devtype=DISK
channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: 00:00:02
output filename=/u01/app/oracle/oradata/test/control01.ctl
output filename=/u01/app/oracle/oradata/test/control02.ctl
output filename=/u01/app/oracle/oradata/test/control03.ctl
Finished restore at 16-SEP-10
5)将数据启动到mount状态
RMAN> alter database mount;
database mounted
released channel: ORA_DISK_1
6)恢复数据库
后面出现的错误是指个别日志不同步,所以最好就是把归档一起拷贝全
RMAN> run{
2> restore database;
3> recover database;
4> }
7)以resetlogs打开数据库
[oracle@sdb dbs]$ sqlplus / as sysdbaSQL*Plus: Release 10.2.0.4.0 - Production on Thu Sep 16 14:02:58 2010
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> alter database open resetlogs;
Database altered.
若在6)数据库恢复的过程中出现问题,可以参考如下的步骤进行
在恢复完控制文件后,启动到mount状态下,在sqlplus提示符下运行如下查询
1. sql>select file#,checkpoint_change# from v$datafile;
注:如果出现科学记数法显示不了checkpoint_change#列的时候,可以通过如下命令让其显示完全
set numw 15;
发现所有数据文件的checkpoint scn是52873354,因此需要scn大于52873354的归档日志来修复数据库
2.在rman提示符下运行list backup of archivelog all,发现scn大于52873354的归档日志的sequence范围是1052至1097,在rman提示符下运行
restore archivelog sequence between 1052 and 1097; 恢复归档日志(mount)
3.在sqlplus提示符下运行命令alter database flashback off;关闭flashback,然后在rman提示符下运行如下命令块修复数据库
rman>Run {
Set until sequence=1098;
retore database;
Recover database;
}
利用RMAN恢复整个数据库案例二
适合场合:目录一致,没有进行归档的备份
恢复的数据库目录和down机的数据库一致,RMAN备份的时候没有备份归档,恢复的时候,应该尽可能的把数据库做全备的开始的所有后面的归档尽可能拷贝过去,这个和目前公司的有些服务器备份策略一致
说明:做数据库备份的前,用户test/test下只有hello,hell2,hello4,hello3表,备份完成后创建了表hello5,结合RMAN和归档日志进行恢复,验证备份恢复完以后,hello5表也存在
备份脚本:
run{
allocate channel ch1 type disk;
sql ‘alter system archive log current’;
backup as compressed backupset database format ‘/u02/rman/testdb_%T_%U’;
sql ‘alter system archive log current’;
backup current controlfile format ‘/u02/rman/testcon_%T_%U’;
release channel ch1;
}
恢复过程如下:
其中1,2,3,4和上面的过程一样,下面是步骤5恢复数据的过程:
6.利用rman恢复
[oracle@sdb test]$ rman target / nocatalogRecovery Manager: Release 10.2.0.4.0 - Production on Sun Sep 19 12:02:47 2010
Copyright (c) 1982, 2007, Oracle. All rights reserved.
connected to target database (not started)
1)恢复spfile,一般找小的备份文件
RMAN> startup nomount;
startup failed: ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/u01/app/oracle/10g/db_1/dbs/inittest.ora'
starting Oracle instance without parameter file for retrival of spfile
Oracle instance started
Total System Global Area 159383552 bytes
Fixed Size 1266344 bytes
Variable Size 54529368 bytes
Database Buffers 100663296 bytes
Redo Buffers 2924544 bytes
RMAN> restore spfile from '/u02/rman/testdb_20100919_0llo9foo_1_1';
Starting restore at 19-SEP-10
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=36 devtype=DISK
channel ORA_DISK_1: autobackup found: /u02/rman/testdb_20100919_0llo9foo_1_1
channel ORA_DISK_1: SPFILE restore from autobackup complete
Finished restore at 19-SEP-10
RMAN> shutdown immediate;
Oracle instance shut down
RMAN> startup nomount;
connected to target database (not started)
Oracle instance started
Total System Global Area 167772160 bytes
Fixed Size 1266392 bytes
Variable Size 75500840 bytes
Database Buffers 88080384 bytes
Redo Buffers 2924544 bytes
--说明恢复成功
2)恢复控制文件
RMAN> restore controlfile from '/u02/rman/testcon_20100919_0mlo9fov_1_1';
Starting restore at 19-SEP-10
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=101 devtype=DISK
channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: 00:00:02
output filename=/u01/app/oracle/oradata/test/control01.ctl
output filename=/u01/app/oracle/oradata/test/control02.ctl
output filename=/u01/app/oracle/oradata/test/control03.ctl
Finished restore at 19-SEP-10
3)启动数据库到mount状态,恢复数据库
RMAN> alter database mount;
database mounted
released channel: ORA_DISK_1
RMAN> run{
2> allocate channel ch1 type disk;
3> restore database;
4> recover database;
5> release channel ch1;
6> }
allocated channel: ch1
channel ch1: sid=101 devtype=DISK
Starting restore at 19-SEP-10
channel ch1: starting datafile backupset restore
channel ch1: specifying datafile(s) to restore from backup set
restoring datafile 00001 to /u01/app/oracle/oradata/test/system01.dbf
restoring datafile 00002 to /u01/app/oracle/oradata/test/undotbs01.dbf
restoring datafile 00003 to /u01/app/oracle/oradata/test/sysaux01.dbf
restoring datafile 00004 to /u01/app/oracle/oradata/test/users01.dbf
channel ch1: reading from backup piece /u02/rman/testdb_20100919_0klo9fna_1_1
channel ch1: restored backup piece 1
piece handle=/u02/rman/testdb_20100919_0klo9fna_1_1 tag=TAG20100919T110514
channel ch1: restore complete, elapsed time: 00:00:36
Finished restore at 19-SEP-10
Starting recover at 19-SEP-10
starting media recovery
released channel: ch1
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 09/19/2010 13:36:12
RMAN-06053: unable to perform. media recovery because of missing log
RMAN-06025: no backup of log thread 1 seq 38 lowscn 493029 found to restore
RMAN-06025: no backup of log thread 1 seq 37 lowscn 492908 found to restore
RMAN-06025: no backup of log thread 1 seq 36 lowscn 492874 found to restore
--上面说没有找到归档文件,将尽可能的归档文件拷贝过去
RMAN> exit
4)利用SQL*PLUS来恢复归档日志中的内容
Recovery Manager complete.
[oracle@sdb test]$ sqlplus / as sysdbaSQL*Plus: Release 10.2.0.4.0 - Production on Sun Sep 19 13:36:28 2010
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> recover database using backup controlfile;
ORA-00279: change 492881 generated at 09/19/2010 11:05:14 needed for thread 1
ORA-00289: suggestion : /u01/arclog/1_36_729861888.dbf
ORA-00280: change 492881 for thread 1 is in sequence #36
先AUTO再CANCLE
Specify log: {=suggested | filename | AUTO | CANCEL}
auto
ORA-00279: change 492908 generated at 09/19/2010 11:06:07 needed for thread 1
ORA-00289: suggestion : /u01/arclog/1_37_729861888.dbf
ORA-00280: change 492908 for thread 1 is in sequence #37
ORA-00278: log file '/u01/arclog/1_36_729861888.dbf' no longer needed for this
recovery
ORA-00279: change 493029 generated at 09/19/2010 11:07:40 needed for thread 1
ORA-00289: suggestion : /u01/arclog/1_38_729861888.dbf
ORA-00280: change 493029 for thread 1 is in sequence #38
ORA-00278: log file '/u01/arclog/1_37_729861888.dbf' no longer needed for this
recovery
ORA-00308: cannot open archived log '/u01/arclog/1_38_729861888.dbf'
ORA-27037: unable to obtain file status
linux Error: 2: No such file or directory
Additional information: 3
SQL> recover database using backup controlfile;
ORA-00279: change 493029 generated at 09/19/2010 11:07:40 needed for thread 1
ORA-00289: suggestion : /u01/arclog/1_38_729861888.dbf
ORA-00280: change 493029 for thread 1 is in sequence #38
Specify log: {=suggested | filename | AUTO | CANCEL}
cancel
Media recovery cancelled.
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-01113: file 1 needs media recovery
ORA-01110: data file 1: '/u01/app/oracle/oradata/test/system01.dbf'
--上面的出错信息很正常说,system01.dbf文件需要进行media recovery,由于刚才应用了归档里面的信息,所以会报错,再进去RMAN中recover database即可
SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
[oracle@sdb test]$ rman target / nocatalog;Recovery Manager: Release 10.2.0.4.0 - Production on Sun Sep 19 13:38:51 2010
Copyright (c) 1982, 2007, Oracle. All rights reserved.
connected to target database: TEST (DBID=2028008317, not open)
using target database control file instead of recovery catalog
RMAN> recover database;
Starting recover at 19-SEP-10
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=104 devtype=DISK
starting media recovery
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 09/19/2010 13:38:58
RMAN-06053: unable to perform. media recovery because of missing log
RMAN-06025: no backup of log thread 1 seq 38 lowscn 493029 found to restore