使用資料泵遷移遇到的問題

壹頁書發表於2014-04-18
今天做一個Oracle遷移的測試,使用expdp和impdp。匯出檔案大小為24G。版本為10.2.0.4。
在匯入的過程中,遇到幾個問題。

impdp USERNAME/PASSWORD directory=test dumpfile=test.dmp logfile=import.log parallel=20

第一個問題,因為目標的Oracle資料庫是新建的,並且啟動了歸檔模式。
但是db_recovery_file_dest_size引數沒有修改,預設2G。因為不能歸檔,導致匯入失敗。
告警日誌如下所示:

  1. ARCH: Archival stopped, error occurred. Will continue retrying
  2. Thu Apr 17 17:30:17 2014
  3. ORACLE Instance orcl - Archival Error
  4. Thu Apr 17 17:30:17 2014
  5. ORA-16038: log 2 sequence# 47 cannot be archived
  6. ORA-19809: limit exceeded for recovery files
  7. ORA-00312: online log 2 thread 1: '/data/dblog/redo02.log'
第二個問題,在匯入索引的時候,有如下報錯

  1. Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
  2. ORA-39083: Object type INDEX failed to create with error:
  3. ORA-01652: unable to extend temp segment by 8192 in tablespace USERS
  4. Failing sql is:
  5. CREATE UNIQUE INDEX \"XXX\".\"XXXX_PK\" ON \"XXX\".\"XXXX\"
網上一個大牛給了一個解釋,因為匯入索引,導致排序操作,在PGA裡面空間不足,所以使用了臨時表空間。  
進行如下操作,增加臨時表空間的大小並設定使用者表空間自動擴充套件。

  1. alter database tempfile '/dbdata/oracledata/mvbox/temp01.dbf' resize 20G;
  2. alter database tempfile '/dbdata/oracledata/mvbox/temp01.dbf' autoextend on next 100M;
  3. alter database datafile '/dbdata/oracledata/mvbox/users01.dbf' autoextend on next 100M maxsize unlimited;
但還是報這個錯誤。
後來發現,Oracle 8k的資料塊單個資料檔案的上限是32G,所以需要增加資料檔案。

  1. alter tablespace users add datafile '/dbdata/oracledata/mvbox/users02.dbf' size 20G autoextend on next 100M maxsize unlimited;
匯入完成之後的操作
1.檢視並編譯失效物件
    exec dbms_utility.compile_schema('MVBOX_DB');
2.分析模式
    exec dbms_stats.gather_schema_stats('MVBOX_DB');


這種長時間的操作,還是應該使用at排程的。
因為使用ssh或者vpn連線,一旦連線斷了,匯入也就終止了。


另外Oracle 10G 建立使用者如果沒有指定臨時表空間,他會使用System作為臨時表空間。
在以後的版本,預設都是temp臨時表空間。

建立使用者

檢視預設的臨時表空間

使用System作為臨時表空間問題很多。
經常出現如下報錯
  1. ORA-03212: Temporary Segment cannot be created in locally-managed tablespace
修改使用者臨時表空間
  1. alter user test temporary tablespace temp;

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29119536/viewspace-1146259/,如需轉載,請註明出處,否則將追究法律責任。

相關文章