記一次伺服器遷移第二篇-----dblink方式匯入匯出導致Oracle分割槽表異常

13811135929發表於2017-04-14
  接第一篇http://blog.itpub.net/29827284/viewspace-2137006/,在資料庫遷移完成後發現某些分割槽表在原庫並沒有分割槽,導致部分SQL語句執行效率變差。具體為什麼會造成此問題,在網上包括MOS一直沒找到答案,如果哪位大神碰到過這種情況且找到了答案,煩請幫忙解答,謝謝。以下透過實驗進行生產環境的模擬。
 原庫匯出庫環境:

點選(此處)摺疊或開啟

  1. SELECT * FROM v$version; 
  2. BANNER
  3. ----------------------------------------------------------------
  4. Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Prod
  5. PL/SQL Release 10.2.0.4.0 - Production
  6. CORE 10.2.0.4.0 Production
  7. TNS for 32-bit Windows: Version 10.2.0.4.0 - Production
  8. NLSRTL Version 10.2.0.4.0 - Production
環境準備

點選(此處)摺疊或開啟

  1. //新建測試表
  2. create table test(
  3.  id number,
  4.  workdate varchar2(10)
  5.  )
  6.  partition by range(workdate)(
  7.  partition p1 values less than('2015-01-01'),
  8.  partition p2 values less than('2016-01-01'),
  9.  partition p3 values less than(maxvalue)
  10.  );
  11. //插入測試資料
  12. insert into test values(1,'2013-01-01');
  13. insert into test values(2,'2015-03-03');
  14. insert into test values(3,'2016-09-01');
  15. commit;
檢查確認

點選(此處)摺疊或開啟

  1. SELECT * FROM test partition(p1);
  2.         ID WORKDATE
  3. ---------- ----------
  4.          1 2013-01-01
  5.           
  6. SELECT * FROM test partition(p2);
  7.         ID WORKDATE
  8. ---------- ----------
  9.          2 2015-03-03

  10. SELECT * FROM test partition(p3);
  11.         ID WORKDATE
  12. ---------- ----------
  13.          3 2016-09-01
透過確認可以發現,插入的資料按照分割槽要求進行了相關的分割槽,3條測試資料按照要求插入到了3個不同的分割槽p1,p2,p3.


新庫匯入庫環境:

點選(此處)摺疊或開啟

  1. SELECT * FROM v$version;
  2. BANNER
  3. --------------------------------------------------------------------------------
  4. Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
  5. PL/SQL Release 11.2.0.3.0 - Production
  6. CORE 11.2.0.3.0 Production
  7. TNS for Linux: Version 11.2.0.3.0 - Production
  8. NLSRTL Version 11.2.0.3.0 - Production
準備匯入匯出的dblink

點選(此處)摺疊或開啟

  1. CREATE DATABASE LINK "DMP_LINK" CONNECT TO "DZDZ" IDENTIFIED BY VALUES 'DZDZ' USING 'DZDZ_222'
設定network_link引數,從上述10g的原庫匯出測試表test到11g的新庫伺服器上,語句如下:

點選(此處)摺疊或開啟

  1. expdp dzdz/****** dumpfile=test.dump logfile=test.log directory=DATA_PUMP_DIR tables=test NETWORK_LINK=DMP_LINK
impdp匯入,語句如下:

點選(此處)摺疊或開啟

  1. 連線到: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
  2. With the Partitioning option
  3. 已成功載入/解除安裝了主表 "DZDZ"."SYS_IMPORT_FULL_01"
  4. 啟動 "DZDZ"."SYS_IMPORT_FULL_01": dzdz
  5. dzdz/******** dumpfile=test.dump logfile=test_impdp.log directory=DATA_PUMP_DIR 
    處理物件型別 TABLE_EXPORT/TABLE/TABLE 
    處理物件型別 TABLE_EXPORT/TABLE/TABLE_DATA 
    . . 匯入了 "DZDZ"."TEST"                               5.265 KB       3 行 
    作業 "DZDZ"."SYS_IMPORT_FULL_01" 已於 14:28:29 成功完成 
確認匯入的情況:

點選(此處)摺疊或開啟

  1. SELECT * FROM test;
  2.         ID WORKDATE
  3. ---------- ----------
  4.          1 2013-01-01
  5.          2 2015-03-03
  6.          3 2016-09-01
可以看到test的所有記錄已經全部匯入成功。下面驗證分割槽的情況:

點選(此處)摺疊或開啟

  1. SELECT * FROM test partition(p1); 
  2.         ID WORKDATE
  3. ---------- ----------
  4.          1 2013-01-01
  5.          2 2015-03-03
  6.          3 2016-09-01

  7. SELECT * FROM test partition(p2); 
  8. 未選定行

  9. SELECT * FROM test partition(p3); 
  10. 未選定行
可以看到資料並沒有按照值匯入到相應的分割槽,所有的資料都匯入到了p1分割槽,由於沒有按照值分割槽,可能會影響部分SQL語句的執行效率。

【總結】
對於分割槽表的匯入操作建議關注其匯入過程,輸出日誌情況如下說明資料已分割槽。
. . imported "SCOTT"."TEST":"P1"                         5.234 KB       1 rows
. . imported "SCOTT"."TEST":"P2"                         5.234 KB       1 rows
. . imported "SCOTT"."TEST":"P3"                         5.234 KB       1 rows

如果輸出日誌如下說明表並沒有分割槽,建議查詢原因。
. . 匯入了 "DZDZ"."TEST"         5.265 KB       3 行

除關注日誌外,匯入完成後建議檢查表的資料分割槽情況以確認資料按照指定進行分割槽。






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

相關文章