Mais conteúdo relacionado
Semelhante a 8, OCP - backup with rman (20)
8, OCP - backup with rman
- 2. Overview
• Recovery Manager(RMAN)是oracle官方推荐的备份恢复工具, RMAN
的使用对于DBA而言至关重要. 这一章讲述如何使用RMAN进行数据
库的备份:
– 数据库一致性备份;
– 数据库非一致性备份;
– 增量备份;
– 备份自动化;
– 管理备份, 监控闪回区;
– 定义和应用保留规则;
– 镜像文件备份;
– 启用快速增量备份;
– 双重备份(duplex backups), 备份备份集;
– 归档备份;
– 多段, 压缩, 加密备份;
– 备份报告和维护;
– 备份设置和优化;
– 备份通道
- 3. Backup Concepts &
Terminology
• User-managed vs. Server-managed
通过执行操作系统命令进行的备份被称为用户管理的备份, 通过RMAN执行的备份
则称为服务器管理备份.
• Closed vs. Open
在数据库关闭的情况下执行的备份被称为closed backup, 也被称为一致性备份
(consistent)、冷备份(cold) 、线下备份(offline); 当数据库处在打开状态下进行的备
份称为open backup, 也被称为非一致备份(inconsistent) 、热备份(hot) 、在线备份.
Tip: 热备份只有当数据库处在归档模式下可用. 如果数据库处在非归档模式, 只能
进行冷备.
• Whole vs. Partial(整体 vs. 部分)
全部备份和部分备份, 前者对所有的数据文件和控制文件进行备份, 后者则备份这
些文件的子集. 在大多数情况下, partial类型的备份只有当数据库处在归档模式下才
能够执行.
• Full vs. Incremental(全量 vs. 增量)
full类型会备份目标文件所有被使用的数据块, 而incremental备份则只会备份那些从
上次备份开始被修改过的数据块.
Tip: 可以使用以上备份类型的任意组合, 常见的情况是在按周/月进行
closed/whole/full备份, 每天则进行open/whole/incremental备份.
• Backup set vs. Backup piece(备份集 vs. 备份片)
备份片在物理上存储为一个文件, 备份片只属于一个备份集. 通常情况下一个备份
集仅包含一个备份片, 只有当使用MAXPIECESIZE参数设置了备份片的大小时才有可
能在一个备份集下面创建多个备份片.
- 4. RMAN Overview
• Files
RMAN可以备份如下文件:
数据文件 控制文件 归档日志文件
SPFILE 备份片(backup set piece)
RMAN不能备份如下文件:
临时文件(Tempfiles) 在线重做日志文件 密码文件
PFILE Oracle Net配置文件
• Types
RMAN能够生成以下三种类型的备份
– 备份集(backup set)
备份集是RMAN专有的备份格式, 一个备份集中可以实现对多个数据库文件的备份, 对于数据文件
仅包含已经被使用的数据块(如果数据块不属于任何对象, 不会写入备份集中),这大大减小了备份
文件的大小. 备份集可以是全量的也可以是增量的. 在物理上, 备份集由多个备份片(piece)组成.
– 压缩备份集(compressed backup set)
压缩格式下的备份集.
– 镜像拷贝(image copy)
等同于输入文件, 但仍需要使用RMAN才能进行数据库的还原 (restore)操作
• Channels
RMAN备份和恢复操作由服务端通道进程执行, 通道进程分为两种类型: 磁盘通道 和 磁带通道,
分别写不同的介质.
• RMAN Metadata Repository
RMAN元数据用于描述已经发生的备份操作, 比如备份集由哪些备份片组成, 备份片的位置和
名称; 镜像拷贝文件的位置等. RMAN元数据保存在控制文件中, 也可以选择保存在数据库中.
- 5. RMAN In Action
- Consistent Backup
• 在11g版本中所有的RMAN备份操作都由backup命令执行, 可以通过rman交互式命
令, rman脚本或者database control界面执行.
• Consistent Backup
执行一致性备份要求数据库处在mount状态, 这是因为RMAN需要读取控制文件以
确定数据文件的位置. 下面是一段执行cold/whole/full备份的RMAN脚本:
run {
shutdown immediate;
startup mount;
allocate channel d1 type disk;
backup as backupset database format
'/opt/oracle/backup/offline_full_whole_%d_%U.bus';
alter database open;
}
1-2 关闭并重启数据库到mount状态
3 分配一个通道进程, 这里使用磁盘类型
4 使用备份集的方式备份整个数据库, 指定备份文件的位置
5 打开数据库
使用如下方式执行, rman交互式命令:
– 使用rman target sys/passwd@ocpdemo登录, 如果是操作系统验证直接使用rman target /
– 依次输入花括号中的命令.
rman脚本:
– 首先将该脚本保存在文本文件中比如offline_full_whole.rman
– 切换到脚本文件所在目录, 运行rman target sys/passwd@ocpdemo @ offline_full_whole.rman
- 6. RMAN In Action
- Explained
• 备份集和备份片
使用RMAN进行一次备份操作时, 通常会生成多个备份集, 这由RMAN自己决定或者
通过人工的干预, 比如运行backup命令时指定filesperset选项. 通常情况下备份集下
面只有一个备份片, 可以通过登录RMAN执行list backup命令查看备份信息, 或者通
过视v$backup_set和v$backup_piece查看.
• 存储位置
可以通过backup命令的format选项指定备份片文件的全路径, 需要在该路径中使用
占位符, 比如:
– %d 数据库名称
– %U 保证备份片文件名的唯一性
– %s 备份集的序号
– %p 备份片在当前备份集中的序号
– %c 对于多路复用备份(multiplex backups), 表示拷贝的序号. 此占位符对于指定多路复
用备份的文件格式是必须的.
如果不指定format选项, 那么备份文件将会默认存储在闪回区, 相应的目
录结构将会被自动创建, 比如:
[oracle@localhost flash_recovery_area]$ tree .
.
`-- OCPDEMO
`-- backupset
`-- 2013_03_05
- 7. RMAN In Action
- Open Backup
• 在最简单的情况下, 可以使用backup database命令执行一次安全可靠的热
备份操作. 下面是一个热备份的示例:
run {
allocate channel t1 type disk;
allocate channel t2 type disk;
backup as compressed backupset filesperset 4 database;
backup as compressed backupset archivelog all delete all input;
}
1-2 分配两个通道进程(t1/t2), 依据服务器的资源可以提升备份的
速度
3 压缩备份整个数据库, 包括数据文件/控制文件/ SPFILE等.
filesperset 4指定一个备份集最多包含4个文件, 这样可以缩小
备份文件的大小提升数据库恢复的速度.
4 压缩备份归档日志文件, 完成后删除归档日志
• 备份操作可以针对某个表空间, 数据文件, 或者符合某种模式的归档日志文
件, 示例:
backup as backupset format '/backup/orcl/df_%d_%s_%p' tablespace gl_tabs;
backup as compressed backupset datafile 4;
backup as backupset archivelog like '/u01/archive1/arch_1%';
- 8. RMAN In Action
- Incremental Backup
• 增量备份是指在某一个备份点的基础上, 对发生改变的数据进行备份. 与全
量备份相比, 增量备份需要的备份时间更短, 磁盘空间使用更少.
• level 0 vs. level 1
level 0的增量备份相当于全量备份, 使用如下格式:
backup as backupset incremental level 0 database;
level 1的增量备份又分为两种类型:
– differential
在前一个level 1备份的基础上进行增量备份, 如果不存在level 1的增量备份则基于
level 0备份. 示例:
backup as backupset incremental level 1 database;
– cumulative
在前一个level 0备份的基础上进行增量备份, 格式如下:
backup as backupset incremental level 1 cumulative database;
Tip: 进行level 1增量备份时, 如果之前没有level 0备份, 那么当前的level 1备份实质
上执行的是level 0备份.
- 9. RMAN In Action
- Incremental Backup
• Block change tracking
默认情况下, 增量备份对于备份速度的提升并没有那么显著,
因为增量备份需要扫描数据库文件的内容已发现发生改变
的数据块, 这会花费大量的时间. 可以通过开启”追踪数据块
变化”以加速增量备份, 通过如下命令开启:
alter database enable block change tracking using file
'/opt/oracle/oradata/change_tracking.dbf';
如果不指定追踪文件的位置, 该文件默认会创建在
DB_CREATE_FILE_DEST参数指定的目录. 通常情况下该文件
的大小在10M左右.
可以通过v$backup_datafile视图查看启用数据块跟踪的效果,
使用如下SQL:
select file#, datafile_blocks, (blocks_read / datafile_blocks) * 100 as
pct_read_for backup from v$backup_datafile
where used_change_tracking='YES' and incremental_level > 0;
- 10. RMAN In Action
- Image Copies
• RMAN镜像备份通过数据块的逐个拷贝实现, 备份
的结果是与数据文件、控制文件、归档日志文件
内容完全相同的拷贝. 镜像备份不能使用备份集
相关的特性, 比如增量备份、压缩、设置备份片
大小等. 镜像备份的一个好处是还原数据库的速
度非常快, 来自官方的建议是保留一份数据库的
镜像备份, 以及自该备份开始的归档日志文件.
• 镜像备份只能用于数据文件、归档日志文件, 控
制文件, 不用使用于SPFILE. 示例:
backup as copy database;
backup as copy archivelog all delete all input;
- 11. RMAN In Action
- Protect Backups
• RMAN支持对备份进行备份, 通常会将这种备份最
终保存到磁带. 使用下面的命令实现备份的多路
复用:
backup as backupset device type disk copies 2 database
format '/opt/oracle/backup/%s_%p_%c.bus‘;
该命令会对数据库进行备份, 并产生额外的一份
拷贝.
• 闪回区备份
– backup recovery area;
基于默认的设置将闪回区备份到磁盘;
– backup recovery files;
备份与数据库恢复相关的文件(包括闪回区文件以及不在
闪回区的文件).
- 12. RMAN In Action
- Backup Parallelizing
• RMAN备份支持并行操作, 最常见的情形是分配多个磁盘通道进程.
RMAN备份的并行度由以下的几个因素决定:
– 通道进程的个数
通道进程的数量是对备份并行度的硬限制.
– 备份集的个数
– 输入文件的个数
并行度不能超过输入文件的个数, 除非多段备份被使用.
示例:
run {allocate channel t1 type sbt;
allocate channel t2 type sbt;
allocate channel t3 type sbt;
allocate channel t4 type sbt;
backup database files per set 8;}
这里分配了4个通道进程, 限制了并行度不能超过4; 现在假设数据库包括
控制文件在内总共有100个文件, 那么就可以分为13个备份集, 最终的并行
度是4; 如果只有20个文件, 那么将产生3个备份集, 最终的并行度是3.
- 13. RMAN In Action
- Configure RMAN Defaults
• 登录RMAN之后可以使用show all指定查看所有的配置项, 这里显示的配置项均是默
认值:
• 使用configure指令进行配置, 示例:
CONFIGURE DEVICE TYPE DISK PARALLELISM 4 BACKUP TYPE TO BACKUPSET; -- 进行磁
盘备份集备份时, 默认启动4个通道进程(并行度4);
CONFIGURE BACKUP OPTIMIZATION ON; -- 启用备份优化, 如果检查到某文件有足够
的备份则不再进行备份;
CONFIGURE RETENTION POLICY TO REDUNDANCY 3; -- 默认设置下RMAN保存文件的
一份拷贝, 这里设置为3表示保存文件的3份拷贝.
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW of 90 DAYS; -- 在此规则
下, RMAN需要保存所有数据文件在过去90天内的至少一个备份.
• 使用CLEAR恢复到默认的配置, 示例:
configure device type disk clear;
- 14. RMAN In Action
- Managing & Monitoring
• list, report & delete
– list命令用于查看备份集或者镜像备份, 示例:
list backup; -- 查看所有的备份集
list copy; -- 查看所有的镜像拷贝
list backup of database; -- 查看整个数据库的备份集, 包括全量和增量
list backup of datafile 1; -- 查看包含数据文件1的备份集
list backup of tablespace users; -- 查看包含表空间users的备份集
list backup of archivelog all; -- 查看所有归档日志的备份集
list copy of archivelog from time=‘sysdate - 7’; -- 查看过去7天内产生的归档日志镜像备份
list backup of archivelog from sequence 1000 until sequence 1050; -- 查看归档日志备份集, 该归档日志
包含1000到1500的日志切换序号.
– report命令用于判断哪些数据库文件需要进行备份, 这需要根据当前的RMAN元数据和保留规则(retention
policy)进行判断. 示例:
report schema; -- 列出组成数据库的数据文件
report need backup; -- 根据保留规则列出所有所有需要备份的数据文件和归档日志文件
report need backup days 3; -- 列出所有在过去3天内没有进行备份的文件
report need backup redundancy 3; -- 列出所有少于3个份备份的文件
report obsolete; -- 根据当前保留规则列出所有不需要的备份集和镜像
report obsolete redundancy 2; -- 列出所有大于2个备份的备份集或者镜像
– delete 删除备份集或者镜像备份, 示例:
delete obsolete; -- 根据保留规则, 删除所有不需要的备份
delete obsolete redundancy 2; -- 删除大于2个备份的备份集或者镜像
delete backupset 4; -- 删除id为4的备份集
delete copy of datafile 6 tag file6_extra; -- 删除数据文6的镜像
- 15. RMAN In Action
- DPV
• 数据库在启动时会读取控制文件中的备份元数据,
并作为视图供用户查询. 这些视图包括:
– v$backup_files
RMAN备份的文件, 包括数据文件、spfile、控制文件
及归档日志文件.
– v$backup_set, v$backup_piece
备份集, 备份片信息
– v$backup_redolog, v$backup_spfile, v$backup_datafile
分别表示归档日志、SPFIL及数据文件的备份信息
– v$backup_device
连接到RMAN的SBT设备
– v$rman_configuration
RMAN配置, 对于配置为默认值的项不包含
- 16. RMAN In Action
- Backup Crosschecking
• list, report等命令会读取备份原数据并将备份信息展
示出来, 但是它们不会去检查磁盘或者磁带设备上
是否真实存在这些备份文件. RMAN提供了
crosscheck命令以实现此功能, 示例:
crosscheck backup of database;
该命令会读取所有与整数据库备份相关的元数据,
并检查备份文件是否存在. 如果文件不存在则标识
备份状态为EXPIRED, 使用crosscheck backup/copy分别
检查所有的备份集和镜像. 删除过期的备份集:
delete expired backupset;
注意: 与delete obsolete命令不同的是, 此命令仅更新
RMAN元数据, 不会删除备份文件(已经不存在) .