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) |