作者:david_zhang@sh 【轉載時請以超鏈接形式標明文章】
鏈接:http://www.cnblogs.com/david-zhang-index/archive/2012/08/04/2622442.html
首先看數據庫版本
1 SQL> select * from v$version; 2 3 BANNER -------------------------------------------------------------------------------- 4 5 Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production 6 7 PL/SQL Release 11.2.0.1.0 - Production 8 9 CORE 11.2.0.1.0 Production 10 11 TNS for Linux: Version 11.2.0.1.0 - Production 12 13 NLSRTL Version 11.2.0.1.0 - Production
先說一下背景,目的是將A庫中的bond schema用戶數據導入到B庫中,采用expdp和impdp方式進行導出和導入,數據庫版本一直,當在B庫進行導入的時候出現如下報錯,這個問題比較有意思,注意看下面代碼第2行
猜測1.B庫system表空間沒有自動擴展,空間不足導致,導致問題?
猜測2.從下面代碼第2行猜測,導出的數據中包含A庫system空間的數據(操作人可能用system用戶將bond數據導出,而且忘記加上參數sechems=bond),當在B庫用bond用戶導入的時候就出現2行問題?
猜測3.expdp和impdp相關的數據字典出了問題
1 ORA-31626: job does not exist 2 ORA-31637: cannot create job SYS_IMPORT_SCHEMA_01 for user SYSTEM 3 ORA-06512: at "SYS.DBMS_SYS_ERROR", line 95 4 ORA-06512: at "SYS.KUPV$FT_INT", line 798 5 ORA-39244: Event to disable dropping null bit image header during relational select 6 ORA-06512: at "SYS.DBMS_SYS_ERROR", line 86 7 ORA-06512: at "SYS.KUPC$QUE_INT", line 1825 8 ORA-01658: unable to create INITIAL extent for
先看問題1.查詢下系統表空間是否自動擴展,這里提示一下,表空間是個邏輯概念,並不真正存在,我們要看的是里面的數據文件是否自動擴展
1 SQL> desc dba_data_files 2 Name Null? Type 3 ----------------------------------------- -------- ---------------------------- 4 FILE_NAME VARCHAR2(513) 5 FILE_ID NUMBER 6 TABLESPACE_NAME VARCHAR2(30) 7 BYTES NUMBER 8 BLOCKS NUMBER 9 STATUS VARCHAR2(9) 10 RELATIVE_FNO NUMBER 11 AUTOEXTENSIBLE VARCHAR2(3) 12 MAXBYTES NUMBER 13 MAXBLOCKS NUMBER 14 INCREMENT_BY NUMBER 15 USER_BYTES NUMBER 16 USER_BLOCKS NUMBER 17 ONLINE_STATUS VARCHAR2(7)
1 SQL> select TABLESPACE_NAME ,FILE_NAME ,AUTOEXTENSIBLE from dba_data_files; 2 3 TABLESPACE FILE_NAME AUT 4 ---------- -------------------------------------------------- --- 5 USERS /u01/app/oracle/oradata/oracle/users01.dbf YES 6 UNDOTBS1 /u01/app/oracle/oradata/oracle/undotbs01.dbf YES 7 SYSAUX /u01/app/oracle/oradata/oracle/sysaux01.dbf YES 8 SYSTEM /u01/app/oracle/oradata/oracle/system01.dbf YES 9 DATA01 /u01/app/oracle/oradata/oracle/data01.dbf NO 10 SP /u01/app/oracle/oradata/oracle/sp01.dbf NO
可以看出系統表空間為自動擴展
如果不為自動擴展,可以采用如下語句將表空間改為自動擴展,這里拿DATA01表空間為例:
1 SQL> alter database datafile '/u01/app/oracle/oradata/oracle/data01.dbf' autoextend on maxsize unlimited; 2 3 Database altered.
1 SQL> select TABLESPACE_NAME ,FILE_NAME ,AUTOEXTENSIBLE from dba_data_files; 2 3 TABLESPACE FILE_NAME AUT 4 ---------- -------------------------------------------------- --- 5 USERS /u01/app/oracle/oradata/oracle/users01.dbf YES 6 UNDOTBS1 /u01/app/oracle/oradata/oracle/undotbs01.dbf YES 7 SYSAUX /u01/app/oracle/oradata/oracle/sysaux01.dbf YES 8 SYSTEM /u01/app/oracle/oradata/oracle/system01.dbf YES 9 DATA01 /u01/app/oracle/oradata/oracle/data01.dbf YES 10 SP /u01/app/oracle/oradata/oracle/sp01.dbf NO
題外話,增加數據文件方法:
1 SQL> alter tablespace DATA01 add datafile '/u01/app/oracle/oradata/oracle/data02.dbf' size 50m; 2 3 Tablespace altered. 4 5 SQL> select TABLESPACE_NAME ,FILE_NAME ,AUTOEXTENSIBLE from dba_data_files; 6 7 TABLESPACE FILE_NAME AUT 8 ---------- -------------------------------------------------- --- 9 USERS /u01/app/oracle/oradata/oracle/users01.dbf YES 10 UNDOTBS1 /u01/app/oracle/oradata/oracle/undotbs01.dbf YES 11 SYSAUX /u01/app/oracle/oradata/oracle/sysaux01.dbf YES 12 SYSTEM /u01/app/oracle/oradata/oracle/system01.dbf YES 13 DATA01 /u01/app/oracle/oradata/oracle/data01.dbf YES 14 SP /u01/app/oracle/oradata/oracle/sp01.dbf NO 15 DATA01 /u01/app/oracle/oradata/oracle/data02.dbf NO
再看問題2.問題2個人認為人為原因很多,要與操作人確認,當時的操作語言是否正確,甚至查看到當時操作的語句進行核對。
再看問題3.重建數據字典,執行catalog.sql and catproc.sql來配置后台數據字典,system用戶登錄執行:
1 sql>@?/rdbms/admin/catalog.sql 2 sql>@?/rdbms/admin/catproc.sql
總結:數據庫改動前先要先backup,另提供根據錯誤號定位問題方法: oerr ora 31637