posts - 40, comments - 58, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

Oracle热备份

Posted on 2009-01-20 11:21 Astro.Qi 阅读(3004) 评论(0)  编辑  收藏 所属分类: Oracle
Oracle 版本:9i、10g
1、        进行热备份的要求?
热备份是一种数据库的处于打开时的物理备份,因为数据库在不断发生改变,因此备份的文件必然是不一致的,这就要求数据库必须处于归档日志模式。

2、        热备份的一般流程?
        查看数据库是否处于归档日志模式,若不是将数据库置为归档日志模式。
Rem check the archived mode
Archive log list;
Rem if not archivelog mode issue the following statements
Shutdown immediate;
Startup mount;
Alter database archivelog;
Alter database open;
        查看当前的归档日志情况确认已归档
Archive log list;
        将表空间置为热备份模式(以users 表空间为例)
Alter tablespace users begin backup;
        物理拷贝数据文件
Rem for windows
Sql> host copy c:\oracle\ora92\user01.dbf d:\oracle\hotbackup;
Rem for linux/unix
Sql>host cp  /oracle/ora92/user01.dbf  /oracle/oracle92/user01.dbf
        结束表空间的热备份模式
Alter tablespace users end backup;
        相同方法备份其他表空间(read only 和 offline 表空间不能置为热备份模式)
        备份二进制的控制文件
Alter system backup control file to ‘d:\oracle\hotback\controlfile.ctl’ reuse;
Rem reuse 表示当文件存在时覆盖。

3、        开始热备份时发生什么?
        执行一个checkpoint 将所有dirty data 写入文件(保证热备份开始前文件是一致的)
        锁定文件头的checkpoint scn,但是数据库的改变可以正常进行。
        在alert文件中增加一条记录

4、        热备份时相关SCN 如何处理?
在 开始进行热备份时,数据文件头的checkpoint scn 和控制文件中该文件的scn lock住,但是数据文件的dml操作可以正常进行,也就意味着block 的scn 是正常增加的,数据文件并没有锁定。为什么要Lock 文件的checkpoint scn(实际上对应了恢复时的rba) 主要是为了标示进行恢复操作时需要的redo log, 这样就可以保证数据文件内所有的块都能得到恢复,因为在进行数据文件拷贝时无法保证数据文件头是最先拷贝完成的。如果先拷贝的是数据文件的其他部分然后才 去拷贝的数据文件头,这时候很有可能数据文件头的checkpoint scn已经改变了而恢复时应用redo log的范围是由数据文件头的rba决定的。
当热备份结束时,在备份结束的时候,oracle会把数据文件头和control文件中关于这个数据文件的SCN号更新为数据库的SCN号。

5、        为什么热备份时产生的redo大量增加?
首 先说下造成大量增加的直接原因吧,因为数据文件在进行热备份时,该数据文件中的处于data buffer中数据块在首次发生改变时oracle会把整块的block  image 写入redo log。注意该处首次改变是对处于buffer中的数据块而言的,而不是文件中的block,例如对于datafile1 的第20个块:
File ---data buffer 从文件中读入db buffer
Data buffer-----change  产生block image to redo log
Data buffer ------change  不产生blcok image 而是正常的change vector
Data buffer ----file  从db buffer 写入文件
File ----data buffer  又从文件中读入db buffer
Data buffer-----change   再次产生block image to redo log
Data buffer ------change  不产生blcok image 而是正常的change vector

之 所以要存储block image主要是为了处理由于oracle 的block size 和操作系统的block size 不一致而可能造成的split block(指数据块不一致)。热备份中我们用的是操作系统命令copy or cp 来拷贝数据文件,这些命令操作的块大小都是由操作系统决定的而操作系统块和数据库块大小一般不相同。如果当数据库块在改变的同时在进行拷贝,就很有可能造 成拷贝的数据块不一致(其中一部份改变前拷贝的一部分是改变后拷贝的)。Oracle 在恢复时将split block 当成是currption block,这时就需要redo log中的block image覆盖现有块来进行恢复

6、        Rman备份为什么不用锁文件头scn,不增加redo?
锁文件头scn只是为了可以正确标示恢复时的rba,热备份方式中这个rba需要从备份的数据文件本身获取,而rman方式将其写入了controlfile 或catalog,所以不用锁文件头。
Rman 在备份时需要使用两个缓冲区一个输入缓冲区,一个输出缓冲区。数据块在从输入缓冲区传送到输出缓冲区时会进行一致性校验,不一致时会重新读取直到一致。所以rman备份的文件数据块级都是一致的,不需要block image。
(两个缓冲区默认在pga中如果设置了io_slave 会在larger pool 中。)

7、        热备份过程中发生crash如何恢复?(以users 表空间 user01.dbf  file# 9 为例)
如果在热备份的过程中发生crash在startup时会报:ORA-01113文件9需要恢复。
有两种方式可以解决这个问题:
1、        alter tablespace users end backup;
2、        recover datafile 9;
因为这时报的错误和restore了一个文件后需要恢复时一样的,所以在确定是没有end backup时用第一种方法否则应该用第二种。

8、        热备份恢复相关视图?
v$recover_file:需要恢复的文件
v$recover_log:需要应用的归档日志
x$kcvfh :可以查看各个文件的rba

9、        热备份相关脚本?(备份脚本)
set linesize 800 verify off pagesize 0 feedback off
define dir='c:\oracle\admin\hotback\2008-10-26'
define log='c:\oracle\admin\hotback\2008-10-26\bklog.txt'
define fil='c:\oracle\admin\sqlsheet\bkdatafile.sql'
set serveroutput on
spool &fil
prompt spool &log
prompt archive log list;;
prompt alter system switch logfile;;
declare
cursor c_tbs is select tablespace_name tbsname from dba_tablespaces where status='ONLINE';
cursor c_datafile(tn varchar2) is select file_name from dba_data_files where tablespace_name=tn;
begin
for row_tbs in c_tbs loop
dbms_output.put_line('alter tablespace '||row_tbs.tbsname||' begin backup;');
for row_file in c_datafile(row_tbs.tbsname) loop
   dbms_output.put_line('host copy '||row_file.file_name||' &dir;');
end loop;
dbms_output.put_line('alter tablespace '||row_tbs.tbsname||' end backup;');
end loop;
end;
/
prompt alter system switch logfile;;
prompt alter database backup controlfile to '&dir\controfile.ctl';;
prompt archive log list;;
prompt spool off;;
spool off;
@&fil

10、        当归档日志文件不在默认位置时如何处理?
我们在进行热备份恢复时需要的归档日志文件很有可能从默认的归档位置移走了,在恢复时要一个一个指定归档日志位置很麻烦,可以使用以下方式解决。
        Recover from ‘new_dir’ datafile 9;  -- 该方法我试了下不行,好像已被oracle废除
        Set logsource  ‘new_dir’   --注意没有“=”
Recover datafile 9;


只有注册用户登录后才能发表评论。


网站导航: