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

Microsoft SQL Server поддерживает принудительные подписки на IBM DB2/AS 400, DB2/MVS и DB2/Universal Database через поставщики OLE DB, включенные в состав Microsoft Host Integration Server.

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

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

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

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

    • При использовании выпуска SQL Server 2008 Standard установите последнюю версию сервера служб Microsoft Host Integration Services (HIS), содержащего этот поставщик.

    В дополнение к установке поставщика рекомендуется установить инструмент доступа к данным, который применяется на следующем шаге (он устанавливается по умолчанию вместе с загрузкой SQL Server 2008 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;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, а затем создайте принудительную подписку для подписчика. Дополнительные сведения см. в следующих разделах.

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

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

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

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

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

  • SQL Server допускает наличие более длинных имен таблиц и столбцов, чем 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

IMAGE

geometry

IMAGE

hierarchyid

IMAGE

image

VARCHAR(0) FOR BIT DATA1

into

INT

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

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) 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 DATA1

varchar(max)

VARCHAR(0)1

xml

VARCHAR(0)1

1 Дополнительные сведения о сопоставлениях с VARCHAR(0) см. в следующем разделе.

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

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

  • При сопоставлении типов данных SQL Serverchar, 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 могут соответствующим образом сопоставляться со столбцами DB2 типа VARCHAR. Однако поставщик OLE DB, используемый репликацией для DB2, не поддерживает сопоставление больших объектов SQL Server с большими объектами DB2. По этой причине столбцы SQL Servertext, varchar(max), ntext и nvarchar(max) в создаваемых сценариях сопоставляются с типом VARCHAR(0). Значение длины 0 должно меняться на соответствующее значение до применения сценария к подписчику. Если длина типа данных не изменяется, то при попытке создания таблицы на подписчике DB2 возникает ошибка 604 (ошибка 604 указывает на недопустимую точность или длину атрибута типа данных).

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

    ПримечаниеПримечание

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

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

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

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