常用的命令和操作:
1、backup和COPY
2、list
3、delete和crosscheck
4、change
5、rman>report schema; --查看数据库有哪些表空间和数据文件
6、备份脚本
7、执行SQL语句(rman中的sql环境不能执行SELECT语句)
8、RMAN备份相关的动态性能表
9、加速增量备份
1、backup和copy
backup 逻辑物理备,基于块级别的备份,已经使用过的块--热点块
备份格式 (spfile,datafile,controlfile,tabalspace,archivelog,database)
backup spfile;
backup current controlfile;
backup datafile 4;
backup tablespace users,sysaux;
backup archivelog sequence between ## and ##;
backup archivelog sequence between ## and ## delete input;
------------------------------------------------------------
backup archivelog all; 备份归档,包括当前日志(v$log也切换了,已经验证)
BACKUP DATABASE PLUS ARCHIVELOG;
则在备份数据库的同时自动对所有归档文件进行备份。这种方式与上种有什么区别呢,区别太明显了,BACKUP.....PLUS ARCHIVELOG命令在备份过程中会依次执行下列步骤:
1>.运行ALTER SYSTEM ARCHIVE LOG CURRENT语句对当前redolog进行归档。
2>.执行BACKUP ARCHIVELOGALL命令备份所有已归档日志。
3>.执行BACKUP命令对指定项进行备份。
4>.再次运行ALTER SYSTEM ARCHIVE LOG CURRENT对当前redolog归档。
5>.对新生成的尚未备份的归档文件进行备份。
------------------------------------------------------
backup archivelog all delete input; 备份默认目录下所有归档日志,并且删除这个目录下所有归档日志
(链接:http://www.itpub.net/thread-1039151-1-1.html,多个目的归档,执行这个命令会不分目录删除文档,也就是删除一个拷贝)。
backup archivelog all delete all input 备份默认目录下所有归档日志,并且删除几个备份目录下所有归档日志
backup full database plus archivelog 全库加归档日志备份
backup database skip readonly 还可以跳过不备份readonly的文件,同样可以跳过OFFLINE等等
backup database; 备份参数文件,控制文件,所有数据文件,不备份联机日志,归档日志可以备份。
全库备份时候,要注意数据文件必须是online 和read write的,不然会提示不能备份
backup as compressed backupset full database;备份时压缩备份集
backup database format '/backup/%d_%I_%s_%p_%T_%t.bkp'filesperset=20;
(备份system表空间或者备份database时,备份成功后回将控制文件也自动备份出来)
sql>show parameter db_rec 定义闪回区的目录
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
db_recovery_file_dest string /oracle//flash_recovery_area
db_recovery_file_dest_size big integer 2G
db_recycle_cache_size big integer 0
压缩备份集:
backup as compressed backupset tablespace users;
backup as compressed backupset database plus archivelog;
增量备份:(0 ~ 4)
backup incremental level 0 tablespace users;
backup incremental level 1 tablespace users;
backup incremental level 2 tablespace users;
backup incremental level 2 cumulative tablespace users;
(1.设置备份标记
backup database tag='full_bak1';
注:每个标记必须唯一,相同的标记可以用于多个备份只还原最新的备份。
(2.设置备份集大小(一次备份的所有结果为一个备份集,要注意备份集大小)
backup database maxsetsize=100m tag='datafile1';
注:maxsetsize限定备份集的大小。所以必须大于数据库总数据文件的大小,否则会报错。
RMAN-06183: datafile or datafile copy larger than MAXSETSIZE: file# 1 /data/oradata/system01.dbf
(3.设置备份片大小(磁带或文件系统限制)
run {
allocate channel c1 type disk maxpicecsize 100m format '/data/backup/full_0_%U_%T';
backup database tag='full_0';
release channel c1;
}
可以在allocate子句中设定每个备份片的大小,以达到磁带或系统限制。
也可以在configure中设置备份片大小。
Configure channel device type disk maxpiecesize 100 m;
configure channel device type disk clear;
(4.备份集的保存策略
backup database keep forever; --永久保留备份文件
backup database keep until time='sysdate+30'; --保存备份30天
(5.重写configure exclude命令
backup databas noexclude keep forever tag='test backup';
(6.检查数据库错误
backup validate database;
使用RMAN来扫描数据库的物理/逻辑错误,并不执行实际备份。
(7.跳过脱机,不可存取或只读文件
backup database skip readonly;
backup database skip offline;
backup database skip inaccessible;
backup database skip readonly skip offline ship inaccessible;
(8.强制备份
backup database force;
(9.基于上次备份时间备份数据文件
1>只备份添加的新数据文件
backup database not backed up;
2>备份"在限定时间周期内"没有被备份的数据文件
backup database not backed up since time='sysdate-2';
(10.备份操作期间检查逻辑错误
backup check logical database;
backup validate check logical database;
(11.生成备份副本
backup database copies=2;
(12.备份控制文件
backup database device type disk includ current controlfile;
-----------------------------------------------------------------------
补充点内容:
块跟踪(10g):记录自从上一次备份以来数据块的变化,相关后台进程CTWR(Change Tracking Writer)改善增量备份性能,RMAN可以不再扫描整个文件以查找变更数据
查询是否启用块跟踪
col FILENAME for a40
select filename,status,bytes from v$block_change_tracking;
启用块跟踪
alter database enable block change tracking using '/home/oracle/block_track/orcl_block_track.log';
禁用块跟踪
alter database disable block change tracking;
修改块修改跟踪文件路径:
mount
目标文件要存在
alter database rename file '' to '';
并行备份:(使用rman语句块)
backup datafile 4,5;
-----------------------------------------------------------------------
copy 物理备
copy current controlfile to ''; 物理备份 一般不用
copy datafile 4 to '';
2、list
list backup
list backup of database summary;
查看镜像拷贝:
list copy;
list copy of datafile 4;
list copy of controlfile;
查看创建的脚本:list script names;
list incarnation;
list backup summary;
list backup of database summary;
list backup of tablespace summary;
list backup of datafile n,n summary;
list archivelog all summary;
list backup by file;
list backup;
list expired backup;
list copy;
list backup of spfile;
list backup of controlfile;
list backup datafile n,n,n;
list backup tablespace tablespace_name;
list backup of archivelog all;
list backup of archivelog from scn ...;
list backup of archivelog until scn ...;
list backup of archivelog from sequence ..;
list backup of archivelog until time 'sysdate-10';
list backup of archivelog {all, from, high, like, logseq, low, scn, sequence, time, until};
list backup summary; --概述可用的备份
B 表示backup
A 表示Archivelog、 F表示full backup、 0,1,2表示incremental level备份
A 表示可用AVALIABLE、 X表示EXPIRED
这个命令可以派生出很多类似命令,例如
list backup of database summary
list backup of archivelog all summary
list backup of tablespace users summary;
list backup of datafile n,n,n summary
这些命令可以让我们对已有的备份文件有一个整体,直观的了解。
list backup of {archivelog, controlfile, database, datafile, spfile, tablespace};
list backup of database; --full,incremental,tablespace,datafile
服务器参数文件:
list backup of spfile;
控制文件:
list backup of controlfile;
数据文件:
list backup of datafle n,n,n,n;
表空间:
list backup of tablespace tablespace_name;--表空间对应的backup
归档日志:
list backup of archivelog {all, from, high, like, logseq, low, scn, sequence, time, until};
list backup of archivelog all;
list backup of archivelog until time 'sysdate-1';
list backup of archivelog from sequence 10;
list backup of archivelog until sequence 10;
list backup of archivelog from scn 10000;
list backup of archivelog until scn 200000;
list archivelog from scn 1000;
list archivelog until scn 2000;
list archivelog from sequence 10;
list archivelog until sequence 12;
3、delete和crosscheck
(1、删除陈旧备份
当使用RMAN执行备份操作时,RMAN会根据备份冗余策略确定陈旧备份。
RMAN> crosscheck backup;
RMAN> delete obsolete;
(2、删除EXPIRED备份
执行crosscheck命令核对备份集,那么会将该备份集标记为EXPIRED状态。为了删除相应的备份记录,可以执行delete expired backup命令。
RMAN> delete expired backup;
3、删除EXPIRED副本
RMAN> delete expired copy;
4、删除特定备份集
RMAN> delete backupset 19;
5、删除特定备份片
RMAN> delete backuppiece 'd:\backup\DEMO_19.bak';
6、删除所有备份集
RMAN> delete backup;
7、删除特定映像副本
RMAN> delete datafilecopy 'd:\backup\DEMO_19.bak';
8、删除所有映像副本
RMAN> delete copy;
9、在备份后删除输入对象
RMAN> delete archivelog all delete input;
RMAN> delete backupset 22 format = ''d:\backup\%u.bak'' delete input;
(3、检测备份存在、正常否: 正常的是available 不存在的显示:expired过期
crosscheck copy;
crosscheck archivelog all;
crosscheck backup;
删除不可用的备份集
delete expired backup,配合crosscheck backup;使用
delete noprompt expired backup 不需要交互模式
删除拷贝:
delete copy;
delete datafilecopy '/home/oracle/rmanbk/users01.dbf';
删除备份集:
delete backupset 1,2,3;
delete backup;
删除陈旧的备份:(由备份保留策略参数决定)比如定义为10天,
delete obsolete;和report obsolete配合使用
如果被判断为废弃的备份是一个单独数据文件的镜像复制,那么在执行DELETE命令时将直接删除这个镜像复制文件。
如果被判断为废弃的备份是一个备份集中的一部分,则必须等到整个备份集中所有其它文件都被废弃之后,才能删除这个备份集。
delete obsolete redundance=3;
参数定义:
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 1 DAYS; 建议用保留的时间
CONFIGURE RETENTION POLICY TO REDUNDANCY 1;这个冗余度参数,不建议用
校验备份和还原的可行行:
backup validate database;
validate backupset 10;
restore tablespace users validate;
4、change
change backupset 140 unavilable;
5、查看数据库有哪些表空间和数据文件
rman>report schema;
6、备份脚本:
run{
allocate channel c1 type disk format '/home/oracle/rmanbk/%d_%I_%s_%p_%T.bkp';
allocate channel c2 type disk format '/home/oracle/rmanbk/%d_%I_%s_%p_%T.bkp';
backup
(datafile 4 channel c1)
(datafile 5 channel c2);
delete noprompt obsolete;
}
控制备份片大小:
run{
allocate channel c1 type disk maxpiecesize=50m;
backup tablespace users format '/home/oracle/rmanbk/%s_%p.bkp';
}
控制备份集数量:控制
run{
allocate channel c1 type disk maxpiecesize=100m;
backup database format '/backup/%d_%I_%s_%p_%T_%t.bkp'filesperset=20;
backup format '/backup/%d_%I_%e_%s_%p_%T_%t.bkp' archivelog all delete input;
delete noprompt obsolete;
}
backup database not backed up format '';
backup database format '/backup/%d_%I_%s_%p_%T_%t.bkp' filesperset=20;
创建脚本: 查看本地脚本:list script names;必需要有catalog库
create script r1{
allocate channel c1 type disk format '/home/oracle/rmanbk/%d_%I_%s_%p_%T.bkp';
allocate channel c2 type disk format '/home/oracle/rmanbk/%d_%I_%s_%p_%T.bkp';
backup
(datafile 4 channel c1)
(datafile 5 channel c2);
delete noprompt obsolete;
}
执行脚本,必需放在run{}里面:
rman>run{
rman>excute script r1;
rman>}
删除脚本,rman>delete script r1;
打印命令:rman>print script r1;
编辑脚本:先保存rman>print script r1 to '/oracle/..txt';
编辑之后再替换:rman>replace script r1 from '/oracle/...txt'
全局脚本:可以适合任何target数据库
create global script r1{
。。。。。。。
}
执行:
rman>run{
rman>excute global script r1;
rman>}
RMAN命令执行方式:
在进入演练之前,大家还有必要了解运行rman命令的方式,就目前已知的情况,共有4种运行方式。
1、单个执行(没啥说的,之前的示例都是这种方式)
RMAN>backup database;
2、批处理(呵呵,跳票的补上)
RMAN>RUN{
.......................
.......................
}
批处理方式实质是将原来单个执行的命令组合到一起,并放在run{}之间,这种方式最大的好处是所有在run中的命令被视为一个作业,如果作业中任何一条命令执行失败,则整个命令停止执行,即失败命令后的其它命令都不会再被执行。这种方式是最常使用的方式,特别对于后台执行。
3、运行脚本(又能细分为几种方式如下:)
C:\>rman TARGET / @backup_db.rman
RMAN> @backup_db.rman
RMAN> RUN { @backup_db.rman }
运行存储在恢复目录中的脚本(需要首先为rman创建恢复目录)
RMAN> RUN { EXECUTE SCRIPT backup_whole_db };
看看,够灵活吧。
4、操作系统脚本(linux,windows环境下小有差异,但只是操作系统命令的不同)
C:\>rman cmdfile=backup_db.rman
明眼人看的出来,后两种其实是前面两种加上操作系统命令的综合应用。
7、执行SQL语句(rman中的sql环境不能执行SELECT语句)
RMAN> SQL 'ALTER SYSTEM ARCHIVE LOG ALL'; 所有日志归档,除当前日志
sql 'alter system archive log current'; 对当前日志归档
8、RMAN备份相关的动态性能表
V$ARCHIVED_LOG:本视图包含了所有归档重做日志文件的创建情况,备份情况以及其他信息。
V$BACKUP_CORRUPTION:这个视图显示了RMAN在哪些备份集中发现了损坏的数据坏。在你使用BACKUP VALIDATE命令对备份集进行检查时如果发现了损坏的数据块,RMAN将在这个视图中写入记录。
V$COPY_CORRUPTIO:本视图显示了哪些镜像复制备份文件已经被损坏。
V$BACKUP_DATAFILE:本视图通常用来获取每个数据文件中非空白数据块的数量,从而帮助你创建出大小基本相等的备份集。另外,在视图中也包含了数据文件中损坏的数据块的信息。
V$BACKUP_REDOLOG:本视图显示了在现有的备份集中饮食有哪些归档重做日志文件。
V$BACKUP_SET:本视图显示了已经创建的备份集的信息。
V$BACKUP_PIECT:本视图显示了已经创建的备份片段的信息。
可以通过如下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;
9、加速增量备份(10.2.0开始支持这个参数)
1、查询是否启用
SQL> select * from v$block_change_tracking;
STATUS FILENAME BYTES
-------------------- -------------------- ----------
DISABLED
2、启用
SQL>alter database enable block change tracking using file '/oracle/backup/change.ora