royalwzy
作者royalwzy·2017-03-30 11:50
技术经理·海通证券股份有限公司

Oracle数据库的备份与恢复—使用RMAN创建备份

字数 7370阅读 2717评论 0赞 1

Objectives

1.创建镜像备份文件;
2.创建whole database backup;
3.创建full database backup;
4.开启快速增量备份;
5.创建双重备份集;
6.对备份集进行备份;
7.使用rman创建多片备份;
8.创建和归档备份,用于长期保存;
9.查看和维护备份

Create Backup Sets

rman target /
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1;
BACKUP AS BACKUPSET FORMAT '/u01/app/oracle/backup/dataf/tbs_users_%U' TABLESPACE USERS

Creating Image Copies

rman target /
BACKUP AS COPY FORMAT '/u01/app/oracle/backup/dataf/tbs_users_%U' TABLESPACE USERS;
BACKUP AS COPY ARCHIVELOG LIKE '/path/*' -- 可以使用通配符来备份归档日志;
1.镜像拷贝是数据文件,归档日志文件或者控制文件的克隆,当使用rman的backup as copy命令创建拷贝时,server session会拷贝数据文件的块和控制文件中的记录;
2.镜像拷贝具有以下特征:

  • 镜像拷贝只能写入到磁盘上;如果是一个很大的数据文件的话,拷贝镜像需要很长时间,但是恢复时同样可以减少很多时间,因为镜像拷贝可以直接使用;
  • 存放在磁盘上的镜像拷贝可以直接使用rman的switch命令直接使用,等同于alter database rename file的sql命令;
  • 在镜像拷贝中,所有的块都会被复制,不管是否包含数据;默认的Oracle会计算checksum(校验和)来检查是否有坏块并注册到控制文件中;可以在backup命令中指定nochecksum子句来取消这个过程,从而加速拷贝;
  • 镜像拷贝可以是full backup或者0级增量备份的一部分,因为它包含了所有的数据块
  • Creating a Whole Database Backup
    1.whole database backup包括所有的的数据文件,归档日志文件,参数文件,密码文件和至少一份控制文件;可以是备份集或者镜像拷贝;
    2.使用rman做whole database backup的话需要使数据库处于mount状态或者open状态;
    CONFIGURE DEFAULT DEVICE TYPE TO DISK;
    CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET;
    CONFIGURE CONTROLFILE AUTOBACKUP ON;
    CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/u01/app/oracle/backup/controlf/%F';
    CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1;
    BACKUP DATABASE PLUS ARCHIVELOG DELETE INPUT; -- 删除备份的归档文件可以节省空间;
    3.创建镜像拷贝的方式;
    BACKUP COPY OF DATABASE;

rman Backup Types

1.Full backup:与whole database backup不同;它是从数据文件备份的那一刻,所有数据文件中包含数据的块的拷贝;

  • rman拷贝了所有数据块到备份集,除了那些从来没有被使用过的块;
  • 对于full image copy,整个数据文件都被复制;
  • full backup不能是增量备份策略的一部分,因为接下来的增量备份不能基于它还原

2.Incremental Backup:上次备份之后,所有发生改变的数据块的拷贝;

  • Oracle支持两种级别的增量备份,即0级增量备份和1级增量备份;
  • 0级增量备份等同于full backup,但是必须被标记为0级备份;
  • 1级增量备份又分为两种类型:cumulative和differential(即累计增量备份和差异增量备份);
  • 累计增量备份是备份上次0级备份之后所有改变的块;差异增量备份是备份上次0级或者1级增量备份后改变的块;

3.相关的语法:

  • 执行0级备份:BACKUP INCREMENTAL LEVEL 0 DATABASE;
  • 执行1级差异备份:BACKUP INCREMENTAL LEVEL 1 DATABASE;
  • 执行1级累计备份:BACKUP INCREMENTAL LEVEL 1 CUMULATIVE DATABASE

4.默认情况下,如果不指定FULL或者INCREMENTTAL选项的话,rman总是执行full backup;但是full backup不会影响接下来的增量备份,也不会被认为是增量备份策略中的一部分

Fast Incremental Backup

通过block change tracking(块改变跟踪)文件实现:
1.维护了从上次备份之后所有发生改变快的记录;
2.这些记录是存放文件中的,同时会产生redo日志;
3.当备份时自动访问这个文件,从而加快备份速度;
4.tracking文件是由CTWR进程自动维护的,不需要dba的干涉;
5.它的大小主要是由以下几点决定的:

  • 数据库的大小;
  • 如果是RAC环境的话,使用节点的数量;
  • 维护的旧备份的数量;
  • 文件的最小大小是10M

Enabling Fast Incremental Backup

1.在EM中设置:EM->Availability->Backup Settings(Backup/Recovery)->Policy;
2.在命令行中设置;
ALTER DATABASE ENABLE BLOCK CHANGE TRACKING[ USING FILE '/home/oracle/rman_change_track.f' REUSE];
3.因为rman不支持备份还原block change tracking file,所以不建议放在快速闪回区中;

Monitoring Block Change Tracking

1.查看改变跟踪文件的位置;
SELECT filename, status, bytes FROM v$block_change_tracking;
2.分析跟踪文件中每个数据文件的信息;
SELECT file#,

    AVG(datafile_blocks),
    AVG(blocks_read),
    AVG(blocks_read / datafile_blocks) * 100 AS pct_read_for_backup,
    AVG(blocks)

FROM v$backup_datafile
WHERE used_change_tracking = 'YES' AND

    incremental_level > 0

GROUP BY file#;

Performing Proxy Copies

1.使用backup命令的proxy选项时,需要使用MML来完成对文件的拷贝;
2.语法为BACKUP AS BACKUPSET ... PROXY [ONLY] DATABASE|TABLESPACE ...;
3.不能与AS COPY连用,否则会报错;
4.主要是用于把备份直接备份到磁带或者是存储上

Create Duplexed Backup Sets Using Backup Copies

1.使用backup copies命令备份;
backup copies 2 tablespace users format '/u01/app/oracle/backup/dataf/%U','/u01/app/oracle/backup/controlf/%U';
2.可以覆盖rman级别的参数配置;
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 2;
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 2;
3.备份完成之后可以使用list backup命令来校验;

Create Backups of Backup Sets

1.只有备份到磁盘上的备份集可以使用rman命令的backup backupset命令备份;
2.备份集的备份可以放到任何的设备类型上,默认是使用的磁盘通道,如果想要备份到磁带上的话需要手动指定;
delete backupset;
delete copy;
backup device type disk as backupset database plus archivelog delete input;
backup backupset all; -- 提示已经存在一份数据,不需要再备份;
backup copies 2 backupset all; -- 可以再把原来的备份集拷贝一份

Backing Up Read-Only Tablespaces

对于只读表空间的注意事项:
1.开启智能备份的后,对于只读表空间只有在不存在备份或者是不满足保留策略时才会进行备份;
2.如果要改变只读表空间为读写状态的话,需要立即进行备份;
3.可以在backup备份时指定skip readonly选项来跳过只读的表空间

Configuring Backup and Restore for Very Large Files

1.一个Oracle的文件最大可以达到128T,正常的一个备份的默认单位就是一个文件大小;
2.使用rman可以把多个大文件分割成很多的小文件来备份,还原时也可以分别还原这些文件;(比如可以指定1-3号文件放在一个备份集中,4-6号文件放在一个备份集中;这张PPT要说的是可以设置每一个备份片最大的文件大小,假如原来的文件大小是2g,可以指定备份集片的大小为500M,然后备份到4个片中)
3.每个分片间的块是连续的,可以被独立处理,所以可以使用并行提高性能;
4.除了最后一个分片,其它都是大小相同的,最多有256个分片

Creating RMAN Multisection Backups

1.分片备份的例子;
delete backupset;
backup datafile 1 section size 100M;
2.分别把不同文件备份到不同备份集的例子;
run
{
ALLOCATE CHANNEL ch1 DEVICE TYPE DISK;
ALLOCATE CHANNEL ch2 DEVICE TYPE DISK;
ALLOCATE CHANNEL ch3 DEVICE TYPE DISK;
backup database plus archivelog section size 500M;
}
3.可以通过查看v$backup_set视图中的multi_section列或者v$backup_datafile视图中的section_size来判断是否是进行分片了;
SELECT * FROM v$backup_set;
SELECT * FROM v$backup_datafile

Archival Backups:Concepts

1.如果你需要为一个特定的时间保留备份的话,rman会认为你可能要执行基于时间点的恢复(从备份的时间点到当前的时间);为了满足这种场景,rman需要保存从上次备份之后的所有的归档日志;
2.然而,你的需求可能只是想简单的保留某一个备份(假如说是两年前的一个备份,可以认为是数据库某个时间的快照,用于还原到其它机器上做测试),并不需要做基于时间点的恢复,要是是能恢复到两年前即可;但是此时你又需要维护rman的保留策略,这是一个生产环境中很常见的需求;
3.11g中的Archival Backup完美解决这个问题,需要标记这个备份为archival backup,这个属性可以覆盖配置的任何的保留策略;可以保证它一直是非obsolete的,如果想要指定它obsolete,则需要使用recovery catalog;
4.需要使用keep子句完成;
5.必须使用recovery catalog,为什么?因为要一直保留这个备份的元信息

Creating Archival Backups with EM

1.在EM->Availability->Schedule Backup->Schedule Customized Backup页面;
2.在Policy页面可以指定保留的天数,或者永久保留;
3.最后可以查看执行的脚本

Creating Archival Backups with RMAN

1.语法;
BACKUP ... KEEP {FOREVER|UNTIL TIME 'SYSDATE + <n>'} RESTORE POINT <restore_point_name>

 1.untile time|forever:指定了一个备份集的保留期限,即备份必须保存到的日期; 
 2.restore point:为备份集关联一个还原点的名字,它会在控制文件中创建一个一致性的点;它也对应一个SCN,归档的备份可以被恢复和还原到这个点; 

2.列出所有具有还原点的备份集;
list restore point all;
3.列出某一个特定还原点的备份集;
list resotre point <restore_point_name>

Managing Archival Database Backups

1.创建一个KEEP FOREVER的备份;
rman target sys/ORACLE@ORCL catalog rman/oracle@ORCL
backup keep forever tablespace example;
备份的过程看到提示[backup will never be obsolete],而且还同时备份了归档日志文件;
2.创建一个保留30天的归档备份;
backup keep until time 'sysdate+30' restore point 'users30days' tag 'tbs_users_test' tablespace users;
3.查看具有还原点的备份集;
list restore point all;
4.修改KEEP的文件为NOKEEP;
change backup tag 'TBS_USERS_TEST' nokeep;
list backupset;
5.变为keep 30天;
change backup tag 'TBS_USERS_TEST' keep until time 'sysdate+30';
list backupset

Backing Up Recovery Files

1.只是备份快速闪回区中的文件(快速闪回区中的所有的文件);
backup recovery area;
2.备份所有的恢复文件(包括所有的恢复文件,即便不在快速闪回区,比如控制文件或者数据文件的拷贝);
backup recovery files;
3.默认情况下,这两个命令是强制开启智能备份的;意味着只有那些没有备份过的文件才会被备份,当然也可以使用force命令强制所有的文件都备份;
4.rman备份的文件有:数据文件,控制文件,spfile,归档日志文件和备份集的备份;如果放置一个操作系统文件到快速闪回区的话,也会称为备份的一部分;
5.这两条命令只能备份到磁带上,如果备份到磁盘上的话会报错RMAN-06603

Managing Backups: Reporting

1.list:显示备份集,镜像拷贝等资源库的记录;
2.report:给出资源库的细节;
3.report need backup:列出需要备份的数据文件;
4.report obsolete:标记出那些不满足保留策略的文件;
5.report schema:列出数据库的架构

Managing Backups: Dynamic Performance Views

1.V$BACKUP_SET:所有的备份集;
2.V$BACKUP_PIECE:所有的备份片;
3.V$DATAFILE_COPY:所有的数据文件的拷贝;
4.V$BACKUP_FILES:所有正在备份的文件的信息;
5.如果使用recovery catalog的话,就是在catalog中查看相应的RC_的视图;如果要查看RC_BACKUP_FILES视图,需要执行CALL DBMS_RCVMAN.SETDATABASE(null,null,null,<dbid>)

Using Enterprise Manager to View Backup Reports

在EM->Availability->Schedule Backup->Backup Reports页面

Managing Backups: Cross-Checking and Deleting

1.crosscheck:检查rman资源库中的信息是否真实的存在物理磁盘上;
2.delete expired:删除catalog中存在,但是物理文件实际不存在的信息,即crosscheck xx后会被标记为expired;
3.delete obsolete:删除超过保留策略的文件

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

1

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广