Oracle数据库逻辑备份的实现技巧和详细技巧(一)

2014-11-24 09:06:30 · 作者: · 浏览: 0

正文:

EXP和IMP是Oracle提供的一种逻辑备份工具。逻辑备份创建数据库对象的逻辑拷贝并存入一个二进制转储文件。这种逻辑备份需要在数据库启动的情况下使用, 其导出实质就是读取一个数据库记录集(甚至可以包括数据字典)并将这个记录集写入一个文件,这些记录的导出与其物理位置无关,导入实质就是读取转储文件并执行其中的命令。此备份方式是通过Oracle的实用工具export和import来实施的, export是把数据库中的数据导出,import是把export卸出的数据导入数据库中。通过此工具可以衍生出多种功能, 比如整个数据库的备份、表结构重建、数据的传输、用户的改变等等。

Oracle Export/Import工具提供了灵活多样的功能和导出/导入模式,最常使用的三种模式是User、table和full database.除此以外,还可以在导出/导入时决定是否包含与对象有关的数据字典信息,如索引、约束、权限等等。

注意:通过逻辑备份可以备份整个数据库, 或仅备份部分重要数据。因为是逻辑上的备份,故只能用于逻辑的恢复数据, 一旦数据库被物理损坏, 导致不能启动,逻辑备份的数据不能帮助恢复数据库。

1. Export/Import的使用举例:(以下操作均为在

(1)。 将一个用户的对象导入到另一个用户模式中:

把数据库中原有的用户Export至一个dmp文件(如把用户olduser的对象导出到文件olduser0701.dmp中):

$ exp sys/password file= olduser0701 owner=olduser grant=N indexes=Y rows=Y

从dmp文件中把一个用户的对象import至一个用户的模式中(从olduser0701.dmp中,把用户olduser的对象导入到用户newuser中):

$imp sys/password file=olduser0701 fromuser=olduser touser=newuser indexes=Y rows=Y

(2)。 导入时避免出现ORA-00942(表或是图不存在)错误:

因为,导出是按照在数据库中对象建立的顺序进行的,从而在导入时,数据库对象之间的依赖性会引起某些先导入对象找不到其依赖对象(如view、procedure等等),就会引起ORA-00942(表或是图不存在)错误。通常解决这种问题的方法是,做两次导入工作,第一遍导入时设置如下:

$ imp sys/password file=demo0701 full=Y commit=y rows=Y

导入时如果出现错误,就修改设置:rows=n,ignore=n:

$ imp sys/password file=demo0701 full=Y rows=N commit=Y ignore=N

(3)。 做无增量的全数据库备份及恢复的例子:

全数据库Export至dmp文件(如sidfull0701.dmp):

$ exp sys/password file=sidfull0701.dmp Full=y -- rows确省为Y

把整个数据库备份的sidfull0701.dmp文件至数据库中:

$ imp sys/password file=sidfull0701.dmp ignore=y full=y-- rows确省为Y

注意:导入/导出是最彻底的减少磁盘碎片的方法。

2. 备份策略和综合应用举例:

(1)。 做全数据库增量备份和恢复的方法:

全数据库Export至dmp文件(如sidfull0701.dmp):

$ exp sys/manager file= sidfull0701.dmp Full=y inctype=complete

第一天增量备份Export至dmp文件(如sidincr1.dmp):

$ exp sys/manager file= sidincr1.dmp inctype=incremental

第二天增量备份Export至dmp文件(如sidincr2.dmp):

$ exp sys/manager file= sidincr2.dmp inctype=incremental

第三天增量备份Export至dmp文件(如sidincr3.dmp):

$ exp sys/manager file= sidincr3.dmp inctype=incremental

现假设Oracle数据库在第三天被破坏了重新建一个Oracle数据库,先把最后的一个dmp文件imp至数据库中:

$ imp sys/manager file= sidincr3.dmp full=y ignore=y inctype=system

把整个数据库备份的dmp文件imp至数据库中:

$ imp sys/manager file= sidfull0701.dmp ignore=y full=y inctype=restore

把第一天增量备份的dmp文件imp至数据库中:

$ imp sys/manager file= sidincr1.dmp ignore=y full=y inctype=restore

把第二天增量备份的dmp文件imp至数据库中:

$ imp sys/manager file= sidincr2.dmp ignore=y full=y inctype=restore

把第三天增量备份的dmp文件imp至数据库中

$ imp sys/manager file= sidincr3.dmp ignore=y full=y inctype=restore

(2)。 数据库逻辑备份策略的制定:

数据库管理员可以排定一个备份日程表,结合数据导出的三个不同方式合理、高效、可靠地完成。比如数据库的备份任务可作如下安排:

星期一:完全导出(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 FU