基于rman的恢复操作有哪些呢
今天就跟大家聊聊有关基于rman的恢复操作有哪些呢,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
针对RMAN进行的备份,下面从几个方面利用RMAN进行一些恢复操作。
恢复
1. 对数据库进行完全介质恢复
1.1进入rman命令行
rman target / |
1.2开始备份
backup database format=' /oracle/u01/app/oracle/backup/%U'; |
1.3一致性停止数据库
shutdown immediate; |
1.4 删除所有的数据文件
rm -rf /oracle/u01/app/oracle/oradata/orcl/*.dbf |
开始恢复:
1.5 利用rman启动数据库到mount状态
RMAN> startup mount; |
1.6 数据库修复
RMAN> restore database; |
1.7 数据库恢复
RMAN> recover database; |
可以添加其他参数:
recover database delete archivelog;用于删除在恢复过程中产生的归档日志文件
recover database skip tablespace temp;指定再恢复过程中跳过临时表空间,默认是不恢 复临时表空间的。
recover database delete archivelog maxsize 100m;用于指定再恢复过程中限制自动产生 的归档大小为100m,如果超过这个大小就会被删除在循环继续使用来恢复。
1.8 启动数据库到open状态
RMAN>alter database open; |
2. 表空间的恢复
在有备份的基础上我们先模拟破坏表空间,然后将其恢复
2.1 破坏users表空间
echo "" > /oracle/u01/app/oracle/oradata/orcl/users01.dbf |
2.2 切换日志
这时我们查询表空间users中的表不一定报错,因为在内存中还有记录,查询到的
是内存中的信息,需要我们手动切换日志
SQL>alter system switch logfile; |
多执行几次,保证切换完成
2.3 检查表空间是否可用
SQL>select * from test ERROR at line 1: ORA-00376:file 4 cannot be read at this time ORA-01110: data file 4: '/oracle/u01/app/oracle/oradata/orcl/users01.dbf' |
这时发现users表空间已经不能使用
开始恢复
2.4 将表空间offline
RMAN> SQL 'alter tablespace users offline'; |
2.5修复
RMAN>restore tablespace users; |
2.6 恢复
RMAN>recover tablespace users; |
2.7 将表空间online
RMAN>SQL 'alter tablespace users online'; |
2.8 检验是否恢复
SQL>select * from test; |
可以查询到数据,表明表空间已经恢复
3. 数据文件的恢复
3.1 将数据文件offline
RMAN> SQL 'alter database datafile 4 offline'; |
3.2修复
RMAN>restore datafile 4; |
3.3恢复
RMAN>recover datafile 4; |
3.4将数据文件online
RMAN>SQL 'alter database datafile 4 online'; |
RMAN> SQL 'alter database datafile 4 offline'; RMAN>run { RMAN>SQL 'alter database datafile 4 online'; |
4.1进入rman命令行
SQL>rman target / |
4.2备份归档
RMAN>backup archivelog all delete input; |
4.3 检查备份
RMAN>List backup of archivelog all; BS Key Size Device Type Elapsed Time Completion Time ------- ---------- ----------- ------------ --------------- 91 59.54M DISK 00:00:02 28-FEB-13 BP Key: 95 Status: AVAILABLE Compressed: NO Tag: TAG20130228T162106 Piece Name: /oracle/u01/app/oracle/flash_recovery_area/ORCL/backupset/2013_02_28/o1_mf_annnn_TAG20130228T162106_8ly4vmt4_.bkp List of Archived Logs in backup set 91 Thrd Seq Low SCN Low Time Next SCN Next Time ---- ------- ---------- --------- ---------- --------- 1 311 5582914 27-FEB-13 5583269 27-FEB-13 1 312 5583269 27-FEB-13 5601615 28-FEB-13 1 313 5601615 28-FEB-13 5623126 28-FEB-13 1 314 5623126 28-FEB-13 5625133 28-FEB-13 1 315 5625133 28-FEB-13 5625135 28-FEB-13 1 316 5625135 28-FEB-13 5625138 28-FEB-13 1 317 5625138 28-FEB-13 5628235 28-FEB-13 1 318 5628235 28-FEB-13 5628281 28-FEB-13 |
通过查看,备份了从311-318的archivelog,并保存在备份集中,删除了 /oracle/u01/app/oracle/路径下的归档日志文件.
4.4 恢复归档
RMAN>restore archivelog sequence between 311 and 315; |
查看log_archive_dest_1路径,发现已经恢复出311-315的归档文件
4.4指定归档恢复路径
通过在run脚本中来制定恢复的路径
RMAN>run { set archivelog destination to ''; restore archivelog sequence between 311 and 315; set archivelog destination to ''; restore archivelog sequence between 316 and 317; } |
可以指定多个路径。
5. 控制文件的恢复
5.1 开启控制文件自动备份
RMAN>CONFIGURE CONTROLFILE AUTOBACKUP ON; |
5.2备份控制文件
RMAN>backup current controlfile; |
5.3 设置DBID
没有了控制文件,数据库只能启动到nomount状态,启动之前需要设置DBID
RMAN>set dbid=1324770912 |
怎样获取DBID呢:
a) 创建自动备份时未改名的备份文件包含;
b) 用rman连接时
c) Rman备份日志
d) 数据库v$database视图
5.4 恢复控制文件
RMAN> restore controlfile from autobackup; |
如果没有指定路径会恢复到参数文件control_files的路径下
指定路径:
RMAN> restore controlfile to '/home/oracle/control01.ctl' from autobackup; |
5.5 找不到恢复路径的解决办法
在自动备份控制文件前改过备份路径,比如改到/oracle/u01/app/oracle/backup
RMAN>CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/oracle/u01/app/oracle/backup/%F'; |
备份表空间
RMAN> backup tablespace users; |
因为开启了自动备份控制文件,备份表空间也会备份控制文件,查询
RMAN>list backup of controlfile; |
这时提示有控制文件的备份。
这时记录dbid=1324770912
SQL>shutdown immediate; SQL>startup nomount SQL>rman target / RMAN>set dbid=1324770912 RMAN>restore controlfile from autobackup; 提示报错: Starting restore at 28-FEB-13 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: sid=540 devtype=DISK recovery area destination: /oracle/u01/app/oracle/flash_recovery_area database name (or database unique name) used for search: ORCL channel ORA_DISK_1: no autobackups found in the recovery area channel ORA_DISK_1: looking for autobackup on day: 20130228 channel ORA_DISK_1: looking for autobackup on day: 20130227 channel ORA_DISK_1: looking for autobackup on day: 20130226 channel ORA_DISK_1: looking for autobackup on day: 20130225 channel ORA_DISK_1: looking for autobackup on day: 20130224 channel ORA_DISK_1: looking for autobackup on day: 20130223 channel ORA_DISK_1: looking for autobackup on day: 20130222 channel ORA_DISK_1: no autobackup in 7 days found RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of restore command at 02/28/2013 17:12:17 RMAN-06172: no autobackup found or specified handle is not a valid copy or piece |
因为:在默认路径下找不到自动备份的控制文件进一步产rman参数
RMAN>show all; |
发现自动备份控制文件的路径并不是/oracle/u01/app/oracle/backup,而是默认路径
针对windows下默认路径为:$ORACLE_HOME/database
而linux系统下默认路径为:$ORACLE_HOME/dbs
那么为什么在我们之前设置了rman参数,这里又会改变呢,因为我们利用的 configure设置的参数,这个改变是保存在控制文件中的,所以会找不到路径。
针对这种情况有两种方法:
a) 将备份的文件拷贝到所需要默认的路径下:$ORACLE_HOME/dbs
b) 重新设置自动备份控制文件路径
set CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/oracle/u01/app/oracle/backup/%F'; |
这里为什么采用set来设置呢,因为现在数据库是nomount状态,不能使用 configure来设置。
5.6 如果数据库是非归档数据库
修改自动备份控制文件路径时也不要使用configure来执行,因为此命令是永久生效,默认是保存到控制文件的,这样导致在恢复时找不到控制文件,使用set命令来设置修改自动备份控制文件路径。
从备份集中恢复
5.7 通过备份集中的备份恢复控制文件
需要设置dbid
启动数据库到nomount状态
恢复控制文件
restore controlfile from '/oracle/u01/app/oracle/backup/c-1324770912-20130301-08'; |
这样即使更改过默认参数,只要指定备份集正确就可以恢复。
注意:
再恢复控制文件后启动数据库步骤:
a) 启动数据库到mount
SQL>alter database mount; |
b) 恢复数据库
SQL>recover database using backup controlfile; auto Additional information: 3 |
在执行auto后,会自动应用归档,但是当前日志文件还没有归档,所以需要指定redo.log来应用剩下的日志从而恢复数据库
SQL>recover database using backup controlfile; /oracle/u01/app/oracle/oradata/orcl/redo01.log Media recovery complete. |
提示:Media recovery complete.恢复完成
c) 重做日志文件
SQL>alter database open resetlogs; |
参数文件在备份的时候即使不手工备份也会自动完成备份,一般不手动备份。 恢复类似于控制文件的恢复. 6.1 利用自动备份恢复 a) 设置dbid b) 启动到nomount状态 c) 恢复 RMAN>restore spfile from autobackup;6.2 指定恢复文件 也可以通过手工指定的备份的控制文件进行恢复 RMAN>restore spfile from '/oracle/u01/app/oracle/backup/ c-1324770912-20130301-0a';6.3 恢复到制定目标地址 RMAN>restore spfile to '/home/oracle/spfiletmp.ora' from '/oracle/u01/app/oracle/backup/ c-1324770912-20130301-0a'; |
看完上述内容,你们对基于rman的恢复操作有哪些呢有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。