Oracle数据库逻辑备份的完成ITeyehuabian - AG环亚娱乐

Oracle数据库逻辑备份的完成ITeyehuabian

2019-02-07 09:01:47 | 作者: 夏真 | 标签: 数据库,备份,数据 | 浏览: 1176

 

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 fulldate +%Y-%m-%d-%H-%M.dmp abc 

    $ tar -cvf fulldate +%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 

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表AG环亚娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章