| freet15 回复于:2004-11-27 09:01:23
|
为了方便,等会还是我把它转出来算了,吃早餐先...............
|
| wjj9912130 回复于:2004-11-27 09:19:54
|
先DOWN下來看看。謝謝!
|
| freet15 回复于:2004-11-27 09:25:22
|
===Blog里面的内容和这一样,但是要是不能看见图,只能去那边看了======
刻星期三, 十一月 24, 2004
Oracle备份与恢复
学习过程中的总结,有兴趣不妨看看,如果有不对的地方,高手不要留情!!
Oracle的备份与恢复有三种标准的模式,大致分为两大类,备份恢复(物理上的)以及导入导出(逻辑上的),而备份恢复又可以根据数据库的工作模式分为非归档模式(Nonarchivelog-style)和归档模式(Archivelog-style),通常,我们把非归档模式称为冷备份,而相应的把归档模式称为热备份,他们的关系如下所示
[img:998f733c35]http://blog.chinaunix.net/resserver.php?blogId=1438&resource=DatabaseBackup001.gif[/img:998f733c35]
三种方式各有优点,我们做个比较(这个是用Fireworks画的,有点糙):
[img:998f733c35]http://blog.chinaunix.net/resserver.php?blogId=1438&resource=DatabaseBackup002.gif[/img:998f733c35]
$A: 现在先来介绍一下逻辑备份方式的方法,利用Export可将数据从数据库中提取出来,利用Import则可将提取出来的数据送回到Oracle数据库中去。理论基础:Oracle提供的Export和Import具有三种不同的操作方式(就是备份的数据输出(入)类型):
1,表方式(T) 可以将指定的表导出备份;
2,全库方式(Full) 将数据库中的所有对象导出;
3,用户方式(U) 可以将指定的用户相应的所有数据对象导出;
*在导入导出备份方式中,提供了很强大的一种方法,就是增量导出/导入,但是它必须作为System来完成增量的导入导出,而且只能是对整个数据库进行实施。增量导出又可以分为三种类别:
1,完全增量导出(Complete Export) 这种方式将把整个数据库文件导出备份;exp system/manager inctype=complete file=20041125.dmp(为了方便检索和事后的查询,通常我们将备份文件以日期或者其他有明确含义的字符命名)
2,增量型增量导出(Incremental Export) 这种方式将只会备份上一次备份后改变的结果;exp system/manager inctype=incremental file=20041125.dmp
3,累积型增量导出(Cumulate Export) 这种方式的话,是导出自上次完全增量导出后数据库变化的信息。exp system/manager inctype=cumulative file=20041125.dmp
通常情况下,DBA们所要做的,就是按照企业指定或者是自己习惯的标准(如果是自己指定的标准,建议写好计划说明),一般,我们采用普遍认可的下面的方式进行每天的增量备份:
Mon: 完全备份(A)
Tue: 增量导出(B)
Wed: 增量导出(C)
Thu: 增量导出(D)
Fri: 累计导出(E)
Sat: 增量导出(F)
Sun: 增量导出(G)
这样,我们可以保证每周数据的完整性,以及恢复时的快捷和最大限度的数据损失。恢复的时候,假设事故发生在周末,DBA可按这样的步骤来恢复数据库:
第一步:用命令CREATE DATABASE重新生成数据库结构;
第二步:创建一个足够大的附加回滚。
第三步:完全增量导入A:
imp system/manager inctype=RESTORE FULL=y FILE=A
第四步:累计增量导入E:
imp system/manager inctype=RESTORE FULL=Y FILE=E
第五步:最近增量导入F:
imp system/manager inctype=RESTORE FULL=Y FILE=F
通常情况下,DBA所要做的导入导出备份就算完成,只要科学的按照规律作出备份,就可以将数据的损失降低到最小,提供更可靠的服务。另外,DBA最好对每次的备份做一个比较详细的说明文档,使得数据库的恢复更加可靠。
$B 物理备份之冷备份(条件-NonArchiveLog):
当数据库可以暂时处于关闭状态时,我们需要将它在这一稳定时刻的数据相关文件转移到安全的区域,当数据库遭到破坏,再从安全区域将备份的数据库相关文件拷贝回原来的位置,这样,就完成了一次快捷安全等数据转移。由于是在数据库不提供服务的关闭状态,所以称为冷备份。冷备份具有很多优良特性,比如上面图中我们提到的,快速,方便,以及高效。一次完整的冷备份步骤应该是:
1,首先关闭数据库(shutdown normal)
2,拷贝相关文件到安全区域(利用操作系统命令拷贝数据库的所有的数据文件、日志文件、控制文件、参数文件、口令文件等(包括路径))
3,重新启动数据库(startup)
以上的步骤我们可以用一个脚本来完成操作:
su – oracle < sqlplus /nolog
connect / as sysdba
shutdown immediate;
!cp 文件 备份位置(所有的日志、数据、控制及参数文件);
startup;
exit;
这样,我们就完成了一次冷备份,请确定你对这些相应的目录(包括写入的目标文件夹)有相应的权限。
恢复的时候,相对比较简单了,我们停掉数据库,将文件拷贝回相应位置,重启数据库就可以了,当然也可以用脚本来完成。
$C 物理备份之热备份:(条件-ArchiveLog)
当我们需要做一个精度比较高的备份,而且我们的数据库不可能停掉(少许访问量)时,这个情况下,我们就需要归档方式下的备份,就是下面讨论的热备份。热备份可以非常精确的备份表空间级和用户级的数据,由于它是根据归档日志的时间轴来备份恢复的,理论上可以恢复到前一个操作,甚至就是前一秒的操作。具体步骤如下:
1,通过视图v$database,查看数据库是否在Archive模式下: SQL> select log_mode from v$database;
如果不是Archive模式
则设定数据库运行于归档模式下:SQL>shutdown immediate
SQL>startup mount
SQL> alter database archivelog;
SQL> alter database open;
如果Automaticarchival显示为“Enabled”,则数据库归档方式为自动归档。否则需要手工归档,或者将归档方式修改为自动归档,如:
正常shutdown数据库,在参数文件中init.ora中加入如下参数
SQL>shutdown immediate
修改init.ora:
LOG_ARCHIVE_START=TRUE
LOG_ARCHIVE_DEST1=ORACLE_HOME/admin/o816/arch(归档日值存放位置可以自己定义)
SQL>startup
然后,重新启动数据库,此时Oracle数据库将以自动归档的方式工作在Archive模式下。其中参数LOG_ARCHIVE_DEST1是指定的归档日志文件的路径,建议与Oracle数据库文件存在不同的硬盘,一方面减少磁盘I/O竞争,另外一方面也可以避免数据库文件所在硬盘毁坏之后的文件丢失。归档路径也可以直接指定为磁带等其它物理存储设备,但可能要考虑读写速度、可写条件和性能等因素。
注意:当数据库处在ARCHIVE模式下时,一定要保证指定的归档路径可写,否则数据库就会挂起,直到能够归档所有归档信息后才可以使用。另外,为创建一个有效的备份,当数据库在创建时,必须履行一个全数据库的冷备份,就是说数据库需要运行在归档方式,然后正常关闭数据库,备份所有的数据库组成文件。这一备份是整个备份的基础,因为该备份提供了一个所有数据库文件的拷贝。(体现了冷备份与热备份的合作关系,以及强大的能力)
2,备份表空间文件:
a,首先,修改表空间文件为备份模式 ALTER TABLESPACE tablespace_name BEGIN BACKUP;
b,然后,拷贝表空间文件到安全区域 !CP tablespace_name D_PATH;
c,最后,将表空间的备份模式关闭 ALTER TABLESPACE tablespace_name END BACKUP;
3,对归档日志文件的备份:
停止归档进程-->备份归档日志文件-->启动归档进程
如果日志文档比较多,我们将它们写入一个文件成为一个恢复的参考:$ files `ls <归档文件路径>/arch*.dbf`;export files
4,备份控制文件:
SQL> alter database backup controlfile to 'controlfile_back_name(一般用2004-11-20的方式)' reuse;
当然,我们也可以将上面的东东写为一个脚本,在需要的时候执行就可以了:
脚本范例:
su – oracle < sqlplus /nolog
connect / as sysdba
ALTER TABLESPACE tablespace_name BEGIN BACKUP
!CP tablespace_name D_PATH
ALTER TABLESPACE tablespace_name END BACKUP
alter database backup controlfile to 'controlfile_back_name(一般用2004-11-20的方式)' reuse;
!files `ls <归档文件路径>/arch*.dbf`;export files
热备份的恢复,对于归档方式数据库的恢复要求不但有有效的日志备份还要求有一个在归档方式下作的有效的全库备份。归档备份在理论上可以无数据丢失,但是对于硬件以及操作人员的要求都比较高。在我们使用归档方式备份的时候,全库物理备份也是非常重要的。归档方式下数据库的恢复要求从全备份到失败点所有的日志都要完好无缺。
恢复步骤:LOG_ARCHIVE_DEST_1
shutdown数据库。
将全备份的数据文件放到原来系统的目录中。
将全备份到失败点的所有归档日志放到参数LOG_ARCHIVE_DEST_1所指定的位置。
利用sqlplus登陆到空实例。(connect / as sysdba)
然后 startup mount
set autorecovery on
recover database;
alter database open;
这样,我们的热恢复就算完工了,写了好久,终于写好,大家有什么补充就写上来,不要客气,这是这两天学习的一些心得,希望大家多多交流,谢谢
作者 freet15 (linux应用和开发) :: Comment (2)
|
| pearaep 回复于:2004-11-27 20:02:05
|
你这是9i以下版本的吧?在9i中imp时已不再用inctype这个参数了。此外,exp时还可按表空间导出。冷备份也可以向前恢复的,不一定只能恢复到备份时间点。热备份做的好时也能恢复单个逻辑对象,但要求对数据库备份恢复原理较熟。另外,还可用RMAN进行备份和恢复,在9i中还增加了block的恢复。ORACLE的备份和恢复是比较复杂的内容。
|
| freet15 回复于:2004-11-27 20:57:08
|
谢谢你的补充,我有时间了再把里面的细节写的清楚点,你说的是一些技巧了,我会补充一些的,谢谢
|
| Janson-Chen 回复于:2004-11-29 14:32:12
|
写的不错。
|
| sydongsun 回复于:2004-11-29 15:17:24
|
http://www.askguoyu.com/db/beifen.htm
不要太怕困难,这里有在线教程。制作的还不错的东西。希望大家喜欢。很快将准备全部的版本了。
|
| muguoli 回复于:2004-11-29 15:56:08
|
强烈支持,并感谢楼主们的辛勤汗水,希望ORACLE论坛人气更旺
|
| tinywind 回复于:2004-11-29 16:56:54
|
归档模式和备份方式的关系有错误,无论是否归档都可以作冷备份,但热备份只能在归档模式下进行
|
| freet15 回复于:2004-11-29 23:20:53
|
[quote:397c6f37bb="tinywind"]归档模式和备份方式的关系有错误,无论是否归档都可以作冷备份,但热备份只能在归档模式下进行[/quote:397c6f37bb]
无论是否归档确实都可以做冷备份,但是冷备份是工作在非归档模式下的,也就是说他不需要归档日志的支持,就好比我买了个小灵通打电话,现在又买了个手机,热备份就像是手机上的彩信业务,但是我目前只需要打电话,所以说,我只用小灵通打电话,而如果我开启了归档模式的话,理论上是会有除需要冷备份的其他要素的东东产生的,就像安全里面有句经典的话,权限的东西,可给可不给的坚决不给,^_^
|
| flighttop 回复于:2004-11-30 06:15:49
|
i am not talking about the cold backups of oracle because it is easy.
Warm backing up is more difficult to do that because the datafile and log files are increasing. Using RMAN is the best way.
|
| freet15 回复于:2004-11-30 08:53:00
|
[quote:4b5cf3435a="flighttop"]Using RMAN is the best way.[/quote:4b5cf3435a]
I agree with flighttop this words. :em04: :em04:
|
| sh_xiabo 回复于:2004-11-30 10:25:44
|
oracle备份个人认为,还是冷备加归档方式比较好
隔断时间作一个冷备,冷备期间作归档
这样可以保证
归档日志比较少,可靠性高
恢复速度会比较快,
恢复的时间点精度较高,数据损失少
|
| muguoli 回复于:2004-12-01 09:33:59
|
另外OARCLE9I由于默认启动是通过spfile,所以改为自动归档模式是alter system set log_archive_start=TRUE scope=spfile;
而不是更改参数文件init实例名.ora
|
| xiaoxiami88 回复于:2004-12-01 10:17:03
|
那我想问下,oracle让它工作在归档模式和非归档模式时在性能上有区别吗?
|
| freet15 回复于:2004-12-01 10:17:03
|
[quote:48f005c8b6="muguoli"]另外OARCLE9I由于默认启动是通过spfile,所以改为自动归档模式是alter system set log_archive_start=TRUE scope=spfile;
而不是更改参数文件init实例名.ora[/quote:48f005c8b6]
对!是修改Spfile,但是首先必须设定归档日志的存放地点,这一步也可以在oemapp dbastudio里面修改,因为修改存放路径的时候,我们可以很方便的同时修改模式,所以我就写一步了。哈哈,你去OEM工具下看看,这样可以看的明白的,修改之后,就是归档模式的修改了
|
| luosfu 回复于:2004-12-01 17:27:54
|
http://www.askguoyu.com/db/beifen.htm
\\不错,,不过网站好像有点链接的问题,很多打不开
|
| fyl110225 回复于:2004-12-01 20:48:01
|
你的个人网站我上了但是没法看啊你的再线教程我没法连接阿 不过你写的的确很好 我很感谢你的东西呵呵 希望我们常联系我的邮箱是fyl@ether.com.cn 有什么好的内容告诉我或者你的网站好了告诉我 呵呵 谢谢!!
|
| mcs_mch 回复于:2004-12-01 22:54:59
|
用rman来做,
alter system set log_archive_start=TRUE scope=spfile;
默认就是both 不加也罢"scope=spfile"
|
| hmilyyu 回复于:2004-12-02 13:28:47
|
提个问题:在归档模式下,隔几天做一个冷备份,同时删除这之前的归档日志文件。如果想要这些都自动进行可以用crontab和一些脚本来完成,有没有高手可以告诉我应该如何设置?
|
| xzhj 回复于:2004-12-06 13:47:31
|
归档模式和非归档模式在性能还是有点有区别的,但归档模式相对安全一些。大多针对备份恢复的技巧也只能在归档模式下才能使用。
|
| renxiao2003 回复于:2004-12-06 20:43:15
|
有抄袭之嫌啊。这个主题我早发过了啊。只怪我久不来矣啊。
|
| renxiao2003 回复于:2004-12-06 20:45:36
|
http://chinaunix.net/jh/19/377795.html
不过写得比我细,值得学习。
|
| freet15 回复于:2004-12-10 16:48:31
|
哪里哪里,因为是看的书,然后听一些资料,自己学习,很多”真理性”的东西我实在。。。呵呵,我也是半个四川人。
|
| tsingsong99 回复于:2004-12-13 12:47:16
|
自己实践一个吧,
能备份不一定说明不备份的是对的,
还是要进行恢复的测试,
可以将备份的数据用来克隆一个一摸一样的数据库,
才能检测出!
|