Mapeamento de tipo de dados para Publicadores Oracle
Tipos de dados de Oracle e tipos de dados de Microsoft SQL Server nem sempre correspondem exatamente. Onde possível, o tipo de dados correspondente é selecionado automaticamente ao publicar uma tabela de Oracle. Em casos em que o mapeamento de um único tipo de dados não é claro, mapeamentos alternativos de tipo de dados são fornecidos. Para obter informações sobre como selecionar mapeamentos alternativos, consulte "Especificando Mapeamentos Alternativos de Tipos de Dados”, mais adiante neste tópico.
A tabela a seguir mostra como os tipos de dados são mapeados por padrão entre o Oracle e o SQL Server quando os dados são movidos de um Publicador Oracle para o Distribuidor do SQL Server. A coluna de Alternativas indica se mapeamentos alternativos estão disponíveis.
Tipo de dados de Oracle |
Tipos de dados SQL Server |
Alternativas |
---|---|---|
BFILE |
VARBINARY(MAX) |
Sim |
BLOB |
VARBINARY(MAX) |
Sim |
CHAR([1-2000]) |
CHAR([1-2000]) |
Sim |
CLOB |
VARCHAR(MAX) |
Sim |
DATE |
DATETIME |
Sim |
FLOAT |
FLOAT |
Não |
FLOAT ([1-53]) |
FLOAT ([1-53]) |
Não |
FLOAT ([54-126]) |
FLOAT |
Não |
INT |
NUMERIC(38) |
Sim |
INTERVAL |
DATETIME |
Sim |
LONG |
VARCHAR(MAX) |
Sim |
LONG RAW |
IMAGE |
Sim |
NCHAR([1-1000]) |
NCHAR([1-1000]) |
Não |
NCLOB |
NVARCHAR(MAX) |
Sim |
NUMBER |
FLOAT |
Sim |
NUMBER([1-38]) |
NUMERIC([1-38]) |
Não |
NUMBER([0-38],[1-38]) |
NUMERIC([0-38],[1-38]) |
Sim |
NVARCHAR2 ([1-2000]) |
NVARCHAR([1-2000]) |
Não |
RAW ([1-2000]) |
VARBINARY([1-2000]) |
Não |
REAL |
FLOAT |
Não |
ROWID |
CHAR([1-2000]) |
Não |
TIMESTAMP |
DATETIME |
Sim |
TIMESTAMP(0-7) |
DATETIME |
Sim |
TIMESTAMP(8-9) |
DATETIME |
Sim |
TIMESTAMP(0-7) WITH TIME ZONE |
VARCHAR(37) |
Sim |
TIMESTAMP(8-9) WITH TIME ZONE |
VARCHAR(37) |
Não |
TIMESTAMP(0-7) WITH LOCAL TIME ZONE |
VARCHAR(37) |
Sim |
TIMESTAMP(8-9) WITH LOCAL TIME ZONE |
VARCHAR(37) |
Não |
UROWID |
CHAR(18) |
Não |
VARCHAR2([1-4000]) |
VARCHAR([1-4000]) |
Sim |
Considerações para o mapeamento do tipo de dados
Pense nos seguintes problemas de tipo de dados ao replicar dados de um banco de dados de Oracle.
Tipos de dados sem suporte
Os seguintes tipos de dados não têm suporte; não podem ser replicadas as colunas que têm estes tipos:
Tipos de objeto
Tipos XML
Varrays
Tabelas aninhadas
Colunas que usam REF
O tipo de dados de DATE.
As datas no SQL Server vão de 1753 a.C. a 9999 d.C. enquanto as datas no Oracle vão de 4712 a.C. a 4712 d.C. Se uma coluna do tipo DATE contém valores que estão fora do intervalo do SQL Server, selecione um tipo de dados alternativo para a coluna, que é VARCHAR(19).
Tipos FLOAT e NUMBER
A escala e precisão especificadas durante o mapeamento de tipos de dados FLOAT e NUMBER dependem da escala e precisão especificadas para a coluna usando o tipo de dados no banco de dados do Oracle. A precisão é o número de dígitos em um número. A escala é o número de dígitos à direita da casa decimal em um número. Por exemplo, o número 123,45 tem uma precisão de 5 e uma escala de 2.
O Oracle permite números a serem definidos com a escala maior que a precisão, tal como NUMBER(4,5), mas o SQL Server requer que a precisão seja igual ou maior que a escala. Para garantir que não há truncamento de dados, se a escala for maior que a precisão no Publicador Oracle, a precisão é definida igual à escala quando o tipo de dados for mapeado: NUMBER (4,5) ele seria mapeado como NUMERIC (5,5).
Observação |
---|
Se você não especificar a escala e a precisão para NUMBER, o SQL Server usa o padrão máximo de escala (8) e precisão (38). É recomendável que você defina uma escala e precisão específicas no Oracle para melhor armazenamento e desempenho quando os dados forem replicados. |
Tipos de objeto grande
O Oracle suporta até 4 gigabytes (GB), enquanto que o SQL Server suporta até 2 GB. Dados replicados acima de 2 GB são truncados.
Se uma tabela de Oracle incluir uma coluna de BFILE, os dados para a coluna serão armazenados no sistema de arquivos. A conta do usuário administrativo da replicação deve receber acesso ao diretório no qual os dados estão armazenados usando a seguinte sintaxe:
GRANT READ ON DIRECTORY <directory_name> TO <replication_administrative_user_schema>
Para obter mais informações sobre tipos de objetos grandes, consulte a seção "Considerações sobre objetos grandes" em Considerações de design e limitações para Editores Oracle.
Especificando mapeamentos alternativos de tipo de dados
Tipicamente, o padrão de mapeamento de tipo de dados é apropriado, porém para muitos tipos de dados do Oracle, você pode selecionar um mapeamento de tipo de dados a partir de um conjunto de mapeamentos alternativos, ao invés de usar o padrão. Há dois modos para especificar os mapeamentos alternativos:
Substitua o padrão em uma base por artigo usando procedimentos armazenados ou o Assistente para Nova Publicação .
Globalmente altere o padrão para todos os artigos futuros usando procedimentos armazenados (não são alterados os padrões para os artigos existentes).
Para especificar mapeamentos alternativos de tipo de dados
SQL Server Management Studio: Como especificar mapeamentos de tipo de dados para o Editor Oracle (SQL Server Management Studio)
Programação da replicação: Como especificar mapeamentos de tipo de dados para um Editor Oracle (Programação Transact-SQL de replicação)