2014-01-19 32 views
0

我想將數據從MS SQL Server數據庫傳輸到MySQL數據庫。所以,我向MS SQL添加了一個鏈接服務器,以便我可以使用Openquery將數據插入到MySQL數據庫中。我想優化數據傳輸的性能,並找到了提高MySQL中數據加載性能的指導原則。Openquery的特別聲明

一個優化包括禁用AUTOCOMMIT模式,但是我無法使用Openquery來完成。

我試過兩種方式:

SELECT * from openquery(MYSQL,'SET autocommit=0') 

exec openquery(MYSQL,'SET autocommit=0') 

和我:

無法處理對象 「設置自動提交= 0」。鏈接服務器「MYSQL」的OLE DB提供程序「MSDASQL」 指示對象 沒有列或當前用戶沒有該 對象的權限。

是否有可能通過openquery執行這樣的語句?

謝謝,邁克爾 -

回答

1

OPENDATASOURCE()和OPENROWSET()允許附加特別的服務器連接。您無需提前定義鏈接服務器。

的OPENQUERY()取決於一個靜態鏈接服務器被定義的時間提前。

這是MSDN的參考資料。

http://technet.microsoft.com/en-us/library/ms188427.aspx

大多數例子示出了DML使用OPENQUERY()作爲命令的源或目的地(SELECT,UPDATE,刪除,插入)。你要做的是執行會話命令。因此它會失敗。此外,您甚至可能不知道會話是否保持開放狀態以供下一次呼叫。

爲什麼不將MYSQL服務器上的邏輯打包爲存儲過程。存儲過程可以通過使用四部分名稱在鏈接的服務器上執行?

例如:

INSERT INTO #results EXEC server.database..stored-PROC

這假定MYSQL具有相同的對象的結構ORACLE。由於我不是MYSQL的人,所以我不能發表評論。我允許你研究這個小項目。

但這應該工作。它將允許你在MYSQL數據庫中打包任何類型的邏輯。

+0

謝謝。問題是我需要將大量數據傳遞給存儲過程,是否有可能?我需要插入數百萬行,將所有這些數據作爲參數傳遞給SP是個好主意嗎? –

+0

請寫一個ETL過程。如果您擁有SQL Server,則擁有SSIS。寫一個包。如果沒有,看看PowerShell。兩種解決方案都將有效地移動數據鏈接的服務器通常比ETL慢。 –

+0

我們已經將ETL用於其他東西,但我認爲問題仍然存在於ETL中(即無法更改會話屬性,如自動提交)。是對的嗎? –

0

如果您想使用SSIS將數據從SQL Server傳輸到MYSQL。

爲了使ADO.NET目標正常工作,MySQL數據庫需要啓用ANSI_QUOTES SQL_MODE選項。該選項可以在全局或特定會話中啓用。要啓用它在單個會話:

1 - Create an ADO.NET Connection Manager which uses the ODBC driver 
2 - Set the connection manager’s RetainSameConnection property to True 
3 - Add an Execute SQL Task before your data flow to set the SQL_MODE – Ex. set sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,ANSI_QUOTES' 
4 - Make sure that your Execute SQL Task and your ADO.NET Destination are using the same connection manager. 

馬特·梅森這樣做是對的答覆。關鍵是項目#2,使用相同的連接。

http://blogs.msdn.com/b/mattm/archive/2009/01/07/writing-to-a-mysql-database-from-ssis.aspx#comments

此外,CozyRoc有一個自定義ODBC驅動程序可能會更快/比MYSQL免費一個更加可靠。

http://cozyroc.com/ssis/odbc-destination

+0

感謝您的回答,但我不使用ADO,我使用ODBC的OLE DB。它仍然適用?我沒有看到RetainSameConnection屬性。 –

+0

沒關係。保留相同連接位於連接對象處。這是SQL Task執行環境命令的關鍵。閱讀文章。它以MY SQL爲中心。另外,CozyRoc提供了更好的驅動程序。 –