热备份模式【Begin Backup】(1)--原理理解

        以备份的时候数据库是否在线,可以把备份操作分为热备份和冷备份。冷备份是指,关闭数据库之后对数据库进行备份操作。而热备份则是在数据库处于打开的状态下进行数据文件的备份。不过,不管怎样,两种备份模式都必须确保所备份的数据在备份的时候是处于一致性状态的,对于热备份就是对应的备份的数据块不能存在于内存中正在被修改。

一、begin backup机制所要解决的问题:fractured block

      不同于RMAN模式下对数据库的备份与恢复操作,user-managed backup 模式下操作的基本单位不是数据块,而是操作系统数据块。这样的话,就容易出现fractured block,也就是断块。fractured block在同一个SCN下header 和footer是不一致的。简单来说,一个oracle data block由几个system data block组成,断块就是备份的oracle data block的一部分是被更新的system data block,而一部分是不需要被更新的system data block.

      从某个角度来说,数据库的备份操作其实是一次复制操作。下面介绍,断块的形成过程:

      我们假设一个oracle data block 有8个system data block组成。oracle备份进程在对该oracle data block进行复制操作的时候,由于操作系统copy 命令的基本操作单位是system data block。假设,该复制操作已经随机复制了4个system data block,此时DBWR进程需要对该oracle data block进行写操作,如update 其中的一个数据为20。这时DBWR进程就会根据oracle data block 的header信息找到了对应的所在的system data block的数据进行修改。这时,由于不确定性有可能所修改的system data block是哪些还没有被复制的system data block。

     这样就会可能出现这样一种情况,进程已经复制了oracle data block所对应的保存header信息的system data block进入备份文件了,也就是说该oracle data block的block scn已经固定,不能再修改,这表示这个oracle data block的所有system data block的数据都是block scn的时间点上的数据。然而,DBWR的操作修改了其中的某个system data block 。也就说,该oracle data block的所有system data block并不是全部是block scn时间点上的数据,还有其他scn时间点上的数据块.这样,断块就形成了。这个oracle data block并不处于一致性状态。


二、解决该问题的begin backup机制。

第一步:在DBWR对该数据块进行修改之前,LGWR写入的redo log是修改前整个数据块的映像,而不是操作记录。这样,就不可避免产生性能问题,产生大量的redo log信息。

第二步,进行介质恢复的时候,发现还原过来的数据文件中存在断块。这个时候,就需要日志文件中的记录的那个断块的映像来覆盖该断块,从而达到对断块重新构造的目的。


三、热备份的基本操作

启动begin backup 机制:

SQL>ALTER TABLESPACE USERS BEGIN BACKUP;----对表空间启动BEGIN BACKUP 机制;

SQL>ALTER DATABASE BEGIN BACKUP;----对整个数据库启动BEGIN BACKUP 机制;

关闭begin backup 机制:

SQL>ALTER TABLESPACE USERS END BACKUP;----对表空间启动BEGIN BACKUP 机制;

SQL>ALTER DATABASE END BACKUP;----对整个数据库启动BEGIN BACKUP 机制;

查看数据库或表空间是否启动了begin backup机制:

----在打开数据库的情况下,查看STATUS如果为ACTIVE表示已经开启了begin backup模式。
SQL>select * from v$backup;

你可能感兴趣的:(Backup,Recovery,ORACLE内部原理探究)