您的位置:首页 > 数据库 > Oracle

Oracle用户管理的备份与恢复1

2008-09-05 14:56 302 查看
Oracle[/b]用户管理的备份与恢复[/b]
[/b]
关闭数据库的备份与还原[/b]
1、 [/b]准备备份脚本(该脚本针对Unix及Linux系统,但很容易修改为针对Windows):[/b]
Remark Set SQL*Plus variables to manipulate output
set feedback off heading off verify off trimspoll off
set pagesize 0 linesize 200
Remark Set SQL*Plus user variables used in this script
define dir=’/oracle/practice/backup/ch04’
define fil=’/tmp/closed_backup_commands.sql’
prompt *** Spooling to &fil
spool &fil
select ‘host cp ’||name||’ &dir’ from v$datafile order by 1;
select ‘host cp ’||member||’ &dir’ from v$logfile order by 1;
select ‘host cp ’||name||’ &dir’ from v$controlfile order by 1;
select ‘host cp ’||name||’ &dir’ from v$tempfile order by 1;
spool off;
Remark Shutdoen then database cleanly
shutdown immediate;
Remark Run then copy file commands from then operating system
@fil
Remark Start the database again
startup;
将该脚本保存为close_backup.sql,该脚本通过查询一些动态性能视图,来检索数据库相关文件的信息,这些文件包括数据文件、联机重做日志文件、控制文件、临时数据文件。并且将查询的结果通过与所在操作系统相关命令(此处为Unix/Linux的CP命令)相结合,完成文件的备份也就是拷贝一份副本。(Oracle的PL/SQL中通过host命令可以执行操作系统命令。)并且最后将所有拷贝文件的命令行,通过Spool写入油变量fil指定的文件中,然后干净的关闭数据库,之后运行fil指定的拷贝命令文件完成拷贝,拷贝的目的地为变量dir指定的文件夹,最后重启数据库。可以通过SQL*Plus来执行该脚本,[/b]如在SQL〉提示符下通过@close_backup.sql[/b]来运行该脚本。定期执行该脚本就可以对数据库中的重要文件件进行手工备份,以防止重要文件的丢失。一旦发生文件丢失我们可以通过,备份结果对数据库进行恢复与还原。[/b]
(1)、完全数据库恢复:[/b]
如果想进行完全数据库恢复,那么被恢复的数据库最好处于归档模式,以防止联机重做日志文件被覆盖而造成丢失,配置归档运行模式的方法如下:[/b]
①[/b]修改如下初始化参数:[/b]
[/b]在初始化参数文件中添加如下配置:[/b]
log_archive_dest_1=”location=/oradata/practice/archive”;[/b]
其中参数中的数字1代表归档目的地数量最多可配置5个。Location代表归档目的地是一个本地文件路径,通常我们要通过网络将归档备份到专用服务器上或磁带机上,具体配置请参照相关文档。[/b]
log_archive_format=%S.arc;[/b]
该参数配置归档文件名格式,其中%S代表系统日志序号。[/b]
log_archive_start=true;[/b]
该参数指定正式启用归档模式。[/b]
②[/b]启动数据库:[/b]
[/b]首先使用startup mount命令是数据库启动到mount状态;[/b]
[/b]其次使用alter database archivelog;命令更改数据库运行模式[/b]
[/b]最后使用alter database open;命令完全打开数据库,此时数据库就正式运行在归档模式下。[/b]
如果数据库运行于归档模式下,那么一旦数据库出现严重问题,可以使用备份脚本运行后备份的相应文件来恢复丢失的文件,然后执行recover database命令来恢复数据库,使用该命令Oracle将确定哪个文件需要恢复,以及使用哪个重做日志文件进行恢复,当介质恢复成功后系统将提示Media recover complete.[/b]
[/b](2)、不完全数据库恢复:[/b]
不完全数据库恢复可以将数据库恢复到某一个特定时间点的状态之上,一般情况下当数据库丢失某个数据库对象、丢失部分或全部联机重做日志文件、错误的删除表空间,恢复中丢失已经归档的重做日志文件时要采用不完全恢复。不完全介质恢复是从还原所有数据文件开始的,然后在恢复命令中给出某个希望结束恢复操作的标志来完成的。目前有3种结束标志分别是:时间、系统SCN、以及交互式人为终止。[/b]
以误删除表空间为例,首先检查告警日志文件,因为对于表空间的删除告警日志文件都会做出记录。但是对于数据库对象的变动,如删除一张表示不会被记录的。告警日志文件一般存储在数据库系统后台转储文件夹bdump下对于示例数据库将存放在/oradata/admin/practice/bdump下,打开告警日志文件,找到表空间被删除的记录,从中可以得到删除表空间操作的时间、以及删除时当前联机重做日志的顺序号seqence#等重要信息,这些信息对于恢复数据库极为有用。通过seqence#查询v$log_history视图,可以得到seqence#对应的系统SCN如下所示:[/b]
select seqence#,first_change# from v$log_history where seqence#=’’; first_change#[/b]所记录的就是某个seqence#所对应的系统SCN。得到SCN后通过备份脚本得到的备份还原处联机重做日志文件外的所有文件,因为可能需要联机重做日志文件中的重做信息来时数据库恢复到删除表空间之前的状态上。还原后就可以进行恢复:[/b]
①[/b]基于时间的恢复:[/b]
Alter database recover automatic until time ‘2008-08-18:09:07:10’;[/b]通过该命令就可以将数据库恢复到某个时间点之上,该时间点就是通过查询告警日志文件中相关事件所得的时间。如果恢复成功会得到DATABASE ALTERED响应。[/b]
②[/b]基于系统SCN的恢复:[/b]
Alter database recover automatic until scn 64000;[/b]通过该命令可以将数据库恢复到某个SCN之前的某个事务之上。该SCN就是通过上面的SQL语句查询得到的。[/b]
③[/b]基于取消的恢复:[/b]
Alter database recover until cancel using backup controlfile;[/b]该种方式采用交互方式,到遇到表空间被删除时的当前日志文件时,通过按下cancel停止恢复,一般能够采用上面两种方法恢复就没必要采用该方法进行恢复。[/b]
④[/b]已重置日志选项打开数据库:[/b]
Alter database open resetlog;[/b]当以resetlog选项打开数据库时所有数据文件都将获得一个resetlogSCN和时间戳,Oracle软件会使用该SCN和时间戳来更新每个数据文件头和控制文件,并且联机重做日志文件被还原。所有这些工作之后,数据库打开,此时已经创建了一个practice数据库的新实体,并且联机重做日志文件从0开始重新记录新序号。[/b]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: