impdp时遇到的小问题

今天在impdp时遇到一个小问题,由于之前的其他报错,将我的注意力转移到其他地方了,所以这个平时看来很简单的问题,琢磨了好久才发现问题,贴出来,以备提醒。
 
C:\Documents and Settings\>impdp   xxx/xxxx @xx  directory=DATA_PUMP_DIR dump
file=xxx.dmp show=true tables=(xxx) sqlfile=20110408.sql
Import: Release 11.2.0.1.0 - Production on 星期五 4月 8 14:25:42 2011
Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
ORA-39006: 内部错误
ORA-39068: 在 PROCESS_ORDER=-4 的行中主表数据无效
ORA-01658: 无法为表空间 tab_1 中的段创建 INITIAL 区
ORA-39097: 数据泵作业出现意外的错误 -1658
解决:是因为表空间tab_1已经满了,导致不能再分配新的空间,添加个新数据文件即可。
这里还有一点提醒的就是在 show=true时,只是伪导入,即没有真正意义的导入数据库,如果表空间满了,也会报这个问题,需注意。
另外,以前曾遇到imp工具本身有问题,也会导致导入报错,具体出错信息已经记不清了。
 
查看表空间使用情况可以用如下语句:
1.如果你的表空间没有满则可以使用:
  SELECT  tbs 表空间名,                                    
     sum (totalM) 总共大小M,                                    
     sum (usedM) 已使用空间M,                                    
     sum (remainedM) 剩余空间M,                                    
     sum (usedM) / sum (totalM) * 100  已使用百分比,                            
     sum (remainedM) / sum (totalM) * 100  剩余百分比                            
     FROM (                                            
      SELECT  b. file_id  ID,                                    
     b.tablespace_name tbs,                                    
     b. file_name  name,                                    
     b.bytes / 1024 / 1024  totalM,                                    
     (b.bytes - sum (nvl(a.bytes, 0 ))) / 1024 / 1024  usedM,                        
      sum (nvl(a.bytes, 0 ) / 1024 / 1024 ) remainedM,                            
      sum (nvl(a.bytes, 0 ) / (b.bytes) * 100 ),                                
     ( 100   -  ( sum (nvl(a.bytes, 0 )) / (b.bytes) * 100 ))                            
      FROM  dba_free_space a,dba_data_files b                            
      WHERE  a. file_id   =  b. file_id                                 
      GROUP   BY  b.tablespace_name,b. file_name ,b. file_id ,b.bytes                    
      ORDER   BY  b.tablespace_name                                
    )                                            
     GROUP   BY  tbs ;
如果满了,请使用:                      
SELECT T.TABLESPACE_NAME TABLESPACE_NAME,
       T.CONTENTS CONTENTS,
       ROUND(SUM(A.BYTES) / 1048576) ALL_MB,
       ROUND(SUM(DECODE(MAXBYTES, 0, A.BYTES, MAXBYTES)) /1048576) MAX_MB,
       ROUND(SUM(NVL(F.BYTES,0)) / 1048576) FREE_MB,
       ROUND((SUM(DECODE(MAXBYTES, 0, 0, MAXBYTES-A.BYTES)) + SUM(NVL(F.BYTES, 0))) / 1048576) FREE_EXT,
       ROUND(100 * SUM(NVL(F.BYTES, 0)) / SUM(A.BYTES)) PCT_FREE,
       ROUND(100 * (SUM(DECODE(MAXBYTES, 0, 0, MAXBYTES-A.BYTES)) + SUM(NVL(F.BYTES, 0))) / SUM(DECODE(A.MAXBYTES, 0, A.BYTES, A.MAXBYTES)))  PCT_FREE_EXT
  FROM DBA_DATA_FILES A,
       DBA_TABLESPACES T,
       (SELECT FILE_ID,SUM(BYTES) BYTES FROM DBA_FREE_SPACE GROUP BY FILE_ID) F
 WHERE A.FILE_ID = F.FILE_ID(+)
   AND A.TABLESPACE_NAME = T.TABLESPACE_NAME
   AND T.CONTENTS != 'TEMPORARY'
 GROUP BY T.TABLESPACE_NAME, T.CONTENTS, T.STATUS
 ORDER BY ROUND(100 * SUM(NVL(F.BYTES, 0)) / SUM(A.BYTES))
 ;
 
 
解决方法,目前我只知道两种:
一种是为表空间增加数据文件: 代码如下:

alter tablespace users add datafile '/opt/oracle/oradata/esop/so_data02.dbf' size 200M;

另一种方法是增加表空间原有数据文件尺寸: 代码如下:

alter database datafile '/opt/oracle/oradata/esop/so_data01.dbf' resize 200M;
 

你可能感兴趣的:(oracle)