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;
相關文章
相關標籤/搜索