Oracle - exp实战
一、概述
exp/imp是oracle中的一个逻辑导出和导入工具,假想一个场景,当我们使用exp命令在对用户进行导出的时候,如果该用户中的某些表的数据有修改,或表结构进行了修改,或者表被删除,那么我们导出来的文件是一个什么状态呢?带着这种疑问,做做实验吧。
二、实验环境
oracle数据库版本选择11.2.0.4
在scott用户下面创建如下实验表

实验包括以下方案
第一批实验(普通导出)
1. 删除表中的部分行
2. truncate表
3. 删除表的字段
4. drop表
第二批实验(加了闪回导出)
5. 删除表中的部分行
6. truncate表
7. 删除表的字段
8. drop表
三、开始实验
第一批实验(普通导出)
1. 删除表中部分行
session 1:
exp system/123456 owner=scott file=scott.dmp log=exp.log
session 2:
delete from z9 where rownum < 9;
commit;
注:当session1开始执行导出的时候,立刻执行session2,即导出的动作发生之后,赶在z9表导出之前就对z9表做相关修改,后面的所有操作都是。

观察日志可以看到z9表的数据比z8表的数据少了8行,所以在exp命令发出之后,对表的行进行修改,如果该表还没有开始备份,那么导出为删除行之后的状态。
2. truncate表
session 1:
exp system/123456 owner=scott file=scott.dmp log=exp.log
session 2:
truncate table z9;

在exp命令发出之后,对表进行truncate,如果该表还没有开始备份,那么导出为truncate之后的状态。
3. 删除表的字段
session 1:
exp system/123456 owner=scott file=scott.dmp log=exp.log
session 2:
alter table z9 drop column object_name;

在exp命令发出之后,对表进行字段的修改,如果该表还没有开始备份,那么导出为字段修改之后的状态。
4. drop表
session 1:
exp system/123456 owner=scott file=scott.dmp log=exp.log
session 2:
drop table z9;

表被drop之后,这张表就不会进行备份了
第二批实验(加了闪回导出)
重新创建z9表
create table z9 as select * from t1;
5. 删除表中的部分行
session 1:
date "+%Y%m%d %H:%M:%S"
20191012 15:06:27
exp system/123456 owner=scott file=scott.dmp log=exp.log flashback_time=\"to_timestamp\(\'20191012 15:06:27\'\,\'yyyy-mm-dd hh24:mi:ss\'\)\"
session 2:
delete from z9 where rownum < 9;
commit;

可以看到导出的数据z8和z9的总行数一致,也就是说导出的数据是在exp命令发出后的一致性快照,对表中数据的修改不会反映到备注中。
6. truncate表
session 1:
date "+%Y%m%d %H:%M:%S"
20191012 15:10:47
exp system/123456 owner=scott file=scott.dmp log=exp.log flashback_time=\"to_timestamp\(\'20191012 15:10:47\'\,\'yyyy-mm-dd hh24:mi:ss\'\)\"
session 2:
truncate table z9;

导出z9失败
7. 删除表的字段
session 1:
date "+%Y%m%d %H:%M:%S"
20191012 15:13:52
exp system/123456 owner=scott file=scott.dmp log=exp.log flashback_time=\"to_timestamp\(\'20191012 15:13:52\'\,\'yyyy-mm-dd hh24:mi:ss\'\)\"
session 2:
alter table z9 drop column object_name;

导出z9失败
8. drop表
session 1:
date "+%Y%m%d %H:%M:%S"
20191012 15:16:05
exp system/123456 owner=scott file=scott.dmp log=exp.log flashback_time=\"to_timestamp\(\'20191012 15:16:05\'\,\'yyyy-mm-dd hh24:mi:ss\'\)\"
session 2:
drop table z9;

导出z9失败
四、结论

通过以上实验可以看出,exp在导出的时候会先查下该用户下面有哪些表,然后对这些表依次导出,在这期间对表的dml和ddl都会反映到备份中去。
闪回导出时,如果有表的修改,数据库会试图闪回到闪回的时间节点上去,但是如果对表做了ddl操作,比如truncate,alter都会闪回失败,会造成该表的导出失败。
Oracle - exp实战的更多相关文章
- oracle EXP导出一张表时使用query参数指定where条件
oracle exp 导出一个表的部分内容,使用query参数可加上SQL的where条件进行过滤 注意:如果需要使用到日期字符串格式等单引号,需要使用双引号将where条件括起来,而且双引号要用\做 ...
- oracle exp imp
oracle exp/imp
- oracle exp 无法导出空表
oracle exp 无法导出空表 select 'alter table '|| a.table_name ||' allocate extent;' from user_tables a wh ...
- oracle exp不生成dumpfile,预估出实际导出文件的大小。
目的:在不创建dumpfile前预估出需要的导出文件大小. 适用于export 实验步骤如下:OS: Linux test20 2.6.18-238.el5 #1 SMP Sun Dec ...
- 解决 Oracle exp导出表数据时空表不能导出的问题
一.不能导出空表的原因 1.Oracle11g默认对空表不分配segment,故使用exp导出Oracle11g数据库时,空表不会导出. 2.设置deferred_segment_creation 参 ...
- ORACLE EXP/IMP的使用详解
导入/导出是ORACLE幸存的最古老的两个命令行工具,其实我从来不认为Exp/Imp 是一种好的备份方式,正确的说法是Exp/Imp只能是一个好的转储工具,特别是在小型数据库的转储,表空间的迁移,表的 ...
- ORACLE EXP命令
本文对Oracle数据的导入导出 imp ,exp 两个命令进行了介绍, 并对其对应的參数进行了说明,然后通过一些演示样例进行演练,加深理解.文章最后对运用这两个命令可能出现的问题(如权限不够,不同o ...
- oracle exp、imp实现导出导入
一.说明 oracle 的exp/imp命令用于实现对数据库的导出/导入操作; exp命令用于把数据从远程数据库服务器导出至本地,生成dmp文件; imp命令用于把本地的数据库dmp文件从本地导 ...
- Oracle exp/imp数据导入导出工具基本用法
一.获取帮助 exp/imp help=y 二.数据导出 1.将数据库完全导出,设置full选项exp system/manager@orcl file=d:\db.dmp full=y 2.导出数据 ...
随机推荐
- Chrome插件安装的3种方法,解决拖放不能安装的情况,并提供插件下载
本文摘录于Chrome插件网站 方法一:拖放安装 下载插件的crx文件后,打开Chrome的扩展页面(chrome://extensions/或按Chrome菜单图标>更多工具>扩展程序) ...
- php 7.4 的 Unpacking inside arrays (...)
总的说明 php 7.4 增加了一个很有意思的功能 这是官方说明: Unpacking inside arrays <?php$parts = ['apple', 'pear'];$fruits ...
- JavaScript新手经常遇到的问题(二)
1.Form表单只提交数据而不进行页面跳转的方法 <script type="text/javascript" src="js/jquery/jquery-1.8. ...
- OC循环方法推荐-块循环遍历(比for循环好用)
最近在看一本书<Effective OC 2.0>,今天看到有个tip是OC适中循环各自优劣性,作者最终推荐此块循环. 阅读时思考了下块循环是否方便实现内部循环终止外部循环的问题. 于是做 ...
- 使用react-breadcrumbs-dynamic
这是完全独立于路由器的解决方案,你可以将其与任何版本的React Router(2或3或4)或任何其他用于React的路由库一起使用,或者完全不进行路由.您只需要指定面包屑项目及其道具的组件.然而道具 ...
- 关于非阻塞I/O、多路复用、epoll的杂谈
本文主要是想解答一下这样几个问题: - 什么是非阻塞I/O - 非阻塞I/O和异步I/O的区别 - epoll的工作原理 文件描述符 文件描述符在本文有多次出现,难免有的朋友不太熟悉,有必要简单说明一 ...
- VLAN应用实例
VLAN 此次内容主要介绍VLAN的Access接口.Trunk接口.Hybird接口的配置实例,以及实际应用. 一.介绍三种接口 1.Access接口 (1)Access接口是交换机上用来连接用户主 ...
- 1.flask基础
1.flask和django的区别? flask,是一个轻量级的框架,内置了:路由/视图/模板(jinja2)/cookie/session/中间件. 可扩展强,第三方组件非常多,例如:wtforms ...
- python 金融应用(三)数据可视化
matplotlib 库( http://www.matp1otlìb.org )的基本可视化功能. 主要是2-D绘图.金融绘图和3-D绘图 一.2-D绘图 1.1一维数据集 #导入所需要的包impo ...
- 基于iCamera测试高清摄像头SIV100B(替代ov7670)小结
基于iCamera测试高清摄像头SIV100B(替代ov7670)小结 先看看siv100b主要关键参数 SIV100B与OV7670分辨率和基本特性都差不多,而siv100b,像素尺寸更小,灵敏度更 ...