Oracle 热备份
原文地址:http://blog.csdn.net/leshami/article/details/5816012
Oracle 热备份是指数据库处于open状态下,对数据库的数据文件、控制文件、参数文件、密码文件等进行一系列备份操作。
热备是基于用户管理备份恢复的一种方式,也是除了RMAN备份之外较为常用的一种备份方式。
一、热备的过程
冻结块头-->控制SCN在备份时不发生变化
进行物理拷贝
解冻块头-->让SCN可以变化(当对SCN解冻后,系统会自动更新SCN至最新的状态)
二、基于数据库的热备
alter database begin backup;
拷贝所有的datafile到备份目录
alter database end backup;
三、基于表空间的热备
alter tablespace tablespace_name begin backup;
拷贝tablespace_name表空间的数据文件到备份目录
alter tablespace tablespace_name end backup;
alter tablespace tablespace_name begin backup时完成的任务
检查点事件发生,检查点通知DBWn将该表空间上所有的脏数据被写入到磁盘
在数据文件头部冻结当前检查点事件发生时的SCN号
所有发生变化数据块的完整镜像(修改前后)被写入到redo log中
允许该表空间内数据的正常读写
建议使用基于表空间的热备,这样将尽可能的减少对系统性能的影响
四、控制文件的热备 alter database backup controlfile to '<dir>' [reuse]; --控制文件的完整备份 alter database backup controlfile to trace as '<dir>' --用于创建控制文件的语句,丢失了部分信息 控制文件发生变化情况 alter database [add |drop] logfile alter database [add |drop] logfile member alter database [add |drop] logfile group alter database [archivelog |noarchivelog] alter database rename file create tablespace alter tablespace [add | rename] datafile alter tablespace [read write | read only] drop tablespace 更多关于控制文件请参考:Oracle 控制文件 五、参数文件的热备 create pfile from spfile ; create pfile = '<dir>' from spfile; 更多关于参数文件请参考:Oracle 参数文件 六、临时表空间的数据文件、日志文件不需要备份 --查看临时表空间 SQL> select tablespace_name from dba_temp_files; TABLESPACE_NAME ------------------------------ TEMP --查看临时表空间的数据文件 SQL> select name from v$tempfile;
NAME ------------------------------------------------------ /u01/app/oracle/oradata/orcl/temp01.dbf --将临时表空间置为备份模式,收到了错误的提示 SQL> alter tablespace temp begin backup; alter tablespace temp begin backup * ERROR at line 1: ORA-03217: invalid option for alter of TEMPORARY TABLESPACE --将临时表空间置为备份模式,收到了错误的提示 SQL> alter temporary tablespace temp begin backup; alter temporary tablespace temp begin backup * ERROR at line 1: ORA-00940: invalid ALTER command 七、热备脚本 1.基于数据库热备的脚本 SQL> ho cat /tmp/tmphotbak.sql; set feedback off set heading off set verify off set trimspool off set pagesize 0 set linesize 200 define dir = '/u01/app/oracle/hotbak' define script = '/tmp/hotbak.sql' spool &script select 'ho cp ' ||name|| ' &dir' from v$datafile; spool off alter database begin backup; start &script alter database end backup; alter database backup controlfile to '&dir/controlbak.ctl'; create pfile = '&dir/initorcl.ora' from spfile; SQL> start /tmp/tmphotbak.sql; --执行该脚本即可对数据库进行热备 2.基于表空间热备的脚本 SQL> ho cat /tmp/tmphotbak_tb.sql set feedback off set heading off set verify off set trimspool off set pagesize 0 set linesize 200 define dir = '/u01/app/oracle/hotbak' define script = '/tmp/hotbak_tb.sql' ho rm &script ho rm &dir/* spool &script select 'alter tablespace '|| tablespace_name ||' begin backup ;' || chr(10)||'ho cp ' || file_name || ' &dir ' || chr(10)||'alter tablespace '|| tablespace_name || ' end backup;' from dba_data_files order by tablespace_name; spool off start &script alter database backup controlfile to '&dir/controlbak.ctl'; create pfile = '&dir/initorcl.ora' from spfile; SQL> start /tmp/tmphotbak.sql; --执行该脚本即可对数据库基于表空间进行热备 八、备份的相关视图 v$backup SQL> desc v$backup; Name Null? Type ----------------------------------------- -------- --------------------- FILE# NUMBER STATUS VARCHAR2(18) CHANGE# NUMBER --记录备份时的SCN号 TIME DATE SQL> select * from v$backup; --状态为NOT ACTIVE ,此时没有任何数据处于备份状态 FILE# STATUS CHANGE# TIME ---------- ------------------ ---------- --------- 1 NOT ACTIVE 1006747 16-AUG-10 2 NOT ACTIVE 1006793 16-AUG-10 3 NOT ACTIVE 1006729 16-AUG-10 4 NOT ACTIVE 1006807 16-AUG-10 5 NOT ACTIVE 1006717 16-AUG-10 SQL> alter tablespace users begin backup; --对表空间users进行热备 Tablespace altered. SQL> select * from v$backup; --对应的file# 为的处于ACTIVE状态 FILE# STATUS CHANGE# TIME ---------- ------------------ ---------- --------- 1 NOT ACTIVE 1006747 16-AUG-10 2 NOT ACTIVE 1006793 16-AUG-10 3 NOT ACTIVE 1006729 16-AUG-10 4 ACTIVE 1006852 16-AUG-10 5 NOT ACTIVE 1006717 16-AUG-10 --备份时发生断电或意外故障的恢复 --假定users表空间目前置于begin bakup模式,系统断电 SQL> alter tablespace users begin backup; Tablespace altered. --在另一个会话中强制关闭数据库 SQL> shutdown abort; ORACLE instance shut down. --启动后收到错误提示 SQL> startup ORACLE instance started. Total System Global Area 469762048 bytes Fixed Size 1220048 bytes Variable Size 92275248 bytes Database Buffers 373293056 bytes Redo Buffers 2973696 bytes Database mounted. ORA-01113: file 4 needs media recovery ORA-01110: data file 4: '/u01/app/oracle/oradata/orcl/users01.dbf' --查看备份视图,文件此时处于活动状态 SQL> select * from v$backup; FILE# STATUS CHANGE# TIME ---------- ------------------ ---------- --------- 1 NOT ACTIVE 1006958 16-AUG-10 2 NOT ACTIVE 1006983 16-AUG-10 3 NOT ACTIVE 1006943 16-AUG-10 4 ACTIVE 1007072 16-AUG-10 5 NOT ACTIVE 1006931 16-AUG-10 --使用end backup来终止备份 SQL> alter database datafile 4 end backup; --此处也可以使用recover datafile 4来完成恢复 Database altered. SQL> alter database open; Database altered. SQL> select * from dual; D - X
对于一件事情,往往超过我们的想象,自信、坚持,勇往直前!
参与者:Rainbow Gu
地址:南都
***********************************************
浙公网安备 33010602011771号