关闭

Oracle导出空表的新方法(彻底解决)

发表于:2016-8-03 10:42

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:伊利丹·怒风    来源:51Testing软件测试网采编

  背景
  使用Exp命令在oracle 11g 以后不导出空表(rowcount=0),是最近在工作中遇到一个很坑的问题,甚至已经被坑了不止一次,所以这次痛定思痛,准备把这个问题彻底解决。之所以叫新方法,那一定有老方法了,这个方法是一位博友很早就提出了,以下是原文,其实也说明了问题的原因
  Oracle11g使用exp导出空表(作者:程序员的那些)
  问题根本原因:“Oracle11g默认对空表不分配segment,故使用exp导出Oracle11g数据库时,空表不会导出”
  问题次要原因: 在开发维护期往往需要频繁的做数据库的导入导出操作,使用老方法确实可以解决问题,但是某一次忘记就彻底悲剧
  问题扩展:本人发现有时候一些Type,管道类型也无法导出,造成过程,函数编译不通过
  解决方案
  解决方案其实很简单,就是用expdp,impdp命令代替exp,imp命令彻底解决这个问题,实验如下:
  1、建立空表
-- Create table
create table TestEmpty
(
id   number,
name number
)
tablespace XXXTEMP
storage
(
initial 1M
next 1M
minextents 1
pctincrease 0
);
  2、exp导出语句
  exp system/a@orcl225 File=x.dmp owner=someuser
  3、被坑截图
  
  4、解决方法,使用expdp进行导出
  expdp scott/tiger@orcl schemas=scott dumpfile=expdp.dmp DIRECTORY=dpdata1;
  (关于expdp,impdp的用法请自行baidu或者参考文章下部提供的外链)
  happy 过程如下图
 
  至此问题已经彻底解决
  意外收获
  1、提升导出导入速度,在使用expdp和impdp进行Oracle数据库的导入导出,还会给你带来一些意外收获,如导出速度有明显的提升,而且输出的日志也更加准确美观,其实用普通的exp做50w行记录导出表是简直就是个弱暴了工具(从速度上和Sql server差了不知道几条街)
  2、可以进行表空间导出(exp其实也可以)
  复出的代价
  看起来很美好,但是expdp,impdp其实也是有限制的,就是必须在服务器上进行IO操作(具体就是DIRECTORY这参数有关,这里不在详细解释了,自己看教程去)
  有价值的链接
  expdp与impdp参数用法
  EXP和expdp对比  (速度)
  【传输表空间】使用 EXPDP/IMPDP工具的传输表空间完成数据迁移
  exp/imp与expdp/impdp区别 (语法)
  写在最后
  写的不好,不喜欢的可以打赏继续鼓励,喜欢的可以点推荐给予支持且随便打赏,开个玩笑,分享出来只是希望我的一点经验是有用的,避免诸位入坑。
  Oracle 导出空表的新方法(彻底解决)
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号