数据泵增量备份

本帖最后由 java3344520 于 2012-11-8 12:51 编辑

大家看看这个参数inctype你是否使用过?我做了以下测试,欢迎拍砖!

Oracle数据库逻辑增量备份之exp/imp
一、实现需求
         由于一个库在云平台上,虽然做了RMAN备份,但是RMAN备份在云本地磁盘上,同时库备份数据量比较大,无法转移到其他的空间上。由于该库应用的性质比较特殊,大数据量部分要求保存180天后即可删除,因此除了做RMAN之外,我希望将核心数据做下额外的备份,expdp可以满足,目前是这么做的,但是expdp做不了增量备份。听说exp/imp有参数能做增量备份,但是又听说exp增量备份的最小单位是表,只要表一条数据发生变化,就会对全表进行备份。之前没有用过exp增量备份这个功能,于是决定先做下测试,看到底备份恢复效率和真实机制如何。
二、逻辑备份恢复工具exp/imp1、逻辑备份原理
Oracle数据库有三种标准的备份方法,它们分别是导出/导入(EXP/IMP、EXPDP/IMPDP)、热备份和冷备份。导出备件是一种逻辑备份,冷备份和热备份是物理备份。
逻辑导出备份:创建数据库对象的逻辑拷贝并存入一个二进制转储文件。这种逻辑备份需要在数据库启动的情况下使用, 其导出实质就是读取一个数据库记录集(甚至可以包括数据字典)并将这个记录集写入一个文件,这些记录的导出与其物理位置无关,导入实质就是读取转储文件并执行其中的命令。此备份方式是通过Oracle的实用工具export和import来实施的, export是把数据库中的数据导出,import是把export卸出的数据导入数据库中。通过此工具可以衍生出多种功能, 比如整个数据库的备份、表结构重建、数据的传输、用户的改变等等。
重新温习下exp/imp的语法和参数,着重看看增量备份参数相关说明。
2、exp语法和参数
C:\Documents and Settings\A4586>exp help=y
Export: Release 10.2.0.1.0 - Production on 星期三 11 7 13:41:282012
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
通过输入 EXP 命令和您的用户名/口令导出
操作将提示您输入参数:
     例如: EXPSCOTT/TIGER
或者您也可以通过输入跟有各种参数的 EXP 命令来控制导出
的运行方式。要指定参数您可以使用关键字:
     格式:  EXP KEYWORD=value KEYWORD=(value1,value2,...,valueN)
     例如: EXPSCOTT/TIGER GRANTS=Y TABLES=(EMP,DEPT,MGR)
               TABLES=(T1:P1,T1:P2), 如果 T1 是分区表
USERID 必须是命令行中的第一个参数。
关键字                   说明 (默认值)         
----------                   ---------------------------------------------------------
USERID                       用户名/口令
FULL                                      导出整个文件 (N)
BUFFER                       数据缓冲区大小
OWNER                      所有者用户名列表
FILE                              输出文件(EXPDAT.DMP)
TABLES                表名列表
COMPRESS                导入到一个区 (Y)
RECORDLENGTH   IO 记录的长度
GRANTS                 导出权限 (Y)
INCTYPE                        增量导出类型
INDEXES                导出索引 (Y)
RECORD            跟踪增量导出 (Y)
DIRECT                 直接路径 (N)         
TRIGGERS          导出触发器 (Y)
LOG                   屏幕输出的日志文件   
STATISTICS            分析对象(ESTIMATE)
ROWS                  导出数据行(Y)        
PARFILE             参数文件名
CONSISTENT            交叉表的一致性(N)   
CONSTRAINTS       导出的约束条件 (Y)
OBJECT_CONSISTENT    只在对象导出期间设置为只读的事务处理(N)
FEEDBACK              x 行显示进度 (0)
FILESIZE               每个转储文件的最大大小
FLASHBACK_SCN        用于将会话快照设置回以前状态的 SCN
FLASHBACK_TIME       用于获取最接近指定时间的 SCN 的时间
QUERY                用于导出表的子集的 select 子句
RESUMABLE            遇到与空格相关的错误时挂起 (N)
RESUMABLE_NAME      用于标识可恢复语句的文本字符串
RESUMABLE_TIMEOUT    RESUMABLE 的等待时间
TTS_FULL_CHECK                      TTS 执行完整或部分相关性检查
TABLESPACES            要导出的表空间列表
TRANSPORT_TABLESPACE  导出可传输的表空间元数据 (N)
TEMPLATE              调用 iAS 模式导出的模板名
3、imp语法和参数
C:\Documents and Settings\A4586>imp help=y
Import: Release 10.2.0.1.0 - Production on 星期三 11 7 13:59:172012
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
通过输入 IMP 命令和您的用户名/口令导入
操作将提示您输入参数:
     例如: IMPSCOTT/TIGER
或者可以通过输入 IMP 命令和各种参数来控制导入
的运行方式。要指定参数您可以使用关键字:
     格式:  IMP KEYWORD=value KEYWORD=(value1,value2,...,valueN)
     例如: IMPSCOTT/TIGER IGNORE=Y TABLES=(EMP,DEPT) FULL=N
               TABLES=(T1:P1,T1:P2), 如果 T1 是分区表
USERID 必须是命令行中的第一个参数。
关键字                                 说明 (默认值)        
----------------                          ----------------------------------------
USERID                           用户名/口令           
FULL                           导入整个文件 (N)
BUFFER                           数据缓冲区大小        
FROMUSER                   所有者用户名列表
FILE                               输入文件(EXPDAT.DMP)  
TOUSER                        用户名列表
SHOW                           只列出文件内容(N)     
TABLES                                 表名列表
IGNORE                          忽略创建错误(N)   
RECORDLENGTH              IO 记录的长度
GRANTS                          导入权限 (Y)         
INCTYPE                        增量导入类型
INDEXES                         导入索引 (Y)        
COMMIT                   提交数组插入 (N)
ROWS                           导入数据行(Y)        
PARFILE                       参数文件名
LOG                               屏幕输出的日志文件   
CONSTRAINTS              导入限制 (Y)
DESTROY             覆盖表空间数据文件 (N)
INDEXFILE            将表/索引信息写入指定的文件
SKIP_UNUSABLE_INDEXES  跳过不可用索引的维护 (N)
FEEDBACK                x 行显示进度 (0)
TOID_NOVALIDATE        跳过指定类型 ID 的验证
FILESIZE                    每个转储文件的最大大小
STATISTICS                  始终导入预计算的统计信息
RESUMABLE              在遇到有关空间的错误时挂起 (N)
RESUMABLE_NAME        用来标识可恢复语句的文本字符串
RESUMABLE_TIMEOUT      RESUMABLE 的等待时间
COMPILE                 编译过程程序包和函数 (Y)
STREAMS_CONFIGURATION  导入流的一般元数据 (Y)
STREAMS_INSTANTIATION   导入流实例化元数据 (N)

下列关键字仅用于可传输的表空间
TRANSPORT_TABLESPACE 导入可传输的表空间元数据(N)
TABLESPACES 将要传输到数据库的表空间
DATAFILES 将要传输到数据库的数据文件
TTS_OWNERS 拥有可传输表空间集中数据的用户
三、exp逻辑备份
ORACLE数据库的逻辑备份分为三种模式:表备份、用户备份和完全备份。
  (1)、表方式(T方式),将指定表的数据导出。
  (2)、用户方式(U方式),将指定用户的所有对象及数据导出。
  (3)、全库方式(Full方式),将数据库中的所有对象导出
1、exp表模式备份
备份某个用户模式下指定的对象(表)。业务数据库通常采用这种备份方式。
若备份到本地文件,使用如下命令:
C:\Documents and Settings\A4586>set nls_lang=simplifiedchinese_china.zhs16gbk
C:\Documents and Settings\A4586>exp scott/tiger file=c:\exp_scott_emp.dmplog=c:\exp_scott_emplog tables=scott.emp,scott.dept
即将导出指定的表通过常规路径...
. . 正在导出表                             EMP导出了          14 
. . 正在导出表                            DEPT导出了           4 
导出成功。
2、exp用户模式备份
备份某个用户模式下的所有对象。业务数据库通常采用这种备份方式。若备份到本地文件,使用如下命令:
   C:\Documentsand Settings\A4586>expscott/tiger file=c:\exp_scott.dmp log=c:\exp_scott.log owner=scott
即将导出指定的用户...
正在导出 pre-schema 过程对象和操作
正在导出用户 SCOTT 的外部函数库名
导出 PUBLIC 类型同义词
正在导出专用类型同义词
正在导出用户 SCOTT 的对象类型定义
即将导出 SCOTT 的对象...
正在导出数据库链接
正在导出序号
正在导出簇定义
即将导出 SCOTT 的表通过常规路径...
. . 正在导出表                           BONUS导出了           0 
. . 正在导出表                            DEPT导出了           4 
. . 正在导出表                             EMP导出了          14 
. . 正在导出表                        SALGRADE导出了           5 
…….
3、exp全库模式备份
备份完整的数据库。业务数据库不采用这种备份方式。注意导出用户权限。备份命令为:
C:\Documents and Settings\A4586>exp system/oraclefile=c:\exp_full.dmp log=c:\exp_full.log full=y;
即将导出整个数据库...
正在导出表空间定义
正在导出概要文件
正在导出用户定义
正在导出角色
正在导出资源成本
正在导出回退段定义
正在导出数据库链接
正在导出序号
…….
四、imp逻辑恢复
数据导入(Import)的过程是数据导出(Export)的逆过程,分别将数据文件导入数据库。数据库的逻辑恢复分为表恢复、用户恢复、完全恢复三种模式。
1、imp表模式恢复
A. 恢复表备份数据的全部内容
若从本地文件恢复scott导出的表,使用如下命令:
    C:\Documentsand Settings\A4586>impscott/tiger fromuser=scott touser=scott file=c:\exp_scott_emp.dmp log=c:\imp_scott_emp.log
经由常规路径由 EXPORT:V10.02.01 创建的导出文件
已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
导入服务器使用 AL32UTF8 字符集 (可能的字符集转换)
正在将 SCOTT 的对象导入到 SCOTT
. . 正在导入表                           "EMP"导入了          14 
. . 正在导入表                           "DEPT"导入了          4 
即将启用约束条件...
成功终止导入没有出现警告。

B. 恢复备份数据中的指定表
若从本地文件恢复scott备份导出的表,此时必须制定所有表,使用如下命令:
C:\Documents andSettings\A4586>impscott/tiger fromuser=scott touser=scotts file=c:\exp_scott_emp.dmp log=c:\imp_scott_emp.logtables=emp ignore=y;
经由常规路径由 EXPORT:V10.02.01 创建的导出文件
已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
导入服务器使用 AL32UTF8 字符集 (可能的字符集转换)
正在将 SCOTT 的对象导入到 SCOTTS
. . 正在导入表                           "EMP"导入了          14 
即将启用约束条件...
成功终止导入没有出现警告。
2、imp用户模式恢复
A. 恢复备份数据的全部内容
若从本地文件恢复整个用户的所有表,使用如下命令
     C:\Documents and Settings\A4586>imp scott/tigerfromuser=scott touser=scott file=c:\exp_scott.dmp log=c:\imp_scott.log;
正在将 SCOTT 的对象导入到 SCOTTS

B. 恢复备份数据中的指定表
若从本地文件恢复该用户的部分表,注意,这里一定要使用ingore=y,使用如下命令:
   C:\Documentsand Settings\A4586>impscott/tiger fromuser=scott touser=scotts file=c:\exp_scott.dmp log=c:\imp_scott.logtables=emp ignore=y;
经由常规路径由 EXPORT:V10.02.01 创建的导出文件
已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
导入服务器使用 AL32UTF8 字符集 (可能的字符集转换)
. . 正在导入表                           " EMP "导入了       14 
成功终止导入没有出现警告。
3、imp全库模式恢复
A. 恢复备份数据的全库全部内容
若从全库备份文件恢复全库,使用如下命令:
C:\Documents and Settings\A4586>imp scott/tigerfile=c:\exp_full.dmp log=c:\imp_full.log full=y;
经由常规路径由 EXPORT:V10.02.01 创建的导出文件
已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
导入服务器使用 AL32UTF8 字符集 (可能的字符集转换)
正在将 SYSTEM 的对象导入到 SYSTEM
…….

B. 恢复备份数据的特定用户内容
若从全库备份文件恢复特定用户的对象,使用如下命令:
C:\Documents and Settings\A4586>imp scott/tigerfile=c:\exp_full.dmp log=c:\imp_full_scott.log fromuser=scott touser=scott ignore=y;
经由常规路径由 EXPORT:V10.02.01 创建的导出文件
已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
导入服务器使用 AL32UTF8 字符集 (可能的字符集转换)
正在将 SCOTT 的对象导入到 SCOTTS
…….

C. 恢复备份数据的特定表内容
若从全库备份文件恢复特定表,使用如下命令:
C:\Documents and Settings\A4586>imp scott/tigerfile=c:\exp_full.dmp log=c:\imp_full.log fromuser=scott touser=scott tables=empignore=y;
经由常规路径由 EXPORT:V10.02.01 创建的导出文件
已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
导入服务器使用 AL32UTF8 字符集 (可能的字符集转换)
正在将 SCOTT 的对象导入到 SCOTT
. . 正在导入表                           "EMP"导入了          14 
即将启用约束条件...
成功终止导入没有出现警告。
五、 exp/imp增量参数INCTYPE1、exp增量备份条件
增量导出是一种常用的数据备份方法,它只能对整个数据库来实施,并且必须使用SYSTEM账号来导出。在进行此种导出时,系统不要求回答任何问题。导出文件名缺省为export.dmp,如果不希望自己的输出档定名为export.dmp,必须在命令行中指出要用的文件名。当全库备份比较小时候,采用数据库备份更便于恢复。
执行增量备份必须满足下列条件:
1.只对完整数据库备份有效,且第一次需要full=y参数,以后需要inctype=incremental参数。
2. 用户必须有EXP_FULL_DATABASE的系统角色。
2、exp增量备份类型
增量导出包括三种类型:
(1)“完全”增量导出(Complete
备份整个数据库,脚本内容如下:
C:\Documents andSettings\A4586>expsystem/oracle inctype=complete file=c:\exp_incr_full.dmplog=c:\exp_incr_full.log

(2)“增量型”增量导出(Incremental)
  备份上一次备份后改变的数据,脚本内容如下:
C:\Documents andSettings\A4586>expsystem/oracle inctype=incremental file=c:\exp_incr_incr.dmplog=c:\exp_incr_incr.log

(3)“累积型”增量导出(Cumulative)
           备份自上次“完全”导出之后数据库中变化了的数据。脚本内容如下:
C:\Documents andSettings\A4586>expsystem/oracle inctype=cumulative file=c:\exp_incr_cum.dmplog=c:\exp_incr_cum.log
 六、增量备份恢复实例1、exp增量备份恢复策略
数据库管理员可以排定一个备份日程表,用数据导出的三个不同方式合理高效的完成。
  比如数据库的备分任务可以做如下安排:
  星期一:完全导出(export_A.dmp
  星期二:增量导出(export_B.dmp
  星期三:增量导出(export_C.dmp
  星期四:增量导出(export_D.dmp
  星期五:累计导出(export_E.dmp
  星期六:增量导出(export_F.dmp
  星期日:增量导出(export_G.dmp

如果在星期日,数据库遭到意外破坏,数据库管理员可按照如下步骤恢复数据库:
  第一步:用命令CREATE DATABASE重新生成数据库结构;
  第二步:创建一个足够大的附加回滚,供imp使用。
  第三步:完全增量导入A
  imp system/manager inctype=RESTORE FULL=y FILE=A
  第四步:累计增量导入E
  imp system/manager inctype=RESTORE FULL=Y FILE=E
  第五步:最近增量导入F
  imp system/manager inctype=RESTORE FULL=Y FILE=F
2、A时间点全备
C:\Documents and Settings\A4586>sqlplus sys/oracle assysdba
SQL*Plus: Release 10.2.0.1.0 - Productionon 星期三 11 7 17:03:41 2012
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
连接到:
Oracle Database 10g Enterprise EditionRelease 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Miningoptions
SQL>grant dba to scott;
SQL> create tablespace tbs_incr datafile'D:\oracle\product\10.2.0\oradata\xmlgis\tbs_incr.dbf' size 10M autoextend onnext 10M maxsize unlimited;
SQL> create table scott.a (status varchar(20),weektimevarchar(20)) tablespace tbs_incr;
SQL> insert into scott.a values('insert','A');
SQL> commit;
C:\Documents and Settings\A4586>exp scott/tigerinctype=complete file=c:\exp_incr_A.dmp log=c:\exp_incr_A.log;
日志中发现如下:
即将导出 SCOTT 的表通过常规路径...
. . 正在导出表                               A导出了           1 
3、B时间点增量备份
SQL> create table scott.b (status varchar(20),weektimevarchar(20)) tablespace tbs_incr;
SQL> insert into scott.b values('insert','b');
SQL> insert into scott.a values('insert','b');
SQL> commit;                              
C:\Documents and Settings\A4586>exp scott/tiger inctype=incrementalfile=c:\exp_incr_B.dmp log=c:\exp_incr_B.log;
日志中发现如下:
即将导出 SCOTT 的表通过常规路径...
. . 正在导出表                               A导出了           2 
. . 正在导出表                               B导出了           1 
 
通过以上就说明了exp增量备份的最小执行 单位是表。
4、C时间点累积备份
SQL> create table scott.c (status varchar(20),weektimevarchar(20)) tablespace tbs_incr;
SQL> insert into scott.c values('insert','c');
SQL> insert into scott.a values('insert','c');
SQL> commit;
C:\Documents and Settings\A4586>exp scott/tiger inctype=cumulativefile=c:\exp_incr_C.dmp log=c:\exp_incr_C.log;

日志中发现如下:
即将导出 SCOTT 的表通过常规路径...
. . 正在导出表                               A导出了           3 
. . 正在导出表                               B导出了           1 
. . 正在导出表                               C导出了           1 
注意,这里的B表也被备份了,这是因为这里做的是累积备份,相对于全库备份的增加来进行的,因此B表也是新增的,因此被备份了。增量和累积的差异非常清晰。
5、D时间点增量备份
SQL> create table scott.d (status varchar(20),weektimevarchar(20)) tablespace tbs_incr;
SQL> insert into scott.d values('insert','d');
SQL> insert into scott.a values('insert','d');
SQL> commit;                              
C:\Documents and Settings\A4586>exp scott/tiger inctype=incrementalfile=c:\exp_incr_D.dmp log=c:\exp_incr_D.log;
日志中发现如下:
即将导出 SCOTT 的表通过常规路径...
. . 正在导出表                               A导出了           4 
. . 正在导出表                               D导出了           1 
6、E时间点增量备份
SQL> create table scott.e(status varchar(20),weektimevarchar(20)) tablespace tbs_incr;
SQL> insert into scott.e values('insert','e');
SQL> insert into scott.a values('insert','e');
SQL> commit;
SQL> col status format a10
SQL> select * from scott.a;
STATUS    WEEKTIME
--------------------------------------------------
insert    b
insert    A
insert    c
insert    d
insert    e
6、A表丢失数据恢复
         假设A表数据被误删除后,这个时候想要恢复到A,B,C,D,E某个时间的备份如何操作呢?(变相的需求是当前数据不是我想要的,我想恢复到之前某天的数据,先删除,在恢复!)
由于表是一个单独备份的对象单元,因此恢复的时候只要找到备份文件,就可以恢复到想要恢复的时刻。
举例:恢复表AC点时间的数据,恢复步骤如下:
SQL> select * from scott.a;
STATUS    WEEKTIME
--------------------------------------------------
insert    b
insert    A
insert    c
insert    d
insert    e
SQL> drop table scott.a;
C:\Documents and Settings\A4586>imp scott/tigerfromuser=scott touser=scott file=c:\exp_incr_c.dmp log=c:\imp_incr_c.logtables=a ignore=y;
经由常规路径由 EXPORT:V10.02.01 创建的导出文件
已经完成 ZHS16GBK 字符集和AL16UTF16 NCHAR 字符集中的导入
导入服务器使用 AL32UTF8 字符集 (可能的字符集转换)
正在将 SCOTT 的对象导入到 SCOTT
. . 正在导入表                             "A"导入了           3 
成功终止导入没有出现警告。
SQL> col status format a10
SQL> select * from scott.a;
STATUS    WEEKTIME
---------- ----------------------------------------
insert    b
insert    A
insert    c

举例:恢复A表到D点时刻数据
SQL> drop table scott.a;
C:\Documents and Settings\A4586>imp scott/tigerfromuser=scott touser=scott fil=c:\exp_incr_d.dmp log=c:\imp_incr_d.logtables=a ignore=y;
经由常规路径由 EXPORT:V10.02.01 创建的导出文件
已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
导入服务器使用 AL32UTF8 字符集 (可能的字符集转换)
正在将 SCOTT 的对象导入到 SCOTT
. . 正在导入表                             "A"导入了           4 
成功终止导入没有出现警告。
SQL> col status format a10
SQL> select * from scott.a;
STATUS    WEEKTIME
--------------------------------------------------
insert    b
insert    A
insert    c
insert    d
7、D时间点丢失表空间恢复
         假设在D时间点备份之后做了些操作后,表空间的数据文件tbs_del.dbf被误删除了,这个情况下的数据恢复步骤:
         1:模拟破坏表空间
删除tbs_incr.dbf数据文件,关闭数据库重新启动后,执行插入报错如下:
SQL> insert intoscott.a values('del files','e');
insert into scott.a values('del files','e')
                   *
 1 行出现错误:
ORA-00376: 此时无法读取文件 7
ORA-01110: 数据文件 7:'D:\ORACLE\PRODUCT\10.2.0\ORADATA\XMLGIS\TBS_INCR.DBF'

2:将被损坏的表空间(或涉及到数据文件损坏的表空间)offline:
SQL>connect / as sysdba
SQL> COL SEGMENT_NAME FORMAT A10
SQL> select SEGMENT_NAME,SEGMENT_TYPE from dba_segmentswhere tablespace_name='T
BS_INCR';
SEGMENT_NA SEGMENT_TYPE
----------------------------------------------
A         TABLE
B         TABLE
C         TABLE
D         TABLE
E         TABLE
SQL>alter tablespace tbs_incr offline immediate;
SQL>drop tablespace tbs_incr including contents;

3:恢复表空间和数据文件
SQL>create tablespace tbs_incr datafile'D:\oracle\product\10.2.0\oradata\xmlgis\tbs_incr.dbf' size 10M autoextend onnext 10M maxsize unlimited;
创建表空间参数,以及数据文件的路径和大小,可以参照以前的设置,创建表空间成功后,一一恢复属于该表空间的各用户对象。
         然后根据想要表对应的备份进行恢复即可,步骤同6.
8、全库恢复
         进行全库方法,建立好表空间,然后全库导入,这里测试用删除SCOTT用户的表A,来测试全库恢复情况(A+C+D)
恢复全库备份A
C:\Documents and Settings\A4586>imp scott/tiger  file=c:\exp_incr_a.dmp log=c:\imp_incr_a.loginctype=restore full=y ignore=y;

恢复累积备份C
C:\Documents and Settings\A4586>imp scott/tiger  file=c:\exp_incr_c.dmp log=c:\imp_incr_c.loginctype=restore full=y ignore=y;
正在将 SCOTT 的对象导入到 SCOTT
. . 正在导入表                             "A"导入了           3 
. . 正在导入表                             "B"导入了           1 
. . 正在导入表                             "C"导入了           1 
恢复增量备份D
C:\Documents and Settings\A4586>imp scott/tiger  file=c:\exp_incr_d.dmp log=c:\imp_incr_d.loginctype=restore full=y ignore=y;
正在将 SCOTT 的对象导入到 SCOTT
. . 正在导入表                             "A"导入了           4 
. . 正在导入表                             "D"导入了           1 

SQL> col status format a10
SQL> select * from scott.a;
STATUS    WEEKTIME
--------------------------------------------------
insert    b
insert    A
insert    c
insert    d

异常测试:删除A表和B表,直接用C备份进行恢复,看看回复情况如何
SQL> DROP TABLE SCOTT.A;
SQL> DROP TABLE SCOTT.B;
直接恢复累积备份C
C:\Documents and Settings\A4586>imp scott/tiger  file=c:\exp_incr_c.dmp log=c:\imp_incr_c.loginctype=restore full=y ignore=y;
正在将 SCOTT 的对象导入到 SCOTT
. . 正在导入表                             "A"导入了           3 
. . 正在导入表                             "B"导入了           1 
. . 正在导入表                             "C"导入了           1 
SQL> select * from scott.b;
select * from scott.b
                    *
 1 行出现错误:
ORA-00942: 表或视图不存在
这个时候发现,B表并未导入,类似RMAN里的不完全恢复。
七、Exp/Imp增量备份恢复总结
   Export/Import支持的增量和累计备份实际上是表级的,即上一次备份之后变化的表将全表卸载,而不是变化的记录。因此,在以OLTP应用为主的数据库中,由于保存主要业务数据的表处于频繁的录入和更新之中,增量和累计卸载并不能显著提高备份的效率。
    在做整个数据库Import时,缺省状态下以一个Table为一个Transaction,所以如果存在一些表的数据量很大建议使用commit=y并且要提供一个较大的buffer值,同时建立一个临时Rollback segment ,它的default storage参数initial  next要设置大一些,并要将这个Rollback Segment Online,同时offline 其他小的rollbacksegments。确保一个Table能完整import 。因为在做import数据库将自动创建索引,及完整性约束为了加快数据加载的速度及一次成功的概率,可以考虑在export之前首先disable所有的完整性约束import之后在enable所有的完整性约束。而对索引,可以考虑单独export索引。通过使用命令 "imp indexfile=……import数据之后来单独创建索引。
    如果希望在export数据库时,直接将产生的dmp文件写到外设上你可以使用 "exp file=设备名… Volsize=设备的容量"
由于export出来的文件可能较大,而某些操作系统(如Linux)对文件大小有限制,如不能大于2G。因此可将dmp文件设置为指定大小的若干文件。如:
exp sys/managerbuffer=4096000 file=(full1.dmp,full2.dmp,full3.dmp,full4.dmp) filesize=2GFull=y inctype=complete log=full.log

 

posted @ 2018-03-02 23:28  杨哥哥  阅读(2003)  评论(1编辑  收藏  举报