技术开发 频道

Oracle备份与恢复总结之三:OS备份/用户管理的备份与恢复

3.3 ARCHIVELOG 模式 

3.3.1  机冷备与恢复
 
同 NONARCHIVELOG模式
 
3.3.2  机热备
 
机热备是在数据库运行的情况下进行备份的方法。热备份要求数据库在 Archivelog
式下操作,并需要大量的档案空间。
备份的优点:
1.可在表空间或数据文件级备份,备份时间短。
2.备份时数据库仍可使用,支持 24*7不间断运行。
3.可达到秒级恢复(恢复到某一时间点上)。
4.可对几乎所有数据库实体作恢复。
5.恢复是快速的,在大多数情况下在数据库仍工作时恢复。
备份的不足是:
1.不能出错,否则后果严重。
2.若热备份不成功,所得结果不可用于时间点的恢复。
3.因难于维护,所以要特别仔细小心,不允许“以失败而告终”。
意:在热备过程中系统会生成更多的重做日志和回滚数据。所以必须在数据库较
闲时才进行备份。
份内容
(1)  数据文:  一个表空间一个表空间地备份 sql> alter tablespace users begin backup; sql> $copy '/xx/xx.dbf ''/yy/yy.dbf' ; sql> alter tablespace users end backup; sql> alter system checkpoint;
(读表空间直接拷贝不用begin backup)
(2)  备份归档 log文件
(1)临时停止归档进程     log_archive_max_processes=0
(2)log下那些在 archive redo log 标目录中的文件
(3)重新启动 archive 进程
(4)备份归档的 redo log  
(3)  备份联机的控制文件
sql> alter database backup controlfile to '/xx/xx.ctl';
(4)  备份初始化文件  配置文件  等:
sql> $copy    .. .. ;
 
备脚本hotback.sql
 
Rem  备份脚本 for Linux
Rem  行该脚本必须保证数据库处于归档模式
Rem db.dw.dm@gmail.com 2007-03-17
 
Rem
Rem  设置 SQL*Plus环境参数
Rem
 
set feedback off
set pagesize 0
set heading off
set verify off
set linesize 100
set trimspool on
 
Rem  置备份相关的路径    For Linux
Rem  置数据文件备份路径
define datafile_dir    = '/u05/oracle/hotback/datafile'
Rem  置归档日志文件备份路径
define archlog_dir = '/u05/oracle/hotback/archlog'
Rem  置控制文件备份路径
define controlfile_dir = '/u05/oracle/hotback/controlfile'
 
Rem  置生成的备份脚本名
define hotback    = '/u05/oracle/hotback/open_hot_backup.sql'
define spoolfile = '/u05/oracle/hotback/spool.tmp'
define cpy = 'cp'
prompt *** Spooling to &hotback
 
Rem  生备份数据文件、归档日志文件的命令
 
set serveroutput on size 1000000
spool &hotback
prompt spool &spoolfile
 
prompt archive log list;;
prompt alter system switch logfile;;
prompt alter system archive log all;;
 
DECLARE
CURSOR cur_tablespace IS
SELECT tablespace_name
FROM dba_tablespaces
ORDER BY tablespace_name;
 
CURSOR cur_datafile (tn VARCHAR) IS
 
SELECT file_name
FROM dba_data_files
WHERE tablespace_name = tn
ORDER BY file_name;
 
CURSOR cur_arch_dest IS
SELECT value
FROM v$parameter
WHERE    name = 'log_archive_dest';
BEGIN
FOR ct IN cur_tablespace LOOP
IF ct.tablespace_name!='TEMP' then
dbms_output.put_line ('alter tablespace '||ct.tablespace_name||' begin backup;');
FOR cd IN cur_datafile (ct.tablespace_name) LOOP
dbms_output.put_line ('host &cp y '||cd.file_name||' &datafile_dir');
END LOOP;
dbms_output.put_line ('alter tablespace '||ct.tablespace_name||' end backup;');
end if;
END LOOP;
 
FOR dest IN cur_arch_dest LOOP
dbms_output.put_line ('host &cpy '|| dest.value || '/* &archlog_dir ');
END LOOP;
 
END;
/
Rem  生备份控制文件的命令
 
prompt alter system archive log current;;
prompt alter database backup controlfile to trace;;
prompt alter database backup controlfile to '&controlfile_dir/control.bak' REUSE;;
prompt archive log list;;
prompt prompt ***Hot Backup Finish***;
prompt spool off
spool off;
host rm -f &spoolfile
Rem  行生成的脚本文件
Rem @&hotback
Rem host del &hotback
 
3.3.3  机热备的恢复
 
3.3.3.1全恢复
 
般步骤:
1.  通过以下信息,找到故障数据文件
alert.log
background trace file v$recover_file        v$recovery_lo
通过这两个视图可以了解详细的需要恢复的数据文件与需要使用到的归档日志。
2.  将故障数据文件对应的表空间  offline
SQL> alter tablespace xxx offline;
3. restore and recover
SQL> host cp .. ..;
SQL> [alter database] recover database/tablespace/datafile 'xx';
4.  将表空间 online
SQL> alter tablespace xxx online;
 
3.3.3.2完全恢复
 
完全恢复的方法只能恢复到过去某个时间点/SCN的数据库状态。
些限制
1.    必要条
一个有效的  online/offline  备份(包含所有的数据文件)
自从备份到故障前的所有归档日志
有可能需要控件文件  (有控件文件丢失,数据库结构已改变) SQL> recover database ... using backup controlfile;
2.  只能恢复到所有备份数据文件的最大 SCN以后,
3.  恢复后需要 resetlog,所以需要在恢复后马上备份
三种不完全恢复的方法
1.    基于变化的不完全恢复     Change-based Recovery
2.    基于用户干涉(取)的不完全恢复      Cancel-based Recovery
3.    基于时间的不完全恢复    Time-based Recovery
得信息
alert.log
以通过 LogMiner获得精确的时间/SCN,一般在备机上恢复,再 exp/imp到生产机。 查看需要恢复的文件,以及相关的提示信息
SQL> select * from v$recover_file; SQL> select * from v$datafile;
看二者的 change#,  确定对应的在 v$log_history 中的范,从而确定需要那个日志文件序列
置归档日志文件的路径  LOG_ARCHIVE_DEST
设置  log  同的路径
SQL> SET LOGSOURCE 'xx';
SQL> alter system archive log start to 'xx';
复步骤:
1.    闭数据库,启动到 MOUNT 状态
SQL> shutdown; SQL> startup mount;
2.    复数据文件、日志文件、归档日志文件
SQL> host cp .. ..; SQL> archive log list;
SQL> archived log ==>LOG_ARCHIVE_DEST
3.    行恢复命令于变化:
SQL> recover database until change 9999;
于时间:
SQL> revover database until time '2001-12-01 14:02:23' using backup controlfile;
于取消:
SQL> recover database until cancel;
4.    置日志,恢复后需要马上备份
SQL> alter database open resetlogs;
0
相关文章