ITPub博客

首页 > 数据库 > 数据库开发技术 > 关闭数据库的备份与恢复

关闭数据库的备份与恢复

原创 数据库开发技术 作者:chance2000 时间:2006-03-26 00:05:02 0 删除 编辑
关闭数据库的备份与恢复[@more@]

一致数据库备份通常指冷备份。

4.1 还原整个数据库
1、备份关闭的数据库
1) 创建备份脚本
--closed_backup.sql
Remark Set SQL*Plus variables to manipulate output
set feedback off heading off verify off trimspool off
set pagesize 0 linesize 200
Remark Set SQL*Plus user variables used in this script
define dir = 'd:databakpractice_new'
define fil = 'e:caiskyora-srtclosed_backup_commands.sql'
prompt *** Spooling to &fil
Remark Create a command file with file backup commands
spool &fil
select 'host copy '||lower(name)||' &dir' from v$datafile order by 1;
select 'host copy '||lower(member)||' &dir' from v$logfile order by 1;
select 'host copy '||lower(name)||' &dir' from v$controlfile order by 1;
select 'host copy '||lower(name)||' &dir' from v$tempfile order by 1;
spool off
shutdown immediate
Remark Run the copy file commands from the operating system
@&fil
Remark Start the database again
startup;
---------------------------------------------------
2) 运行备份脚本
@closed_backup.sql

2、还原整个数据库
1) 删除数据文件
利用操作系统删除命令把数据文件删除
2) 运行还原脚本
利用操作系统拷贝命令把备份文件拷贝到初始位置
3) 打开数据库
startup mount 会提示错误
查看告警日志信息
检查一下最后检查点的时间是否与备份前的关闭时间一致
alter session set nls_date_format='hh24:mi:ss';
select file#,status,checkpoint_change#,last_change#,last_time from v$datafile;
检查联机日志检查点的更改号scn
select group#,sequence#,status,first_change#,first_time
from v$log order by first_change#;
4) 确认数据库还原
当数据库打开时,oracle自动确认数据文件是一致的。
4.2 完全数据库恢复
1、配置数据库归档
1) 查看v$database视图,确定数据库是否处于归档日志模式
select dbid,name,log_mode from v$database;
. Archive Destination config
log_archive_dest_1 = "location=/oradata/practice/archive"
. Archive Format
log_archive_format = %S.arc
%S -- Sequence Number 在告警日志和v$log视图的sequenct#中可以查到这个序列号。
. Archive Start
log_archive_start=true

手工启动归档模式
shutdown immediate;
startup mount;
alter database archivelog;
在已经打开的实例上启动自动归档模式
alter system set log_archive_dest_1 = "location=/oradata/practice/archive";
alter system archive log start;
archive log start;
查看视图v$archive_dest中可以确定是否设置了归档路径
select dest_id,status,destination from v$archive_dest;
可以从视图v$parameter中提取或使用sqlplus显示参数命令show parameter来查看参数设置
show parameter log_archive_start
show parameter log_archive_dest_1
show parameter log_archive_format
查看归档信息的sqlplus命令
archive log list;
打开数据库命令
alter database open;
强制切换日志命令
alter system switch logfile;
2、运行备份脚本
@closed_backup.sql
3、提前重做日志
alter system switch logfile;
可以查看警告日志文件或视图v$log和v$log_history或使用archive log list命令来验证日志顺序。
4、删除一个数据文件
shutdown immediate;
删除一个数据文件
startup;
提示找不到数据文件
5、还原丢失的数据文件
可以查看v$recover_file视图就知道那个数据文件有问题
select file#,error,change# from v$recover_file;
当把该数据文件的备份拷贝到初始目录下后,v$recover_file将会显示出某些不同:错误项没有了,
change#列有一个数值。将这个数值与v$datafile视图中对应于所有文件的检查点变化数值进行
比较,将会看到v$datafile视图中的scn比v$recover_file中的大。v$datafile是从控制文件中
读取关于数据库中数据文件的信息,而v$recover_file则显示刚刚还原的文件其头部的变化次数。
因此,除非对应于所有联机数据文件的scn与数据文件头部已及控制文件中的相同,否则数据库
无法打开。
6、恢复还原的数据文件
为了使所有的数据文件拥有一致的变化序号,需要来自重做日志中的重做信息。
通过查看v$log_history和v$log可以找出那个重做日志文件是必须采用的。这需要那些序号范围
跨越了从备份时起到当前重做日志文件这段时间的重做日志文件。
select * from v$log_history where rownum < 10 order by sequence# desc;
select * from v$log;
使用recover database命令来恢复数据库。
7、确认数据库已恢复
4.3 不完全数据库恢复
以下情况可能会需要对整个数据库进行不完全恢复:
. 由于失误而丢失一个数据库对象
. 丢失了部分或全部联机重做日志
. 在恢复过程中丢失了一个已归档的重做日志
. 错误删除了表空间

忽略剩余的重做日志信息是通过以resetlogs选项打开数据库来实现的。重置(resetting)
日志文件创建了数据库的一个新实体。已恢复的数据库的序号将以新的日志序列流开始,
起始的日志序号为1。
1、删除表空间
删除表空间会向告警日志写入信息,而删除表或截断表都不会写入。
drop tablespace indx including contents;
alter system switch logfile;
查看v$tablespace和dba_tablespaces视图是否还存在该表空间
2、检查恢复
在数据库出现错误时,你可能会接到反应问题的电话。用户或开发人员可能并不知道事故发生的
准确时间。根据已经发生的事故,有时可以确定出事故是何时发生的。因为对数据库结构所做的
变动(如删除表空间)将在alter.log中添加信息。而对于对象的变动,如删除表,你就必须利用
有关人员提供的近似时间了。另外,也可以使用LogMiner试着找出更准确的时间。在还原并恢复
数据库之前,请检查告警日志文件、v$log表和v$log_history表,以确定如何最好地恢复数据库。
3、还原数据文件和控制文件
当执行不完全恢复时,希望从备份的时间之前的某个备份还原除联机重做日志文件以外的所有数据
库文件。没有一个数据文件能够拥有更改号大于所希望备份到的时间的更改号。
4、不完全恢复数据库
使用alter database命令恢复数据库,并用until子句指定恢复过程的持续时间。可以将数据库
恢复到某一特定时间、更改号或重做日志。
. 基于时间的恢复
通过指定时间参数,告知数据库实例应用重做日志文件,直到日期所指定的时刻。重做日志是在
已归档日志中找到的,同时对于任何数据文件,联机重做日志文件以最小的更改号开始。日期必须
是符合YYYY-MM-DD:HH24:MI:SS格式的字符。
alter database recover automatic until time '2002-01-04:09:07:10';
. 基于变更的恢复
可以指定一个scn值用于恢复
alter database recover automatic until scn 64300;
. 基于取消的恢复
可以使用cancel关键字,执行不完全数据库恢复。基于取消的恢复过程对数据库进行恢复,指定
输入了cancel。重做日志是一个接一个地应用,直到用到了希望停止的那个重做日志文件。
alter database recover until cancel using backup controlfile;
如果使用关键字automatic,oracle会自动从init.ora参数中提取出归档日志文件名称和路径,
并应用所找到的各个文件。
5、以重置日志选项resetlogs打开数据库
完成了不完全恢复后,必须重新设置联机重做日志。当使用resetlogs选项打开数据库时,所有
的数据文件都获得一个新的resetlogs scn和时间戳。已归档的重做日志在它们的头部也有这两
个值。oracle软件通过为数据库提供与重做日志文件相匹配的resetlogs scn和时间戳,来防止
用旧的归档日志破坏数据文件。
打开数据库并重新设置日志命令
alter database open resetlogs;
select group#,sequence#,archived,status from v$log;
6、确认数据库恢复

$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

第五章 从打开的数据库备份与恢复

数据文件首部的scn值:
在数据文件的首部,有多个scn值。当创建数据文件时,就分配一个创建scn。当文件在经历
其最后一个检查点时,检查点scn标示出数据库或数据文件的状态。这是个重要的scn值,用于
确保在启动时数据文件与控制文件保持一致。在数据文件脱机时,脱机scn描绘了数据文件的
状态;当数据文件返回到联机状态时,联机scn将被更新。备份scn则记录下何时表空间被置与
热备份模式,重置日志scn用于记录何时数据库是使用resetlogs参数打开的。控制文件中类似
的scn值能确保在数据库启动和恢复时,所有的数据文件与控制文件一致,而且数据文件之间
也相互一致。

在打开一个使用了打开的数据库备份中还原文件的数据库之前,必须进行介质恢复。

当表空间处于备份模式下时发生如下事件:
1) 每个文件首部的标记都被设置,指出即将进行热备份
2) 表空间数据文件执行某一检查点。内存中所有脏数据块都被写入该文件中。检查点的scn
被写入数据文件的首部和控制文件中,这个开始备份scn标识出对文件所做的最新改动。这时
scn结构对于文件中的任何变化都是冻结的
3) 为告警日志文件添加一个开始备份记录
4) 在数据文件中的任何块被首次改变之前,有关每个已变化块的一个块映像将被拷贝到重做
日志中。然后针对该块上的变动生成一个标准的重做向量。接下来对同一块所做的所有改变将
产生正常的重做更改向量。

应在数据库活动较少时进行打开数据库的备份。

当标志一个表空间备份模式终止时,会发生以下事件:
1) 热备份标志被清除,说明备份已经结束
2) 在重做流中记录下终止备份scn,作为一个重做矢量。oracle利用这个重做记录,可以知道在
数据文件恢复过程中何时将表空间脱离热备份
3) 数据文件的检查点结构解除冻结,并与数据库的其他部分匹配
4) 重做生成返回到正常方式,就像表空间被设置为备份模式之前的那样。

由于备份期间所做的更改必须保存在重做流中,而且不能丢失,因此数据库必须处于归档日志模式,
以便用于打开数据库备份。

注意:不能将一个只读表空间设置为备份模式,因为该表空间无法被数据库更改。也不能将一个
临时本地管理的表空间设置为备份模式。要还原或恢复一个本地管理的临时表空间,只需重新创建
即可。

alter tablespace ... begin backup;
alter tablespace ... end backup;

创建热备份脚本
--open_backup.sql
set feedback off pagesize 0 heading off verify off linesize 100 trimspool on
define dir = 'd:databakpracticech5'
define fil = 'e:caiskyora-srtopen_backup_commands.sql'
define spo = '&diropen_backup_output.lst'
prompt *** Spooling to &fil
set serveroutput on
spool &fil
prompt spool &spo
prompt archive log list;;
prompt alter system switch logfile;;
declare
cursor cur_tablespace is
select tablespace_name from dba_tablespaces
where status <> 'READ ONLY'
and contents <> 'TEMPORARY';
cursor cur_datafile(tn varchar2) is
select file_name from dba_data_files
where tablespace_name = tn;
begin
for ct in cur_tablespace loop
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 copy '||cd.file_name||' &dir');
end loop;
dbms_output.put_line('alter tablespace '||
ct.tablespace_name||' end backup;');
end loop;
end;
/
prompt alter system switch logfile;;
prompt alter database backup controlfile to '&dirbackup.ctl' reuse;;
prompt archive log list;;
prompt spool off
spool off
@&fil
--------------------------------------------------

查看表空间是否在backup模式下 视图v$datafile,v$backup

寻找归档文件 视图v$archive_dest,v$archived_log

创建归档日志备份脚本
--archive_backup.sql
set feedback off heading off verify off trimspool off
set pagesize 0 linesize 200
define dir = 'd:databakpracticech5'
define fil = 'e:caiskyora-srtarchive_backup_commands.sql'
spool &fil
prompt archive log next;;
select 'host move '||name||' &dir'
from v$archived_log
where completion_time >= trunc(sysdate) - 1
and completion_tome < trunc(sysdate);
spool off
@&fil
-----------------------------------------------------
archive log next命令可以确保在返回到sql*plus命令提示符控制之前,所有需要归档的联机
重做日志得到归档。

在典型的产品数据库环境下,归档文件是使用操作系统工具来备份到磁带上的,然后从磁盘上
删除这些文件。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/802415/viewspace-823024/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 其它恢复案例
请登录后发表评论 登录
全部评论
  • 博文量
    78
  • 访问量
    835306