Chinaunix首页 | 论坛 | 博客
  • 博客访问: 527186
  • 博文数量: 235
  • 博客积分: 1209
  • 博客等级: 少尉
  • 技术积分: 1417
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-19 19:59
文章分类

全部博文(235)

文章存档

2012年(107)

2011年(128)

分类:

2012-01-31 16:42:07

原文地址:Oracle数据库的备份 作者:zzjlzx

Oracle数据库的备份
ORACLE数据库有两类备份方法。第一类为物理备份,该方法实现数据库的完整恢复,但数据库必须运行在归挡模式下(业务数据库在非归挡模式下运行),且需要极大的外部存储设备,例如磁带库;第二类备份方式为逻辑备份,业务数据库采用此种方式,此方法不需要数据库运行在归挡模式下,不但备份简单,而且可以不需要外部存储设备。数据库逻辑备份方法ORACLE数据库的逻辑备份分为三种模式:表备份、用户备份和完全备份。

表模式

备份某个用户模式下指定的对象(表)。业务数据库通常采用这种备份方式。若备份到本地文件,使用如下命令:

exp icdmain/icd rows=y indexes=n compress=n buffer=65536
feedback=100000 volsize=0
file=exp_icdmain_csd_yyyymmdd.dmp
log=exp_icdmain_csd_yyyymmdd.log
tables=icdmain.commoninformation,icdmain.serviceinfo,icdmain.dealinfo

若直接备份到磁带设备,使用如下命令:
exp icdmain/icd rows=y indexes=n compress=n buffer=65536
feedback=100000 volsize=0
file=/dev/rmt0
log=exp_icdmain_csd_yyyymmdd.log
tables=icdmain.commoninformation,icdmain.serviceinfo,icdmain.dealinfo

注:在磁盘空间允许的情况下,应先备份到本地服务器,然后再拷贝到磁带。出于速度方面的考虑,尽量不要直接备份到磁带设备。

用户模式

备份某个用户模式下的所有对象。业务数据库通常采用这种备份方式。 若备份到本地文件,使用如下命令:

exp icdmain/icd owner=icdmain rows=y indexes=n compress=n buffer=65536
feedback=100000 volsize=0
file=exp_icdmain_yyyymmdd.dmp
log=exp_icdmain_yyyymmdd.log

若直接备份到磁带设备,使用如下命令:

exp icdmain/icd owner=icdmain rows=y indexes=n compress=n buffer=65536
feedback=100000 volsize=0
file=/dev/rmt0
log=exp_icdmain_yyyymmdd.log

注:如果磁盘有空间,建议备份到磁盘,然后再拷贝到磁带。如果数据库数据量较小,可采用这种办法备份。

完全模式

备份完整的数据库。业务数据库不采用这种备份方式。备份命令为:

exp icdmain/icd rows=y indexes=n compress=n buffer=65536
feedback=100000 volsize=0 full=y
file=exp_fulldb_yyyymmdd.dmp(磁带设备则为/dev/rmt0)
log=exp_fulldb_yyyymmdd.log

对于数据库备份,建议采用增量备份,即只备份上一次备份以来更改的数据。增量备份命令:

exp icdmain/icd rows=y indexes=n compress=n buffer=65536
feedback=100000 volsize=0 full=y inctype=incremental
file=exp_fulldb_yyyymmdd.dmp(磁带设备则为/dev/rmt0)
log=exp_fulldb_yyyymmdd.log

注:关于增量备份必须满足下列条件:
1. 只对完整数据库备份有效,且第一次需要full=y参数,以后需要inctype=incremental参数。
2. 用户必须有EXP_FULL_DATABASE的系统角色。
3. 话务量较小时方可采用数据库备份。
4. 如果磁盘有空间,建议备份到磁盘,然后再备份到磁带。

业务数据库备份方法及周期用EXP进行备份前,先在SYS用户下运行CATEXP.SQL文件(如果以前已运行该文件,则不要执行这个脚本)。
没有特殊说明,不允许在客户端执行备份命令。

备份命令参照表模式下的备份命令。

RMAN备份原理


在之前,看了用户管理的备份恢复管理,通过以SCN为线索贯穿整个过程,来熟悉了备份原理。
RMAN的备份过程和用户备份恢复管理有很大的区别,很多朋友了都没有理清楚原理
下面的是我的理解:
RMAN备份数据块的工作原理:

原理:RMAN基于备份算法规则来编译要备份的数据文件列表。基于通道数和同时备份的数据文件数,RMAN在ORACEL共享内存段中
创建一些内存缓冲区一般是在PGA中不过有时候内存缓冲区会被推入SGA。通道服务进程随后就开始读取数据文件,并在RMAN缓冲取
中填充这些数据块。一个缓冲区被填满时,输入缓冲区的数据就会推出到输出缓冲区。数据文件中的数据块都会都会发生这种
memery—to—monery write 的过程,如果数据块符合备份的标准,并且memery—to—monery write操作没有检查到
数据corruption则该数据块会被保存到输出数据缓冲区中,直到输出缓冲区被填满。一但输出缓冲区被填满,输出缓冲区的内容就会被
推到备份位置(磁盘或者磁带)

RMAN备份数据库过程:
    RMAN发出备份全库命令后,RMAN生成到目标数据库的bequeath连接,也就是说会检查ORACLA_SID变量中的实例名,并在该在实
例上产生一个服务器进程,然后作为sysdba登陆,然后会产生一个作为备份的通道,(在PGA或者是在SGA分配存储)。随后RMAN调用
SYS.DBMS_RCVMAN请求数据库结构信息,包括控制文件的信息(当前序列号,创建时间……)由于指定了备份全库,所以RMAN会请求
数据库中数据文件信息,并判断是否存在offline数据文件(包括所在的位置和工作方式)。
    RMAN开始备份,为了保持数据一致性RMAN必须构建控制文件快照,接下来RMAN调用DBMS _BACKUP_RESTORE数据包,该调用
可以创建备份片。RMAN拥有文件列表,所以它为数据文件读取操作分配内存缓冲区,分配缓冲区后RMAN初始化备份片。一旦初始化了备份片,
RMAN会判断是否使用了服务器参数文件,如果使用了则会做为备份的一部分,还要备份控制文件,之后才开始备份数据文件,并将其推至内存。
为了实现这一功能,通道进程在磁盘上执行预读取操作,并且将多个数据文件读入内存中,RMAN会判断数据块头信息是否仍然为零,如果数据块
没有被使用过,就不会发生到输出缓冲区的写操作,同时会丢弃这个数据块(这就RMAN为什么会只备份使用过的数据的原因,也是它的优点)
RMAN还会执行检查数据块有没有corruption操作。当检查通过了就被写入到输出缓冲区。一旦输出缓冲区填满了,就被推至备份文件位置。
    在备份数据块的时候,RMAN影子进程会得到备份状态信息。并将它传给V$session_longops视图。查询它能得到信息。
    当数据文件的所有数据块都被读入输入缓冲区并确定了状态之后RMAN就会通过将这个数据文件写入备份片来结束该文件的备份操作。所有
数据文件写入备份片之后,RMAN生成最后一个对SYS DBMS BACKUP RESTORE 数据包的调用,该调用在控制文件中写入备份信息(包括
备份片名,启动备份操作时的检查点的SCN和完成备份的时间)
    至此完成备份!


希望大家继续讨论RMAN备份恢复原理(RMAN功能太强大了)
 
 
 
 
作者:qqread出处:IT专家网论坛2010-06-09 13:00

物理备份:是将实际组成数据库的操作系统文件从一处拷贝到另一处的备份过程,通常是从磁盘到磁带。

  对于oracle数据库只有物理备份和逻辑备份

  物理备份:是将实际组成数据库的操作系统文件从一处拷贝到另一处的备份过程,通常是从磁盘到磁带。

  逻辑备份:是利用SQL语言从数据库中抽取数据并存于二进制文件的过程。

  第一类为物理备份,该方法实现数据库的完整恢复,但数据库必须运行在归挡模式下(业务数据库在非归挡模式下运行),且需要极大的外部存储设备,例如磁带库,具体包括冷备份和热备份。冷备份和热备份是物理备份(也称低级备份),它涉及到组成数据库的文件,但不考虑逻辑内容。

  第二类备份方式为逻辑备份,业务数据库采用此种方式,此方法不需要数据库运行在归挡模式下,不但备份简单,而且可以不需要外部存储设备,包括导出/导入(EXPORT/IMPORT)。这种方法包括读取一系列的数据库日志,并写入文件中,这些日志的读取与其所处位置无关。

  (一)、导出/导入(Export/Import)

  利用Export可将数据从数据库中提取出来,利用Import则可将提取出来的数据送回Oracle数据库中去。

  1、 简单导出数据(Export)和导入数据(Import)

  Oracle支持三种类型的输出:

  (1)表方式(T方式),将指定表的数据导出。

  (2)用户方式(U方式),将指定用户的所有对象及数据导出。

  (3)全库方式(Full方式),将数据库中的所有对象导出。

  数据导出(Import)的过程是数据导入(Export)的逆过程,它们的数据流向不同。

  2、 增量导出/导入

  增量导出是一种常用的数据备份方法,它只能对整个数据库来实施,并且必须作为SYSTEM来导出。在进行此种导出时,系统不要求回答任何问题。导出文件名缺省为export.dmp,如果不希望自己的输出文件定名为export.dmp,必须在命令行中指出要用的文件名。

  增量导出包括三个类型:

  (1)“完全”增量导出(Complete)

  即备份整个数据库,比如:

  $exp system/manager inctype=complete file=990702.dmp

  (2) “增量型”增量导出

  备份上一次备份后改变的数据。比如:

  $exp system/manager inctype=incremental file=990702.dmp

(3) “累计型”增量导出(Cumulative)

  累计型导出方式只是导出自上次“完全” 导出之后数据库中变化了的信息。比如:

  $exp system/manager inctype=cumulative file=990702.dmp

  数据库管理员可以排定一个备份日程表,用数据导出的三个不同方式合理高效地完成。

  比如数据库的备份任务可作如下安排:

  星期一:完全导出(A)

  星期二:增量导出(B)

  星期三:增量导出(C)

  星期四:增量导出(D)

  星期五:累计导出(E)

  星期六:增量导出(F)

  星期日:增量导出(G)

  如果在星期日,数据库遭到意外破坏,数据库管理员可按以下步骤来恢复数据库:

  第一步:用命令CREATE DATABASE重新生成数据库结构;

  第二步:创建一个足够大的附加回段。

  第三步:完全增量导入A:

  $imp system./manager inctype= RECTORE FULL=Y FILE=A

  第四步:累计增量导入E:

  $imp system/manager inctype= RECTORE FULL=Y FILE =E

  第五步:最近增量导入F:

  $imp system/manager inctype=RESTORE FULL=Y FILE=F

(二)、 冷备份

  冷备份发生在数据库已经正常关闭的情况下,当正常关闭时会提供给我们一个完整的数据库。冷备份是将关键性文件拷贝到另外位置的一种说法。对于备份Oracle信息而言,冷备份是最快和最安全的方法。冷备份的优点是:

  1.是非常快速的备份方法(只需拷贝文件)

  2.容易归档(简单拷贝即可)

  3.容易恢复到某个时间点上(只需将文件再拷贝回去)

  4.能与归档方法相结合,作数据库“最新状态”的恢复。

  5.低度维护,高度安全。

  但冷备份也有如下不足:

  1.单独使用时,只能提供到“某一时间点上”的恢复。

  2.在实施备份的全过程中,数据库必须要作备份而不能作其它工作。也就是说,在冷备份过程中,数据库必须是关闭状态。

  3.若磁盘空间有限,只能拷贝到磁带等其它外部存储设备上,速度会很慢。

  4.不能按表或按用户恢复。

  如果可能的话(主要看效率),应将信息备份到磁盘上,然后启动数据库(使用户可以工作)并将所备份的信息拷贝到磁带上(拷贝的同时,数据库也可以工作)。冷备份中必须拷贝的文件包括:

  1.所有数据文件

  2.所有控制文件

  3.所有联机REDO LOG文件

  4.Init.ora文件(可选)。

  值得注意的是冷备份必须在数据库关闭的情况下进行,当数据库处于打开状态时,执行数据库文件系统备份是无效的

  下面是做冷备份的完整例子:

  (1) 关闭数据库$sqldba lmode=y

  SQLDBA >connect internal;

  SQLDBA >shutdown normal;

  (2) 用拷贝命令备份全部的时间文件、重做日志文件、控制文件、初始化参数文件

  SQLDBA >! cp < file > < backup directory >

  (3) 重启Oracle数据库

  $sqldba lmode=y

  SQLDBA >connect internal;

  SQLDBA >startup;

(三)、 热备份

  热备份是在数据库运行的情况下,采用archivelog mode方式备份数据的方法。所以,如果你有昨天夜里的一个冷备份而且又有今天的热备份文件,在发生问题时,就可以利用这些资料恢复更多的信息。

  热备份的要求是:

  1. 热备份工作必需要求数据库在Archivelog 方式下操作,在SQLDBA状态下用alter database archivelog|noarchivelog命令可改变备份的模式。

  2. 热备份只能在数据库不使用或使用率低的情况下进行。

  3. 热备份需要大量的档案空间。

  一般情况,Oracle 以循环的方式写入Online redo log 文件,当填满第一个redo log文件后写第二个,直至最后一个,最后一个被填满后,后台进程LGWR就覆盖第一个,在Archivelog方式下,后台进程ARCH在每一个redo log 文件被覆盖前,给它作一个拷贝,一般,这些文档的redo log 文件被写入磁盘或磁带中。如果磁盘空间够用,建议使用磁盘,这样可大大减少完成备份所需的时间。

  在作热备份之前,要将config.ora文件中的log_archive_start 设为true 将log_archive_dest一旦数据库运行在archivelog状态下,就可以做备份了。热备份的命令文件由三部分组成:

  1.数据文件一个表空间一个表空间地备份。

  (1)设置表空间为备份状态

  (2)备份表空间的数据文件

  (3)恢复表空间为正常状态

  2.备份归档log文件。

  (1)临时停止归档进程

  (2)log下那些在archive redo log目标目录中的文件

  (3)重新启动archive进程

  (4)备份归档的redo log 文件

  3.用alter database backup controlfile命令来备份拷贝文件

  热备份的优点是:

  1.可在表空间或数据文件级备份,备份时间短。

  2.备份时数据库仍可使用。

  3.可达到秒级恢复(恢复到某一时间点上)。

  4.可对几乎所有数据库实体作恢复。

  5.恢复是快速的,在大多数情况下在数据库仍工作时恢复。

  热备份的不足是:

  1.不能出错,否则后果严重。

  2.若热备份不成功,所得结果不可用于时间点的恢复。

  3.因难于维护,所以要特别仔细小心,不允许“以失败而告终”。

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