Partager via


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

Cette rubrique contient les sections suivantes relatives à 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 types de données incorrects

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

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

Mappages de types de données incorrects

La réplication SQL Server peut convertir des données incorrectement, en fonction des mappages par défaut de SQL Server vers des types de données DB2. Nous vous recommandons 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 suivantes de SQL Server.

sp_helpdatatypemap

sp_getdefaultdatatypemapping

sp_setdefaultdatatypemapping

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

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

Problème

La réplication SQL Server 2008 vers DB2 pour z/OS peut échouer avec sqlCODE -188 (la représentation sous forme de chaîne d’une valeur datetime n’est pas une valeur datetime valide). Cela se produit lorsque la Réplication est configurée pour mapper DATETIME2 à DB2 VARCHAR(27) et utilise des commandes d’article d’abonnement avec des valeurs littérales de type chaîne.

Solution

Reconfigurez la réplication SQL Server 2008 pour mapper DATETIME2 sur TIMESTAMP de DB2 et pour les commandes d'article d'abonnement avec des paramètres. Cela permet au fournisseur de données de mettre en forme le 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 mapping_id à modifier. Le tableau suivant montre le volet de résultats de cet exemple où le mapping_id est 189.

identifiant de mappage source_dbms type_de_source destination_dbms type_de_destination longueur_de_destination
189 MSSQLSERVER datetime2 DB2 VARCHAR 27

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

exec sp_dropdatatypemapping  189  

Étape 3. Ajoutez le mappage de 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 de 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 indiqué dans le tableau suivant est 189.

mapping_id source_dbms type_de_source destination_dbms type_de_destination longueur_destination
494 MSSQLSERVER datetime2 DB2 HORODATAGE ZÉRO

Étape 5. Identifiez l'article de la souscription de réplication à reconfigurer. Utilisez l’instruction USE Transact-SQL pour passer de la base de données master à la base de données à partir de laquelle vous répliquez.

USE [Test]  
select name, status from sysarticles  

Les résultats doivent afficher le nom de l’article à modifier. Dans cet exemple, le tableau suivant montre les résultats où le nom est DB2TS01.

nom statut
DB2TS01 25

Si la valeur d’état est 1 ou 9, l’article est configuré pour la mise en forme littérale 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'élément de l'abonnement de réplication pour des commandes paramétrées.

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 relatifs aux procédures stockées du système de réplication (https://go.microsoft.com/fwlink/?LinkId=193232) dans la documentation en ligne de SQL Server.

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

Problème

L’opération INSERT de réplication SQL Server peut échouer avec l’erreur SQL Server 8152 (les données chaînes ou binaires sont tronquées). Cela peut se produire lorsque (1) Le fournisseur de données n’est pas configuré pour utiliser les métadonnées anticipées et (2) 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 « Utiliser les métadonnées anticipées = true » dans la définition de source de données de l’abonné de réplication SQL Server.

Pour plus d'informations, consultez Configurer les fournisseurs de données pour les liens de données DB2 (DB2) Toutes les propriétés dans la documentation du fournisseur OLE DB pour DB2.

Étape 2 Réinscrire l’article d’abonnement de réplication SQL Server pour inclure l’option « 24 » (« Inclut le nom de colonne dans les instructions INSERT et utilise des instructions paramétrables »).

Pour plus d’informations, consultez SQL Server Replication sp_addarticle (Transact-SQL) dans la documentation de SQL Server.