ITPub博客

首页 > 数据库 > Oracle > 【RMAN】当表空间处于备份状态时发生了什么

【RMAN】当表空间处于备份状态时发生了什么

原创 Oracle 作者:恩强Boy 时间:2021-02-01 09:52:44 0 删除 编辑

对于比较老的数据库版本,如果要执行在线(热)备份,我们必须将表空间设置为begin backup 模式,然后复制数据文件,后将表空间设置为 end backup 模式。现在的热备基本都是通过 RMAN 工具来实现的,不过原理是一样的。当然要确保数据库处于 archivelog 模式。

示例1 : 执行一个简单的备份

SQL> alter tablespace system begin backup;

-- 操作系统层面复制数据文件

$ copy system01.dbf /backup/

SQL> alter tablespace system end backup;

示例2 : 备份整个数据库

SQL> alter database begin backup;

$ copy all datafiles /backup/

SQL> alter database end backup;

在线备份可能会导致一个块内的数据不一致。例如,我们正在备份数据文件system01.dbf 中的 block 100 。另外, copy 命令正在读取整个块,而 DBWR 正在更新数据块。在这种情况,复制命令可以在块的上半部分读取旧数据,在块的下半部分读取新数据。结果称为“破裂块”,这就意味着对于一个给定的 SCN ,该数据块中包含的数据不一致。

针对以上内存,Oracle 的解决办法如下:

1.  当数据文件处于热备份模式时,当数据块被修改时,数据块被更改的部分会被写入redo log 中。在这种情况下,我们可能会遇到复制数据文件的进程和 DBWR 进程同时在一个数据块上工作。

比如,操作系统一次从磁盘读取512 字节,备份进程去读取一个 8k 的数据块,同时 DBWR 请求重写这个块。此时备份进程得到的是一个断裂的数据块,头部和尾部处于两个时间点。

2.  当数据文件处于热备份模式时,不会更新最新完成检查点SCN 的数据文件头。这样可以让恢复进程知道,完全恢复该数据文件可能需要哪些 archive redo log 。为了限制这种额外日志记录的影响,我们应该确保一次只将一个表空间置于备份模式中,并在对表空间进行备份后立即将其从备份模式中取出。这种方式将尽可能地减少记录的块的数量。

尽量在数据库的负载最少的情况下进行在线热备份,这样生成的redo log 会更少。

 

 

---- end ----


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31529886/viewspace-2754944/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
勤奋,专注和练习

注册时间:2018-04-03

  • 博文量
    77
  • 访问量
    143638