一、问题原因:
11G中有个新特性,当表无数据时,不分配segment,以节省空间
1、insert一行,再rollback就产生segment了。 该方法是在在空表中插入数据,再删除,则产生segment。导出时则可导出空表。 2、设置deferred_segment_creation 参数 show parameter deferred_segment_creation NAME TYPE VALUE ------------------------------------ ----------- ---------- deferred_segment_creation boolean TRUE SQL> alter system set deferred_segment_creation=false; 系统已更改。 SQL> show parameter deferred_segment_creation NAME TYPE VALUE ------------------------------------ ----------- ---------- deferred_segment_creation boolean FALSE 该参数值默认是TRUE,当改为FALSE时,无论是空表还是非空表,都分配segment。 需注意的是:该值设置后对以前导入的空表不产生作用,仍不能导出,只能对后面新增的表产生作用。如需导出之前的空表,只能用第一种方法。 二、解决方法: 1、先查询一下当前用户下的所有空表 select table_name from user_tables where NUM_ROWS=0; 2、用以下这句查找空表 select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0 把查询结果导出,执行导出的语句 'ALTERTABLE'||TABLE_NAME||'ALLOCATEEXTENT;' ----------------------------------------------------------- alter table AQ$_AQ$_MEM_MC_H allocate extent; alter table AQ$_AQ$_MEM_MC_G allocate extent; alter table AQ$_AQ$_MEM_MC_I allocate extent; alter table AQ$_AQ_PROP_TABLE_T allocate extent; alter table AQ$_AQ_PROP_TABLE_H allocate extent; alter table AQ$_AQ_PROP_TABLE_G allocate extent; alter table AQ$_AQ_PROP_TABLE_I allocate extent; alter table AQ$_KUPC$DATAPUMP_QUETAB_T allocate extent; alter table AQ$_KUPC$DATAPUMP_QUETAB_H allocate extent; alter table AQ$_KUPC$DATAPUMP_QUETAB_G allocate extent; alter table AQ$_KUPC$DATAPUMP_QUETAB_I allocate extent; 3、然后再执行 exp 用户名/密码@数据库名 file=/home/oracle/exp.dmp log=/home/oracle/exp_smsrun.log 成功! ORACLE 11G在用EXPORT导出时,空表不能导出。 11G中有个新特性,当表无数据时,不分配segment,以节省空间   解决方法:
  1、insert一行,再rollback就产生segment了。
  该方法是在在空表中插入数据,再删除,则产生segment。导出时则可导出空表。   2、设置deferred_segment_creation 参数
  该参数值默认是TRUE,当改为FALSE时,无论是空表还是非空表,都分配segment。   需注意的是:该值设置后对以前已经存在的空表不产生作用,仍不能导出,只能对后面新增的表产生作用。如需导出之前的空表,只能用第一种方法】 觉得不是解决方法,然后就用了expdp和impdp
create directory expdp_dir as '/data/app1/dp';
grant read,write on directory expdp_dir to DRGN_OWNER; expdp DRGN_OWNER/DRGN_OWNER DIRECTORY=expdp_dir DUMPFILE=DRGN_OWNER.dmp SCHEMAS=DRGN_OWNER logfile=DRGN_OWNERexpdp.log create directory impdp_dir as '/data/app1/dp';
grant read,write on directory impdp_dir to DRGN_OWNER; impdp DRGN_OWNER/DRGN_OWNER DIRECTORY=impdp_dir DUMPFILE=DRGN_OWNER.dmp logfile=DRGN_OWNER.dmpimpdp.log 空表果然已经导入了 对于DBA新建数据库,我个人建议,建立了空的数据库后,马上执行
alter system set deferred_segment_creation=flase sscope=spfile;
shutdowm immediate
startup 【总结】
1、自己没有好好学习11g的新特性,导致了这个问题花费了2个小时的
2、建议客户使用稳定的10.2.0.4,客户拒绝,现在11g已经是主流了,并不是每一个客户都很保守使用稳定版本,而非最新版本
3、某美 和 某ELL 的项目以后少接触,4年前IBM P570双机Oracle10g的实施问题就折腾的无语。
4、再次论证了很多甲方和厂商基本都是:事前猪一样,事后诸葛亮。和目前国内流行的砖家叫兽有异曲同工之妙。
5、做技术果然是一条不归之路 在Oracle 11g中,exp默认不能导出空表。用传统的exp,imp进行异构平台数据库迁移会比较麻烦。不过可以使用expdp、impdp进行迁移。 把64位windows 2003的Oracle11gR2数据库迁移到64位Linux RedHat Enterprise 5中,可以使用expdp、impdp进行迁移数据。 如:Windows为A服务器,Linux为B服务器,数据库用户为test,把A服务器的数据迁移到B服务器中 在A服务器操作: 1、 SQL> create directory expdp_dir as 'D:\mzl\backup '; SQL> grant read,write on directory expdp_dir to test; 2、在windows目录创建目录D:\mzl\backup 3、在DOS命令窗口导出: expdp test/test DIRECTORY=expdp_dir DUMPFILE=test.dmp logfile=testexpdp.log 在B服务器中操作: 4、SQL> create directory impdp_dir as '/home/oracle/impdp_dir'; SQL> grant read,write on directory impdp_dir to test; 1、 在系统中需要有/home/oracle/impdp_dir目录,在impdp_dir目录下必须有读写权限 (chmod 777 impdp_dir) 5、用ftp把A服务器导出的数据上传到B服务器的/home/oracle/impdp_dir目录中 在A服务器中配置好B服务器的服务器名,在A服务器导入数据 6、在DOS命令窗口导出: impdp test/test@B_database DIRECTORY=impdp_dir DUMPFILE=test.dmp logfile=testimpdp.log (这里注意大小写,如果test.dmp在linux中为大写,必须更改为大写。Linux区分大小写) 本篇文章来源于 Linux公社网站(www.linuxidc.com) 原文链接:http://www.linuxidc.com/Linux/2011-08/41146.htm 在oracle 11g r2中,发现传统的exp居然不能导出空的表,然后查询一下,
发现需要如下的步骤去搞,笔记之。 oracle 11g 新增了一个参数:deferred_segment_creation,含义是段延迟创建,默认是true。具体是什么意思呢? 如果这个参数设置为true,你新建了一个表T1,并且没有向其中插入数据,那么这个表不会立即分配extent,也就是不占数据空间,只有当你insert数据后才分配空间。这样可以节省少量的空间。 解决办法 1 设置deferred_segment_creation 参数为FALSE后,无论是空表还是非空表,都分配segment。 在sqlplus中,执行如下命令: SQL>alter system set deferred_segment_creation=false; 查看:
SQL>show parameter deferred_segment_creation; 该值设置后只对后面新增的表产生作用,对之前建立的空表不起作用。 注意并且要重新启动数据库,让参数生效 2 使用ALLOCATE EXTENT的说明 使用ALLOCATE EXTENT可以为数据库对象分配Extent。其语法如下: -----------
ALLOCATE EXTENT { SIZE integer [K | M] | DATAFILE 'filename' | INSTANCE integer }
----------- 可以针对数据表、索引、物化视图等手工分配Extent。 ALLOCATE EXTENT使用样例: ALLOCATE EXTENT
ALLOCATE EXTENT(SIZE integer [K | M])
ALLOCATE EXTENT(DATAFILE 'filename')
ALLOCATE EXTENT(INSTANCE integer)
ALLOCATE EXTENT(SIZE integer [K | M] DATAFILE 'filename')
ALLOCATE EXTENT(SIZE integer [K | M] INSTANCE integer) 针对数据表操作的完整语法如下: -----------
ALTER TABLE [schema.]table_name ALLOCATE EXTENT [({ SIZE integer [K | M] | DATAFILE 'filename' | INSTANCE integer})]
----------- 故,需要构建如下样子简单的SQL命令: -----------
alter table aTabelName allocate extent
----------- 3.2 构建对空表分配空间的SQL命令, 查询当前用户下的所有空表(一个用户最好对应一个默认表空间)。命令如下: -----------
SQL>select table_name from user_tables where NUM_ROWS=0;
----------- 根据上述查询,可以构建针对空表分配空间的命令语句,如下: -----------
SQL>Select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0
----------- 批量输出上述生成的SQL语句,建立C:\createsql.sql,其内容如下: -----------
set heading off;
set echo off;
set feedback off;
set termout on;
spool C:\allocate.sql;
Select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0;
spool off;
----------- 执行C:\createsql.sql,命令如下:
-----------
SQL>@ C:\createsql.sql;
----------- 执行完毕后,得到C:\allocate.sql文件。 打开该文件会看到,已经得到对所有空表分配空间的命令SQL语句。 3.4 执行SQL命令,对空表分配空间: 执行C:\allocate.sql,命令如下:
-----------
SQL>@ C:\allocate.sql;
----------- 执行完毕,表已更改。 3.4 此时执行exp命令,即可把包括空表在内的所有表,正常导出。

本文转自以下地址:

http://vondon.iteye.com/blog/1316223

【转】解决Oracle 11g在用EXP导出时,空表不能导出的更多相关文章

  1. 解决Oracle 11g在用EXP导出时,空表不能导出

    实践结论可行,看"2.解决办法" 一.问题原因:     11G中有个新特性,当表无数据时,不分配segment,以节省空间     1.insert一行,再rollback就产生 ...

  2. Oracle 11g 导库导不出空表问题

    Oracle11g 会遇到这样的问题,用exp整库导出的时候,会遇到这样的问题,库里的空表没办法导出 select * from all_all_tables aa where aa.owner='U ...

  3. Oracle 11G在用EXP 导出时,空表不能导出解决

    Oracle 11G在用EXP 导出时,空表不能导出解决 (转)(.http://wanwentao.blog.51cto.com/2406488/545154 11G中有个新特性,当表无数据时,不分 ...

  4. 解决 Oracle 11g 不能导出空表的问题

    --解决 Oracle 11g 不能导出空表的问题 --执行下面语句,查询数据库中的空表,同时产生分配空间.把生成的结果复制出来并执行. select 'alter table '||table_na ...

  5. 解决oracle 11g 导出空表的方法

    ORACLE 11G中有个新特性,当表无数据时,不分配segment,以节省空间. 解决方法: 1)insert一行,再rollback就产生segment了 该方法是在在空表中插入数据,再删除,则产 ...

  6. Oracle 11g 在备份导出时缺少表的问题

    ORACLE 11G中有个新特性,当表无数据时,不分配segment,以节省空间. 解决方法: 1)insert一行,再rollback就产生segment了 该方法是在在空表中插入数据,再删除,则产 ...

  7. oracle 11g 空表也导出

    查询空表 并导出修改空表语句 select 'alter table '||table_name||' allocate extent;' from user_tables where num_row ...

  8. Oracle11g新特性导致空表不能导出问题

        ORACLE 11G在用EXP导出时,发现空表(没有数据或者没有用过的表)不能导出了.     查了一下资料,说是Oracle 11G中有个新特性,当表无数据时,不分配segment,以节省空 ...

  9. Oracle 11G在用EXP 导入、导出时,若有空表对导入导出中遇到的问题的解决

    11G中有个新特性,当表无数据时,不分配segment,以节省空间 解决方法: 1.insert一行,再rollback就产生segment了. 该方法是在在空表中插入数据,再删除,则产生segmen ...

随机推荐

  1. redis 在 windows 中的安装

    redis 在 windows 中的安装 redis 官方并没有提供 redis 的 windows 版本.但是微软提供了 redis 的 windows 版本.有2.8和3.0版本.3.0版本支持集 ...

  2. Java基础的容错

    新手会有一些常犯的过失,一般一个新手在学习Java开发的时分,往往会挑选买书去学习,首要这样的学习功率是非常差的,比如在学习html,css的时分,是彻底不必看书的.书里大多数东西你都不了解.这是新手 ...

  3. Redis和MySQL数据同步及Redis使用场景

    1.同步MySQL数据到Redis (1) 在redis数据库设置缓存时间,当该条数据缓存时间过期之后自动释放,去数据库进行重新查询,但这样的话,我们放在缓存中的数据对数据的一致性要求不是很高才能放入 ...

  4. 2.第一个Vue程序

    1.IDEA中安装Vue.js插件 2.建立项目以及html文件 1.创建一个 HTML 文件 2.引入 Vue.js <script src="https://cdn.jsdeliv ...

  5. $O(k^2)$ 求前缀 $k$ 次幂和(与长度无关)

    接下来求解前缀幂次和 求解 \(\sum_{i = 1}^{k} i^k\) \[ \begin{aligned} (p+1)^k - 1 = (p+1)^k - p^k + p^k - (p-1)^ ...

  6. [LeetCode] 252. Meeting Rooms 会议室

    Given an array of meeting time intervals consisting of start and end times [[s1,e1],[s2,e2],...] (si ...

  7. [LeetCode] 34. Find First and Last Position of Element in Sorted Array 在有序数组中查找元素的第一个和最后一个位置

    Given an array of integers nums sorted in ascending order, find the starting and ending position of ...

  8. Computer-Hunters——冲刺总结

    Computer-Hunters--冲刺总结 一.作业相关 作业相关 具体描述 所属班级 2019秋福大软件工程实践Z班 作业要求 团队作业第五次-项目冲刺 作业正文 hunter--冲刺总结 团队名 ...

  9. win10 连接samba 账号密码不正确,win7可以访问

    1.本地安全策略,本地策略-安全选项,需要修改成默认的值的修改方式: 查找注册表浏览到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA ...

  10. c++ 使用 vcpkg

    1. 打开下载地址:https://github.com/Microsoft/vcpkg 2. 直接下载到本地某个盘 3. 配置环境变量: 4. 打开下载到本地的vcpkg有可能叫vcpkg-mast ...