1

我們正在嘗試將230 GB Oracle EC2託管數據庫遷移到RDS中。數據庫面臨的挑戰是有一個150GB的表,其中有大量的LOB數據。當我們嘗試使用Oracle導入/導出(數據泵)遷移數據時,大約需要9.5小時才能導出150 GB表,並且其中包含LOB數據和2小時以將轉儲導入RDS,而其他表格則相當快地遷移。我們使用最高配置的實例,但仍然沒有看到任何性能改進。用LOB數據遷移巨大表格帶來的挑戰

正好看到輸出的150GB的時間差在EC2上再次傾倒在第二輪只用了3小時的時間。有人可以建議我一個更好的方法來減少進出口時間。

PS:我們也試圖用展鵬工具來識別Oracle數據庫,但是這個工具之間的架構和數據的差異也未能完成對巨大的LOB表比較。

+0

您是否嘗試過使用數據泵輸出和導入的並行選項? –

+0

不幸的是我們考慮過它,但並行參數僅在企業版中有效,我們沒有使用企業版。 :( – cloudtechnician

+1

你可以使用一個可移動的表空間嗎?那麼你可以直接複製數據文件。https://oracle-base.com/articles/misc/transportable-tablespaces –

回答

1

我發現遷移大量的LOB的最快捷的方式如下:

提取

  • 寫客戶提取物(JAVA)將處理ID 值的給定範圍。
  • 收件爲每一行作爲CSV非LOB數據,並且將作爲LOB一個 文件並引用的文件中的CSV的每一行。
  • 並行運行多個提取(這些是外部Java進程,因此不應該被許可證的Oracle限制所阻止)
  • 最好將提取文件寫入可在兩臺服務器之間「擺動」的文件系統。如果可能的話,有多少個這樣的文件系統與您正在運行的 並行提取進程一樣多。

負載

  • 使用SQLLOADER。它已經終止BY EOF

  • 嘗試使用DIRECT = Y選項

    image_fname填料CHAR(80), 圖像LOBFILE(image_fname) - 而在某些版本(10G),我發現它有點不可靠的,並得到了常客在我的項目中崩潰,但它可能已經改善了這種類型的負載。

  • 同樣,使用並行SQL加載程序如果可能的話 - 你可能需要禁用約束和索引,或者使用反向索引以減少塊爭用並聯負載。

您可能會考慮在目標上進行分區並且加載每個分區。

使用「擺動」文件系統的優點是可以消除網絡瓶頸。

這些說明一般性的指導,不具體,且需要一些調整和試驗,以獲得最佳組合。

0

關於使用RedGate比較數據的PS注意事項,我認爲這是用於數據對帳。

同樣,我只能提供一般指導,但在上一次遷移時,我有數TB的數據進行比較,並且使用傳統的報告到磁盤和差異太慢,而且我們沒有足夠的磁盤。

所以我所做的就是編寫Java(因爲它通常是在Oracle服務器上可用,你真的想在服務器的E要運行上,以儘量減少網絡瓶頸)程序,做了以下內容:

  • 打開JDBC連接到兩個數據庫
  • 指定表格來處理,並且ID的範圍,和批量大小
  • 讀取的行中從表中給定的範圍憤怒ID,和填充批量大小的存儲器區域 - 我使用了java.util.concurrent.ArrayBlockingQueue和java.util.concurrent.BlockingQueue對象
  • 使用線程來從兩個數據庫
  • 當兩個隊列填滿運行於2個隊列

對於比較斑點一個比較,我採取的方法是使用DBMS_CRYPTO哈希的LOB值讀取數據和比較它們。這減少了正在讀入Java的數據量。任何差異都強調了進一步調查。

顯然,作爲一個Java外部進程,它可以並行運行到最佳數量。這種方法證明比我們可用的其他工具更快。

經過這個項目,我發現Oracle提供了一個名爲的新包DBMS_COMPARISON。這可能是值得的。我正在尋找機會將其與我的自定義解決方案進行比較。

+0

非常感謝。我會查看它。 – cloudtechnician