[转帖]热备份(hot backup)期间到底做了什么?_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3991 | 回复: 0   主题: [转帖]热备份(hot backup)期间到底做了什么?        下一篇 
kim
注册用户
等级:中校
经验:1729
发帖:222
精华:0
注册:2011-7-21
状态:离线
发送短消息息给kim 加好友    发送短消息息给kim 发消息
发表于: IP:您无权察看 2011-8-15 11:04:56 | [全部帖] [楼主帖] 楼主

热备份(hot backup)期间到底做了什么?

热备期间最大的特点就是产生了比平常更多的日志文件,为什么会这样?在恢复的时候有什么用呢?

热备期间日志文件记录的是修改的row所在的整个block的image,而不仅仅是修改的row的信息。

这样做的目的是为了尽量避免热备份的数据文件中因为包含SPLIT BLOCK ,而不能用于恢复的可能性。

为了理解这段话,还要提一下SPLIT BLOCK的概念.

我们都知道,oracle 的block 是由多个OS blocks组成。比如,某个Unix 文件系统使用 512bytes

的blocksize,而oracle 使用8k 的db_block_size. 当热备份数据文件的时候,我们使用文件

系统的命令工具copy 拷贝文件,并且使用文件系统的blocksize 读取数据文件。

假设这种情况:当我们拷贝数据文件的同时,数据库正好向数据文件写数据。这就使得拷贝的文件中

包含这样的database block,它的一部分OS block 来自于数据库向数据文件(这个db block)写操作之前,

另一部分来自于写操作之后。这个database block就是一个SPLIT BLOCK.

所以,通过在日志中记录整个变化的db block 的image,可以保证在恢复的过程中,任何在热备的数据文件中出现的

SPLIT BLOCK可以通过日志文件中的full image of the block 覆盖掉得以解决。以保证将来恢复的成功。

SPLIT BLOCK 的概念可以参考:
http://tahiti.oracle.com/  中查找 fractured block

证实热备过程产生了更多的redo:

PHP code:




'--- 正常运行产生的redo---'

SQL> select value from v$sysstat where name='redo size';

     VALUE

----------

   2989820

SQL> insert into t select * from dba_objects;

24652 rows created.

SQL> commit;

Commit complete.

SQL> select value from v$sysstat where name='redo size';

     VALUE

----------

   5774388

SQL> select 5774388-2989820 from dual;

5774388-2989820

---------------

        2784568

'--- hot backup 期间产生的redo---'

SQL> truncate table t;

Table truncated.

SQL> show user;

USER is "SYS"

SQL> 

SQL> alter tablespace system begin backup;

Tablespace altered.

SQL> select value from v$sysstat where name='redo size';

     VALUE

----------

   5782896

SQL> insert into t select * from dba_objects;

24652 rows created.

SQL> commit;

Commit complete.

SQL> select value from v$sysstat where name='redo size';

     VALUE

----------

   8608520

SQL> select 8608520-5782896 from dual;

8608520-5782896

---------------

        2825624

SQL> alter tablespace system end backup;

Tablespace altered.

'--- 两者比较---'

SQL> select 2825624-2784568 from dual;

2825624-2784568

---------------

          41056

SQL>

我的问题:

我一直对为什么begin backup后要锁定这个数据文件的checkpoint scn 不太明确?

我的理解和猜测:

热备过程中使用统一的checkpoint scn ,可以在日至文件中很方便的找到哪些日志是hot backup时产生的日志,这个过程中的有可能产生SPLIT BLOCK ,需要在恢复时特别注意。而不需要影响到其他的block。

大家有什么意见?




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论