簡體   English   中英

從Oracle遷移到MySQL

[英]Migrate from Oracle to MySQL

我們的Oracle數據庫遇到了嚴重的性能問題,我們想嘗試將其遷移到基於MySQL的數據庫(直接使用MySQL,或者最好使用Infobright)。

問題是,在我們實際上不知道新數據庫的所有功能是否符合我們的需求之前,我們需要讓舊系統和新系統至少重疊數周(如果不是幾個月)。

因此,這是我們的情況:

Oracle數據庫由多個表組成,每百萬行。 白天,實際上有成千上萬的語句,我們無法停止遷移。

每天早晨,新數據都會導入到Oracle數據庫中,從而替換了數千行。 復制此過程不是問題,因此從理論上講,我們可以並行導入兩個數據庫。

但是,挑戰就在這里,要使此工作正常進行,我們需要從一天開始以一致的狀態從Oracle數據庫進行導出。 (我們不能在星期一導出某些表,而在星期二不能導出其他表,等等。)這意味着,至少導出應在不到一天的時間內完成。

我們最初的想法是轉儲架構,但是我找不到能夠將Oracle轉儲文件導入MySQL的工具。 將表格導出為CSV文件可能會起作用,但恐怕可能會花費太長時間。

所以我的問題是:

我該怎么辦? 有沒有什么工具可以將Oracle轉儲文件導入MySQL? 有人有過大規模遷移的經驗嗎?

PS:請不要建議Oracle性能優化技術,我們已經嘗試了很多:-)

編輯:我們已經嘗試過一些ETL工具,才發現它們不夠快:僅導出一張表已經花費了4多個小時...

第二編輯:來吧……沒有人嘗試過盡快導出整個數據庫並轉換數據以便可以將其導入另一個數據庫系統嗎?

Oracle不提供開箱即用的卸載實用程序。

請記住,如果沒有有關您的環境的全面信息(Oracle版本?服務器平台?多少數據?什么數據類型?),這里的所有內容都是YMMV,您可能希望在系統上使用它來提高性能和計時。

我的觀點1-3只是通用的數據移動思想。 第4點是一種將停機時間或中斷時間減少到幾分鍾或幾秒鍾的方法。

1)有第三方實用程序。 我已經使用了其中一些,但最適合您根據自己的意圖檢查一下。 這里列出了一些第三方產品: OraFaq 不幸的是,除非其中的DB服務器在Windows上並且您可以直接在服務器上運行load實用程序,否則它們中的許多都將在Windows上運行,這會減慢數據卸載過程。

2)如果您沒有像LOB這樣的復雜數據類型,則可以使用SQLPLUS進行滾動。 如果您一次創建一個表,則可以輕松地對其進行並行化。 可能已經多次訪問了此主題,這里有一個示例: Linky

3)如果您的年齡在10克以上,則外部表可能是完成此任務的一種有效方法。 如果創建具有與當前表相同結構的空白外部表並將數據復制到它們中,則數據將轉換為外部表格式(文本文件)。 再次,OraFAQ進行救援

4)如果必須將系統並行運行幾天/幾周/幾月,請使用變更數據捕獲/應用工具將停機時間幾乎設為零。 准備支付$$$。 我使用了Golden Gate Software的工具,該工具可以挖掘Oracle重做日志並向MySQL數據庫提供插入/更新語句。 在上線前一周,您可以在不停機的情況下遷移大量數據。 然后在上線期間,關閉源數據庫,讓Golden Gate趕上最后剩下的事務,然后打開對新目標數據庫的訪問。 我已經使用它進行升級了,追趕期只有幾分鍾。 我們已經有了Golden Gate的站點許可證,因此對於我們而言,這並不是什么便宜的事情。

我將在這里扮演Cranky DBA的角色,並說如果您不能使Oracle表現良好,我很樂意看到有關MySQL如何解決您的特定問題的文章。 如果您有一個無法使用SQL的應用程序,那么仍有許多可能的方法來調整Oracle。 /肥皂盒

我建立了一個C#應用程序,可以讀取Oracle轉儲(.dmp)文件並將其數據表泵送到SQL Server數據庫中。

該應用程序每天在生產環境中使用,以將PeopleSoft數據庫遷移到SQL Server。 PeopleSoft數據庫具有1100多個數據庫表,Oracle轉儲文件的大小大於4.5GB。

該應用程序創建SQL Server數據庫和表,然后在不到55分鍾的時間內在雙核Intel服務器上運行,加載所有4.5GB的數據。

我認為修改此應用程序以使其與具有ADO.NET提供程序的其他數據庫一起工作不會太困難。

是的,Oracle非常慢。 :)

您可以使用任意數量的ETL工具將數據從Oracle移到MySQL。 我最喜歡的是SQL Server集成服務。

如果您具有Oracle9i或更高版本,則可以實施Change Data Capture。 在此處閱讀更多信息http://download-east.oracle.com/docs/cd/B14117_01/server.101/b10736/cdc.htm

然后,您可以使用任何ETL技術從Oracle到您的MySQL或Infobright進行大量更改。

我已經使用Pentaho Data Integration從Oracle遷移到MySql(我也將相同的數據遷移到Postresql,速度大約快50%,我猜這很大程度上是由於使用了不同的JDBC驅動程序)。 我幾乎遵循這封信,遵循羅蘭·鮑曼(Roland Bouman)的指示,對它的簡單程度感到非常驚喜:

將表數據從一個數據庫復制到另一個數據庫

我不知道它是否適合您的數據加載,但是值得一試。

我最近發布了etlalchemy以完成此任務。 它是一個開放源代碼的解決方案,允許使用4行Python在任意2個SQL數據庫之間進行遷移,並且最初設計為從Oracle遷移到MySQL。 添加了對MySQL,PostgreSQL,Oracle,SQLite和SQL Server的支持。

這將照顧到遷移模式(可以說是最具挑戰性的),數據,索引和約束,還有更多可用選項。

安裝:

$ pip install etlalchemy

在El Capitan上pip install --ignore-installed etlalchemy

跑步:

from etlalchemy import ETLAlchemySource, ETLAlchemyTarget

orcl_db_source = ETLAlchemySource("oracle+cx_oracle://username:password@hostname/ORACLE_SID")

mysql_db_target = ETLAlchemyTarget("mysql://username:password@hostname/db_name", drop_database=True)
mysql_db_target.addSource(orcl_db_source)
mysql_db_target.migrate()

關於性能 ,此工具在各種RDBMS中使用BULK導入工具,例如mysqlimportCOPY FROMpostgresql ),以高效地進行遷移。 我能夠在40分鍾內將具有33105951行的5GB SQL Server數據庫遷移到MySQL,並在13分鍾內將3GB 7000000行的Oracle數據庫遷移到MySQL。

要獲得有關項目起源的更多背景信息, 請查看這篇文章。 如果在運行該工具時遇到任何錯誤,請在github存儲庫上打開一個問題,我將在不到一周的時間內對其進行修補!

(要安裝“ cx_Oracle” Python驅動程序,請按照以下說明進行操作

我們有同樣的問題。 需要從oracle dbms到mysql dbms獲取表和數據。

我們使用了我們在網上找到的工具...效果很好。

http://www.sqlines.com/download

該工具基本上可以幫助您:

  1. 連接到您的源DBMS(ORACLE)
  2. 連接到目標DBMS(MySQL)
  3. 在要遷移的ORACLE DBMS中指定架構和表
  4. 按下“傳輸”按鈕以運行遷移過程(運行內置的遷移查詢)
  5. 獲取傳輸日志,該日志將告訴您從目標數據庫中的SOURCE和WRITTEN中讀取了多少條記錄,哪些查詢失敗。

希望這會幫助其他將解決此問題的人。

您可以使用Python,SQL * Plus和mysql.exe (MySQL客戶端)腳本復制僅查詢結果的整個表。 由於所有這些工具都存在於Windows和Linux中,因此它將是可移植的。

當必須這樣做時,我使用Python實現了以下步驟:

  1. 使用SQL * Plus將數據提取到CSV文件中。
  2. 使用mysql.exe將轉儲文件加載到MySQL中。

您可以通過使用表/分區/子分區執行並行加載來提高性能。

披露: Oracle到MySQL的數據遷移器是我為Windows OS上的Oracle and MySQL之間的數據集成編寫的腳本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM