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.