`
alanland
  • 浏览: 641240 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Oracle数据库逻辑备份的实现

阅读更多

 

 

转自:it168

 

 

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 

分享到:
评论

相关推荐

    ORACLE数据库备份用bat脚本

    本文将详细讲解如何利用批处理脚本(BAT)进行Oracle数据库的备份,并探讨如何通过Java代码实现定时备份。 首先,让我们理解"Oracle数据库备份用bat脚本"的概念。批处理脚本是Windows操作系统中的一种命令文件,...

    快速掌握Oracle数据库的备份策略

    逻辑备份是指将数据库中的数据备份到转储设备中,物理备份是指将数据库文件备份到转储设备中。逻辑备份可以分为全备份、增量备份和差异备份。物理备份可以分为冷备份和热备份。 Oracle 数据库备份策略是非常重要的...

    oracle实现数据库的备份与还原

    Oracle提供多种备份方式,包括物理备份(如数据文件、控制文件的拷贝)和逻辑备份(如导出/导入、SQL*Plus的COPY命令)。在C#中,我们通常会借助Oracle的.NET数据提供者(Oracle Managed Data Access,ODP.NET)或者...

    linux下远程定时备份oracle数据库

    以下将详细阐述如何在没有安装Oracle数据库的Linux系统上实现这一目标。 首先,你需要在Linux服务器上安装必要的工具。这通常包括SSH(Secure Shell)用于远程连接,rsync或scp(Secure Copy)用于文件传输,以及...

    Oracle数据库容灾备份技术探讨

    "Oracle数据库容灾备份技术探讨" Oracle数据库容灾备份技术探讨是指通过各种技术手段来保护和恢复Oracle数据库,以确保数据库的高可用性和业务连续性。根据不同的灾备技术,可以将其分为三类: Oracle Data Guard...

    浅析Oracle数据库的逻辑备份与恢复.pdf

    首先,要理解Oracle数据库逻辑备份中的Export工具。Export工具可以将数据库中的数据导出到一个二进制文件中,这个文件被称为DMP文件。在内容部分提到了一些Export的关键参数,例如: - user:指定连接数据库使用的...

    oracle数据库自动备份脚本带说明

    Oracle提供了多种备份方式,包括物理备份(如使用RMAN或操作系统级别的复制)和逻辑备份(如使用EXPDP或SQL*Plus的导出功能)。在这个场景中,`backup.bat`脚本很可能是一个使用RMAN(Recovery Manager)的物理备份...

    Oracle数据库RMAN备份与恢复.pdf

    Oracle数据库提供了物理备份和逻辑备份两种方式,RMAN(Recovery Manager)技术是DBA常用的备份技术。RMAN备份特点是跳过未使用的数据块,使用Oracle特有的二进制压缩模式,能够最大程度地压缩数据块中的典型数据。 ...

    Oracle数据库备份与恢复.pdf

    Oracle数据库提供了多种备份方法,包括物理备份和逻辑备份。 ##### 1. 物理备份 物理备份是指直接复制数据库的物理文件,如数据文件、控制文件和重做日志等。这种备份方式保留了数据库的物理结构和内容,可以快速...

    Oracle 数据库备份工具(带源码和控件)

    1. **Oracle数据库备份**:Oracle数据库备份主要包括物理备份和逻辑备份。物理备份包括完整数据库备份、增量备份和差异备份,通过复制数据库的数据文件、控制文件和日志文件来实现。逻辑备份则是通过SQL命令(如`...

    java实现oracle数据库备份.pdf

    #### 二、Java实现Oracle数据库备份的技术方案 1. **技术选型**: - **前端**:使用JSP(Java Server Pages)作为用户界面。 - **后端**:利用Java调用Oracle的导出工具`exp`完成数据备份。 2. **备份流程设计**...

    ORACLE 数据库的逻辑备份

    ORACLE数据库有两类备份方法。第一类为物理备份,该方法实现数据库的完整恢复,但数据库必须运行在归挡模式下(业务数据库在非归挡模式下运行),且需要极大的外部存储设备,例如磁带库;第二类备份方式为逻辑备份,...

    Oracle数据库逻辑增量备份之exp/imp

    Oracle数据库逻辑增量备份是数据库管理中的重要组成部分,它允许管理员以高效的方式备份和恢复数据,尤其是在数据频繁更新的环境中。本文将深入探讨Oracle数据库中使用exp/imp工具进行逻辑增量备份的方法及其恢复...

    Oracle数据库同步备份和自动压缩的实现.pdf

    Oracle数据库同步备份和自动压缩的实现是确保数据安全和高效管理的关键环节。在实际的IT环境中,Oracle数据库因其高度的可靠性和可扩展性而被广泛应用于各种业务系统。与之配合使用的开发工具如Delphi,能够提供高效...

    Oracle数据库的备份与恢复策略研究

    ### Oracle数据库的备份与恢复策略研究 #### 一、引言 随着信息技术的快速发展,数据库管理系统(DBMS)作为数据存储的核心技术,其安全性和可靠性变得越来越重要。Oracle数据库作为市场上主流的关系型数据库之一,因其...

    oracle 数据库自动备份工具

    在Oracle数据库系统中,备份主要分为物理备份和逻辑备份两种方式。物理备份直接复制数据库的数据文件、控制文件、重做日志文件等,恢复时速度快但依赖于原始硬件环境。逻辑备份则是通过SQL语句(如EXPDP/IMPDP或导出...

    Oracle数据库的逻辑备份shell程序.pdf

    本文介绍了一种使用Shell程序实现Oracle数据库逻辑备份的方法,旨在提高维护效率并简化工作流程。 1. Shell程序介绍 Shell是操作系统提供的一种命令行接口,它允许用户与操作系统内核进行交互,执行各种操作任务。...

Global site tag (gtag.js) - Google Analytics