2010-12-14 54 views
2

我需要從Oracle數據庫將大型SQL表導入到mySQL數據庫。我使用RazorSQL「轉儲」了Oracle表,這樣我現在有一個很大的(2.5 GB).sql文件,並且有很多INSERT語句。在語句邊界上分割一個大的sql文件?

這個文件太大了,我想分割它,以便將它導入塊中。什麼將是一個聰明的方式來分裂這樣的文件?

  • 使用split命令除了一些字符串值將作品包含新行字符,以便有split分裂中期陳述的高風險。

  • 一個使用正則表達式來分割「; \ n」(語句結束)的Perl quickie可以工作,但是在數據中仍然存在這樣的字符序列的遠程可能性。

當然,我總是可以編寫一個解析器來理解字符串引用。我想知道是否有更聰明的東西?

已經提出了類似問題。例如:

How do I split the output from mysqldump into smaller files?

但唯一的分裂溶液已經有一段的Windows軟件的建議。 Windows不適合我。我運行Unix,即Mac OS X.

爲了給出一些背景知識,我想這樣做的原因是我在將文件導入到mySQL時出錯。本地化錯誤是非常痛苦的,因爲這很耗時,而且對於大多數文本編輯器來說,打開如此大的文本文件以進行編輯並不是微不足道的。我的一些SQL工具甚至不會在文件中報告錯誤的位置,這強烈暗示了通過分割次數來消除錯誤的二分法方法。自動化這將是有用的。

謝謝你的任何想法。

+0

如果你可以使用mysqlimport工具並避免使用INSERT語句,事情會變得更快,解析器的開銷並不是微不足道的。在數據加載之前,還要確保在表上禁用了索引。進口時間差異可能達到幾個數量級。使用**分割**,它可以產生你感興趣的文件,如果你擔心的問題發生處理它。如果您從導入過程中得到可怕的錯誤輸出,您可以通過二進制搜索到麻煩的文件來查找錯誤。 – kevpie 2010-12-14 11:03:41

+0

正如我寫的那樣,'split'不是好的:它會將文件分割成行邊界,而不是語句邊界。我*有*有多條語句運行的語句。爲了進行二進制搜索,我需要一個可靠的分割解決方案。簡單的基於文本的拆分不正確。也許正則表達式可以,但是正則表達式必須是單引號字符串。 – 2010-12-14 15:03:15

+0

你想創建多少個文件大小? – kevpie 2010-12-15 09:22:38

回答

0

不完全回答你的問題,但也許你的問題的解決方案:

安裝Navicat (MySQL GUI)。它有一個oracle => mysql遷移工具,可以幫助你,因爲很可能你得到的錯誤來自語法上的差異。手動將一種SQL方言轉換爲另一種方言將是一項艱鉅的任務。

+0

不是。我發現的唯一語法差異是'to_date' Oracle函數。我通過定義我自己的個人mySQL'to_date'函數來解決這個問題。在大多數情況下,我希望任何語法問題都能顯示出來,而不是那個大文件中間的一條隔離線。 – 2010-12-14 14:58:58