Mapping dei tipi di dati per i server di pubblicazione Oracle
I tipi di dati Oracle e i tipi di dati Microsoft SQL Server non sempre corrispondono in modo preciso. Se possibile, durante la pubblicazione di una tabella Oracle viene selezionato automaticamente il tipo di dati corrispondente. Nei casi in cui il mapping di un singolo tipo di dati non risulti chiaro, vengono forniti mapping di tipi di dati alternativi. Per informazioni sulla selezione di mapping alternativi, vedere la sezione "Specifica di mapping di tipi di dati alternativi" più avanti in questo argomento.
Nella tabella seguente viene illustrato il mapping predefinito tra i tipi di dati Oracle e SQL Server quando i dati del server di pubblicazione Oracle vengono spostati nel server di distribuzione SQL Server. La colonna Alternativi indica se sono disponibili mapping alternativi.
Tipo di dati Oracle |
Tipo di dati di SQL Server |
Alternativi |
---|---|---|
BFILE |
VARBINARY(MAX) |
Sì |
BLOB |
VARBINARY(MAX) |
Sì |
CHAR([1-2000]) |
CHAR([1-2000]) |
Sì |
CLOB |
VARCHAR(MAX) |
Sì |
DATE |
DATETIME |
Sì |
FLOAT |
FLOAT |
No |
FLOAT([1-53]) |
FLOAT([1-53]) |
No |
FLOAT([54-126]) |
FLOAT |
No |
INT |
NUMERIC(38) |
Sì |
INTERVAL |
DATETIME |
Sì |
LONG |
VARCHAR(MAX) |
Sì |
LONG RAW |
IMAGE |
Sì |
NCHAR([1-1000]) |
NCHAR([1-1000]) |
No |
NCLOB |
NVARCHAR(MAX) |
Sì |
NUMBER |
FLOAT |
Sì |
NUMBER([1-38]) |
NUMERIC([1-38]) |
No |
NUMBER([0-38],[1-38]) |
NUMERIC([0-38],[1-38]) |
Sì |
NVARCHAR2([1-2000]) |
NVARCHAR([1-2000]) |
No |
RAW([1-2000]) |
VARBINARY([1-2000]) |
No |
REAL |
FLOAT |
No |
ROWID |
CHAR(18) |
No |
TIMESTAMP |
DATETIME |
Sì |
TIMESTAMP(0-7) |
DATETIME |
Sì |
TIMESTAMP(8-9) |
DATETIME |
Sì |
TIMESTAMP(0-7) WITH TIME ZONE |
VARCHAR(37) |
Sì |
TIMESTAMP(8-9) WITH TIME ZONE |
VARCHAR(37) |
No |
TIMESTAMP(0-7) WITH LOCAL TIME ZONE |
VARCHAR(37) |
Sì |
TIMESTAMP(8-9) WITH LOCAL TIME ZONE |
VARCHAR(37) |
No |
UROWID |
CHAR(18) |
No |
VARCHAR2([1-4000]) |
VARCHAR([1-4000]) |
Sì |
Considerazioni sul mapping dei tipi di dati
Durante la replica di dati da un database Oracle, è opportuno considerare i problemi relativi ai tipi di dati riportati di seguito.
Tipi di dati non supportati
I tipi di dati seguenti non sono supportati e pertanto non è possibile replicare le colonne che li contengono:
Tipi di oggetti
Tipi XML
Matrici con dimensione variabile
Tabelle nidificate
Colonne che utilizzano REF
Tipo di dati DATE
Le date in SQL Server sono comprese nell'intervallo dal 1753 D.C. al 9999 D.C., mentre le date in Oracle sono comprese nell'intervallo dal 4712 A.C. al 4712 D.C. Se una colonna di tipo DATE contiene valori non compresi nell'intervallo di SQL Server, selezionare il tipo di dati alternativo per la colonna, ovvero VARCHAR(19).
Tipi FLOAT e NUMBER
La scala e la precisione specificate durante il mapping dei tipi di dati FLOAT e NUMBER dipende dalla scala e dalla precisione specificate per la colonna che utilizza il tipo di dati nel database Oracle. La precisione è il numero di cifre in un numero. La scala è il numero di cifre a destra della virgola decimale in un numero. Il numero 123,45, ad esempio, ha una precisione di 5 e una scala di 2.
In Oracle è possibile definire i numeri con una scala maggiore della precisione, ad esempio NUMBER(4,5), mentre in SQL Server la precisione deve essere uguale o maggiore della scala. Per garantire che i dati non vengano troncati, se la scala è maggiore della precisione nel server di pubblicazione Oracle, la precisione viene impostata su un valore uguale a quello della scala quando si esegue il mapping del tipo di dati. NUMBER(4,5) verrebbe mappato come NUMERIC(5,5).
Nota
Se non si specifica una scala e una precisione per NUMBER, in SQL Server vengono automaticamente utilizzate la scala massima (8) e la precisione massima (38). Per migliorare le prestazioni e le operazioni di archiviazione durante la replica dei dati, è consigliabile impostare una scala e una precisione specifiche in Oracle.
Tipi di oggetti di grandi dimensioni
Oracle supporta fino a 4 GB, mentre SQL Server supporta fino a 2 GB. I dati replicati superiori a 2 GB vengono troncati.
Se una tabella Oracle include una colonna BFILE, i dati della colonna vengono archiviati nel file system. È necessario concedere all'account utente di amministrazione della replica l'accesso alla directory in cui vengono archiviati i dati utilizzando la sintassi seguente:
GRANT READ ON DIRECTORY <directory_name> TO <replication_administrative_user_schema>
Per ulteriori informazioni sui tipi di oggetti di grandi dimensioni, vedere la sezione "Considerazioni sugli oggetti di grandi dimensioni" in Considerazioni e limitazioni relative alla progettazione dei server di pubblicazione Oracle.
Specifica di mapping di tipi di dati alternativi
Generalmente, è consigliabile utilizzare il mapping del tipo di dati predefinito, ma per molti tipi di dati Oracle è possibile selezionarne uno da un set di mapping alternativi, anziché utilizzare quello predefinito. È possibile specificare mapping alternativi in due modi:
Mediante l'override del mapping predefinito per ogni singolo articolo, utilizzando le stored procedure o la Creazione guidata nuova pubblicazione.
Mediante una modifica globale del mapping predefinito per tutti gli articoli futuri utilizzando stored procedure (i mapping predefiniti non vengono modificati per gli articoli esistenti).
Per specificare mapping di tipi di dati alternativi
SQL Server Management Studio: Procedura: Specifica dei mapping tra i tipi di dati di un server di pubblicazione Oracle (SQL Server Management Studio)
Programmazione della replica: Procedura: Specifica dei mapping tra i tipi di dati di un server di pubblicazione Oracle (programmazione Transact-SQL della replica)