Datenbanken und mehr

6. Juli 2007

Wie komme ich an meine AS400 Daten ran?

Filed under: SQL Server — Urs Gehrig @ 08:21

Wenn du von deinem SQL Server aus auf fremde Daten zugreifen möchtest, hast du prinzipiell zwei Möglichkeiten: entweder setzt du einen Linked Server auf oder aber du verwendest ein OPENROWSET Query. In beiden Fällen benötigst du aber selbstverständlich einen Daten Provider für das Fremdsystem – da bildet auch AS400 mit seinem DB2 keine Ausnahme. Bisweilen warst du hierfür immer auf Produkte von Drittfirmen angewiesen, wie zum Beispiel auf IBM mit iSeries Access for Windows OLE DB Provider oder aber du hast teure Produkte von Microsoft erworben, wie zum Beispiel Host Integration Server 2000.

Das hat nun endlich ein Ende. Mit dem Feature Pack für Microsoft SQL Server 2005 – Februar 2007 bietet Microsoft nun einen vollständigen OLE DB Provider für DB2 an und dies erst noch kostenlos. Da dieser OLE DB Provider (DB2OLEDB) als eigenständiges Installationspackage daher kommt, ist es erst noch kompakt (rund 8 MB).

Die Installation von DB2OLEDB ist kinderleicht. Erst einmal installiert bekommst du eine neue Programmgruppe Microsoft OLE DB Provider for DB2. Nebst einer recht ausführlichen Dokumentation findest du dort auch noch ein Data Access Tool zum konfigurieren und testen von Datenquellen und ein SNA Trace Utility zum aufzeichnen des Netzwerkverkehrs für die Fehlersuche bei Verbindungsproblemen.

Da du nun einen funktionierenden OLE DB Provider hast, kannst du jetzt auch einen Linked Server innerhalb des SQL Servers aufsetzen. Wie du das machst findest du ausführlich in Microsofts Knowledge Base Artikel KB222937. Die wichtigsten Dinge habe ich dir hier zusammengefasst:

Erstellen des Linked Servers:

EXEC sp_addlinkedserver 
@server=WNW3XX‘
@srvproduct=‚Microsoft OLE DB Provider for DB2‘
@catalog=‚OLYMPIA‘
@provider=‚DB2OLEDB‘
@provstr=‚NetLib=SNA;NetAddr=;NetPort=;RemoteLU=OLYMPIA;LocalLU=LOCAL;ModeName=QPCSUPP;User ID=WNW3XX;Password=WNW3XX;InitCat=OLYMPIA;Default Schema=WNW3XX;PkgCol=WNW3XX;TPName=;Commit=YES;IsoLvl=NC;AccMode=;CCSID=37;PCCodePage=1252;BinAsChar=NO;Data Source=Olympia_WNW3XX‘

EXEC sp_addlinkedsrvlogin ‚WNW3XX‘, false, NULL, ‚WNW3XX‘, ‚WNW3XX‘

Und ein paar Beispiele von Verteilten Abfragen:

–Example of SELECT using 4-part name: LinkedServer.Catalog.Schema.Table
SELECT *
FROM WNW3XX.OLYMPIA.WNW3XX.DEPARTMENT

–Example of Pass Through SELECT using OPENQUERY with 3-part name:
SELECT *
FROM OPENQUERY(WNW3XX,„SELECT * FROM OLYMPIA.WNW3XX.EMP_ACT“)

–Example of Pass Through SELECT using OPENROWSET with 2-part name:
SELECT *
FROM OPENROWSET
(‚DB2OLEDB‘,‚Netlib=SNA;NetAddr=;NetPort=;RemoteLU=OLYMPIA;LocalLU=LOCAL;ModeName=QPCSUPP;User ID=WNW3XX;Password=WNW3XX;InitCat=OLYMPIA;Default Schema=WNW3XX;PkgCol=WNW3XX;TPName=;Commit=YES;IsoLvl=NC;AccMode=;CCSID=37;PCCodePage=1252;BinAsChar=NO;Data Source=Sample‘,
‚SELECT * FROM WNW3XX.EMPLOYEE‘)

–Example of an INSERT using 4-part name:
INSERT INTO WNW3XX.OLYMPIA.WNW3XX.DEPARTMENT VALUES (‚E21‘,‚DUMMY‘,NULL,‚E01‘)

Ach ja, das Erstellen des Connection Strings von Hand kann manchmal schon echt zeitraubend sein; aber auch hierfür habe ich dir einen kleinen Tipp für deine Trickkiste. Erstelle auf deinem Desktop ein neues, leeres File und gib diesem die Endung UDL. Doppelklicke auf das File und Microsofts Data Link Wizard wird gestartet. Wähle dort deinen Provider, konfiguriere deine Data Source und beende anschliessend den Wizard wieder. Wenn du jetzt dieses File mit Notepad öffnest hat du deinen Connection String, den du so direkt weiter verwenden kannst. Viel Glück mit deinen AS400 Daten.

Advertisements

2 Kommentare »

  1. Danke für Ihren Beitrag Herr Gehrig.

    Wenn man nicht über SNA gehen will,kann oder darf , der Zugriff des Linkservers über TCP/IP funktioniert auch.

    EXEC master.dbo.sp_addlinkedserver @server = N’LS_AS400′, @srvproduct=N’Microsoft OLE DB Provider for DB2′, @provider=N’DB2OLEDB‘, @provstr=N’Provider=DB2OLEDB;User ID=aaaaa;Password=bbbbb;Initial Catalog=ccccc;Network Transport Library=TCP;Host CCSID=1252;PC Code Page=1252;Network Address=ddddd;Network Port=446;Package Collection=SQL2005;Default Schema=eeeee;Process Binary as Character=False;Units of Work=RUW;DBMS Platform=DB2/AS400;Defer Prepare=False;Rowset Cache Size=0;Persist Security Info=true;Connection Pooling=False;Derive Parameters=False;‘,
    @catalog=N’fffff‘

    Name des Linkservers : LS_AS400

    aaaaa User auf der AS400
    bbbbb Password auf der AS400
    ccccc Name der AS400
    ddddd TCP/IP Adresse der AS400
    eeeee Name der Standardbibliothek auf der AS400
    fffff Name der AS400

    Die Package Collection ( hier mit dem Namen SQL2005 ) muß auf der AS400 angelegt sein.

    Sollte nur das Select , aber kein Insert,Update oder Delete funktionieren,
    könnte das daran liegen, das die Tabellen auf der AS/400 nicht journalisiert sind.

    mfG J. Hornschuch

    Kommentar von J. Hornschuch — 21. August 2007 @ 11:30

  2. Das Feature Pack für Microsoft SQL Server 2005 gibt es leider nur für Microsoft SQL Server 2005 Enterprise Edition und Developer Edition, nicht für die Standard Edition.

    Kommentar von Jens Ottersberg — 24. April 2008 @ 08:24


RSS feed for comments on this post. TrackBack URI

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

Bloggen auf WordPress.com.

%d Bloggern gefällt das: