我需要從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工具甚至不會在文件中報告錯誤的位置,這強烈暗示了通過分割次數來消除錯誤的二分法方法。自動化這將是有用的。
謝謝你的任何想法。
如果你可以使用mysqlimport工具並避免使用INSERT語句,事情會變得更快,解析器的開銷並不是微不足道的。在數據加載之前,還要確保在表上禁用了索引。進口時間差異可能達到幾個數量級。使用**分割**,它可以產生你感興趣的文件,如果你擔心的問題發生處理它。如果您從導入過程中得到可怕的錯誤輸出,您可以通過二進制搜索到麻煩的文件來查找錯誤。 – kevpie 2010-12-14 11:03:41
正如我寫的那樣,'split'不是好的:它會將文件分割成行邊界,而不是語句邊界。我*有*有多條語句運行的語句。爲了進行二進制搜索,我需要一個可靠的分割解決方案。簡單的基於文本的拆分不正確。也許正則表達式可以,但是正則表達式必須是單引號字符串。 – 2010-12-14 15:03:15
你想創建多少個文件大小? – kevpie 2010-12-15 09:22:38