2014-01-19 4 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') 

и я получил:

Невозможно обработать объект "SET AutoCommit = 0". Поставщик OLE DB «MSDASQL» для связанного сервера «MYSQL» указывает, что либо объект не имеет столбцов, либо у текущего пользователя нет разрешений на этот объект .

Возможно ли выполнить такие заявления через openquery?

Спасибо, Микаэль

ответ

1

OPENDATASOURCE() и OPENROWSET() позволяют серверных соединений адд-специальных. Вам не нужно заранее определять связанный сервер.

OPENQUERY() зависит от статического связанного сервера определяется заранее.

Вот ссылка MSDN.

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

Большинство примеров показывают DML (ВЫБОР, UPDATE, DELETE, INSERT) с помощью OPENQUERY() в качестве источника или назначения команды. То, что вы пытаетесь сделать, это выполнить команду сеанса. Поэтому он потерпит неудачу. Кроме того, вы даже не знаете, будет ли сеанс открытым для следующего вызова.

Почему бы не упаковать логику на сервере MYSQL в качестве хранимой процедуры. Хранимая процедура может быть выполнена на связанном сервере, используя имя из четырех частей?

Например:

INSERT INTO #results ВЫПЛН server.database..stored-Proc

Это предполагает MYSQL имеет такую ​​же структуру, как объект ORACLE. Поскольку я не являюсь человеком MYSQL, я не могу комментировать. Я позволяю вам исследовать этот маленький предмет.

Но это должно сработать. Это позволит вам упаковать любой тип логики в базе данных MYSQL.

+0

Thank you. Проблема в том, что мне нужно передать много данных в хранимую процедуру, возможно ли это? Мне нужно вставить миллионы строк, это хорошая идея передать все эти данные в качестве параметра в SP? –

+0

Пожалуйста, напишите ETL-процесс. Если у вас есть SQL Server, у вас есть SSIS. Напишите пакет. Если нет, посмотрите на powershell. Оба решения будут эффективно перемещать данные. Связанные серверы обычно медленнее, чем ETL. –

+0

Мы уже использовали ETL для других продуктов, однако я думаю, что проблема все еще присутствует в ETL (т. Е. Не позволяет изменять свойства сеанса, такие как autocommit). Это правильно? –

0

Если вы хотите использовать SSIS для передачи данных с SQL Server на MYSQL.

Для правильной работы ADO.NET Destination для базы данных 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, я использую OLE DB для ODBC. Он все еще применим? Я не вижу свойство RetainSameConnection. –

+0

Не имеет значения. Удерживать то же соединение в объекте соединения. Это ключ к задаче SQL для выполнения команд среды. Прочитать статью. Он сосредоточен вокруг MY SQL. Кроме того, CozyRoc обеспечивает лучший драйвер. –

Смежные вопросы