oracle空表导出的问题
之前再做项目的时候下载了一个开源的程序,数据库在移植的时候通过exp/imp导入导出,结果程序在启动时报错,对比过后发现两个数据库表相差了十几个,再排查问题,发现少掉的十几个表全部是空表,查了一下oracle11g的特性,发现当数据条数是0时不分配segment,所以就不能被导出!我勒个擦!坑爹有木有!
但是总不能每个表插入一条数据再导出吧,作为一个程序猿总不能上手工课吧,于是继续查,找到了一个解决办法,特此记录,以儆效尤!
第一种解决办法:
在创建数据库之前,先将数据库segment属性进行修改,SQL语句如下:
alter system set deferred_segment_creation=false;
含义如下:deferred_segment_creation,含义是段延迟创建,默认是true。如果这个参数设置为true,你新建了一个表T1,并且没有向其中插入数据,那么这个表不会立即分配extent,也就是不占数据空间,只有当你insert数据后才分配空间。这样可以节省少量的空间。设置deferred_segment_creation 参数为FALSE后,无论是空表还是非空表,都分配segment。需要注意的是,该值设置后只对后面新增的表产生作用,对之前建立的空表不起作用,在修改后需要重新启动数据库参数才能生效
第二种解决办法:
先查一下哪些表是空的,然后使用ALLOCATE EXTENT为数据库对象分配Extent,SQL如下:
查询空表:select table_name from user_tables where NUM_ROWS=0;
生成修改语句:select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0 ;
执行生成修改语句的SQL后会生成一堆的ALTER的SQL语句,将生成的语句执行后,再进行exp数据导出,就可以导出所有数据了!
最新文章
- 一位资深程序员大牛给予Java初学者的学习路线建议
- Manacher's Algorithm 马拉车算法
- 【web前端面试题整理03】来看一点CSS相关的吧
- UVALive 5903 Piece it together(二分图匹配)
- Python 集合方法总结
- Python开源框架Scrapy安装及使用
- Titanium vs PhoneGap
- 【C#】 装箱 (boxing) 和拆箱 (unboxing)
- 游戏BI,起步了。
- svn文件提交时强制写注释
- onmouseover和onmouseout的烦恼
- 使用python爬虫抓站的一些技巧总结:进阶篇
- 由Spring框架中的单例模式想到的
- JAVA程序员成长历程(二)
- TCP与UDP区别总结
- centos docker 安装
- Spark学习之JavaRdd
- nginx “403 Forbidden” 错误的原因及解决办法
- js数组push方法使用注意
- Nginx 解析PHP
热门文章
- SQL取行最大值
- 搭建Tomcat6源代码阅读环境
- 【Python】实现5!+4!+3!+2!+1!
- C++ using namespace std(转载)
- Android Priority Job Queue (Job Manager):多重不同Job并发执行并在前台获得返回结果(四)
- error CS0103: 当前上下文中不存在名称“ViewBag”
- iOS-Git 所有资料
- Qt线程(2) QThread中使用WorkObject
- Linux为什么卡住了?
- @SuppressWarnings有什么用处?