本帖最后由 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 SettingsA4586>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 SettingsA4586>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 SettingsA4586>set nls_lang=simplifiedchinese_china.zhs16gbk
C:Documents and SettingsA4586>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 SettingsA4586>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 SettingsA4586>exp system/oraclefile=c:exp_full.dmp log=c:exp_full.log full=y;
即将导出整个数据库...
. 正在导出表空间定义
. 正在导出概要文件
. 正在导出用户定义
. 正在导出角色
. 正在导出资源成本
. 正在导出回退段定义
. 正在导出数据库链接
. 正在导出序号
…….
四、imp逻辑恢复
数据导入(Import)的过程是数据导出(Export)的逆过程,分别将数据文件导入数据库。数据库的逻辑恢复分为表恢复、用户恢复、完全恢复三种模式。
1、imp表模式恢复
A. 恢复表备份数据的全部内容
若从本地文件恢复scott导出的表,使用如下命令:
C:Documentsand SettingsA4586>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 andSettingsA4586>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 SettingsA4586>imp scott/tigerfromuser=scott touser=scott file=c:exp_scott.dmp log=c:imp_scott.log;
. 正在将 SCOTT 的对象导入到 SCOTTS
B. 恢复备份数据中的指定表
若从本地文件恢复该用户的部分表,注意,这里一定要使用ingore=y,使用如下命令:
C:Documentsand SettingsA4586>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 SettingsA4586>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 SettingsA4586>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 SettingsA4586>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增量备份类型
增量导出包括三种类型:
(1)“完全”增量导出(Complete)
备份整个数据库,脚本内容如下:
C:Documents andSettingsA4586>expsystem/oracle inctype=complete file=c:exp_incr_full.dmplog=c:exp_incr_full.log
(2)“增量型”增量导出(Incremental)
备份上一次备份后改变的数据,脚本内容如下:
C:Documents andSettingsA4586>expsystem/oracle inctype=incremental file=c:exp_incr_incr.dmplog=c:exp_incr_incr.log
(3)“累积型”增量导出(Cumulative)
备份自上次“完全”导出之后数据库中变化了的数据。脚本内容如下:
C:Documents andSettingsA4586>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 SettingsA4586>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:oracleproduct10.2.0oradataxmlgis bs_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 SettingsA4586>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 SettingsA4586>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 SettingsA4586>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 SettingsA4586>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某个时间的备份如何操作呢?(变相的需求是当前数据不是我想要的,我想恢复到之前某天的数据,先删除,在恢复!)
由于表是一个单独备份的对象单元,因此恢复的时候只要找到备份文件,就可以恢复到想要恢复的时刻。
举例:恢复表A到C点时间的数据,恢复步骤如下:
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 SettingsA4586>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 SettingsA4586>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:ORACLEPRODUCT10.2.0ORADATAXMLGISTBS_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:oracleproduct10.2.0oradataxmlgis bs_incr.dbf' size 10M autoextend onnext 10M maxsize unlimited;
创建表空间参数,以及数据文件的路径和大小,可以参照以前的设置,创建表空间成功后,一一恢复属于该表空间的各用户对象。
然后根据想要表对应的备份进行恢复即可,步骤同6.
8、全库恢复
进行全库方法,建立好表空间,然后全库导入,这里测试用删除SCOTT用户的表A,来测试全库恢复情况(A+C+D):
恢复全库备份A:
C:Documents and SettingsA4586>imp scott/tiger file=c:exp_incr_a.dmp log=c:imp_incr_a.loginctype=restore full=y ignore=y;
恢复累积备份C:
C:Documents and SettingsA4586>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 SettingsA4586>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 SettingsA4586>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
|