Поделиться через


Подписчики IBM Db2

Область применения: SQL Server

SQL Server поддерживает отправку подписок на IBM Db2/AS 400, DB2/MVS и DB2/Universal Database через поставщики OLE DB, включенные в сервер интеграции с узлом Майкрософт.

Настройка подписчика IBM Db2

Чтобы настроить подписчик IBM Db2, выполните следующие действия.

  1. Установите последнюю версию поставщик OLE DB для DB2 (Майкрософт) на распространителю:

    • Если вы используете SQL Server выпуск Enterprise, на веб-странице загрузки SQL Server в разделе "Связанные загрузки" щелкните ссылку на последнюю версию пакета дополнительных компонентов Microsoft SQL Server. На веб-странице с пакетом дополнительных компонентов Microsoft SQL Server найдите раздел Поставщик Microsoft OLE DB для DB2.

    • Если вы используете SQL Server выпуск Standard, установите последнюю версию сервера Служб ИНТЕГРАЦИИ Майкрософт (HIS), который включает в себя поставщика.

    Помимо установки поставщика, рекомендуется установить средство доступа к данным, которое используется на следующем шаге (оно устанавливается по умолчанию с скачиванием для SQL Server выпуск Enterprise. Дополнительные сведения об установке и использовании инструмента доступа к данным см. в документации поставщика или в документации по HIS.

  2. Создайте строку соединения для подписчика. Строку соединения можно создавать в любом текстовом редакторе, однако рекомендуется использовать средство доступа к данным. Чтобы создать строку с помощью средства доступа к данным, выполните следующие действия:

    1. Нажмите кнопку Пуск, последовательно выберите Программы, Поставщик Microsoft OLE DB для DB2, а затем выберите Средство доступа к данным.

    2. В диалоговом окне Средство доступа к даннымвыполните шаги, чтобы указать сведения о сервере DB2. После завершения работы с средством доступа к данным создается универсальная связь данных (UDL, universal data link) со связанной строкой соединения (в отличие от строки соединения, UDL не используется репликацией).

    3. Доступ к строке подключения: щелкните узел UDL правой кнопкой мыши в инструменте доступа к данным и выберите Показать строку подключения.

    Строка соединения будет аналогична следующей строке (разрывы строк добавлены для удобочитаемости):

    Provider=DB2OLEDB;Initial Catalog=MY_SUBSCRIBER_DB;Network Transport Library=TCP;Host CCSID=1252;  
    PC Code Page=1252;Network Address=MY_SUBSCRIBER;Network Port=50000;Package Collection=MY_PKGCOL;  
    Default Schema=MY_SCHEMA;Process Binary as Character=False;Derive Parameters=False;Units of Work=RUW;DBMS Platform=DB2/NT;  
    Persist Security Info=False;Connection Pooling=True;  
    

    Большинство параметров в строке уникальны для настраиваемого сервера DB2, но для параметров Process Binary as Character и Derive Parameters всегда должно быть задано значение False. Параметр Initial Catalog должен иметь значение для идентификации базы данных подписки. Если создается подписка, строка соединения вводится в мастер создания подписки.

  3. Создайте моментальный снимок или публикацию транзакций, включите ее для подписчиков, отличных от SQL Server, а затем создайте push-подписку для подписчика. Дополнительные сведения см. в статье Создание подписки для подписчика, отличного от подписчика SQL Server.

  4. При желании можно указать пользовательский скрипт создания для одной или более статей. После публикации таблицы для нее создается скрипт CREATE TABLE. Для подписчиков, отличных от SQL Server, скрипт создается на диалекте Transact-SQL, а затем преобразуется в более универсальный диалект SQL агент распространения перед применением на подписчике. Чтобы указать пользовательский скрипт создания, измените существующий скрипт Transact-SQL или создайте полный скрипт, использующий диалект SQL DB2; Если создается скрипт DB2, используйте директиву bypass_translation, чтобы агент распространения применял скрипт на подписчике без перевода.

    Сценарии могут изменяться по множеству причин, но наиболее распространенной причиной является изменение сопоставлений типов данных. Дополнительные сведения см. в подразделе «Вопросы сопоставления типов данных» этого раздела. При изменении скрипта Transact-SQL изменения должны быть ограничены изменениями сопоставления типов данных (и скрипт не должен содержать комментариев). Если требуются более существенные изменения, создайте скрипт DB2.

    Изменение скрипта статьи и предоставление его в качестве пользовательского скрипта создания

    1. После создания моментального снимка для публикации перейдите к папке моментальных снимков для публикации.

    2. Найдите файл .sch с тем же именем, что и у статьи, например MyArticle.sch.

    3. Откройте этот файл в Блокноте или в другом текстовом редакторе.

    4. Измените файл и сохраните его в другом каталоге.

    5. Выполните хранимую процедуру sp_changearticle, указав путь к файлу и имя свойства creation_script . Дополнительные сведения см. в разделе sp_changearticle (Transact-SQL).

    Создание скрипта статьи и предоставление его в качестве пользовательского скрипта создания

    1. Создайте скрипт статьи, используя разновидность языка DB2 SQL. Убедитесь, что первой строкой файла является bypass_translation, и строка не содержит больше ничего, кроме этого.

    2. Выполните хранимую процедуру sp_changearticle, указав путь к файлу и имя свойства creation_script.

Рекомендации для подписчиков IBM Db2

В дополнение к рекомендациям, приведенным в разделе Non-SQL Server Subscribers, при репликации на подписчики DB2 рассмотрите следующие вопросы:

  • Данные и индексы для каждой реплицированной таблицы назначаются табличному пространству DB2. Размер страницы табличного пространства DB2 управляет максимальным количеством столбцов и максимальным размером строк таблиц, принадлежащих табличному пространству. Основываясь на количестве реплицированных столбцов и максимальном размере строк таблиц, убедитесь, что используется подходящее табличное пространство, связанное с реплицированными таблицами.

  • Не публикуйте таблицы для подписчиков DB2 с использованием репликации транзакций, если один или более первичных ключевых столбцов в таблице относится к типу данных DECIMAL(32-38, 0-38) или NUMERIC(32-38, 0-38). Репликация транзакций идентифицирует строки, используя первичный ключ, что может привести к сбою, так как эти типы данных сопоставлены с VARCHAR(41) на подписчике. Таблицы с первичными ключами, которые используют эти типы данных, могут публиковаться с помощью репликации моментальных снимков.

  • Если хотите предварительно создать таблицы на подписчике вместо того, чтобы они были созданы репликацией, используйте параметр только поддержка репликации. Дополнительные сведения см. в статье Инициализация подписки на публикацию транзакций без моментального снимка.

  • SQL Server позволяет использовать более длинные имена таблиц и имена столбцов, чем DB2:

    • Если база данных публикации содержит таблицы с именами длиннее, чем имена, поддерживаемые на подписчике версией DB2, укажите альтернативное имя для свойства статьи destination_table. Дополнительные сведения об установке свойств во время создания публикации см. в статье, посвященной созданию публикации на SQL Server 2016, а также в статье об определении статьи.

    • Невозможно указать альтернативные имена столбцов. Обязательно убедитесь, что опубликованные таблицы не содержат имена столбцов более длинные, чем имена, поддерживаемые на подписчике версией DB2.

Сопоставление типов данных из SQL Server с IBM Db2

В следующей таблице показаны сопоставления типов данных, которые используются при репликации данных на подписчик под управлением IBM Db2.

Тип данных SQL Server Тип данных IBM Db2
bigint DECIMAL(19,0)
binary(1-254) CHAR(1-254) FOR BIT DATA
binary(255-8000) VARCHAR(255-8000) FOR BIT DATA
bit SMALLINT
char(1-254) CHAR(1-254)
char(255-8000) VARCHAR(255-8000)
date DATE
datetime TIMESTAMP
datetime2(0-7) VARCHAR(27)
datetimeoffset(0-7) VARCHAR(34)
decimal(1-31, 0-31) DECIMAL(1-31, 0-31)
decimal(32-38, 0-38) VARCHAR(41)
float(53) DOUBLE
float FLOAT
geography ИЗОБРАЖЕНИЕ
geometry ИЗОБРАЖЕНИЕ
hierarchyid ИЗОБРАЖЕНИЕ
Изображение VARCHAR(0) FOR BIT DATA*
into INT
money DECIMAL(19,4)
nchar(1-4000) VARCHAR(1-4000)
ntext VARCHAR(0)*
numeric(1-31, 0-31) DECIMAL(1-31,0-31)
numeric(32-38, 0-38) VARCHAR(41)
nvarchar(1-4000) VARCHAR(1-4000)
nvarchar(max) VARCHAR(0)*
real real
smalldatetime TIMESTAMP
smallint SMALLINT
smallmoney DECIMAL(10,4)
sql_variant Н/П
sysname VARCHAR(128)
text VARCHAR(0)*
time(0-7) VARCHAR(16)
timestamp CHAR(8) FOR BIT DATA
tinyint SMALLINT
uniqueidentifier CHAR(38)
varbinary(1-8000) VARCHAR(1-8000) FOR BIT DATA
varchar(1-8000) VARCHAR(1-8000)
varbinary(max) VARCHAR(0) FOR BIT DATA*
varchar(max) VARCHAR(0)*
xml VARCHAR(0)*
  • Дополнительные сведения о сопоставлениях с VARCHAR(0) см. в разделе ниже.

Вопросы сопоставления типов данных

При репликации на подписчики DB2 учтите следующие вопросы сопоставления типов данных:

  • При сопоставлении sql Server char, varchar, binary и varbinary с DB2 CHAR, VARCHAR, CHAR FOR BIT DATA и VARCHAR FOR BIT DATA соответственно репликация задает длину типа данных DB2 так же, как и для типа SQL Server.

    Это позволяет успешно создавать таблицы на подписчике до тех пор, пока ограничение размера страницы DB2 достаточно велико, чтобы вместить максимальный размер строки. Убедитесь, что имя входа, используемое для доступа к базе данных DB2, имеет разрешения на доступ к табличным пространствам достаточного размера для таблиц, реплицируемых в DB2.

  • DB2 может поддерживать столбцы VARCHAR размером до 32 килобайт (КБ); Поэтому некоторые столбцы больших объектов SQL Server можно сопоставить с столбцами VARCHAR DB2. Однако поставщик OLE DB, который репликация используется для DB2, не поддерживает сопоставление больших объектов SQL Server с большими объектами DB2. По этой причине текстовые столбцы SQL Server, varchar(max), ntext и nvarchar(max) сопоставляются с VARCHAR(0) в созданных скриптах создания. Значение длины 0 должно меняться на соответствующее значение до применения скрипта к подписчику. Если длина типа данных не изменяется, то при попытке создания таблицы на подписчике DB2 возникает ошибка 604 (ошибка 604 указывает на недопустимую точность или длину атрибута типа данных).

    На основе знаний исходной таблицы, которую вы реплицируете, определите, следует ли сопоставить большой объект SQL Server с элементом DB2 переменной длины и указать соответствующую максимальную длину в пользовательском скрипте создания. Сведения об указании пользовательского скрипта создания см. в разделе 5 раздела "Настройка подписчика IBM Db2" в этом разделе.

    Примечание.

    Длина, указанная для типа DB2, при объединении с другими длинами столбцов не может превышать максимальный размер строки, основанный на табличном пространстве DB2, которому назначены табличные данные.

    Если не существует соответствующего сопоставления для столбца больших объектов, рассмотрите возможность использования фильтрации для статьи, чтобы столбец не реплицировался. Дополнительные сведения см. в статье Фильтрация опубликованных данных.

  • При репликации SQL Server nchar и nvarchar в DB2 CHAR и VARCHAR репликация использует тот же описатель длины для типа DB2, что и для типа SQL Server. Однако длина типа данных может быть слишком мала для созданной таблицы DB2.

    В некоторых средах DB2 элемент данных char SQL Server не ограничен однобайтовых символов; длина элемента CHAR или VARCHAR должна учитываться. Следует также принять во внимание символы shift in (сдвиг внутрь) и shift out (сдвиг наружу), если в них есть необходимость. При репликации таблиц со столбцами nchar и nvarchar , возможно, потребуется увеличить максимальную длину для типа данных в пользовательском скрипте создания. Сведения об указании пользовательского скрипта создания см. в разделе 5 раздела "Настройка подписчика IBM Db2" в этом разделе.