最近在学习oracle的备份和恢复,觉得官方文档有点枯燥,所以换了一本资料:<>,虽然才看到第二章,但是觉得这本书写的确实很有意思,作者的语言很幽默,而且讲的东西很容易让人接受,哈哈,把一些觉得比较重要的知识点翻译并记录下来,以方便大家查阅,也方便自己温习... 可能有些翻译也不太正确,会曲解了作者本身的意思,那就不好意思了...
![001.gif](/images/edit/face/001.gif)
呵呵,废话不多说了...
1. RMAN数据块备份的一些描述
总的来说,过程是这样的:
首先,oracle会根据备份算法,列出需要备份的所有数据文件,然后根据并发处理的channel和file数目,oracle会在共享内存中为这次备份创建一个内存缓冲区域(RMAN Buffers :包括Input Buffers和Output Buffers),这里指的共享内存可能是SGA或者PGA, 然后channel服务进程会读取数据文件(datafile)中的block到RMAN Input buffers中去,当Input Buffers满了之后,其中的block会被放进Output buffers中去,这样一个过程要应用于要备份的所有数据文件中的所有数据块,当一个数据块满足需要备份的条件,就会被保留在Output buffers中,而当Output Buffers满了之后,其中的block就会被放到参数文件指定的备份路径下,这样循环往复的对药备份的数据文件中的数据块进行操作,最后在备份路径下就得到了需要的backup pieces,最后,RMAN会把本次备份的信息写到target database的控制文件中去。
2. RMAN块级别备份的一些优点
2.1 空块压缩
对于从未使用过的块,在进行从input buffer到write buffer写入的时候呢,我们可以判断出来,从而不对其进行备份,这样我们的备份更加的有效
但是对于空块压缩,有以下的一些
误解
首先是认为只要是空的块,就不会被备份,其实不是的,因为RMAN并不是依据一个块的内容是否为空来对该块是否使用过进行判断,为什么rman不依据块的内容来判断呢,道理很简单,因为我们知道,对于块的内容信息,我们只能在db为open的状态下才能得知,这样就违背了rman的备份条件(rman是可以在非open状态下对db进行备份的),因此,rman使用了对块的header或者文件的header信息作为依据来进行判断,这样,在db非open的状态下,rman也可以很好的得知块的信息,从而进行备份了
其次就是认为空块备份要节省大量的备份时间,这个并不一定是准确的。当然,由于我们忽略的空块,不用将他们写入磁盘上的备份路径,这肯定会节省一点时间,特别是在写磁盘的速度很慢(甚至是整个应用的瓶颈时), 这确实会节省较多的时间。但是在大多数的情况下,写磁盘的速度很快,节省的时间就很少了,因为我们还是需要读取每一个block的头信息,这个过程是不可避免的,即使是在做增量备份的情况下(因为我们仍然要check每一个block的头信息从而确定在上一次备份的基础上,这个块是否有过更新)。所以认为空块备份一定会节省大量时间,这个思想是错误的。当然,空块备份会减少空间,这是肯定的
![001.gif](/images/edit/face/001.gif)
先写到这了...未完待续...
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23527828/viewspace-680802/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/23527828/viewspace-680802/