IBM DB2 Subscribers
SQL Server поддерживает принудительные подписки на IBM DB2/AS 400, DB2/MVS и DB2/Universal Database через поставщики OLE DB, включенные в состав Microsoft Host Integration Server.
Настройка подписчика IBM DB2
Чтобы настроить подписчик IBM DB2, выполните следующие шаги:
Установите последнюю версию поставщика Microsoft OLE DB для DB2 на распространитель:
Если вы используете Microsoft SQL Server 2012 Enterprise, на веб-странице загрузки SQL Server 2008 в разделе Связанные загрузки щелкните ссылку на последнюю версию пакета дополнительных компонентов Microsoft SQL Server 2008. На веб-странице Пакет дополнительных компонентов Microsoft SQL Server 2008 найдите раздел Поставщик данных OLE DB для DB2 (Майкрософт).
Если вы используете SQL Server 2012 Standard, установите последнюю версию сервера Microsoft Host Integration Services (HIS), который включает поставщика.
В дополнение к установке поставщика рекомендуется установить средство доступа к данным, которое будет использоваться на следующем шаге (оно устанавливается по умолчанию вместе с загрузкой для SQL Server 2012 Enterprise). Дополнительные сведения об установке и использовании инструмента доступа к данным см. в документации поставщика или в документации по HIS.
Создайте строку соединения для подписчика. Строку соединения можно создавать в любом текстовом редакторе, однако рекомендуется использовать средство доступа к данным. Чтобы создать строку с помощью средства доступа к данным, выполните следующие действия:
Нажмите кнопку Пуск, последовательно выберите Программы, Поставщик Microsoft OLE DB для DB2, а затем выберите Средство доступа к данным.
В диалоговом окне Средство доступа к даннымвыполните шаги, чтобы указать сведения о сервере DB2. После завершения работы с средством доступа к данным создается универсальная связь данных (UDL, universal data link) со связанной строкой соединения (в отличие от строки соединения, UDL не используется репликацией).
Доступ к строке подключения: щелкните узел 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
должен иметь значение для идентификации базы данных подписки. Если создается подписка, строка соединения вводится в мастер создания подписки.Создайте публикацию моментальных снимков или публикацию транзакций, активируйте ее для подписчиков, отличных отSQL Server , а затем создайте принудительную подписку для подписчика. Дополнительные сведения см. в статье Создание подписки для подписчика, отличного от подписчика SQL Server.
При желании можно указать пользовательский скрипт создания для одной или более статей. При публикации таблицы для нее создается скрипт CREATE TABLE. Для подписчиков, не являющихся SQL Server, скрипт создается на диалекте Transact-SQL, а затем преобразуется в более универсальный диалект SQL с помощью агент распространения перед применением на подписчике. Чтобы указать пользовательский скрипт создания, измените существующий скрипт Transact-SQL или создайте полный скрипт, использующий диалект SQL DB2; При создании скрипта DB2 используйте директиву bypass_translation, чтобы агент распространения применил скрипт на подписчике без перевода.
Сценарии могут изменяться по множеству причин, но наиболее распространенной причиной является изменение сопоставлений типов данных. Дополнительные сведения см. в подразделе «Вопросы сопоставления типов данных» этого раздела. При изменении скрипта Transact-SQL изменения должны быть ограничены изменениями сопоставления типов данных (и скрипт не должен содержать комментариев). Если требуются более существенные изменения, создайте скрипт DB2.
Изменение скрипта статьи и предоставление его в качестве пользовательского скрипта создания
После создания моментального снимка для публикации перейдите к папке моментальных снимков для публикации.
Найдите файл .sch с тем же именем, что и у статьи, например MyArticle.sch.
Откройте этот файл в Блокноте или в другом текстовом редакторе.
Измените файл и сохраните его в другом каталоге.
Выполните хранимую процедуру sp_changearticle, указав путь к файлу и имя свойства creation_script. Дополнительные сведения см. в разделе sp_changearticle (Transact-SQL).
Создание скрипта статьи и предоставление его в качестве пользовательского скрипта создания
Создайте скрипт статьи, используя разновидность языка DB2 SQL. Убедитесь, что первой строкой файла является bypass_translation, и строка не содержит больше ничего, кроме этого.
Выполните хранимую процедуру 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 |
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 |
ВЕЩЕСТВЕННОЕ ЧИСЛО |
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 учтите следующие вопросы сопоставления типов данных:
При сопоставлении
char
SQL Server ,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 Server
text
,varchar(max)
,ntext
иnvarchar(max)
сопоставляются с VARCHAR(0) в созданных скриптах создания. Значение длины 0 должно меняться на соответствующее значение до применения скрипта к подписчику. Если длина типа данных не изменяется, то при попытке создания таблицы на подписчике DB2 возникает ошибка 604 (ошибка 604 указывает на недопустимую точность или длину атрибута типа данных).На основе своих знаний исходной реплицируемой таблицы определите, подходит ли она для сопоставления большого объекта SQL Server с элементом DB2 переменной длины, и укажите соответствующую максимальную длину в пользовательском скрипте создания. Сведения об указании пользовательского скрипта создания см. в описании шага 5 в подразделе «Настройка подписчика IBM DB2» данного раздела.
Примечание
Длина, указанная для типа DB2, при объединении с другими длинами столбцов не может превышать максимальный размер строки, основанный на табличном пространстве DB2, которому назначены табличные данные.
Если не существует соответствующего сопоставления для столбца больших объектов, рассмотрите возможность использования фильтрации для статьи, чтобы столбец не реплицировался. Дополнительные сведения см. в статье Фильтрация опубликованных данных.
При репликации SQL Server
nchar
и в DB2 CHAR и VARCHAR репликация использует тот же описатель длины для типа DB2, что иnvarchar
для типа SQL Server. Однако длина типа данных может быть слишком мала для созданной таблицы DB2.В некоторых средах DB2 элемент данных SQL Server
char
не ограничивается однобайтовыми символами. Это необходимо учитывать при длине элемента CHAR или VARCHAR. Следует также принять во внимание символы shift in (сдвиг внутрь) и shift out (сдвиг наружу), если в них есть необходимость. При репликации таблиц соnchar
столбцами иnvarchar
может потребоваться указать большую максимальную длину для типа данных в пользовательском скрипте создания. Сведения об указании пользовательского скрипта создания см. в описании шага 5 в подразделе «Настройка подписчика IBM DB2» данного раздела.