常见问题常见问题   搜索搜索   会员列表会员列表   团队团队   注册注册    个人资料个人资料   登录查看您的站内信件登录查看您的站内信件   登录登录 

ORACLE傻瓜手册长篇连载--第五部分

 
发表新文章   这个论题已经被锁定,您不能发表、回复或者编辑文章。    FreeBSD China -> 安装-配置-优化-安全
阅读上一个主题 :: 阅读下一个主题  
作者 留言
wxjoshua
精神病


注册时间: 2002-09-06
文章: 569

文章发表于: Thu 2002-12-19 12:21:46    发表主题: ORACLE傻瓜手册长篇连载--第五部分 引用并回复

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;

_________________
I have a dream:I want to travel the world.
返回页首
阅览会员资料 发送站内信件 浏览发表者的主页 Yahoo Messenger MSN Messenger
从以前的文章开始显示:   
发表新文章   这个论题已经被锁定,您不能发表、回复或者编辑文章。    FreeBSD China -> 安装-配置-优化-安全 论坛时间为 北京时间
1页/共1

 
转跳到:  
不能发布新主题
不能在这个论坛回复主题
不能在这个论坛编辑自己的文章
不能在这个论坛删除自己的文章
不能在这个论坛发表投票


Powered by phpBB 2023cc © 2003 Opensource Steps; © 2003-2009 The FreeBSD Simplified Chinese Project
Powered by phpBB © 2001, 2005 phpBB Group
Protected by Project Honey Pot and phpBB.cc
silvery-trainer
The FreeBSD China Project 网站: 中文计划网站 社区网站
The FreeBSD China Project 版权所有 (C) 1999 - 2003 网页设计版权 著作权和商标