--=================================
-- 基于catalog 的RMAN 备份与恢复
--=================================
RMAN的备份与恢复存储仓库的数据通常存放于控制文件或恢复目录中,本文主要讲述基于catalog的备份与恢复。
关于catalog的创建请参考:RMAN catalog的创建和使用
catalog方式的RMAN备份与恢复只不过是将备份恢复信息数据放在catalog目录内,普通的rman方式则是存放在控制文件中
catalog方式可以存储常用或特定的备份与恢复的脚本
有关catalog方式RMAN存储脚本请参考:基于 catalog 创建RMAN存储脚本
一、基于catalog来备份数据库(目标数据库orcl,恢复目录数据库asmdb)
首先基于catalog创建备份脚本
--连接到RMAN
[oracle@oradb ~]$ rman target sys/redhat@orcl catalog rman/rman@asmdb
connected to target database: ORCL (DBID=1263182651)
connected to recovery catalog database
--创建全局删除废弃备份的脚本
RMAN> create global script global_del_obso comment 'A script for obsolete backup and delete it' {
2> allocate channel ch1 device type disk;
3> delete obsolete recovery window of 7 days;
4> release channel ch1;
5> }
new incarnation of database registered in recovery catalog
starting full resync of recovery catalog
full resync complete
created global script global_del_obso
--创建全局归档日志的备份脚本
RMAN> create global script global_arch
2> comment ' A script for archivelog and delete it '
3> {
4> allocate channel ch1 device type disk;
5> sql " alter system archive log current";
6> set limit channel ch1 readrate=10240;
7> set limit channel ch1 kbytes=2048000;
8> backup as compressed backupset archivelog all delete input
9> format='/u01/bk/rmbk/arch_%d_%U'
10> tag='Archbk';
11> release channel ch1;
12> }
created global script global_arch
--创建全局0级增量备份脚本
RMAN> create global script global_inc0
2> comment ' A script for backup database using incremental level 0'
3> {
4> execute global script global_del_obso;
5> allocate channel ch1 device type disk;
6> set limit channel ch1 readrate=10240;
7> set limit channel ch1 kbytes=2048000;
8> backup as compressed backupset incremental level 0 database
9> format='/u01/bk/rmbk/inc0_%d_%U'
10> tag='Inc0';
11> release channel ch1;
12> execute global script global_arch;
13> }
created global script global_inc0
--列出已经创建的全局脚本
RMAN> list global script names;
List of Stored Scripts in Recovery Catalog
Global Scripts
Script Name
Description
-----------------------------------------------------------------------
global_arch
A script for archivelog and delete it
global_del_obso
A script for obsolete backup and delete it
global_inc0
A script for backup database using incremental level 0
--启用控制文件的自动备份功能
RMAN> configure controlfile autobackup on;
RMAN> configure controlfile autobackup format for device type disk to '/u01/bk/rmbk/auto_ctl_%d_%f';
--删除以前的备份
RMAN> delete noprompt backupset;
--备份前验证归档日志是否存在
RMAN> crosscheck archivelog all;
--删除无效的归档日志信息
RMAN> delete noprompt expired archivelog all;
--使用0级增量备份数据库
RMAN> run { execute global script global_inc0;}
--查看刚刚完成的备份情况
RMAN> list backupset summary;
RMAN> list backupset ;
RMAN> list backup of controlfile ;
RMAN> list backup of archivelog all;
RMAN> list backup of database;
RMAN> list backup of datafile n ;
二、恢复操作
1.非系统表空间的恢复步骤
a. alter datafile n offline immediate; | alter tablespace tbs_name offline immediate;
b. restore
c. recover
d. alter datafile n online; | alter tablespace tbs_name online
--删除非系统表空间users的数据文件(数据库位于open 状态)
[oracle@oradb orcl]$ pwd
/u01/oracle/oradata/orcl
[oracle@oradb orcl]$ rm users01.dbf
lion@ORCL> select * from tb2;
select * from tb2
*
ERROR at line 1:
ORA-01116: error in opening database file 4
ORA-01110: data file 4: '/u01/oracle/oradata/orcl/users01.dbf'
ORA-27041: unable to open file
Linux Error: 2: No such file or directory
Additional information: 3
RMAN> run {
2> allocate channel ch1 device type disk;
3> sql " alter tablespace users offline immediate ";
4> restore tablespace users;
5> recover tablespace users;
6> sql " alter tablespace users online ";
7> }
lion@ORCL> select * from tb2;
ID NAME
---------- ---------------
1 Robinson
也可以使用下面的恢复方式来完成恢复
RMAN> run {
2> allocate channel ch1 device type disk;
3> sql " alter database datafile 4 offline ";
4> restore datafile 4;
5> recover datafile 4;
6> sql " alter database datafile 4 online ";
7> }
如果介质恢复时,需要用的日志尚未归档,需要指定联机重做日志文件所在的位置
注意
表空间几种不同的脱机方式
offline normal :
表空间脱机的缺省方式,将位于SGA中且与该表空间所有的数据文件相关的数据块(blocks)写入到数据文件之后再进行脱机
再次联机时不需要做介质恢复。
offline temporary :
实施检查点进程,即同样将SGA中且与该表空间所有的数据文件相关的数据块(blocks)写入到数据文件之后再进行脱机
不保证所有的数据能够写入到数据文件。再次联机时要做介质恢复。
offline immediate :
不保证表空间的数据可用,也不实施检查点进程而直接脱机,再次联机时要做介质恢复。
offline temporary ,offline immediate 脱机方式不适用于数据文件
lion@ORCL> alter database datfile 4 offline immediate;
alter database datfile 4 offline immediate
*
ERROR at line 1:
ORA-02231: missing or invalid option to ALTER DATABASE
lion@ORCL> alter database datfile 4 offline temporary;
alter database datfile 4 offline temporary
*
ERROR at line 1:
ORA-02231: missing or invalid option to ALTER DATABAS
更多关于表空间与数据文件的管理,请参考:Oracle 表空间与数据文件
对于表空间存在多个数据文件的情况,而单个或较少的数据文件受损,应尽可能使用第二种方式来恢复.即resotre & recover datafile n
2.UNDO表空间的恢复
关于UNDO表空间的管理请参考:Oracle 回滚(ROLLBACK)和撤销(UNDO)
恢复步骤(undo丢失后)
alter database datafile 2 online;
alter database datafile 2 offline;
select * from v$recover_file;
restore datafile 2; --用RMAN 完成
recover datafile 2 ;
alter database datafile 2 online;
--首先做一些操作,将数据填充到undo表空间
lion@ORCL> select * from tb2;
ID NAME
---------- ---------------
1 Jack
lion@ORCL> insert into tb2 select 2,'Jackson' from dual;
lion@ORCL> commit;
lion@ORCL> delete from tb2 where id=1;
lion@ORCL> select * from tb2;
ID NAME
---------- ---------------
2 Jackson
lion@ORCL> ho rm $ORACLE_BASE/oradata/orcl/undotbs01.dbf
注意:undo表空间不能被offline,也不能被readonly