今天在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;