oracle空表导出的问题】的更多相关文章

之前再做项目的时候下载了一个开源的程序,数据库在移植的时候通过exp/imp导入导出,结果程序在启动时报错,对比过后发现两个数据库表相差了十几个,再排查问题,发现少掉的十几个表全部是空表,查了一下oracle11g的特性,发现当数据条数是0时不分配segment,所以就不能被导出!我勒个擦!坑爹有木有! 但是总不能每个表插入一条数据再导出吧,作为一个程序猿总不能上手工课吧,于是继续查,找到了一个解决办法,特此记录,以儆效尤! 第一种解决办法: 在创建数据库之前,先将数据库segment属性进行修…
执行: Select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0 执行该命令后产生的所有语句…
步骤一.查找出来的语句全部复制并执行 select 'analyze table '||table_name||' compute statistics;' from user_tables; 步骤二.查找出来的语句全部复制并执行 select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0…
exp不导出空表,是11g的新特性,当表无数据时,不分配segment,以节省空间,所以exp导出的时候,不导出这些表. 先登录要导出的用户执行以下语句 先执行 select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0; 后执行 SET FEEDBACK OFF set heading off set pagesize 1000 spool d:\allocateemptyta…
背景 oracle9用了一段时间,10用了一段时间,11现在算是主流了.11g也是坑人,空表竟然不导出,解决方法到时很多.这里只是记录下,知道有这个事情. 9的特点是还要用客户端管理工具链接服务器 10的最大改变就是oem变为bs架构了.真是牛 11扯淡地方就多了,安装包还不一样 12有个很大的不同是控制台服务好像给省了 解决方法 Select 'alter table '||table_name||' allocate extent;' from user_tables where num_r…
今天凌晨在客户现场进行一个Oracle11g的数据库迁移,习惯性的用了exp/imp,然后在新的数据库发现,空表根本没有exp出来,然后查资料,发现了如下信息:[ORACLE 11G在用EXPORT导出时,空表不能导出. 11G中有个新特性,当表无数据时,不分配segment,以节省空间 解决方法: 1.insert一行,再rollback就产生segment了. 该方法是在在空表中插入数据,再删除,则产生segment.导出时则可导出空表. 2.设置deferred_segment_creat…
在oracle 11g r2中,使用exp有时候会导不出空的表,原因是这些表没有分配空间,手工分配空间即可导出. ----查询当前用户下的所有空表: select table_name from user_tables where NUM_ROWS=0; ----查询DB_YWYH用户所有未分配Extent的表: SELECT * FROM DBA_TABLES WHERE OWNER='DB_YWYH' AND TABLE_NAME NOT IN ( SELECT T.SEGMENT_NAME…
  1.查询相关参数deferred_segment_creation select * from v$parameter where name='deferred_segment_creation' 如果该参数的value为true,则系统在空表创建时不会该分配其segment如果该参数的value为false,则系统在空表创建时会该分配其segment 2.修改相关参数deferred_segment_creation alter system set deferred_segment_cr…
有些时候,需要导入某个用户的一些相关表.但是不知道用户的用户名和密码.这样就很尴尬 但是如果手上有dba权限的用户的话,就很方便的能导出了 先要知道多表导出的语句 exp system/123456 file=test.dmp tables=table1,table2,table3 log=test.log 或者 exp system/123456 file=test.dmp tables="(table1,table2,table3)" log=test.log 这句如果不加上双引号…
1.执行该语句   select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0;    2.展开所有数据,,点击列,选中所有数据,CTRL+C  复制   3.打开新窗口,粘贴,执行.   4.再导出即可  …