Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1475852
  • 博文数量: 295
  • 博客积分: 10051
  • 博客等级: 上将
  • 技术积分: 3850
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-11 08:50
文章分类

全部博文(295)

文章存档

2011年(1)

2009年(4)

2008年(290)

我的朋友

分类: Oracle

2008-04-15 12:49:11

5 备份及恢复

所有参见内容都在附件05_backup/下。

5.1 export与import方式

参见dmp/backup.sh。

见《工具》对exp和imp的描述

数据库中的对象是比较多的,但除了表以外占用的空间不大,所以当表中记录数量达到一定规模后,以用户的方式一下子把数据exp出来就显得不够灵活。考虑以下的策略,先exp出除表数据以外的所有对象,再分别exp出每张表的数据。

exp dbuser所有的数据对象

exp dbuser/oracle file=dbuser.dmp log=user.log owner=user buffer=2048000 rows=n

exp单张表的数据

sqlplus -s dbuser/oracle </dev/null

set colsep |;

set echo off;

set feedback off;

set heading off;

set pagesize 0;

set linesize 1000;

set termout off;

set trimout on;

set trimspool on;

spool tables.txt;

select table_name from user_tables;

spool off;

exit;

EOF

for table in $(cat tables.txt)

do

exp dbuser/oracle file=${table}_$(date '+%Y%m%d').dmp tables=$table direct=y

done

5.2 冷备份

shutdown数据库,将所有和本实例有关的文件,包括datafile,controlfile,redolog,archived redolog,initora.ora等全部备份。恢复时只要将这些文件放回从前的目录,startup数据库即可。

5.3 联机全备份+日志备份

5.3.1 设置

如果数据库实例原来没有使用归档日志功能,则必须进行配置修改

initoradb.ora:

log_archive_start = true #实例启动时同时启动归档进程。

log_archive_dest_1= "location=/appl/oracle/oradata/orafe/arch/arch" #归档日志目录。

打开归档日志功能:

shutdown数据库

sqlplus "/ as sysdba"

SQL>startup mount

SQL>alter database archivelog;

SQL>alter database open;

可用archive log list查看状态,去除归档日志功能的命令为alter database noarchivelog。

5.3.2 步骤

参见online/full.sh、daily.sh,以osdba组的用户执行

联机全备份:

数据库处于open状态,依次对各个表空间备份

sqlplus "/ as sysdba"

SQL>alter tablespace system begin backup;

复制此tablespace各个datafile

SQL>alter tablespace system end backup;

注意:据推测,begin backup是对tablespace冻结写入,end backup是解除冻结,因此复制datafile的过程不宜过长

备份controlfile

SQL>alter database backup controlfile to '…….';

日志备份:

sqlplus "/ as sysdba"

SQL>alter system archive log stop;

移去日志目录下的所有archived redolog

SQL>alter system archive log start;

5.3.3 恢复

数据库处于shutdown状态

最差情况:磁盘全部损坏,仅保存上次联机全备份和每天日志备份

解决硬件故障,配置系统软件及环境

oracle用户,将全备份和日志备份转移至相应目录,根据initoradb.ora中controlfile的配置,将备份控制文件复制到响应目录下

sqlplus "/ as sysdba"

SQL>startup mount

SQL>recover database until cancel using backup controlfile;

逐个确认待恢复的archived redolog,待最后一个完成后,键入cancel,使恢复结束

SQL>alter database open resetlogs;

注意:由于日志已经重置,所以应尽快做一次联机全备份

丢失某数据文件

只要将此文件从上次联机全备份中复制至其目录,并将自上次联机全备份以来所有日志备份移至归档目录

sqlplus "/ as sysdba"

SQL>startup mount

SQL>alter database recover datafile 'path/file';或者简单些recover database;

SQL>alter database open;

如果此文件损坏或丢失,又无备份,则只能将此文件脱机,将数据exp出来,重建表空间,再imp进去

sqlplus "/ as sysdba"

SQL>connect internal

SQL>startup mount

SQL>alter database datafile 'path/file' offline;

SQL>alter database open;

5.4 注意要点

无论有多少把握,恢复前先做冷备份,此为第一原则

不这样做,便是无路可退,一旦失误,后果不必多说。

rollback段损坏

这是非常严重的问题,可在initora.ora中写入_corrupted_rollback_segments=(rxx),启动时避开损坏的rollback段,这只是权宜之计。如数据库处于archivelog,应从上一次全备份起利用备份的日志进行恢复;如数据库处于noarchivelog,应尽快将全部数据export出来,重建数据库,再import进去。所有操作之前,应做冷备份。

数据库异常中止处理

通过手工shutdown abort操作中止数据库,不会产生大的问题,通常直接startup无需使用介质恢复命令

如果由于机器崩溃引起的中止,则情况严重得多,有可能要使用到上面提到的恢复方法,不过这种现象并不多见。一般需要显式使用介质恢复命令,如下:

sqlplus "/ as sysdba"

SQL>startup mount;

SQL>recover database;

SQL>alter database open;

阅读(1100) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~