Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Dieses Thema enthält die folgenden Abschnitte zur Problembehandlung zwischen dem OLE DB-Anbieter für DB2 und SQL Server (Data Provider) und SQL Server.
Fehler beim Replizieren DATETIME2 Spalten in DB2 TIMESTAMP-Spalten
Weitere Informationen zur SQL Server-Replikation finden Sie im Entwicklerhandbuch (Replikation) (https://go.microsoft.com/fwlink/?LinkId=193231) in SQL Server Books Online.
Falsche Datentypzuordnungen
Die SQL Server-Replikation kann Daten basierend auf den Standardzuordnungen von SQL Server zu DB2-Datentypen falsch konvertieren. Es wird empfohlen, dass der Administrator und der Entwickler die Replikationsdatentypzuordnungen mithilfe der folgenden gespeicherten SQL Server-Prozeduren überprüfen und überarbeiten.
sp_helpdatatypemap
sp_getdefaultdatatypemapping
sp_setdefaultdatatypemapping
Weitere Informationen finden Sie unter [System Stored Procedures (Transact-SQL)](https://go.microsoft.com/fwlink/?LinkID=180765\).
Fehler beim Replizieren von DATETIME2-Spalten in DB2 TIMESTAMP-Spalten.
Problem
SQL Server 2008-Replikation auf DB2 für Z/OS schlägt möglicherweise mit SQLCODE -188 fehl (die Zeichenfolgendarstellung eines Datetime-Werts ist kein gültiger Datetime-Wert). Dies geschieht, wenn die Replikation so konfiguriert ist, dass DATETIME2 DB2 VARCHAR(27) zugeordnet wird und Abonnementartikel-Befehle mit Zeichenfolgen-Literal-Datenwerten verwendet werden.
Lösung
Konfigurieren Sie die SQL Server 2008-Replikation neu, um DATETIME2 zu DB2 TIMESTAMP- und Abonnementartikelbefehle mit Parametern zuzuordnen. Dadurch kann der Datenanbieter die DATETIME2 als DB2 TIMESTAMP-Struktur formatieren, die vom IBM DB2-Datenbankserver unterstützt wird.
Schrittanweisungen
Schritt 1. Identifizieren Sie die zu ändernde Datentypzuordnung.
USE MASTER für alle Schritte.
select * from sys.fn_helpdatatypemap
(
'MSSQLSERVER',
'%',
'%',
'%',
'%',
'%',
0
)
where destination_dbms = 'DB2' and source_type = 'datetime2'
Die Ergebnisse sollten die mapping_id angeben, die geändert werden soll. Die folgende Tabelle zeigt den Ergebnisbereich für dieses Beispiel, in dem die mapping_id 189 ist.
| mapping_id | source_dbms | Quelltyp | destination_dbms | Zieltyp | Ziellänge |
|---|---|---|---|---|---|
| 189 | MSSQLSERVER | datetime2 | DB2 | VARCHAR | 27 |
Schritt 2. Legen Sie die Datentypzuordnung ab.
exec sp_dropdatatypemapping 189
Schritt 3: Fügen Sie die Datentypzuordnung hinzu.
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
Schritt 4. Führen Sie die Abfrage erneut aus, um die zuordnung des neuen Datentyps zu überprüfen.
select * from sys.fn_helpdatatypemap
(
'MSSQLSERVER',
'%',
'%',
'%',
'%',
'%',
0
)
where destination_dbms = 'DB2' and source_type = 'datetime2'
Die Ergebnisse sollten die neue Datentypzuordnung anzeigen. In diesem Beispiel ist die in der folgenden Tabelle gezeigte mapping_id 189.
| Zuordnungs-ID | source_dbms | Quelltyp | Zielfeld-DBMS | Zieltyp | Ziellänge |
|---|---|---|---|---|---|
| 494 | MSSQLSERVER | datetime2 | DB2 | ZEITSTEMPEL | NULL |
Schritt 5. Identifizieren Sie den Artikel des Replikationsabonnements, der neu konfiguriert werden soll. Verwenden Sie die Transact-SQL-Anweisung USE , um von der Masterdatenbank zur Datenbank zu wechseln, aus der Sie replizieren.
USE [Test]
select name, status from sysarticles
Die Ergebnisse sollten den Namen des zu ändernden Artikels anzeigen. In diesem Beispiel zeigt die folgende Tabelle die Ergebnisse an, in denen der Name DB2TS01 ist.
| Name | Status |
|---|---|
| DB2TS01 | 25 |
Wenn der Statuswert 1 oder 9 ist, wird der Artikel für die Zeichenfolgenliteralformatierung konfiguriert.
Wenn der Statuswert 17 oder 25 ist, wird der Artikel für die parametrisierte Formatierung konfiguriert.
Schritt 6. Konfigurieren Sie den Replikationsabonnementartikel für parametrisierte Befehle.
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;
Weitere Informationen finden Sie unter "Konzepte für gespeicherte Prozeduren des Replikationssystems " (https://go.microsoft.com/fwlink/?LinkId=193232) in SQL Server-Büchern Online.
Replikations-INSERT-Vorgang schlägt mit Fehler 8152 fehl: Zeichenfolgen- oder Binärdaten werden abgeschnitten.
Problem
Der INSERT-Vorgang der SQL Server-Replikation kann mit dem SQL Server-Fehler 8152 fehlschlagen (Zeichenfolgen- oder Binärdaten würden abgeschnitten). Dies kann auftreten, wenn (1) der Datenanbieter nicht für die Verwendung früher Metadaten konfiguriert ist und (2) die Replikation nicht für die Verwendung parametrisierter INSERT-Anweisungen konfiguriert ist.
Lösung
Schritt 1. Konfigurieren Sie die Datenanbieterverbindung neu, um "Use Frühzeitige Metadaten=true" in der SQL Server-Replikationsdatenquellendefinition anzugeben.
Weitere Informationen finden Sie unter Konfigurieren von Datenprovidern für DB2 Data Links (DB2) alle Eigenschaften in der OLE DB Provider für DB2 Dokumentation.
Schritt 2 Konfigurieren Sie den Artikel zum SQL Server-Replikationsabonnement neu, um die Option "24" einzuschließen ("Enthält den Spaltennamen in INSERT-Anweisungen und verwendet parametrisierte Anweisungen".)
Weitere Informationen finden Sie unter SQL Server Replikation sp_addarticle (Transact-SQL) in der SQL Server-Dokumentation.