Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo argomento contiene le sezioni seguenti relative alla risoluzione dei problemi tra il provider OLE DB per DB2 e SQL Server (provider di dati) e SQL Server.
Mapping dei tipi di dati non corretti
Impossibile replicare le colonne DATETIME2 nelle colonne TIMESTAMP di DB2
Per altre informazioni sulla replica di SQL Server, vedere Guida per gli sviluppatori (replica) (https://go.microsoft.com/fwlink/?LinkId=193231) nella documentazione online di SQL Server.
Mappatura errata dei tipi di dati
La replica di SQL Server può convertire i dati in modo non corretto, in base ai mapping predefiniti da SQL Server a tipi di dati DB2. Consigliamo all'amministratore e allo sviluppatore di esaminare e rivedere le mappature dei tipi di dati di replica usando le seguenti stored procedure di sistema di SQL Server.
sp_helpdatatypemap
sp_getdefaultdatatypemapping
sp_setdefaultdatatypemapping
Per altre informazioni, vedere [Stored procedure di sistema (Transact-SQL)](https://go.microsoft.com/fwlink/?LinkID=180765\).
Errore durante la replica delle colonne DATETIME2 in colonne TIMESTAMP DB2
Problema
La replica di SQL Server 2008 in DB2 per z/OS potrebbe non riuscire con SQLCODE -188 (la rappresentazione di stringa di un valore datetime non è un valore datetime valido). Ciò si verifica quando la Replicazione è configurata per associare DATETIME2 a DB2 VARCHAR(27) e utilizza i comandi dell'articolo della sottoscrizione con valori di stringa letterali.
Soluzione
Riconfigurare la replica di SQL Server 2008 per eseguire il mapping di DATETIME2 a TIMESTAMP in DB2 e i comandi degli articoli di sottoscrizione con parametri. Ciò consente al provider di dati di formattare il DATETIME2 come struttura DB2 TIMESTAMP supportata dal server di database IBM DB2.
Istruzioni dettagliate
Passaggio 1. Identificare la mappatura dei tipi di dati da modificare.
USE MASTER per tutti i passaggi.
select * from sys.fn_helpdatatypemap
(
'MSSQLSERVER',
'%',
'%',
'%',
'%',
'%',
0
)
where destination_dbms = 'DB2' and source_type = 'datetime2'
I risultati devono indicare il mapping_id da modificare. Nella tabella seguente viene illustrato il riquadro dei risultati per questo esempio in cui il mapping_id è 189.
| mapping_id | source_dbms | tipo_di_sorgente | destination_dbms | tipo_destinazione | destination_length |
|---|---|---|---|---|---|
| 189 | MSSQLSERVER | datetime2 | DB2 | VARCHAR | 27 |
Passaggio 2. Eliminare il mapping dei tipi di dati.
exec sp_dropdatatypemapping 189
Passaggio 3. Aggiungere il mapping del tipo di dati.
exec sp_adddatatypemapping
@source_dbms = 'MSSQLSERVER',
@source_type = 'datetime2',
@destination_dbms = 'DB2',
@destination_type = 'TIMESTAMP',
@destination_nullable = 1,
@destination_createparams = 0,
@dataloss = 0,
@is_default = 1
Passaggio 4. Eseguire di nuovo la query per verificare il nuovo mapping del tipo di dati.
select * from sys.fn_helpdatatypemap
(
'MSSQLSERVER',
'%',
'%',
'%',
'%',
'%',
0
)
where destination_dbms = 'DB2' and source_type = 'datetime2'
I risultati dovrebbero visualizzare il nuovo mapping dei tipi di dati. In questo esempio il mapping_id illustrato nella tabella seguente è 189.
| ID di mappatura | source_dbms | tipo_di_sorgente | dbms di destinazione | tipo_di_destinazione | lunghezza della destinazione |
|---|---|---|---|---|---|
| 494 | MSSQLSERVER | datetime2 | DB2 | TIMESTAMP | NULLO |
Passaggio 5. Identificare l'articolo relativo alla sottoscrizione di replica da riconfigurare. Utilizzare l'istruzione Transact-SQL USE per passare dal database master al database da cui si esegue la replica.
USE [Test]
select name, status from sysarticles
I risultati devono visualizzare il nome dell'articolo da modificare. In questo esempio la tabella seguente mostra i risultati in cui il nome è DB2TS01.
| nome | stato |
|---|---|
| DB2TS01 | 25 |
Se il valore di stato è 1 o 9, l'articolo viene configurato per la formattazione letterale stringa.
Se il valore di stato è 17 o 25, l'articolo viene configurato per la formattazione con parametri.
Passaggio 6. Configurare l'articolo relativo alla sottoscrizione di replica per i comandi con parametri.
USE [Test]
DECLARE @publication AS sysname;
DECLARE @article AS sysname;
SET @publication = N'DB2TS_PUB01';
SET @article = N'DB2TS01';
EXEC sp_changearticle @publication, @article, 'status' , 'parameters' , 0 , 0;
Per ulteriori informazioni, vedere Concetti relativi alle stored procedure di sistema di replica (https://go.microsoft.com/fwlink/?LinkId=193232) in SQL Server Books Online.
L'operazione INSERT di replica ha esito negativo con l'errore 8152: i dati stringa o binari verrebbero troncati.
Problema
L'operazione INSERT di replica di SQL Server potrebbe non riuscire con l'errore di SQL Server 8152 (i dati stringa o binari verrebbero troncati). Ciò può verificarsi quando (1) Il provider di dati non è configurato per l'uso dei metadati iniziali e (2) La replica non è configurata per l'uso di istruzioni INSERT con parametri.
Soluzione
Passaggio 1. Riconfigurare la connessione al provider di dati per specificare "Use Early Metadata=true" nella definizione dell'origine dati del Sottoscrittore di replica di SQL Server.
Per ulteriori informazioni, consultare Configurare i fornitori di dati per i collegamenti dati DB2 (DB2) - tutte le proprietà nella documentazione del provider OLE DB per DB2.
Passaggio 2 Riconfigurare l'articolo relativo alla sottoscrizione di replica di SQL Server per includere l'opzione "24" ("Include il nome della colonna nelle istruzioni INSERT e usa istruzioni con parametri).").
Per altre informazioni, vedere Replica di SQL Server sp_addarticle (Transact-SQL) nella documentazione di SQL Server.