Cómo especificar asignaciones de tipos de datos para un publicador de Oracle (programación de la replicación con Transact-SQL)

Aunque se proporciona un conjunto de asignaciones de tipo de datos predeterminado para los publicadores de Oracle, es posible que sea necesario especificar las diferentes asignaciones para una publicación determinada. Puede especificar asignaciones de tipo de datos personalizadas mediante programación con los procedimientos almacenados de la replicación. También puede establecer las asignaciones predeterminadas que se usan al asignar los tipos de datos entre Microsoft SQL Server y un sistema de administración de bases de datos (DBMS) que no sea de SQL Server. Para obtener más información, vea Asignar tipos de datos para publicadores de Oracle.

Para definir las asignaciones de tipo de datos personalizadas al crear un artículo que pertenece a una publicación de Oracle

  1. Si aún no existe ninguna, cree una publicación de Oracle. Para obtener más información, vea Cómo crear una publicación a partir de una base de datos de Oracle (programación de la replicación con Transact-SQL).

  2. En el distribuidor, ejecute sp_addarticle. Especifique un valor de 0 para @use_default_datatypes. Para obtener más información, vea Cómo definir un artículo (programación de la replicación con Transact-SQL).

  3. En el distribuidor, ejecute sp_helparticlecolumns para ver la asignación existente de una columna en un artículo publicado.

  4. En el distribuidor, ejecute sp_changearticlecolumndatatype. Especifique el nombre del publicador de Oracle para @publisher, así como @publication, @articley @column para definir la columna publicada. Especifique el nombre del tipo de datos de SQL Server al que asignar para @type, así como @length, @precisiony @scale, cuando corresponda.

  5. En el distribuidor, ejecute sp_articleview. Esto crea la vista usada para generar la instantánea de la publicación de Oracle.

Para especificar una asignación como la asignación predeterminada de un tipo de datos

  1. (Opcional) En cualquier base de datos del distribuidor, ejecute sp_getdefaultdatatypemapping. Especifique @source_dbms, @source_type, @destination_dbms, @destination_versiony cualquier otro parámetro necesario para identificar el DBMS de origen. Se devuelve información acerca del tipo de datos asignado actualmente en el DBMS mediante los parámetros de salida.

  2. (Opcional) En cualquier base de datos del distribuidor, ejecute sp_helpdatatypemap. Especifique @source_dbms y cualquier otro parámetro necesario para filtrar el conjunto de resultados. Tenga en cuenta el valor de mapping_id para la asignación deseada en el conjunto de resultados.

  3. En cualquier base de datos del distribuidor, ejecute sp_setdefaultdatatypemapping.

    • Si conoce el valor deseado de mapping_id obtenido en el paso 2, especifíquelo para @mapping_id.

    • Si no conoce mapping_id, especifique los parámetros @source_dbms, @source_type, @destination_dbms, @destination_typey cualquier otro parámetro necesario para identificar una asignación existente.

Para buscar los tipos de datos válidos para un tipo de datos de Oracle determinado

  • En cualquier base de datos del distribuidor, ejecute sp_helpdatatypemap. Especifique un valor de ORACLE para @source_dbms y cualquier otro parámetro necesario para filtrar el conjunto de resultados.

Ejemplo

Este ejemplo cambia una columna por un tipo de datos de Oracle NUMBER, de modo que se asigna al tipo de datos numeric(38,38) de SQL Server, en lugar del tipo de datos predeterminado float.

EXEC sp_changearticlecolumndatatype 
    @publication = 'OraPublication', 
    @publisher = 'OraPublisher', 
    @article = 'OraArticle', 
    @column = 'OraArticleCol', 
    @type = 'numeric', 
    @scale = 38, 
    @precision = 38;
GO

Esta consulta de ejemplo devuelve las asignaciones predeterminadas y alternativas para el tipo de datos de Oracle 9 CHAR.

EXEC sp_helpdatatypemap 
    @source_dbms = N'ORACLE', 
    @source_version = 9,
    @source_type = N'CHAR';
GO

Esta consulta de ejemplo devuelve las asignaciones predeterminadas para el tipo de datos de Oracle 9 NUMBER cuando se especifica sin escala o precisión.

EXEC sp_helpdatatypemap 
    @source_dbms = N'ORACLE', 
    @source_version = 9,
    @source_type = N'NUMBER',
    @defaults_only = 1;
GO