Condividi tramite


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.