barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)

суббота, 17 сентября 2011 г.

Подключение MySQL к MS SQL Server 2008 по ODBC

Процесс подлючения MySQL по ODBC в качестве Linked Server к MS SQL Server аналогичен тому, который я уже описывал (http://barbitoff.blogspot.com/2011/09/odbc-linked-server-ms-sql-2008.html), правда с несколькими замечаниями:
1) Для оптимизации производительности и повышения стабильности при создании System DSN нужно зайти в Details, и там установить галочки (сам различные варианты настроек не сравнивал, воспользовавшись рекомендациями отсюда http://www.ideaexcursion.com/2009/02/25/howto-setup-sql-server-linked-server-to-mysql/):
  • Connection->Allow Big Result Sets
  • Connection -> Use Compression 
  • Cursors/Results ->  Force use of forward-only cursors
Опцию "Cursors/Results -> Dont't cache results of forward-only cursors" устанавливать не следует, т.к. это приведет к ошибкам при массовых INSERT`ах (см. http://barbitoff.blogspot.com/2011/09/ole-db-provider-msdasql-for-linked.html).
2) Перед созданием Linked Server в MS SQL Server Management Studio зайти в Server Objects -> Linked Servers -> Providers -> Кликнуть правой кнопкой мыши по MSDASQL и зайти в Properties, где установить следующие галочки:
  • Nested queries
  • Level zero only
  • Allow inprocess
  • Supports ‘Like’ Operator
Такая настройка провайдера MSDASQL  отразиться на всех серверах, подключенных по ODBC, что конечно не совсем удобно. Однако без этих параметров запросы к MySQL выполняться не будут. Кстати, такая настройка провайдера подходит и для ODBC-подкючения к Transbase.

Именование таблиц связанного сервера при выполнения SQL-запросов будет следующее: LINKED_SERVER_NAME...TABLE_NAME, т.е. между именем связанного сервера и именем таблицы ставится три точки, например:

SELECT TOP 10 * FROM MYSQL_SERVER...BRANDS



Комментариев нет:

Отправить комментарий