Replica di SQL Server (risoluzione dei problemi)
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
Errore durante la replica di colonne DATETIME2 in colonne TIMESTAMP DB2
Per altre informazioni su replica di SQL Server, vedere La Guida per gli sviluppatori (replica) (https://go.microsoft.com/fwlink/?LinkId=193231) nella documentazione online di SQL Server.
Mapping dei tipi di dati non corretti
È possibile che la replica di SQL Server converta erroneamente i dati, in base ai mapping predefiniti, dai tipi di dati di SQL Server a quelli di DB2. È consigliabile che l'amministratore e lo sviluppatore esaminino e verifichino i mapping dei tipi di dati di replica utilizzando le stored procedure di sistema di SQL Server riportate di seguito.
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 di colonne DATETIME2 in colonne TIMESTAMP DB2
Problema
La replica di SQL Server 2008 in DB2 per z/OS può generare un errore con SQLCODE -188 (la rappresentazione stringa di un valore datetime non è un valore datetime valido). Questo problema si verifica quando la replica è configurata per il mapping di DATETIME2 a DB2 VARCHAR(27) e utilizza i comandi dell'articolo di sottoscrizione con valori di dati letterali stringa.
Soluzione
Riconfigurare la replica di SQL Server 2008 per il mapping di DATETIME2 a DB2 TIMESTAMP e riconfigurare i comandi dell'articolo di sottoscrizione con i parametri. In questo modo, DATETIME2 viene convertito dal provider di dati nel formato di una struttura DB2 TIMESTAMP supportata dal server di database IBM DB2.
Istruzioni dettagliate
Passaggio 1. Identificare il mapping 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'
Nei risultati deve essere indicato il nuovo mapping dei tipi di dati. Nella tabella seguente è illustrato il riquadro dei risultati relativo all'esempio, dove il mapping_id è 494.
mapping_id | source_dbms | source_type | destination_dbms | destination_type | destination_length |
---|---|---|---|---|---|
189 | MSSQLSERVER | datetime2 | DB2 | VARCHAR | 27 |
Passaggio 2. Rimuovere il mapping dei tipi di dati.
exec sp_dropdatatypemapping 189
Passaggio 3. Aggiungere il mapping dei tipi 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 nuovamente la query per verificare il nuovo mapping dei tipi 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.
mapping_id | source_dbms | source_type | destination_dbms | destination_type | destination_length |
---|---|---|---|---|---|
494 | MSSQLSERVER | datetime2 | DB2 | timestamp | NULL |
Passaggio 5. Identificare l'articolo di sottoscrizione della replica da riconfigurare. Usare 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
Nei risultati deve essere indicato il nome dell'articolo da modificare. In questo esempio, i risultati riportati nella tabella seguente indicano il nome DB2TS01.
name | status |
---|---|
DB2TS01 | 25 |
Se il valore dello stato è 1 o 9, l'articolo viene configurato per la formattazione con valore letterale stringa.
Se il valore dello stato è 17 o 25, l'articolo viene configurato per la formattazione con parametri.
Passaggio 6. Configurare l'articolo di sottoscrizione della replica per 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 altre informazioni, vedere Concetti relativi alle stored procedure del sistema di replica (https://go.microsoft.com/fwlink/?LinkId=193232) nella documentazione online di SQL Server.
L'operazione INSERT di replica ha esito negativo e viene troncato l'errore 8152: i dati stringa o binari vengono troncati
Problema
replica di SQL Server'operazione INSERT potrebbe non riuscire con SQL Server Errore 8152 (i dati stringa o binari verrebbero troncati). Questo problema 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 replica di SQL Server.
Per altre informazioni, vedere Configurare i provider di dati per i collegamenti dati DB2 (DB2) Tutte le proprietà nel provider OLE DB per DB2 documentazione.
Passaggio 2 Riconfigurare replica di SQL Server articolo della sottoscrizione 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.