Réplication SQL Server (Résolution des problèmes)

Cette rubrique contient les sections suivantes sur la résolution des problèmes entre le fournisseur OLE DB pour DB2 et SQL Server (fournisseur de données) et SQL Server.

Mappages de type de données incorrects

Échec de la réplication des colonnes DATETIME2 sur les colonnes DB2 TIMESTAMP

Pour plus d’informations sur Réplication SQL Server, consultez Guide du développeur (réplication) (https://go.microsoft.com/fwlink/?LinkId=193231) dans SQL Server documentation en ligne.

Mappages de type de données incorrects

La réplication SQL Server peut convertir des données de manière incorrecte, sur la base des mappages par défaut de SQL Server aux types de données DB2. Il est recommandé que l'administrateur et le développeur examinent et révisent les mappages des types de données de réplication à l'aide des procédures stockées système de SQL Server.

sp_helpdatatypemap

sp_getdefaultdatatypemapping

sp_setdefaultdatatypemapping

Pour plus d’informations, consultez les [Procédures stockées système (Transact-SQL)](https://go.microsoft.com/fwlink/?LinkID=180765\).

Échec de la réplication des colonnes DATETIME2 sur les colonnes DB2 TIMESTAMP

Problème

La réplication SQL Server 2008 vers DB2 pour z/OS peut échouer avec l'exception SQLCODE -188 (la représentation de chaîne d'une valeur datetime n'est pas une valeur datetime valide). Ce problème se produit lorsque la réplication est configurée pour mapper DATETIME2 à DB2 VARCHAR(27) et qu'elle utilise des commandes d'article d'abonnement avec des valeurs de données de littéraux de chaîne.

Solution

Reconfigurez la réplication SQL Server 2008 pour mapper DATETIME2 à DB2 TIMESTAMP et des commandes d'article d'abonnement avec des paramètres. Le fournisseur de données pourra ainsi mettre en forme DATETIME2 en tant que structure DB2 TIMESTAMP prise en charge par le serveur de base de données IBM DB2.

Instructions pas à pas

Étape 1. Identifiez le mappage de type de données à modifier. USE MASTER pour toutes les étapes.

select * from sys.fn_helpdatatypemap  
(  
   'MSSQLSERVER',  
    '%',  
    '%',  
    '%',  
    '%',  
    '%',  
    0  
)  
where destination_dbms = 'DB2' and source_type = 'datetime2'  
  

Les résultats doivent indiquer la propriété mapping_id à modifier. Le tableau suivant illustre le volet de résultats correspondant à cet exemple, dans lequel la valeur de la propriété mapping_id est 189.

mapping_id source_dbms source_type destination_dbms destination_type destination_length
189 MSSQLSERVER datetime2 DB2 VARCHAR 27

Étape 2. Supprimez le mappage du type de données.

exec sp_dropdatatypemapping  189  

Étape 3. Ajoutez le mappage du type de données.

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  
  

Étape 4. Réexécutez la requête pour vérifier le nouveau mappage du type de données.

select * from sys.fn_helpdatatypemap  
(  
   'MSSQLSERVER',  
    '%',  
    '%',  
    '%',  
    '%',  
    '%',  
    0  
)  
where destination_dbms = 'DB2' and source_type = 'datetime2'  
  

Les résultats doivent afficher le nouveau mappage de type de données. Dans cet exemple, le mapping_id montré dans le tableau suivant est 189.

mapping_id source_dbms source_type destination_dbms destination_type destination_length
494 MSSQLSERVER datetime2 DB2 timestamp NULL

Étape 5. Identifiez l'article d'abonnement de réplication à reconfigurer. Utilisez l’instruction Transact-SQL USE pour passer de la base de données master à la base de données source de la réplication.

USE [Test]  
select name, status from sysarticles  

Les résultats doivent afficher le nom de l'article à modifier. Dans le cadre de cet exemple, le tableau suivant affiche les résultats dont le nom est DB2TS01.

name status
DB2TS01 25

Si la valeur d'état est 1 ou 9, l'article est configuré pour la mise en forme en littéral de chaîne.

Si la valeur d'état est 17 ou 25, l'article est configuré pour la mise en forme paramétrable.

Étape 6. Configurez l'article d'abonnement de réplication pour les commandes paramétrables.

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;  
  

Pour plus d’informations, consultez Concepts des procédures stockées du système de réplication (https://go.microsoft.com/fwlink/?LinkId=193232) dans SQL Server documentation en ligne.

L’opération INSERT de la réplication échoue avec l’erreur 8152 : les données binaires ou de chaîne sont tronquées

Problème

L’opération INSERT de la réplication SQL Server risque d’échouer avec l’erreur SQL Server 8152 (les données binaires ou de chaîne sont tronquées). Cela peut se produire lorsque (1) le fournisseur de données n’est pas configuré pour utiliser les métadonnées initiales et (2) que la réplication n’est pas configurée pour utiliser des instructions INSERT paramétrables.

Solution

Étape 1. Reconfigurez la connexion du fournisseur de données pour spécifier « Use Early Metadata=true » dans la définition de la source de données de l’abonné de réplication SQL Server.

Pour plus d’informations, consultez Configurer des fournisseurs de données pour les liaisons de données DB2 (DB2) Toutes les propriétés dans le fournisseur OLE DB pour DB2.

Étape 2 Reconfigurez l’article d’abonnement de la réplication SQL Server pour ajouter l’option « 24 » (« Ajoute le nom de colonne dans les instructions INSERT et utilise des instructions paramétrisées »).

Pour plus d’informations, consultez Réplication SQL Server sp_addarticle (Transact-SQL) dans SQL Server documentation.