风度翩翩、问题由来:
    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   

在oracle 11g
r2中,发掘守旧的exp居然不可能导出空的表,然后查询一下, 

1、Oracle11g暗中同意对空表不分配segment,故使用exp导出Oracle11g数据库时,空表不会导出。


发觉须求如下的步调去搞,笔记之。 

2、设置deferred_segment_creation
参数为FALSE后,无论是空表依然非空表,都分配segment。

   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_OWNE悍马H2.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年前IBMP470双机Oracle10g的进行难题就折腾的万般无奈。
4、再一次论证了广大甲方和商家基本都以:事情发生前猪同样,放马后炮亮。和眼下本国流行的砖家叫兽有不谋而合之妙。
5、做手艺果然是一条不归之路 在Oracle
11g中,exp暗中认可不能导出空表。用守旧的exp,imp举办异构平台数据库迁移会比较麻烦。不过能够使用expdp、impdp进行搬迁。
把六十几位windows 2001的Oracle11gLX5702数据库迁移到陆十二个人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 DIRECTO纳瓦拉Y=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卡塔尔 
原来的书文链接:   在oracle 11g
r第22中学,发掘古板的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命令,就能够把满含空表在内的全体表,平常导出。

 

   在sqlplus中,实施如下命令:

oracle
11g
新添了四个参数:deferred_segment_creation,含义是段延迟创制,暗中同意是true。具体是怎么着意思呢? 

   SQL>alter system set deferred_segment_creation=false;

 

   查看:
   SQL>show parameter deferred_segment_creation;

假设那么些参数设置为true,你新建了二个表T1,何况没有向个中插入数据,那么这一个表不会即刻分配extent,也正是不占多少空间,只有当你insert数据后才分配空间。这样能够节省一丢丢的长空。 

   该值设置后只对前边新扩展的表发生效果与利益,对在此之前创立的空表不起成效。

 

3、能够动用手工业为空表分配Extent的法子,来化解导出在此以前建设构造的空表的标题。说明如下:

排除办法 

3.1 使用ALLOCATE EXTENT的说明

 

   使用ALLOCATE EXTENT可以为数据库对象分配Extent。其语法如下:

1
设置deferred_segment_creation
参数为FALSE后,无论是空表照旧非空表,都分配segment。 

   ———–
   ALLOCATE EXTENT { SIZE integer [K | M] | DATAFILE ‘filename’ |
INSTANCE integer }
   ———–

 

   能够本着数据表、索引、物化视图等手工业分配Extent。

 
 在sqlplus中,试行如下命令: 

   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) 
   

 

    针对数据表操作的完全语法如下:

 
 SQL>alter system set deferred_segment_creation=false; 

   ———–
    ALTER TABLE [schema.]table_name ALLOCATE EXTENT [({ SIZE integer
[K | M] | DATAFILE ‘filename’ | INSTANCE integer})]
   ———–

 

    故,要求营造如下样子轻易的SQL命令:

 
 查看: 

   ———–
   alter table aTabelName allocate extent
   ———–

 
 SQL>show parameter deferred_segment_creation; 

 

 

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
   ———–

2
 使用ALLOCATE EXTENT的说明 

   批量输出上述变化的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;
   ———–

 
 使用ALLOCATE EXTENT可以为数据库对象分配Extent。其语法如下: 

   执行C:\createsql.sql,命令如下:
   ———–
   SQL>@ C:\createsql.sql;
   ———–

 

   推行完结后,得到C:\allocate.sql文件。

 
 ———– 

   展开该公文少禽看到,已经得到对具有空表分配空间的一声令下SQL语句。

 
 ALLOCATE EXTENT { SIZE integer [K | M] | DATAFILE ‘filename’ |
INSTANCE integer } 

3.4 推行SQL命令,对空表分配空间:

 
 ———– 

   执行C:\allocate.sql,命令如下:
   ———–
   SQL>@ C:\allocate.sql;
   ———–
  
   推行实现,表已转移。

 

3.4 当时推行exp命令,就能够把包蕴空表在内的具有表,符合规律导出。

 
 能够本着数据表、索引、物化视图等手工业分配Extent。 

 

 

别的:Oracle11g中,对密码是高低写敏感的,即密码中的字母是分别抑扬顿挫写的。

 
 ALLOCATE EXTENT使用样例: 

      在Oracle10g中及以前,密码中的字母大小写不留意。

 

相关文章