Oracle导出的一些错误

在进行Oracle的导出的时候 不知道小伙伴有没有注意到有一些表是一行数据都没有的表(就是那种创建表之后,一条数据都没有插入过的表) 这种表在导出的时候是导不出来的 (插入数据之后再删除的那种除外)

那么原因是什么呢
如果新建了一个表,并且没有向其中插入数据,那么这个表不会立即分配extent,也就是不占数据空间,即表不分配 segment 以节省空间,所以在执行数据导出时这个空数据表也没能导出来。那么当该表被插入新数据记录后,由于分配了segment,自然也就可以正常导出。
今天在进行 以前项目的数据库迁移 在转移的时候发现有很多表都没有被导出 原因就是因为有很多数据库都没有数据 解决办法就是

		select 'alter table '||table_name||' allocate extent(size 64k);' sql_text,table_name,tablespace_name	
		from user_tables
	where table_name not in
		(select segment_name from user_segments where segment_type = 'TABLE');

在这里插入图片描述
当查询出来这些之后 我们就可以知道有那些表示是空表 这些表就是导不出来的那种 我们还需要执行下面的一步就可以导出这些表了
在这里插入图片描述
注意红色框内的这部分 这部分是可执行的sql语句请复制都sql执行器里面 执行一遍 这样就为每个空表都分配中空间 在导出就可以了

在这里插入图片描述
为了使将来可能建的新表避免此问题,还是得改下系统参数“deferred_segment_creation”的,注意该参数须在system用户下修改,且该参数修改后仅对新表生效,已建数据表不会受影响。

	修改语句: alter system set deferred_segment_creation=false。

另外有一点要注意的是查询的时候 要注意是登陆用户

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值