2016-01-13 79 views
2

我有一個概念性問題。如何將高性能數據從一個數據庫複製到另一個數據庫?

我有兩個具有相同結構的數據庫。一個數據庫已經包含了大量的數據。這些數據應通過SelectInsert傳輸到其他數據庫。

如何以最高性能進行數據遷移?

我的第一種方法是對列表中的所有表格進行排序,其中包含外鍵的表格將存儲在引用的表格後面。但是通過這種解決方案,將不可能開始並行處理。

第二個想法是創建一個自定義類型,其中包含表名和被引用表的表名以及用於存儲表中數據是否已被複制的布爾標誌。這種類型存儲在列表中的每個表中。然後,我開始一個新的線程,在複製之前檢查是否已爲每個表創建引用的表。如果沒有,我執行Thread.Sleep()之後我會再檢查一次。

有沒有一個表現良好的方法來解決這個問題?

任何建議將有所幫助。

編輯: 舊數據庫是一個SQL Base數據庫。 新數據庫是一個MS SQL服務器數據庫。

+0

大多數數據庫系統都有[大容量複製機制](https://msdn.microsoft.com/en-us/library/7ek5da1a(v = vs.110).aspx)。使用它。 – Heinzi

+1

選擇/插入將是最糟糕的方式來做到這一點。我強烈建議爲此使用數據庫工具。也許「數據庫管理員」將是一個更好的地方。 http://dba.stackexchange.com/ –

+0

問題是,舊的數據庫是一個sqlbase數據庫,而新的數據庫是一個ms sql服務器。因此,現在我正在開發這些「數據庫工具」 – Bambuk

回答

2

您可使用:

1)SQL Server複製

或者 2)在SQL Server Merge聲明

您可以使用SQL Server鏈接服務器連接不同的數據庫平臺(例如SQL服務器,mysql,db2,...)

+0

SQL Server複製不會在我的情況下工作,但我會檢查是否會有鏈接服務器和SQL Server合併語句的解決方案。 謝謝:) – Bambuk

+0

請注意,merge語句不能與鏈接的服務器一起使用。您必須編寫自己的'insert'或'update'語句 – 2016-01-13 12:02:14

+0

您不需要鏈接服務器。 SQLBase UNLOAD將爲您寫入Insert語句。簡單卸載,您將擁有準備好SQlServer重新加載所需的所有DDL,DML和數據。 – GuptaSteve

0

最佳建議:堅持使用SQLBase。 第二好的建議,通過SQLTalk使用SQLBase UNLOAD命令。這將寫入所有需要重新創建數據庫的DDL語句,其中包括觸發器,存儲過程,索引等,以及所有要加載的數據(如果使用正確的選項)加載到外部文件。如果需要使用sql server格式(沒有太大區別),則可以選擇以編程方式編輯該文件。 UNLOAD命令有很多選項,這些選項不能在這裏詳細描述,但這裏有一個鏈接到語法。 請注意,SQLBase v12已於近幾個月發佈,性能提高了十倍。有了正確的調整和索引等。它將在效率和性能方面超過Sql Server。在100Gb數據庫上,我們的響應時間從50秒減少到3秒,無需額外工作。

相關問題