-
Verbindungsserver auf einer MS-SQL-Datenbank zur AS400
Hallo Zusammen,
ich suche seit einiger Zeit im Netz eine Möglichkeit, Daten einer iSeries-Datenbank vom MS-SQL-Server (2012 Service Pack 3) mittels eines Verbindungsservers upzudaten bzw. einzufügen. Habe diverse Provider probiert, aber ein schreibender Zugriff funktioniert einfach nicht. Ein lesender Zugriff funktioniert bei allen Providern wunderbar. Ich hoffe Ihr könnt mir helfen.
Auf dem SQL-Server ist "IBM i Access für Windows Version 7.1.0.SI57907" installiert
Ich habe folgende Provider probiert:
IBMDA400 (IBM DB2 for i IBMDA400 OLE DB Provider)
IBMDASQL (IBM DB2 for i IBMDASQL OLE DB Provider)
MSDASQL (Microsoft OLE DB Provider for ODBC Drivers)
--> bei allen Providern ist "Allow in Process" aktiviert
--> bei der ODBC-Verbindung ist "Sofortiges COMMIT" bzw. "COMMIT=*NONE" aktiviert
Ein schreibender Zugriff über die gleiche ODBC-Verbindung mittels MS-ACCESS oder PHP funktioniert auch, aber nicht mittels des SQL-Servers.
Einige Fehlermeldungen:
Meldung 7390, Ebene 16, Status 2, Zeile 1
Der angeforderte Vorgang konnte nicht ausgeführt werden, da der OLE DB-Anbieter 'IBMDA400' für den Verbindungsserver 'IBMDA400' die angeforderte Transaktionsschnittstelle nicht unterstützt.
Meldung 7391, Ebene 16, Status 2, Zeile 1
Der Vorgang konnte nicht ausgeführt werden, da der OLE DB-Anbieter 'IBMDASQL' für den Verbindungsserver 'IBMDASQL' keine verteilte Transaktion beginnen konnte.
Der OLE DB-Anbieter 'MSDASQL' für den Verbindungsserver 'MSDASQL' hat die Meldung '[IBM][System i Access ODBC-Treiber]Enlist bei DTC-Phase fehlgeschlagen. 2' zurückgeben.
Meldung 7391, Ebene 16, Status 2, Zeile 1
Der Vorgang konnte nicht ausgeführt werden, da der OLE DB-Anbieter 'MSDASQL' für den Verbindungsserver 'MSDASQL' keine verteilte Transaktion beginnen konnte.
Habt ihr eine Idee voran es liegen kann. Ich bin über jede Antwort dankbar!
Vielen Dank im voraus!
Gruß Bernd
-
Zitat von barny68
Hallo Zusammen,
ich suche seit einiger Zeit im Netz eine Möglichkeit, Daten einer iSeries-Datenbank vom MS-SQL-Server (2012 Service Pack 3) mittels eines Verbindungsservers upzudaten bzw. einzufügen. Habe diverse Provider probiert, aber ein schreibender Zugriff funktioniert einfach nicht. Ein lesender Zugriff funktioniert bei allen Providern wunderbar. Ich hoffe Ihr könnt mir helfen.
Auf dem SQL-Server ist "IBM i Access für Windows Version 7.1.0.SI57907" installiert
Ich habe folgende Provider probiert:
IBMDA400 (IBM DB2 for i IBMDA400 OLE DB Provider)
IBMDASQL (IBM DB2 for i IBMDASQL OLE DB Provider)
MSDASQL (Microsoft OLE DB Provider for ODBC Drivers)
--> bei allen Providern ist "Allow in Process" aktiviert
--> bei der ODBC-Verbindung ist "Sofortiges COMMIT" bzw. "COMMIT=*NONE" aktiviert
Ein schreibender Zugriff über die gleiche ODBC-Verbindung mittels MS-ACCESS oder PHP funktioniert auch, aber nicht mittels des SQL-Servers.
Einige Fehlermeldungen:
Meldung 7390, Ebene 16, Status 2, Zeile 1
Der angeforderte Vorgang konnte nicht ausgeführt werden, da der OLE DB-Anbieter 'IBMDA400' für den Verbindungsserver 'IBMDA400' die angeforderte Transaktionsschnittstelle nicht unterstützt.
Meldung 7391, Ebene 16, Status 2, Zeile 1
Der Vorgang konnte nicht ausgeführt werden, da der OLE DB-Anbieter 'IBMDASQL' für den Verbindungsserver 'IBMDASQL' keine verteilte Transaktion beginnen konnte.
Der OLE DB-Anbieter 'MSDASQL' für den Verbindungsserver 'MSDASQL' hat die Meldung '[IBM][System i Access ODBC-Treiber]Enlist bei DTC-Phase fehlgeschlagen. 2' zurückgeben.
Meldung 7391, Ebene 16, Status 2, Zeile 1
Der Vorgang konnte nicht ausgeführt werden, da der OLE DB-Anbieter 'MSDASQL' für den Verbindungsserver 'MSDASQL' keine verteilte Transaktion beginnen konnte.
Habt ihr eine Idee voran es liegen kann. Ich bin über jede Antwort dankbar!
Vielen Dank im voraus!
Gruß Bernd
... die Fehlermeldung sagt doch, was für ein Problem besteht: Transaktionskontrolle (Commit) nicht unterstützt => da fehlt es an Journalisierung der Daten auf der AS/400 (STRJRNPF). Ob sich das Transaktionsverhalten im Verbindungsserver abschalten lässt (wovon ich entschieden abraten würde)
entzieht sich meiner Kenntnis, da ich die Transaktionen von der AS/400 aus durchführe.
D*B
-
Beim Lesen ist das dem SQL-Server natürlich egal, aber beim Schreiben verlangt der SQL-Server vernünftiger weise Transaktionskontrolle. Dies lässt sich nicht abschalten.
Voraussetzungen also:
- Journalisierung auf der AS/400 für die betroffenen Dateien
- Commit *CHG in der Verbindungseinstellung
Dann klappts auch mit dem Schreiben.
Auch wenn die Standard-Anwendung Transaktionen nicht unterstützt kann man trotzdem journalisieren und ggf. den Wechsel der Journalempfänger mit Cleanup vollständig dem System überlassen.
Außerhalb des SQL-Servers mit eigenen Scripten/Programmen kann man Transaktionen ja selber steuern.
-
Ggf. kannst du dies hier abschalten:
https://technet.microsoft.com/en-us/...=sql.105).aspx
Allerdings scheint dies nur beim Aufruf von Prozeduren zu gelten.
Du müsstest dann also für deine Writes/Inserts/Deletes entsprechende Prozeduren auf der AS/400 schreiben und aufrufen.
Dies ist aber schon unsicher, da ja die Daten ggf. auf der AS/400 geschrieben sind, aber der SQL-Server ggf. die Transaktion zurückdreht.
Gerade bei verteilten Transaktionen ist Journalisierung auf der AS/400 lebenswichtig.
-
Die Tabelle ist jetzt journalisiert. Der Update eines Datensatzes dauert allerdings je nach Provider bis zu 1 min, ein Insert, egal von welchem Provider, musste ich jeweils nach 10 min abbrechen.
Habt ihr noch eine Idee?
Vielen Dank u. Gruß
Bernd
-
Ein Update dauert dann 1 Minute (mit nachfolgendem Abbruch), wenn der Datensatz durch konkurierende Updates gesperrt ist!
D.h., dass deine Transaktionssteuerung nicht funktioniert.
Je nach deiner Methode musst du vor dem Update eine "Start Transaction" und wenn du fertig bist, einen "Commit Transaction" durchführen. Im Fehlerfall heißt das ggf. "Rollback Transaction".
Wenn du eine Transaktion so "hängen" lässt, sperrt das nicht nur deine Transaktionen sondern auch die der anderen Prozesse incl. der AS/400-Software.
Zusätzlich kann es auch vorkommen, dass durch Verbindungspooling jedes mal eine neue Verbindung aufgemacht wird, weil die vorherigen Transaktion nicht abgeschlossen wurde. Somit sperrst du dich selber vor weiteren Updates.
Ein Insert hat keine Wartezeit, hier hast du ein anderes Problem!
Similar Threads
-
By alex61 in forum IBM i Hauptforum
Antworten: 17
Letzter Beitrag: 31-10-16, 15:39
-
By SourceCoder in forum NEWSboard Java
Antworten: 22
Letzter Beitrag: 10-07-14, 10:38
-
By hpheim in forum IBM i Hauptforum
Antworten: 6
Letzter Beitrag: 26-05-03, 13:53
-
By infomio in forum NEWSboard Windows
Antworten: 2
Letzter Beitrag: 16-04-03, 14:23
-
By chris in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 17-10-02, 13:32
Tags for this Thread
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks