barbitoff programmer`s blog

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

суббота, 3 марта 2012 г.

Подключение MS SQL Linked Server для Tecdoc

Чтобы подключить БД TECDOC`а к MS SQL Server в качестве Linked Server, необходимо следующее:

1) Создать ODBC DSN: Панель управление -> Администрирование -> Источники данных (ODBC) -> Системный DSN -> Добавить. Здесь выбираем драйвер Transbase, который должен был появиться после установки Tecdoc (нечто вроде "Transbase ODBC TECDOC CD 3_2010", название зависит от версии текдока) и настраиваем подключение следующим образом:
- Datasource: TECDOC_CD_3_2011
- Database: TECDOC_CD_3_2011
- Server: localhost
- User: tecdoc
- Password: tcd_error_0
2) На свервере MS SQL выполняем:
EXEC sp_addlinkedserver @server='TECDOC', @srvproduct='TECDOC_2011_3', @provider='MSDASQL', @datasrc='TECDOC_CD_3_2011'
Сразу скажу: вариант с ковырянием в текдок из MS SQL сервера - не самый удачный. Во-первых, производительность переноса данных сравнительно невелика (по сравнению, скажем, с переносом с помощью самописной Java-программы и JDBC-ODBC моста). Во-вторых, что уже совсем критично: при попытке выполнения INSERT ... SELECT запроса, переносящего данные из Tecdoc`а в подключенный как Linked Server MySQL, BLOB / TEXT данные выудить не получается:
OLE DB provider "MSDASQL" for linked server returned message "Вставка или обновление на основе запроса значений BLOB не поддерживается."

9 комментариев:

  1. Пытался прилинковать ТекДок 2012_1 к MSSQL2012 RC0. Прилинковался успешно, проверка соединения успешна, но при попытке открыть список таблиц Текдока выдается следующее:

    Не удалось получить набор строк схемы "DBSCHEMA_TABLES" поставщика OLE DB "SQL Server" для связанного сервера "(null)". Поставщик поддерживает интерфейс, но возвращает код ошибки при его использовании. (Microsoft SQL Server, Error: 7311)

    For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&ProdVer=09.00.1399&EvtSrc=MSSQLServer&EvtID=7311&LinkId=20476

    А тебе удавалось раскрыть список таблиц?

    ОтветитьУдалить
    Ответы
    1. Да, у меня таблички раскрывались, и запросы выполнялись без проблем (правда в SQLServer 2008 и с текдоком 2011_3). Но я ещё перенастраивал немного MSDASQL, как писал тут: http://barbitoff.blogspot.com/2011/09/mysql-ms-sql-server-2008-odbc.html. Попробуй, может поможет

      Удалить
  2. Спасибо за подсказку. Таблички пока не раскрываются с той же ошибкой, но SELECT'ы начали выполняться. Или все дело оказалось в троеточии? Вчера писал:
    USE [TECDOC]
    SELECT TOP 100 * FROM TABLE

    ОтветитьУдалить
    Ответы
    1. Да, с селектами проблема была вероятнее всего в троеточии, я в свое время тоже долго не мог понять, почему селекты не идут.

      Удалить
  3. У меня Windows 7 x64 и в Источники данных (ODBC) вообще не появился драйвер Transbase.
    Только ODBC, MySQL и Excel, Access.

    Раньше на Windows XP появлялся Transbase и подключался без проблем.

    Вы не знаете почему так?

    С Уважением, Александр.

    ОтветитьУдалить
    Ответы
    1. Может из-за 64-битности? Потому что у меня в 32-битной Win7 всё в порядке.

      Удалить
  4. Попробуйте подключить как 32х битный

    ПУСК-Выполнить
    c:\Windows\SysWOW64\odbcad32.exe

    Про подключение 32х битных драйверов в Server 2008 можете почитать тут
    http://www.bisql.net/2010/08/32-bit-odbc-drivers-in-windows-server-2008-r2/

    ОтветитьУдалить
  5. Так и подключался.
    По небольшому мануалу:
    http://sviptr.2h.by/HowTo/ODBCTecDoc

    ОтветитьУдалить