Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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.