Como especificar mapeamentos de tipo de dados para um Editor Oracle (Programação Transact-SQL de replicação)

Embora um conjunto de mapeamentos de tipo de dados padrão seja fornecidos para Editores Oracle, pode ser necessário especificar diferentes mapeamentos para determinada publicação. Você pode especificar programaticamente mapeamentos de tipo de dados personalizados usando procedimentos armazenados de replicação. Você pode também definir os mapeamentos padrão que são usados ao mapear tipos de dados entre o Microsoft SQL Server e um DBMS (sistema de gerenciamento de banco de dados) não-SQL Server. Para obter mais informações, consulte Mapeamento de tipo de dados para Publicadores Oracle.

Para definir mapeamentos de tipo de dados personalizados ao criar um artigo que pertence a uma publicação Oracle

  1. Se já não houver uma, crie uma publicação Oracle. Para obter mais informações, consulte Como criar uma publicação de um banco de dados Oracle (Programação Transact-SQL de replicação).

  2. No Distribuidor, execute sp_addarticle. Especifique um valor 0 para @ use_default_datatypes. Para obter mais informações, consulte Como definir um artigo (Programação Transact-SQL de replicação).

  3. No Distribuidor, execute sp_helparticlecolumns para exibir o mapeamento existente para uma coluna em um artigo publicado.

  4. No Distribuidor, execute sp_changearticlecolumndatatype. Especifique o nome do Editor Oracle para @publisher, assim como para @publication, @article e @column, para definir a coluna publicada. Especifique o nome do tipo de dados do SQL Server a mapear para @type, assim como para @length, @precision e @scale, onde aplicável.

  5. No Distribuidor, execute sp_articleview. Isso cria a exibição usada para gerar o instantâneo da publicação Oracle.

Para especificar um mapeamento como mapeamento padrão para um tipo de dados

  1. (Opcional) No Distribuidor de qualquer banco de dados, execute sp_getdefaultdatatypemapping. Especifique @source_dbms, @source_type, @destination_dbms, @destination_version e quaisquer outros parâmetros necessários para identificar a DBMS de origem. As informações sobre o tipo de dados atualmente mapeados no DBMS de destino são retornadas usando os parâmetros de saída.

  2. (Opcional) Para o Distribuidor em qualquer banco de dados, execute sp_helpdatatypemap. Especifique @source_dbms e quaisquer outros parâmetros necessários para filtrar o conjunto de resultados. Observe o valor de mapping_id para o mapeamento desejado no conjunto de resultados.

  3. (Opcional) No Distribuidor em qualquer banco de dados, execute sp_getdefaultdatatypemapping.

    • Se você souber o valor desejado de mapping_id obtido na etapa 2, especifique-o para @mapping_id.

    • Se não souber o @source_dbms, especifique os parâmetros @source_dbms, @source_type, @destination_dbms, @destination_type e quaisquer outros parâmetros necessários para identificar um mapeamento existente.

Para localizar tipos de dados válidos para um determinado tipo de dados Oracle

  • No Distribuidor em qualquer banco de dados, execute sp_helpdatatypemap. Especifique um valor de ORACLE para @source_dbms e quaisquer outros parâmetros necessários para filtrar o conjunto de resultados.

Exemplo

Este exemplo altera uma coluna com um tipo de dados Oracle de NUMBER de modo que ele seja mapeado ao tipo de dados numérico(38,38) do SQL Server, em vez do tipo de dados padrão flutuante.

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

Este exemplo de consulta retorna os mapeamentos padrão e mapeamentos alternativos para o tipo de dados CHAR do Oracle 9.

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

Este exemplo de consulta retorna os mapeamentos padrão para o tipo de dados NUMBER do Oracle 9 quando ele é especificado sem uma escala ou precisão.

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