优化备份开启后,会跳过以前备份过的文件,只读表空间和offline的表空间也会跳过。
CONFIGURE BACKUP OPTIMIZATION OFF; # default
打开备份优化:
RMAN> CONFIGURE BACKUP OPTIMIZATION ON;
关闭备份优化:
RMAN> CONFIGURE BACKUP OPTIMIZATION OFF;
更改回默认值:
RMAN> CONFIGURE BACKUP OPTIMIZATION CLEAR;
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
使用磁盘设备:
RMAN> CONFIGURE DEFAULT DEVICE TYPE TO DISK;
使用磁带设备:
RMAN> CONFIGURE DEFAULT DEVICE TYPE TO SBT;
更改回默认值:
RMAN> CONFIGURE DEFAULT DEVICE TYPE CLEAR;
将备份文件存储到指定路径,如 e:\backup
configure channel device type disk format 'e:\backupb\%d_db_%u';
#后面的%d_db_%u是存储格式
CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
打开自动备份控制文件:
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;
关闭自动备份控制文件:
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP OFF;
更改回默认值:
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP CLEAR;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
修改备份路径
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/u01/app/oracle/%F';
更改回默认值:
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK CLEAR;
在备份期间,将产生一个控制文件的快照,用于控制文件的读一致性。
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/10.2.0/db_1/dbs/snapcf_orcl.f'; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
设置备份数据文件冗余度:
RMAN> CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO n;
更改回默认值:
RMAN> CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK CLEAR;
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
设置备份归档日志文件冗余度:
RMAN> CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO n;
更改回默认值:
RMAN> CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK CLEAR;
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
设置备份文件最大大小:
RMAN> CONFIGURE MAXSETSIZE TO 1G | 1000M | 1000000K | unlimited;
更改回默认值:
RMAN> CONFIGURE MAXSETSIZE CLEAR;
指定users表空间不备份到备份集中,对只读表空间很有用
configure exclude for tablespace 'users';
configrue exclude clear;
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
打开备份加密:
RMAN> CONFIGURE ENCRYPTION FOR DATABASE ON;
关闭备份加密:
RMAN> CONFIGURE ENCRYPTION FOR DATABASE OFF;
更改回默认值:
RMAN> CONFIGURE ENCRYPTION FOR DATABASE CLEAR;
设置加密算法
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE AUXNAME FOR DATAFILE 1 TO '/oracle/auxfiles/aux_1.f';
CONFIGURE AUXNAME FOR DATAFILE 2 TO '/oracle/auxfiles/aux_2.f';
CONFIGURE AUXNAME FOR DATAFILE 3 TO '/oracle/auxfiles/aux_3.f';
CONFIGURE AUXNAME FOR DATAFILE 4 TO '/oracle/auxfiles/aux_4.f';
CONFIGURE AUXNAME FOR DATAFILE 1 CLEAR;
CONFIGURE AUXNAME FOR DATAFILE 2 CLEAR;
CONFIGURE AUXNAME FOR DATAFILE 3 CLEAR;
CONFIGURE AUXNAME FOR DATAFILE 4 CLEAR;
FORMAT字符串格式化
使用FORMAT参数时可使用的各种替换变量,未指定则默认使用%U为备份片段命名,如下所示:
生成备份片段时,%U=%u_%p_%c;
生成数据文件镜像复制时,%U=data-D-%d_id-%I_TS-%N_FNO-%f_%u;
生成归档文件镜像复制时,%U=arch-D_%d-id-%I_S-%e_T-%h_A-%a_%u;
生成控制文件镜像复制时,%U=cf-D_%d-id-%I_%u。
为备份分配多个信道可以实现备份的并行化,可以通过parallelism参数来指定同时"自动"创建多少个通道。
使用configure配置
--配置并行度为2
RMAN> configure device type disk parallelism 2;
--清除并行度参数 ,恢复到默认值
RMAN> configure device type disk clear;
设置备份并自动压缩:
RMAN> CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO COMPRESSED BACKUPSET;
备份时指定并行度为4
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
allocate channel c4 type disk;
backup database;
release channel c1;
release channel c2;
release channel c3;
release channel c4;
}
在run命令块中指定ALLOCATE CHANNEL会覆盖parallelism参数配置,执行备份命令时会以你设置的channel为准,而不管configure中配置了多少个并行通道。
多路复用允许使用单个RMAN信道在备份期间并行读取数据文件,并将这些数据文件内容写入同一个备份集片。因此,一个备份集片可能包含许多不同数据文件的内容。多路复用级别为min{ filesperset , maxopenfiles}。
每个备份集最多可包含的数据文件个数,默认值为min{ 64,输入文件数/分配信道数 }。参数值在执行backup命令时确定,也可显示指定:
Backup database Filesperset 4;
确定rman能并行读取的数据文件个数,默认值为8。该参数在分配信道时确定。
Configure channel 1 device type disk Maxopenfiles 3 format '/u01/back/%U';
如果设置Filesperset=6、Maxopenfiles=3、parallelism=1,创建一个备份集,此时每个备份集最多仍可包含6个数据文件,但在只能同时并行备份3个数据文件。
为控制备份时间或减少RMAN备份对其他进程的整体IO影响,RMAN提供了backup命令的duration参数。可以使用MINIMIZE LOAD最小化备份数据库所需的IO负载,也可以使用MINIMIZE TIME尽快运行备份。使用默认的minimize time 参数的另一个特性是,RMAN 将区分备份的数据文件的优先级。最近备份的数据文件具有较低的优先级,而较早备份的数据文件具有较高的优先级。
Backup duration 00:30 minimize time database; #半个小时
Backup duration 10:00 minimize load database; #10个小时
Backup duration 0:50 partial database; #默认是minimize time
partial参数可以指示RMAN如何处理超出backup duration时间限制的备份。
RMAN默认使用所有可用的IO带宽来进行磁盘读写,但有时可能会对别的业务系统造成影响,需要限制IO速度。
allocate channel或configure channel的RATE选项可以设置RMAN每秒最大读速率,例如以下语句设置为 1MB/s:
CONFIGURE CHANNEL DEVICE TYPE sbt RATE 1M;
--或者
configure channel device type disk rate 1M;
--或者
allocate channel c1 device type disk rate 20M;
Crosscheck命令用来校验控制文件或恢复目录中的rman信息是否与备份介质上实际的物理备份集片相同。
检查结果有以下两种状态:
校验类型 |
命令 |
校验所有备份集 |
RMAN> crosscheck backup; |
校验所有数据文件的备份集 |
RMAN> crosscheck backup of database; |
校验特定表空间的备份集 |
RMAN> crosscheck backup of tablespace users; |
校验特定数据文件的备份集 |
RMAN> crosscheck backup of datafile 4; |
校验控制文件的备份集 |
RMAN> crosscheck backup of controlfile; |
校验SPFILE的备份集 |
RMAN> crosscheck backup of archivelog sequence 3; |
校验所有映像副本 |
RMAN> crosscheck copy; |
校验所有数据文件的映像副本 |
RMAN> crosscheck copy of database; |
校验特定表空间的映像副本 |
RMAN> crosscheck copy of tablespace users; |
校验特定数据文件的映像副本 |
RMAN> crosscheck copy of datafile 6; |
校验归档日志的映像副本 |
RMAN> crosscheck copy of archivelog sequence 4; |
校验控制文件的映像副本 |
RMAN> crosscheck copy of controlfile; |
还可以基于很多标准校验归档日志备份,把time换成scn或者sequence也行
校验标准 |
命令 |
校验所有归档 |
RMAN> crosscheck archivelog all |
Like参数 |
RMAN> crosscheck archivelog like '%22%'; |
范围参数-from time |
RMAN> crosscheck archivelog from time="to_date('2008-5-20','yyyy-mm-dd')"; |
范围参数-until time |
RMAN> crosscheck archivelog until time="to_date('2008-5-20','yyyy-mm-dd')"; |
范围参数-from time until time |
RMAN> crosscheck archivelog from time="to_date('2008-5-20','yyyy-mm-dd')" until time="to_date('2008-5-23','yyyy-mm-dd')"; |
范围参数-time between and |
RMAN> crosscheck archivelog time between "to_date('2008-5-20','yyyy-mm-dd')" and "to_date('2008-5-23','yyyy-mm-dd')"; |
如果是手工rm了归档日志,Rman会检测到日志缺失,从而无法执行备份。此时需要执行crosscheck并删除过期日志,之后Rman可以恢复正常。
rman target /
RMAN> crosscheck archivelog all;
RMAN> delete expired archivelog all;
该命令可帮助确定还原数据库时需要哪些数据文件,以及能否将数据库恢复到一致的时间点。需要的IO最小,也不会检查确认备份集片真正存在于磁盘上或是否受损,仅基于rman目录中包含的备份集片给出报告。
常用命令(在普通的restore命令后加preview即可):
Restore database preview;
Restore tablespace user preview;
Restore datafile 1 preview;
Restore archivelog all preview;
Restore controlfile preview;
检查介质上备份集映像的物理和逻辑损坏,其中Restore…validate检查物理损坏,check logical检查逻辑损坏。
注意以下命令运行会消耗与普通还原等量资源
Restore database validate check logical;
Restore tablespace user validate check logical;
Restore datafile 1 validate check logical;
Restore archivelog all validate check logical;
Restore controlfile validate check logical;
Restore database validate逐块检查备份,而validate命令检查备份头,只检查物理损坏,如果同时也想检查逻辑损坏,应该加上check logical选项。
validate命令完成检查后,将填充v$database_block_corruption视图。另外,该命令不会检查块与块之间的损坏。
Validate datafile 3;
Validate tablespace user;
Validate corruption list;
Validate database include current controlfile plus archivelog;
Validate backupset 50;
Validate recover area;
备份策略是管理备份与副本以及指定它们在备份介质上的保留时间的方法。
分为两种,两种策略是互斥的,感觉类似于FRA可以按空间保留也可以按时间保留:
基于想要数据库恢复到的最近日期定制。
对于在NOCATALOG下创建的备份,RMAN的备份集信息都是保存在目标端控制文件中,这部分信息受制于初始化参数:CONTROL_FILE_RECORD_KEEP_TIME。这个参数用来指定记录在控制文件中的最少保存时间,以天为单位,默认为7。
对于基于时间的备份保留策略,一般建议CONTROL_FILE_RECORD_ KEEP_TIME不小于在RMAN中设置的备份保留时间。
Configure retention policy to recovery window of 7 days;
会从最新备份开始保留x个数据库备份
CONFIGURE RETENTION POLICY TO REDUNDANCY 3;
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
RMAN> CONFIGURE RETENTION POLICY TO NONE;
RMAN> CONFIGURE RETENTION POLICY CLEAR;
归档日志删除策略自动应用于FRA中的归档日志。若未使用FRA,可运行list obsolete命令列出根据策略应当删除的文件,运行Delete obsolete命令实际删除。
还需满足以下两个条件之一:
使用FRA时,可用configure archivelog deletion policy命令配置保留策略。以下两种备份策略如果都配置,需要两个条件都满足时才会删除归档日志。
① 已向dg库传输或应用归档日志
这个很常用,为的是避免主库归档还没传到从库就被删除,或者从库归档还没应用就被删除,导致主从中断。但设置之后如果主从同步有问题,主从库归档将都无法自动删除,可能撑爆空间。
-- 主库
RMAN> CONFIGURE ARCHIVELOG DELETION POLICY TO SHIPPED TO ALL STANDBY;
-- 从库
RMAN> CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED on ALL STANDBY;
alter system set log_archive_dest_1 ="LOCATION=c:\orcl1122\guidang1\ mandatory";
-- 设置mandatory后必须归档到指定路径后,redolog才可重用
② 已在设备上将归档备份了n次
RMAN> CONFIGURE ARCHIVELOG DELETION POLICY TO backed up 2 times to device type disk;
③ 组合策略
-- 主库 日志传送至从库+完成1次备份
RMAN> CONFIGURE ARCHIVELOG DELETION POLICY TO SHIPPED TO ALL STANDBY BACKED UP 1 TIMES TO DISK;
-- 从库 日志完成应用+完成1次备份
RMAN> CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY BACKED UP 1 TIMES TO DISK;
④ 清除归档保留策略
RMAN> CONFIGURE ARCHIVELOG DELETION POLICY TO NONE;
当备份或副本满足保留策略标准而变得过期时会发生什么?这取决于你用的是FRA还是手动备份区。
RMAN最终会基于空间需求(默认80%)从FRA删除备份集片或归档,可通过v$recover_file_dest视图的space_reclaimable列确定过期的备份(可删除的备份)所占用的FRA空间量。
可以利用report obsolete;确定rman已将哪些备份标记为过时,并利用delete obsolete;删除,通常需要自己配置删除脚本或使用第三方备份软件控制删除。
修改为特定备份指定的保存窗口,允许用户修改备份状态。当备份集存储在FRA时,一些change命令将无效。
change backupset 31 keep forever logs;
change backupset 32 keep until time 'sysdate + 7' logs;
change backupset 33 unavailable;
change backupset 117,118 delete;
change backuppiece 1304 delete;
change archivelog until logseq =544 delete;
执行delete命令时,关联的rman备份记录将从控制文件或恢复目录中删除。
可删除基于保留标准被标记为过时的任何备份
Delete expired;
Delete obsolete;
Delete命令默认会要求用户确认删除指令,可使用noprompt选项避免确认
Delete noprompt obsolete;
若未使用FRA,并要物理删除与备份关联的文件,将需要使用force参数
Delete noprompt obsolete force;
使用rman运行脚本
Rman target sys/sys cmdfile=run_backup.cmd
#或者
RMAN>@run_backup.cmd
List命令是一种在控制文件或恢复目录中查询备份历史信息的方法。
List incarnation of database;
--ResetSCN和Reset Time列为创建数据库化身的时间
--Status列表示化身状态:
-- PARENT: 旧化身
-- CURRENT: 当前化身,可以看到DB恢复到了哪个时间点
-- ORPHAN: 孤儿化身(在resetlogs命令后又进行了恢复)
List backup summary; -- 包含归档备份信息
--KEY: 备份集键
--TY(类型): 备份的类型,B表示备份
--LV(级别):A表示归档备份、F表示全备、0和1表示增备级别
--S(状态):A表示可用、U表示不可用、E表示过期
--Pieces:备份片数目
--Copies:副本数目
List backup of database summary;
List expired backup of archivelog all summary;
List backup by file;
List backup
rman>List recoverable backup of database;
rman>List expired backup;
rman>list expired backup of datafile 3;
rman>list expired backup of archivelog all;
rman>list backup of tablespace users;
rman>list backup of datafile 3;
rman>list archivelog all;
rman>list backup of controlfile;
RMAN> list restore point all;
用于判断数据库的当前可恢复状态和提供数据库备份的特定信息。
Report need backup days=1;
Report need backup redundancy=2;
Report need backup recovery window of 2 days;
Report unrecoverable;
Report schema;
Report obsolete;
V$RMAN_STATUS:查询rman备份状态,可以看见在RMAN里执行的操作,其中最主要的列是OPERATION和status。
Operation的值有:rman、backup、list、report
Status的值有:running、running with warnings、running with errors、completed、completed with warnings、completed with errors、failed
查看备份失败的记录
SELECT
*
FROM
V$RMAN_STATUS
WHERE
START_TIME >= TO_DATE ( & START_TIME, 'YYYY-MM-DD HH24:MI:SS' )
AND END_TIME <= TO_DATE ( & END_TIME, 'YYYY-MM-DD HH24:MI:SS' )
AND OPERATION = 'BACKUP'
AND STATUS != 'COMPLETED'
AND STATUS NOT LIKE 'RUNNING%';
查看备份成功的记录
SELECT
*
FROM
V$RMAN_STATUS
WHERE
START_TIME >= TO_DATE ( & START_TIME, 'YYYY-MM-DD HH24:MI:SS' )
AND END_TIME <= TO_DATE ( & END_TIME, 'YYYY-MM-DD HH24:MI:SS' )
AND OPERATION = 'BACKUP'
AND STATUS = 'COMPLETED';
查看所有备份集详细信息
SELECT
A.RECID "BACKUP SET",
A.SET_STAMP,
DECODE (
B.INCREMENTAL_LEVEL,
'',
DECODE ( BACKUP_TYPE, 'L', 'Archivelog', 'Full' ),
1,
'Incr-1级',
0,
'Incr-0级',
B.INCREMENTAL_LEVEL
) "Type LV",
B.CONTROLFILE_INCLUDED "包含CTL",
DECODE ( A.STATUS, 'A', 'AVAILABLE', 'D', 'DELETED', 'X', 'EXPIRED', 'ERROR' ) "STATUS",
A.DEVICE_TYPE "Device Type",
A.START_TIME "Start Time",
A.COMPLETION_TIME "Completion Time",
A.ELAPSED_SECONDS "Elapsed Seconds",
A.BYTES / 1024 / 1024 / 1024 "Size(G)",
A.COMPRESSED,
A.TAG "Tag",
A.HANDLE "Path"
FROM
GV$BACKUP_PIECE A,
GV$BACKUP_SET B
WHERE
A.SET_STAMP = B.SET_STAMP
AND A.DELETED = 'NO'
ORDER BY
A.COMPLETION_TIME DESC;
查找某个备份集中包含数据文件
SELECT DISTINCT
c.file #,A.SET_STAMP, D.NAME, C.CHECKPOINT_CHANGE#, C.CHECKPOINT_TIME
FROM
V$BACKUP_DATAFILE C,
V$BACKUP_PIECE A,
V$DATAFILE D
WHERE
A.SET_STAMP = C.SET_STAMP
AND D.FILE # = C.FILE#
AND A.DELETED = 'NO'
AND c.set_stamp =& set_stamp
ORDER BY
C.FILE #;
查询某个备份集中控制文件
SELECT DISTINCT
A.SET_STAMP,
D.NAME,
C.CHECKPOINT_CHANGE #,
C.CHECKPOINT_TIME
FROM
V$BACKUP_DATAFILE C,
V$BACKUP_PIECE A,
V$CONTROLFILE D
WHERE
A.SET_STAMP = C.SET_STAMP
AND C.FILE # = 0
AND A.DELETED = 'NO'
AND C.SET_STAMP = & SET_STAMP;
查看某个备份集中归档日志
SELECT DISTINCT
B.SET_STAMP,
B.THREAD #,
B.SEQUENCE #,
B.FIRST_TIME,
B.FIRST_CHANGE #,
B.NEXT_TIME,
B.NEXT_CHANGE #
FROM
V$BACKUP_REDOLOG B,
V$BACKUP_PIECE A
WHERE
A.SET_STAMP = B.SET_STAMP
AND A.DELETED = 'NO'
AND B.SET_STAMP = & SET_STAMP
ORDER BY
THREAD #, SEQUENCE#;
查看某个备份集 SPFILE
SELECT DISTINCT
A.SET_STAMP,
B.COMPLETION_TIME,
HANDLE
FROM
V$BACKUP_SPFILE B,
V$BACKUP_PIECE A
WHERE
A.SET_STAMP = B.SET_STAMP
AND A.DELETED = 'NO'
AND B.SET_STAMP = & SET_STAMP;
查看 RMAN的配置信息
SELECT NAME,VALUE FROM V$RMAN_CONFIGURATION;
查询30天内RMAN备份的详细情况
SELECT SESSION_KEY, INPUT_TYPE, STATUS,
TO_CHAR(START_TIME,'yyyy-mm-dd hh24:mi') start_time,
TO_CHAR(END_TIME,'yyyy-mm-dd hh24:mi') end_time,
ELAPSED_SECONDS,
INPUT_BYTES_PER_SEC_DISPLAY in_sec,
OUTPUT_BYTES_PER_SEC_DISPLAY out_sec,
COMPRESSION_RATIO,
INPUT_BYTES_DISPLAY in_size,
OUTPUT_BYTES_DISPLAY out_size
FROM V$RMAN_BACKUP_JOB_DETAILS
where start_time>=sysdate-30;
查询rman备份进度及预估剩余时间
select inst_id,sid,serial#,opname,COMPLETE,
trunc(((to_char(last_update_time,'dd')-to_char(start_time,'dd'))*60*24+(to_char(last_update_time,'hh24')-to_char(start_time,'hh24'))*60 +(to_char(last_update_time,'mi')-to_char(start_time,'mi')))*(100-complete)/complete) min from
(
SELECT inst_id,
sid,
serial#,
opname,
ROUND(SOFAR / TOTALWORK * 100, 2) COMPLETE,
LAST_UPDATE_TIME,
START_TIME
FROM gV$SESSION_LONGOPS
WHERE OPNAME LIKE 'RMAN%'
--AND OPNAME NOT LIKE '%aggregate%'
AND TOTALWORK != 0
AND SOFAR <> TOTALWORK
) t;
查看各文件备份时间及速率
SELECT device_type device,TYPE,filename,
to_char(open_time,'yyyymmdd hh24:mi:ss') OPEN,
to_char(close_time,'yyyymmdd hh24:mi:ss') CLOSE,
elapsed_time elapse,effective_bytes_per_second e_bytes
FROM v$backup_async_io
WHERE close_time>SYSDATE-1
ORDER BY close_time
查看各文件备份IO及长等待比率
SELECT filename,ready,short_waits,long_waits,io_count,long_waits/io_count,
FROM v$backup_async_io
参考:《Oracle RMAN备份与恢复》