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

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

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

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

  1. Установите последнюю версию поставщика Microsoft OLE DB для DB2 на дистрибьютор:

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

    • Если вы используете SQL Server 2012 Standard, установите последнюю версию сервера Microsoft Host Integration Services (HIS), который включает поставщика.

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

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

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

    2. В средстве доступа к данным выполните действия, чтобы предоставить сведения о сервере DB2. После завершения средства создается универсальная ссылка на данные (UDL) с связанной строкой подключения (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;Units of Work=RUW;DBMS Platform=DB2/NT;  
    Persist Security Info=False;Connection Pooling=True;  
    

    Большинство настроек в строке зависят от настраиваемого сервера DB2, но параметр Process Binary as Character всегда должен быть установлен в 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. Создайте сценарий статьи с помощью диалекта SQL DB2. Убедитесь, что первая строка файла, bypass_translation, и больше ничего.

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

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

Помимо рекомендаций, описанных в разделе подписчики, не использующие SQL Server, обратите внимание на следующие вопросы при репликации подписчиков DB2:

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

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

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

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

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

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

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

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

Тип данных SQL Server Тип данных IBM DB2
bigint DECIMAL(19,0)
binary(1-254) CHAR(1-254) ДЛЯ БИТОВЫХ ДАННЫХ
binary(255-8000) VARCHAR(255-8000) ДЛЯ БИТОВЫХ ДАННЫХ
bit СМОЛЛИНТ
char(1-254) CHAR(1-254)
char(255-8000) VARCHAR(255-8000)
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) ДВОЙНОЙ
float ФЛОАТ
geography ИЗОБРАЖЕНИЕ
geometry ИЗОБРАЖЕНИЕ
hierarchyid ИЗОБРАЖЕНИЕ
image VARCHAR(0) FOR BIT DATA1
into ИНТ
money DECIMAL(19,4)
nchar(1-4000) VARCHAR(1-4000)
ntext VARCHAR(0)1
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)1
real РЕАЛЬНЫЙ
smalldatetime TIMESTAMP
smallint SMALLINT
smallmoney DECIMAL(10,4)
sql_variant Не применимо
sysname VARCHAR(128)
text VARCHAR(0)1
time(0-7) VARCHAR(16)
timestamp CHAR(8) для битовых данных
tinyint SMALLINT
uniqueidentifier CHAR(38)
varbinary(1-8000) VARCHAR(1-8000) ДЛЯ БИТОВЫХ ДАННЫХ
varchar(1-8000) VARCHAR(1-8000)
varbinary(max) VARCHAR(0) FOR BIT DATA1
varchar(max) VARCHAR(0)1
xml VARCHAR(0)1

1 См. следующий раздел для получения дополнительных сведений о сопоставлениях с 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 text, varchar(max), ntext, и nvarchar(max) столбцы сопоставляются с VARCHAR(0) в созданных скриптах создания. Параметр длины, равный 0, необходимо изменить на подходящее значение перед применением скрипта к подписчику. Если длина типа данных не изменилась, DB2 вызовет ошибку 604 при попытке создания таблицы на подписчике DB2 (ошибка 604 указывает, что атрибут точности или длины типа данных недопустим).

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

    Замечание

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

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

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

    В некоторых средах DB2 элемент данных SQL Server char не ограничивается однобайтными символами; необходимо учитывать длину элемента CHAR или VARCHAR. Вы также должны учитывать входной сдвиг и выходной сдвиг символов, если они необходимы. Если вы реплицируете таблицы с nchar и nvarchar столбцами, возможно, потребуется указать большую максимальную длину типа данных в пользовательском скрипте для создания. Для получения информации о задании пользовательского скрипта создания см. шаг 5 в разделе "Настройка подписчика IBM DB2" данной темы.

См. также

Подписчики, не использующие SQL Server
Подписка на публикации