--等效于 SQL>> RMAN> copy datafile '/u01/app/oracle/oradata/orcl/users01.dbf' to '/u01/app/oracle/rman/users01.dbf';
--等效于SQL>> cp /u01/app/oracle/oradata/orcl/users01.dbf /u01/app/oracle/rman/users01.dbf
SQL>alter tablespace users end backup;
copy是物理备份,用得少,主要还是用backup
list 查看备份集命令
RMAN> list backup;
RMAN> delete noprompt expired backup;
RMAN> list backup of tablespace users; --列出users表空间的备份
RMAN> list backup of controlfile;
RMAN> list backup of archivelog all;
RMAN> list backup of spfile;
RMAN> list copy;
RMAN> list copy of tablespace users;
RMAN> list copy of datafile 4;
RMAN> list copy of controlfile;
RMAN> list copy of archivelog all;
crosscheck 核对备份信息
确保rman资料库信息与备份文件信息保持同步,此命令检查rman资料库记录的备份文件;备份文件的状态有avaliable,expired等
====================
RMAN> crosscheck backup;
crosschecked backup piece: found to be 'AVAILABLE' --一个备份为available状态
物理上rm掉它 --手动在物理上干掉它
RMAN> crosscheck backup;
crosschecked backup piece: found to be 'EXPIRED' --再次检测就是expired状态
RMAN> delete expired backup; --这样删除它,但是要求用户去Y/N确认
RMAN> delete noprompt expired backup; --可以加一个noprompt直接确认
============================
RMAN> crosscheck backup of tablespace users;
RMAN> crosscheck backup of controlfile;
RMAN> crosscheck backup of spfile;
RMAN> crosscheck backup of database;
RMAN> crosscheck backup of archivelog all;
RMAN> crosscheck copy;
RMAN> crosscheck copy of database;
RMAN> crosscheck copy of controlfile;
RMAN> crosscheck copy of tablespace users;
RMAN> crosscheck copy of spfile;
RMAN> crosscheck copy of archivelog all;
delete
RMAN> delete noprompt expired backup;
RMAN> delete obsolete; --删除除旧的备份,与rman保留策略有关
RMAN> delete noprompt backupset 23; --指定删除第23号备份集
RMAN> delete noprompt backuppiece '/u01/app/oracle/rman/orcl_20110122_23';
--指定删除一个备份片
RMAN> delete backup; --删除所有的backup备份
RMAN> delete copy; --删除所有的copy备份
change
RMAN> change backupset 21 unavailable; --把备份集21改为unavailable状态;那么crosscheck都不SQL> create tablespace t3 datafile '/u01/app/oracle/oradata/orcl/t3.dbf'> 去检测它
RMAN> change backupset 21 available;
RMAN> change backupset 21 keep forever logs; --配置21号备份集永久保留,需要恢复目录的状况
RMAN> change backupset 21 keep until time 'sysdate+100' logs;
--保留100天
RMAN> change backupset 21 nokeep;
--删除它的保留属性
=====================================
rman环境的配置:
RMAN> show all;
using target database control file instead of recovery catalog
RMAN configuration parameters are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/10g/dbs/snapcf_orcl.f'; # default
1,备份保留策略:
分为两种:
一种:冗余策略
如果冗余备份的数量超过了指定数量,多的将会被标记为obsolete
另一种:时间策略
表示至少有一个备份能恢复到指定的日期
RMAN> CONFIGURE RETENTION POLICY TO recovery window of 10 days;
--十天内的备份都不会被标记为obsolete
RMAN>CONFIGURE RETENTION POLICY TO REDUNDANCY 3;
SQL> create tablespace t3 datafile '/u01/app/oracle/oradata/orcl/t3.dbf'> 第二个策略中说明至少需要有三个冗余的备份存在,如果多余三个备份
以上的备份将标记为obsolete
2,配置存储类型
磁盘 DISK
磁带 SBT
RMAN> CONFIGURE DEFAULT DEVICE TYPE TO SBT;
RMAN> backup spfile; --会报错,因为没有磁带连接这台机
RMAN> CONFIGURE DEFAULT DEVICE TYPE TO DISK; --改加磁盘
3,控制文件的自动备份
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP on; --打开之后,会在任何backup或者copy命令之后,或者任何数据库的结构改变之后
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/u01/app/oracle/rman/%F';
--配置自动备份控制文件的路径,默认是在闪回区里;这里配置到了/u01/app/oracle/rman下
RMAN> backup spfile; --配置完成后,随便备一下,就会在最后看到下面的信息
Starting Control File and SPFILE Autobackup at 23-JAN-11
piece handle=/u01/app/oracle/rman/c-1268875410-20110123-00 comment=NONE
Finished Control File and SPFILE Autobackup at 23-JAN-11
--继续验证:
RMAN> copy datafile 4 to '/u01/app/oracle/rman/db4.dbf';
--这样也会引发控制文件的自动备份
SQL> create tablespace t1 datafile '/u01/app/oracle/oradata/orcl/t1.dbf'> --也会引发控制文件的自动备份
SQL> drop tablespace t1 including contents and datafiles;
--会
SQL> create table t1 as select * from scott.emp;
--不会,因为建表并没有改变数据库的结构
4,配置多通道
RMAN> CONFIGURE DEVICE TYPE DISK PARALLELISM 2; --把并行度配置为2
下面再来对通道进行配置
RMAN> configure channel 1 device type disk format '/u01/app/oracle/rman/%U';
--设置通道1备份到/u01/app/oracle/rman/%U
RMAN> configure channel 2 device type disk format '/u01/app/oracle/rman2/%U'; --设置通道2备份到/u01/app/oracle/rman2/%U
RMAN> backup database; --验证成功
5,配置最大备份集的大小
RMAN> CONFIGURE MAXSETSIZE TO 1G;
6,配置备份集的优化:
RMAN> CONFIGURE BACKUP OPTIMIZATION on;
=================================================================
上面的环境配置是默认情况,但一般我们写脚本手工指定通道,备份路径,最大备份集的大小等等)
run 脚本
[oracle@station245 ~]$ vim /u01/app/oracle/rman01.sql
run {
allocate channel a1 type disk;
allocate channel a2 type disk;
backup database;
release channel a1;
release channel a2;
}
======================
[oracle@station245 ~]$ rman target / @ /u01/app/oracle/rman01.sql --运行刚才的这个脚本;这个脚本里的语句也可以直接在rman下运行
[oracle@station245 ~]$ vim /u01/app/oracle/rman02.sql
run {
allocate channel a1 type disk maxpiecesize 100m; --一个通道最大100M
allocate channel a2 type disk maxpiecesize 100m;
backup database format '/u01/app/oracle/rman/%U'; --使用format指定路径
release channel a1;
release channel a2;
}
======================
[oracle@station245 ~]$ rman target / @ /u01/app/oracle/rman02.sql
run {
allocate channel a1 type disk;
allocate channel a2 type disk;
backup database filesperset 2; --指定每两个数据文件一个备份集
release channel a1;
release channel a2;
}
[oracle@station245 ~]$ rman target / @ /u01/app/oracle/rman03.sql
==================
[oracle@station245 ~]$ vim /u01/app/oracle/rman04.sql
run {
allocate channel a1 type disk;
allocate channel a2 type disk;
copy datafile 4 to '/u01/app/oracle/rman/db4.dbf';
copy datafile 5 to '/u01/app/oracle/rman/db5.dbf';
release channel a1;
release channel a2;
}
[oracle@station245 ~]$ rman target / @ /u01/app/oracle/rman04.sql
=====================
--写一个全备脚本,先把rman环境都还原,再运行下面的脚本
[oracle@station245 ~]$ vim /u01/app/oracle/rman_full.sql
run {
allocate channel a1 type disk;
allocate channel a2 type disk;
allocate channel a3 type disk;
backup database format '/u01/app/oracle/rman/full_%U';
sql 'alter system archive log current';
backup archivelog all format '/u01/app/oracle/rman/arch_%U' delete input;
backup format '/u01/app/oracle/rman/ctl_%U' current controlfile;
backup spfile format '/u01/app/oracle/rman/spfile_%U';
crosscheck backup;
crosscheck archivelog all;
delete noprompt backup of database completed before 'sysdate-10';
delete noprompt backup of archivelog all completed before 'sysdate-20';
release channel a1;
release channel a2;
release channel a3;
}
[oracle@station245 ~]$ rman target / @ /u01/app/oracle/rman_full.sql
--执行全备
[oracle@station245 ~]$ ls /u01/app/oracle/rman
arch_2dm2rd8b_1_1 full_28m2rd7n_1_1 full_2bm2rd87_1_1
arch_2em2rd8b_1_1 full_29m2rd7n_1_1 full_2cm2rd87_1_1
ctl_2fm2rd8f_1_1 full_2am2rd7o_1_1 spfile_2gm2rd8g_1_1
查看备份进度的语句
SQL> SELECT SID, SERIAL#, CONTEXT, SOFAR, TOTALWORK, ROUND(SOFAR/TOTALWORK*100,2) "%_COMPLETE" FROM V$SESSION_LONGOPS WHERE OPNAME LIKE 'RMAN%' AND OPNAME NOT LIKE '%aggregate%' AND TOTALWORK != 0 AND SOFAR TOTALWORK;
================================================================
rman恢复
数据文件丢失:
可以脱机的 在线恢复
不可以脱机的 在mount状态恢复
1,可以脱机的数据文件丢失的恢复方法:
[oracle@station245 ~]$ rm /u01/app/oracle/oradata/orcl/users01.dbf
--物理上丢失user01.dbf
[oracle@station245 ~]$ rman target /
RMAN> sql 'alter database datafile 4 offline';
--把4号数据文件脱机,如果不知道编号也可以直接写/u01/app/oracle/oradata/orcl/users01.dbf
RMAN> restore datafile 4; --还原,表示从备份物理还原到它的位置
RMAN> recover datafile 4; --介质恢复,应用日志,恢复备份时间点到现在的改变
RMAN> sql 'alter database datafile 4 online';
2,不可以脱机
[oracle@station245 etc]$ rm /u01/app/oracle/oradata/orcl/undotbs01.dbf
--物理上丢失undotbs01.dbf
SQL> startup force mount
[oracle@station245 ~]$ rman target /
connected to target database: ORCL (DBID=1268875410, not open)
--可以看到是mount状态
RMAN> restore datafile '/u01/app/oracle/oradata/orcl/undotbs01.dbf';
--还原
RMAN> recover datafile '/u01/app/oracle/oradata/orcl/undotbs01.dbf';
--恢复
RMAN>> --可以open了
3,控制文件恢复
RMAN> backup current controlfile;
[oracle@station245 etc]$ rm /u01/app/oracle/oradata/orcl/control0*
SQL> startup force nomount
[oracle@station245 ~]$ rman target /
connected to target database: orcl (not mounted)
RMAN> restore controlfile from '/u01/app/oracle/flash_recovery_area/ORCL/backupset/2011_01_23/o1_mf_ncnnf_TAG20110123T155927_6mqqz05y_.bkp';
--从一个控制文件备份里还原,如果打开控制文件自动备份的话,可以使用restore controlfile from autobackup;