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.导出数据 ...
随机推荐
- Spring Boot和Feign中使用Java 8时间日期API(LocalDate等)的序列化问题【转】
Spring Boot和Feign中使用Java 8时间日期API(LocalDate等)的序列化问题 http://blog.didispace.com/Spring-Boot-And-Feign- ...
- 新一代数据安全的制胜法宝-UBA
[摘要]在入侵防御领域,运用数据分析的方法保护数据的技术其实没有什么新的东西,比如防火墙-分析数据包的内容以及其他的元数据,如IP地址,从增长的数据条目中检测和阻断攻击者:防病毒软件不断的扫描文件系统 ...
- Redis 中的数据库
前面我们花了很多的时间介绍了 redis 中基本的数据结构,及其内部的实现情况,这些都是非常基础的东西,可能不经意间你就会用到他们,希望你花点时间了解一下. 接下来,我们将走近 redis 数据库,学 ...
- h5-面试题
干货!各种常见布局实现+知名网站实例分析 前端面试考点多?看这些文章就够了(2019年6月更新版) 前端面试:这50个经典前端面试题面试者必看! Vue面试中,经常会被问到的面试题/Vue知识点整理 ...
- MVC 入门 自动生成 增删改查所有功能
MVC现在版本已经是5了 EF现在最新的应该是6.0.2了 开发工具是 Visual Studio2013 数据库是 SQL Server 2012 这些需要.NET Framework4.5 的 ...
- SpringBean生命周期及作用域
bean作用域 在Bean容器启动会读取bean的xml配置文件,然后将xml中每个bean元素分别转换成BeanDefinition对象.在BeanDefinition对象中有scope 属性,就是 ...
- hdu3999 The order of a Tree
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3999 题意:给一序列,按该序列插入二叉树,给出字典序最小的插入方法建相同的一棵树出来.即求二叉树的先序 ...
- Koa - 使用koa-multer上传文件(上传限制、错误处理)
前言 上传文件在开发中是很常见的操作,今天我选择使用koa-multer中间件来实现这一功能,除了上传文件外,我还会对文件上传进行限制,以及发生上传错误时的处理. 由于原来的 koa-multer 已 ...
- 源码分析 RocketMQ DLedger(多副本) 之日志复制(传播)
目录 1.DLedgerEntryPusher 1.1 核心类图 1.2 构造方法 1.3 startup 2.EntryDispatcher 详解 2.1 核心类图 2.2 Push 请求类型 2. ...
- 联合查询和数据库设计e-r图
联合查询: 联合查询的关键字是: union 基本含义 联合查询就是将两个select语句的查询结果“层叠”到一起成为一个“大结果”. 两个查询结果的能够进行“联合”的先觉条件是:结果字段数相等. 就 ...