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 FULL=Y FILE=F
    注: 备份文件的命名最好加上日期,这样便于以后的恢复工作。
    操作如下:
    $ tar -cvf full'date +%Y-%m-%d-%H-%M'.dmp abc
    $ tar -cvf full'date +%Y-%m-%d-%H-%M-%S'.dmp abc
    (3). 利用cron定时备份数据库:
    linux、Unix提供了定时服务cron程序,能够在确定的时间中执行一系列任务,因此数据库的备份必须和cron合作来完成,或者使用/etc下的daily,weekly,monthly文件做定时的数据库备份操作。
    例如:编写Oracle逻辑备份的sh文件,并用cron程序来制定备份的时间。
    i. 编辑完全备份的脚本文件(exp_comp.sh):
    rq='date +"%m%d"'
    su - oracle -c "exp system/manager full=y inctype=complete file=/oracle/
    export/db_comp$rq.dmp"
    ii. 编辑累计备份的脚本文件(exp_cumu.sh):
    rq=' date +"%m%d"'
    su - oracle -c"exp system/manager full=y inctype=cumulative file=/oracle
    /export/db_cumu$rq.dmp"
    iii. 编辑增量备份的脚本文件(exp_incr.sh):
    rq='date +"%m%d" '
    su - oracle -c"exp system/manager full=y inctype=incremental file=/oracle
    /export/db_incr$rq.dmp"
    iv. 编辑root用户crontab文件,将上面的脚本命令用cron程序来制定数据库备份的时间:
    $ vi /var/spool/cron/crontabs/root
   v. 在/var/spool/cron/crontabs/root文件中增加以下内容:
    0 2 1 * * /oracle/exp_comp.sh
    30 2 * * 0-5 /oracle/exp_incr.sh
    45 2 * * 6 /oracle/exp_cumu.sh
    当然上面这个时间表可以根据不同的需求来改变。比如按照上面的数据库的备份安排表来做这个cron程序的制定,如下所示:
    星期一:完全导出(A)
    星期二:增量导出(B)
    星期三:增量导出(C)
    星期四:增量导出(D)
    星期五:累计导出(E)
    星期六:增量导出(F)
    星期日:增量导出(G)
    (4).使用Export/Import的注意事项:
    在做Export和Import的时候千万请注意您的字符集设置,如果在做Export或Import的时候,UINX的环境变量如果和字符集设置不一致的话,将导致数据库恢复的信息不能正确读取,特别是数据库采用的非缺省值的中文字符集。切记一定要求保持一致,如果有特殊的要求请先联系Oracle售后支持部。下面介绍怎样确定Oracle数据库的字符集设置和操作系统的环境变量:
$ sqlplus sys/manager
SQL> select * from NLS_DATABASE_PARAMETERS;
PARAMETER VALUE
------------------------- -----------------------------
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CHARACTERSET UTF8
    环境变量应设置
$ export NLS_LANG=American_america.UTF8
    Export/Import支持的增量和累计备份实际上是表级的,即上一次备份之后变化的表将全表卸载,而不是变化的记录。因此,在以OLTP应用为主的数据库中,由于保存主要业务数据的表处于频繁的录入和更新之中,增量和累计卸载并不能显著提高备份的效率。
    在做整个数据库Import时,缺省状态下以一个Table为一个Transaction,所以如果存在一些表的数据量很大,
建议使用commit=y并且要提供一个较大的buffer值,同时建立一个临时Rollback segment ,它的default
storage参数initial 和 next要设置大一些,并要将这个Rollback Segment Online,同时offline
其他小的rollback segments。确保一个Table能完整import
。因为在做import时, 数据库将自动创建索引,及完整性约束,
为了加快数据加载的速度及一次成功的概率,可以考虑在export之前首先disable所有的完整性约束,
在import之后在enable所有的完整性约束。而对索引,可以考虑单独export索引。通过使用命令 "imp indexfile=……"
在import数据之后来单独创建索引。
    如果希望在export数据库时,直接将产生的dmp文件写到外设上, 你可以使用 " exp file=设备名… Volsize=设备的容量"。
由于export出来的文件可能较大,而某些操作系统(如Linux)对文件大小有限制,如不能大于2G。因此可将dmp文件设置为指定大小的若干文件。如:
$exp sys/manager buffer=4096000 file=(full1.dmp,full2.dmp,full3.dmp,full4.dmp) filesize=2G Full=y inctype=complete log=full.log

http://www.knowsky.com/540062.html

oracle 增量备份恢复策略(基础知识)的更多相关文章

  1. ORACLE异机增量备份恢复

    PROD异机增量备份恢复验证实施文档 准备工作:source 源库:PROD数据库备份策略:周日0级RMAN备份,周一至周六1级差异增量备份0 4 * * 0 /data/rmanlev0.sh &g ...

  2. Linux服务器数据备份恢复策略

    一.Linux 备份恢复基础 1.什么是备份 最简单的讲,备份数据的过程就是拷贝重要的数据到其他的介质之上(通常是可移动的),以保证在原始数据丢失的情况下可以恢复数据.一次备份可能是简单的 cp命令, ...

  3. 如何通过rman的增量备份恢复dataguard中standby端的数据

    很多正在使用dataguard的客户,都会遇到一个棘手的问题: 在备份端与主库同步的过程中由于网络原因或磁盘问题导致一个或多个归档日志丢失,进而dataguard同步无法继续.很多客户都选择了重新全库 ...

  4. 通过增量备份恢复来处理Oracle DG 复制GAP

    1.确定增备scn范围,通过alert日志获取gap日志序列GAP - thread 1 sequence 109631-117170 2.根据序列获取增备起点SCN提示最小gap序列为109631, ...

  5. mysql基础之数据库备份和恢复的基础知识

    备份数据的最终目的是为了在出现一些意外情况时,能够通过备份将数据还原,所以单单的备份数据往往是无法满足还原时的需求的,所以在备份数据库时,除了要备份数据本身,还要备份相关的数据库环境,如配置文件,定时 ...

  6. Oracle RMAN备份恢复指导书

    目 录 1 目的与范围... 1 2 术语和定义... 1 3 角色和职责... 2 4 使用RMAN备份数据库... 2 4.1.1 检查数据库模式... 2 4.1.2 连接到target数据库. ...

  7. Oracle Rman备份恢复和管理

    参考资料: Oracle之Rman入门指南 一步一步学Rman Rman简介 Rman-Recover manager恢复管理工具. Oracle集成了很多环境的一个数据库备份和恢复的工具. Rman ...

  8. 利用增量备份恢复因归档丢失造成的DG gap

    故障现象:data guard归档出现gap,悲剧的是丢失的归档在主库上被rman备份时删除了,丢失的归档大约有20几个,数据库大小约2T,如果重建DG将非常耗时间,因此决定利用增量备份的方式恢复DG ...

  9. oracle增量备份

    在进行数据库维护的过程中经常会遇到数据库备份的问题.先介绍一种常用的数据备份操作系统执行计划+批处理命令:在win的系统中存在 任务计划程序 选项:新建任务选中你写好的程序,设定好时间,就可以按照设定 ...

随机推荐

  1. JSP-Runoob:JSP 表单处理

    ylbtech-JSP-Runoob:JSP 表单处理 1.返回顶部 1. JSP 表单处理 我们在浏览网页的时候,经常需要向服务器提交信息,并让后台程序处理.浏览器中使用 GET 和 POST 方法 ...

  2. 浅谈IO优化

    三层结构 磁盘(存储).VM(卷管理)和文件系统.专有名词不好理解,打个比方说:磁盘就相当于一块待用的空地:LVM相当于空地上的围墙(把空地划分成多个部分):文件系统则相当于每块空地上建的楼房(决定了 ...

  3. PCB 规则引擎之脚本语言JavaScript应用评测

    世界上没有好做的软件,觉得好做,只是你的系统简单而已,而不是哪个行业简单,特别像我们PCB制造企业务逻辑的很复杂的,仅仅靠决策树中的每个节点布置决策逻辑是不能满足要求的,所以我们在制作PCB规则引擎必 ...

  4. eclipse----快速设置主题色

  5. int(3)和int(11)区别

  6. Django总结二

    - 创建app应用与ORM操作 - Django项目project - app(应用) -> 不同的功能放在不同的app中 - 命令 : - 创建app python manage.py sta ...

  7. 342 Power of Four 4的幂

    给定一个整数 (32位有符整数型),请写出一个函数来检验它是否是4的幂.示例:当 num = 16 时 ,返回 true . 当 num = 5时,返回 false.问题进阶:你能不使用循环/递归来解 ...

  8. Android基础TOP4_1:点击物理按钮弹出退出提示框

    JAVA: public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedIns ...

  9. html5——3D案例(音乐盒子、百度钱包)

    1.音乐盒子:触碰盒子,盖子会打开 2.百度钱包:触碰钱包,钱包,会180度旋转 <!DOCTYPE html> <html lang="en"> < ...

  10. python网络编程调用recv函数完整接收数据的三种方法

    最近在使用python进行网络编程开发一个通用的tcpclient测试小工具.在使用socket进行网络编程中,如何判定对端发送一条报文是否接收完成,是进行socket网络开发必须要考虑的一个问题.这 ...