Как указать сопоставления типов данных для издателя Oracle (программирование репликации на языке Transact-SQL)
Хотя в списке для издателей Oracle имеется набор сопоставлений типов данных, для отдельных публикаций может потребоваться создание дополнительных сопоставлений. Пользовательские сопоставления типов данных могут быть заданы программно с помощью хранимых процедур репликации. Кроме того, можно задать сопоставления данных по умолчанию, которые будут использоваться при сопоставлении типов данных между базами данных MicrosoftSQL Server и базами данных других поставщиков. Дополнительные сведения см. в разделе Сопоставление типов данных для издателей Oracle.
Определение пользовательского сопоставления данных при создании статьи, принадлежащей публикации Oracle
Если публикация Oracle не существует, ее необходимо создать. Дополнительные сведения см. в разделе Как создать публикацию из базы данных Oracle (программирование репликации на языке Transact-SQL).
На распространителе выполните хранимую процедуру sp_addarticle. В параметре @use_default_datatypes укажите значение 0. Дополнительные сведения см. в разделе Как определить статью (программирование репликации на языке Transact-SQL).
Чтобы просмотреть существующие сопоставления для столбца в опубликованной статье, выполните хранимую процедуру sp_helparticlecolumns.
На распространителе выполните хранимую процедуру sp_changearticlecolumndatatype. Чтобы определить опубликованный столбец, укажите имя издателя Oracle в параметре @publisher и задайте значения параметров @publication, @article и @column. Укажите имя типа данных SQL Server, сопоставляемого с типом @type, и при необходимости задайте значения параметров @length, @precision и @scale.
На распространителе выполните хранимую процедуру sp_articleview. Она создаст представление, используемое для создания моментального снимка из публикации Oracle.
Назначение для типа данных сопоставления по умолчанию
(Необязательно) На распространителе в любой базе данных выполните хранимую процедуру sp_getdefaultdatatypemapping. Укажите значения параметров @source_dbms, @source_type, @destination_dbms, @destination_version и других параметров, необходимых для идентификации базы данных-источника. Сведения о текущем сопоставлении типа данных в целевой базе данных возвращаются в выходных параметрах.
На распространителе в любой базе данных выполните хранимую процедуру sp_helpdatatypemap (необязательно). Укажите значение параметра @source_dbms и других параметров, необходимых для фильтрации результирующего набора. В результирующем наборе просмотрите значение параметра mapping_id для текущего сопоставления.
На распространителе в любой базе данных выполните хранимую процедуру sp_setdefaultdatatypemapping (необязательно).
Если известно необходимое значение параметра mapping_id, полученное на шаге 2, укажите его в параметре @mapping_id.
Если значение mapping_id неизвестно, то необходимо указать значения параметров @source_dbms, @source_type, @destination_dbms, @destination_type и других параметров, необходимых для идентификации существующего сопоставления.
Определение допустимых типов данных, соответствующих типу данных Oracle
- На распространителе в любой базе данных выполните хранимую процедуру sp_helpdatatypemap. Укажите значение ORACLE в параметре @source_dbms и задайте значения других параметров, необходимых для фильтрации результирующего набора.
Пример
Следующий пример производит сопоставление столбца данных Oracle типа NUMBER с типом данных SQL Server numeric(38,38) вместо типа данных float, используемого по умолчанию.
EXEC sp_changearticlecolumndatatype
@publication = 'OraPublication',
@publisher = 'OraPublisher',
@article = 'OraArticle',
@column = 'OraArticleCol',
@type = 'numeric',
@scale = 38,
@precision = 38;
GO
Следующий пример запроса возвращает два сопоставления для типа данных Oracle 9 CHAR: определенное по умолчанию и альтернативное.
EXEC sp_helpdatatypemap
@source_dbms = N'ORACLE',
@source_version = 9,
@source_type = N'CHAR';
GO
Следующий пример запроса возвращает сопоставления по умолчанию для типа данных Oracle 9 NUMBER, когда он указан без масштаба и точности.
EXEC sp_helpdatatypemap
@source_dbms = N'ORACLE',
@source_version = 9,
@source_type = N'NUMBER',
@defaults_only = 1;
GO