Das Notes Forum

Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: dabjoern am 14.11.05 - 09:30:03

Titel: Entfernte DB2-Datenbanken auslesen...
Beitrag von: dabjoern am 14.11.05 - 09:30:03
Hi Leute,

was ist eine unkomplizierte Variante, um eine DB2 Datenbank, die nicht lokal vorhanden, sondern auf einem anderen, entfernten Server installiert ist, auszulesen?

Grüße
Björn
Titel: Re: Entfernte DB2-Datenbanken auslesen...
Beitrag von: Ralf_M_Petter am 15.11.05 - 09:35:09
Ich verwende dazu immer Java Agenten mit JDBC, was prinzipiell sehr gut funktioniert. Ist aber natürlich nur einfach, wenn du Java kannst.

Sonst geht natürlich auch noch ODBC in Lotus Script und dieses LSX für DB2. Wenn du experimentierfreudig bist, kannst du natürlich auch die neue Unterstützung von Domino für DB2 verwenden, die aber in 7.0 noch nicht supported ist. Habe das aber gerade letzte Woche im Upgrade Kurs gesehen und schaut für Leute die DB2 schon im Einsatz haben vielversprechend aus.

Grüße

Ralf
Titel: Re: Entfernte DB2-Datenbanken auslesen...
Beitrag von: dabjoern am 15.11.05 - 09:55:25
Hi Ralf,

Java beherrsche ich leider nicht. Die Anbindung von Domino 7 und DB2 habe ich vor kurzem erfolgreich umgesetzt. Klappt super. Ich habe auch schon DB2 Access und Query Views eingerichtet.

Mein Ziel ist es aber, eine nicht im notes schema liegende db2 datenbank abzufragen. Das ist mir auch gelungen mit Lotus Script und LSX. Aber da liegt ja die DB2 Datenbank lokal. Ich würd jetzt gern eine datenbank abfragen, die auf einem ganz anderen datenbankserver liegt. Wie funktioniert dieses ODBC? Was brauche ich dazu an Software und allem? Gibt es da Dokumentationen zu?

Danke und Grüße
Björn
Titel: Re: Entfernte DB2-Datenbanken auslesen...
Beitrag von: Ralf_M_Petter am 15.11.05 - 10:24:33
Hallo!

Im Kurs haben wir auch gesehen, dass ein Zugriff mit den Query Views auf andere Schema als das Notesschema möglich ist. Es sind dazu aber ein paar Berechtigungssachen auf der DB2 Ebene zu machen, dass der User den Notes für den Zugriff verwendet auch auf die anderen Datenbanken berechtigt ist. Die Schritte sind in der Designer Hilfe beschrieben.

Der Zugriff mittels ODBC ist ebenfalls in der Designer Hilfe sehr gut beschrieben. Einfach mal nach ODBC suchen, dann sollte eigentlich alles klar sein. Falls nicht kannst du ja gerne noch mal posten.

Grüße

Ralf
Titel: Re: Entfernte DB2-Datenbanken auslesen...
Beitrag von: dabjoern am 15.11.05 - 10:26:16
Ich danke dir Ralf. Dann konsultiere ich jetzt mal die Designer Hilfe und poste meine Ergebnisse.

Bis denn dann
Björn
Titel: Re: Entfernte DB2-Datenbanken auslesen...
Beitrag von: flaite am 15.11.05 - 12:43:19
Du mußt auf dem Rechner des Domino Servers einen DB2-Client installieren. Die Serverdatenbank dann auf diesem Client katalogisieren. Frag einen Administrator oder such DB2 Dokumentation. Auswendig weiss ich das zur Zeit auch nicht. Ist aber nicht schwierig.
Dann gehts normal mit LSX als würde der DB2 Server lokal liegen (ausser natürlich die Performance-Verluste durch Netzwerk-Latenz, aber das tut nix zur Sache)
Installier den Client und versuch von da mit dem selben technischen User, den du für die LSX-Connection von Domino verwendest auf die remote Datenbank zuzugreifen.
Titel: Re: Entfernte DB2-Datenbanken auslesen...
Beitrag von: dabjoern am 12.01.06 - 13:45:28
Hallo,

ich hatte endlich mal wieder Zeit, an diesem Projekt weiterzuarbeiten. Ich habe es noch nicht hinbekommen. Meine Lage:
- ich habe einen Domino Server 7
- ich habe auf dem selben Rechner DB2 8.2 Enterprise Edition laufen
- ich habe einen weiteren Rechner mit einem Notes Client
- der Notes Client kann prima mit dem Domino Server kommunizieren
- Domino kann prima mit DB2 kommunizieren, Domino ist via Access Server mit DB2 verbunden
- ich habe eine DB designt und auf dem Domino Server abgelegt
- vom Client aus gestalte ich sie

Das ist das Skript (liegt in einem Button):
Code
Sub Click(Source As Button)
	Dim src As New LCConnection ("db2")
	Dim fldLst As New LCFieldList
	Dim fld As LCField
	Dim count As Integer
	Dim text As String
	
	Dim session As New NotesSession
	Dim db As NotesDatabase
	Dim ws As New NotesUIWorkspace
	Dim uidoc As NotesUIDocument
	
	'set the appropriate properties to connect
	src.Database = "BUCHDB"
	src.Userid = "db2admin"
	src.Password = "***"
	src.Connect
	
	'clear text variable
	text = ""
	
	'now connected, we can execute a selection statement
	If (src. Execute ("SELECT * from ADRESSE",  fldLst) = 0) Then
		text = "No records were fetched."
	End If
	Set fld = fldLst.Lookup ("NAME")
	
	'fetch each record from the result set
	While (src.Fetch (fldLst) > 0)
		count = count + 1
		text = text + fld.text(0) & ","
	Wend
	
	'post text in field name
	Set db = session.CurrentDatabase
	Set uidoc = ws.CurrentDocument	
	Call uidoc.FieldSetText("Name", text)
End Sub

In den Options des Forms steht:
Code
Option Public
Uselsx "*lsxlc"

Führe ich die DB vom Client aus auf, kommt der Fehler "Error creating product object". Führe ich sie vom Client auf dem Rechner mit dem Domino Server aus, geht alles.

Muss ich in dieser Konstellation einen DB2 Runtime Client installieren? Ich dachte immer, das braucht man nur, wenn man Domino und DB2 auf getrennten Rechnern hat?

Kann mir bitte jemand Hinweise geben?

Grüße und Danke
Björn

Titel: Re: Entfernte DB2-Datenbanken auslesen...
Beitrag von: Ralf_M_Petter am 12.01.06 - 13:56:49
Na ja ist eigentlich klar, du brauchst auch auf deinem Client die DB2 Software, da der Code wenn er in einem Button liegt ja auf dem Client ausgeführt wird. Das der Server mit DB2 kommunizieren kann ist da unerheblich. Würde eine solche Vorgehendsweise nicht gerade für best practise halten, da du beim Roll out dann den DB2 Client mit allen Einstellungen auf jedem Arbeitsplatz haben müsstest.

Grüße

Ralf
Titel: Re: Entfernte DB2-Datenbanken auslesen...
Beitrag von: dabjoern am 12.01.06 - 14:05:22
Hallo Ralf,

danke für deine Antwort. Wenn dies nicht best practise ist, was ist dann eine saubere Vorgehensweise um Daten aus DB2 auszulesen und in der Applikation zu nutzen?

Grüße
Björn
Titel: Re: Entfernte DB2-Datenbanken auslesen...
Beitrag von: Ralf_M_Petter am 12.01.06 - 14:17:44
Also wir haben es so gelöst, dass wir die benötigten Daten der DB/2 in Domino spiegeln. Dazu kann man entweder Produkte wie LEI oder andere Notespumpen benützen oder man programmiert es selber. Das war für uns vor allem auch deshalb die beste Lösung, da unsere Datebanken offline fähig sein müssen. Du müsstest deine Anforderungen eventuell etwas ausführlicher darlegen, damit man etnscheiden könnte was das beste ist. Eventuell wenn du keine Offlinefähigkeit benötigst, könnte man auch das neue DB/2 und Domino Integrationsfeature benützen. Im Kurs dazu wurde mir gesagt, habe ich aber selber noch nicht probiert, dass man damit auch DB/2 Tables für Domino verfügbar machen kann. Dann läuft das ganze über den Server und nicht über den Client.

Grüße

Ralf

P.S. Das ganz DB/2 als Datastore für Domino ist aber momentan nur Beta in Domino 7.0 und muß extra freitgeschaltet werden. soll mit 7.0.x endgültig released werden.
Titel: Re: Entfernte DB2-Datenbanken auslesen...
Beitrag von: flaite am 12.01.06 - 14:25:32
Wie Ralf schon gesagt hat:
Wenns geht ein zeitlich geschedulter Agenten auf dem Server, der aus den DB2 Daten Domino Dokumente macht. Zwischen den Agentenläufen sind die beiden Datenbestände auf Domino und DB2 Seite natürlich inkonsistent.
Mit LEI kann man das wohl auch rein serverseitig machen. Das ist aber teuer und ich bin auch aus anderen Gründen kein Freund von LEI. Stichwort Realtime LEI.
Du kannst natürlich auch auf den client einen serverseitigen agenten mit agent.RunOnServer() ansprechen. Mit solchen Konstrukten habe ich aber keine guten Erfahrungen gemacht. V.a. ist es nicht besonders performant und dann werden Anwendungen oft ausgedehnt, so dass sich die Performance dann bemerkbar macht.
Eine buzzword-konforme Lösung bieten Webservices. Einfach auf dem DB2 einen Webservice Producer einrichten und vom Domino Client aus konsumieren. Wobei es da imho noch ein paar ungelöste security Geschichten gibt.
Java/JDBC bietet imho zumindest ab DB2 V8.x die Möglichkeit einfach nur eine Jar auf dem Client zu installieren, so dass zumindest der gesamte DB2-Client nicht mehr benötigt wird. Bin mir aber gar nicht 100% sicher.
Titel: Re: Entfernte DB2-Datenbanken auslesen...
Beitrag von: dabjoern am 12.01.06 - 14:38:11
Das klingt alles ganz schön heftig. Ich sitze hier an meiner FH und wil eingentlich nur eine Testumgebung aufbauen. Geld spielt keine Rolle, da die FH eine Subscription hat, die es uns erlaubt, jegliche Software von IBM zu laden und zu nutzen.

Zitat
Eventuell wenn du keine Offlinefähigkeit benötigst, könnte man auch das neue DB/2 und Domino Integrationsfeature benützen. Im Kurs dazu wurde mir gesagt, habe ich aber selber noch nicht probiert, dass man damit auch DB/2 Tables für Domino verfügbar machen kann. Dann läuft das ganze über den Server und nicht über den Client.

Das würde mich interessieren. Was heißt Offlinefähigkeit? Wenn ich die Applikation dann auf lokal repliziere, habe ich die DB2 Daten nicht mehr zur Hand? Ist ja eigentlich auch klar, da die DB2 in dem Moment nicht verfügbar ist. Ist aber nicht weiter wild/ stört mich nicht.

Auf Java kann ich nicht zurückgreifen, da ich dies nicht beherrsche und den Rahmen meiner Forschung sprengen würde. Auch erscheint mit ein Agent nicht angemessen. Sorry

Also ich tendiere zu der DB/2 und Domino Integration. Wo finde ich dazu Informationen. Dabei handelt es sich aber nicht um die Integration, die jetzt durch Domino 7 möglich ist?

Grüße
Björn
Titel: Re: Entfernte DB2-Datenbanken auslesen...
Beitrag von: Ralf_M_Petter am 12.01.06 - 14:38:57
Hallo Axel!

Wir haben bei uns keine zeitgesteuerten Agenten sondern es wurden Trigger in den für Domino relevanten Tabellen erstellt, die dann asynchrone über eine Queue die ganzen Änderungen über das Java Api im Domino einpflegen. Dabei wird immer auch geschaut, ob sich die Daten im Domino durch die Änderungen im DB2 überhaupt geändert haben, damit wir nicht sinnlose updates machen, die dann wieder unnötige Replizierungen mit unserem Aussendienst auslösen. Je nach Systemauslastung ist eine Änderung in der DB/2 praktisch in Echtzeit im Domino verfügbar. Bei uns in der Praxis ist das selten über eine Sekunde, also irrelevant. Das mit den Webservice ist halt auch wieder ein Schmarren im Notes Client, da du dann wieder Jars oder dieses MS Webservice Zeugs auf jeden Client installieren musst um Webservices im Notes Clienten konsumieren zu können. Ausserdem hast du da dann immer noch Problematiken mit SSO die nicht ganz einfach zu lösen sind. Ergo würde ich nur in Ausnahmefällen empfehlen.

Grüße

Ralf
Titel: Re: Entfernte DB2-Datenbanken auslesen...
Beitrag von: Ralf_M_Petter am 12.01.06 - 14:47:28
Hallo Björn!

Informationen zu der Verwendung von DB/2 als Datastore in Domino findest du hier:

http://www-10.lotus.com/ldd/d7db2.nsf

Die Features die du aus der Integration brauchst sind dann die DB2 Access View und Query Views. Ich zitiere aus den offizellen Schulungsunterlagen zu Domino 7

By combining DB2 Access Views and Query Views, you can also develop applications that involve data fro field from many Domino Databases as well as DB2 databases.

Und das beste von allem ist, das ganze ist transparent für den Client, sprich er bekommt es nicht mit. Das schlechte ist, wenn du so eine Datenbank lokal replizierst, können diese beiden Features nicht mehr verwendet werden, das ist aber laut deiner Aussage bei dir eh nicht der Fall.

Ein weiterer Vorteil ist, wenn du Access View verwendest, können auch DB/2 Anwendungen auf diese Views zugreifen. Sprich ein Zugriff von Websphere Workplace bitte hier das bevorzugte Buzzword einsetzten ist möglich.

Grüße

Ralf
Titel: Re: Entfernte DB2-Datenbanken auslesen...
Beitrag von: flaite am 12.01.06 - 14:58:18
Hallo Axel!

Wir haben bei uns keine zeitgesteuerten Agenten sondern es wurden Trigger in den für Domino relevanten Tabellen erstellt, die dann asynchrone über eine Queue die ganzen Änderungen über das Java Api im Domino einpflegen.
Hört sich gut an. Sehr gut sogar. Eine DB2->push->Domino Lsg. Queue heisst Websphere MQ?
Zitat
Das mit den Webservice ist halt auch wieder ein Schmarren im Notes Client, da du dann wieder Jars oder dieses MS Webservice Zeugs auf jeden Client installieren musst um Webservices im Notes Clienten konsumieren zu können.
Ausserdem hast du da dann immer noch Problematiken mit SSO die nicht ganz einfach zu lösen sind. Ergo würde ich nur in Ausnahmefällen empfehlen.
ist in NOtes 7 dabei. D.h. keine Zusatzinstallation notwendig.
Security halte ich in diesem Zusammenhang auch für eine offene Frage.
Auch das die DB2-Daten dann gar nicht mehr über den Server laufen.

Gruß Axel
Titel: Re: Entfernte DB2-Datenbanken auslesen...
Beitrag von: Ralf_M_Petter am 12.01.06 - 15:13:58
Hallo Axel!

Nein Queue heisst in unserem Fall Iseris Dataqueue.

Ähem  mir ist neu, dass der Notes Client 7 Webservice konsumieren kann von Haus aus. Die Webserviceunterstützung ist laut meines Kurses nur eine des Dominoservers und der kann auch nur Webservices zur Verfügung stellen und nicht konsumieren. Ausser du progst das in Java. Java ist aber kein Thema da es Björn nicht kann. Falls es doch geht hast du Infos wie ich in Lotus script auf einen Webservice zugreifen kann?

Grüße

Ralf
Titel: Re: Entfernte DB2-Datenbanken auslesen...
Beitrag von: flaite am 12.01.06 - 15:31:27
Falls es doch geht hast du Infos wie ich in Lotus script auf einen Webservice zugreifen kann?
http://atnotes.de/index.php?topic=26569.msg169964#msg169964
Geht ohne Zusatzinstallation. Ich habs nicht hinter einem authentifizierenden Proxy (Firmenfirewall) getestet.
Set Client =CreateObject("MSSOAP.SoapClient")
Titel: Re: Entfernte DB2-Datenbanken auslesen...
Beitrag von: Ralf_M_Petter am 12.01.06 - 15:51:02
Hast du aber mal geprüft ob du nicht auf diesem Rechner irgendwann vorher das MSSOAP installiert hast? Wir haben das nämlich im Kurs gemacht, genau auf die Art und mussten zuvor den MSSOAP installieren. Das war irgendsoeine kleine EXE. Eventuell hast du das auch, weil du .NET installiert hast oder Visual Studio. Aber auf den nackten Schulungsrechner war das nicht drauf.

Grüße

Ralf
Titel: Re: Entfernte DB2-Datenbanken auslesen...
Beitrag von: flaite am 12.01.06 - 15:58:30
weil du .NET installiert hast oder Visual Studio. Aber auf den nackten Schulungsrechner war das nicht drauf.

Kann sein, dass es an Visual Studio liegt. Wusste ich nicht.
Titel: Re: Entfernte DB2-Datenbanken auslesen...
Beitrag von: dabjoern am 12.01.06 - 16:02:01
Hi Leute,

danke erstmal für die vielen Tipps. Da ich schonmal mit Acces und Query Views gearbeitet habe, werde ich nochmal damit beschäftigen. Irgendwie hab ich diese Konstrukte anders in Erinnerung als ich sie vor etwa 2 Monaten getestet habe. Ich dachte, ich kann nur Datenbanken/ Tabellen abfragen, die über Notes in DB2 abgelegt wurden. Sprich also Daten aus der Datenbank "Domino", welche bei der Integration Notes/DB2 angelegt wird. Wenn ich falsch liege, müsste ich ja auch eine weitere relationale Datenbank - z.B. die Beispieldatenbank "Sample" abfragen können. Das teste ich mal übers Wochenende.

Grüße
Björn
Titel: Re: Entfernte DB2-Datenbanken auslesen...
Beitrag von: Ralf_M_Petter am 12.01.06 - 17:12:10
Laut Schulungsunterlagen ist das möglich, sonst musst du einfach mal in dem Forum auf Notes.net nachfragen, das sich speziell mit DB/2 Integration beschäftigt siehe meinen Link. Auf jeden Fall geht das über die Queryviews. Dort gibst du ja ein SQL an und in diesem SQL kann man wie in DB/2 üblich auch andere Datenbanken ansprechen. Man muss nur die richtigen Schemanamen kennen.

Grüße

Ralf
Titel: Re: Entfernte DB2-Datenbanken auslesen...
Beitrag von: flaite am 12.01.06 - 23:15:35
Kapitel 2.4 in diesem Redbooks sieht sehr vielversprechend aus.
Stichwort Federated DB2 Data. Damit kann offenbar auch auf Datenbanken anderer kommerzieller RDBMSe zugegriffen werden (kein Posgres oder MySQL):
http://www.redbooks.ibm.com/redpieces/pdfs/redp4102.pdf
Titel: Re: Entfernte DB2-Datenbanken auslesen...
Beitrag von: Ralf_M_Petter am 13.01.06 - 07:37:54
Hallo Axel!

Danke für den Redbooktip, da ist das wirklich sehr gut beschrieben. Halte ich für sicher eines der sinnvollsten Feature dieses DB/2 Datastore für Domino.

Für Produktiveinsatz würde ich aber auf jeden Fall noch auf die GA warten.

Grüße

Ralf
Titel: Re: Entfernte DB2-Datenbanken auslesen...
Beitrag von: dabjoern am 13.01.06 - 09:26:33
Danke Axel für das Redbook. Das sieht doch ganz vielversprechend aus. Werde mich gleich am Montag mal hinter die Implementierung des Kapitels 2.4 klemmen und gebe mal Feedback dazu.

Grüße
Björn
Titel: Re: Entfernte DB2-Datenbanken auslesen...
Beitrag von: flaite am 13.01.06 - 10:06:01
Werde mich gleich am Montag mal hinter die Implementierung des Kapitels 2.4 klemmen und gebe mal Feedback dazu.
Bin ich sehr dran interessiert.
Titel: Re: Entfernte DB2-Datenbanken auslesen...
Beitrag von: dabjoern am 16.01.06 - 15:25:46
Hallo auch,

also ich habe mich bis jetzt damit rumgeschlagen. Alles funktioniert noch nicht. Aber mal der Reihe nach:

1. Man soll folgendes in der Konsole eingeben: "db2set -i DB2 DB2_ALLOW_SETAUTH_WITH_REMOTECONNECT=1"
--> das geht leider nicht, bei mir steht da nur unzulässiger Parameter. Nach einigem suchen hab ich das hier gefunden:
http://www-10.lotus.com/ldd/beta/nd7pubbeta.nsf/7756aedc25e6d81285256324005ac76c/f6de023cacf01fc6852570540062c5bb?OpenDocument

Jedoch ging es nach diesem Leitpfaden trotzdem nicht. Der Autor beschreibt auch einen Fehler im Domino Log, der auch bei mir auftritt und nervt:
Zitat
--CLI ERROR--------------
  cliRC= -1,  line=6506,  file=db2sess.c
16.01.2006 15:22:29   SVRWINF01/BW/FHJENA/DE   Error encountered while cleaning up DB2 connection.  DB2-Invalid transaction state.: 25001 - [IBM][CLI Driver][DB2/NT] SQL0428N Die SQL-Anweisung ist nur als erste Anweisung in einer Arbeitseinheit zul„ssig. SQLSTATE=25001 - *LOCAL.DB2.060116140115

Das Problem hab ich bis jetzt nicht lösen können.

2. Die restlichen Schritte sind einfach und lassen sich gut ausführen. Man muss lediglich darauf achten, dass man mit dem Namen des Schemas arbeitet und die DB2-Nutzer genügend Rechte haben. Das war bei mir das Problem. Bevor ich rausgefunden hatte, wie ich die Rechte meines Testusers ändere, waren auch wieder 2h Stunden rum. Ich habe es noch nicht richtig hinbekommen User und Groups unter DB2 zu verwalten. Schau ich mal später nach.

3. Obwohl der Fehler aus 1. weiter besteht, habe ich die Query View zum Laufen bekommen. Ich habe Daten aus der Sample DB auslesen können. Da dachte ich mir super, baue mal eine Combobox in einem Form, das als Values die Query View per @DBColumn abfragt. Und was erhalt ich? In dem Feld steht: "This function is not implemented on this version of the server."

--> Da hab ich hier im Forum was von Michael3007 gelesen (siehe http://atnotes.de/index.php?topic=27911.0), selbes Problem wie ich auch. Mein Domino 7 ist für DB2 aktiviert und auch der Test aus dem Domino Admin bescheinigt mir dies. Schaut man ins Red Book steht dazu:

Zitat
This function is not implemented on this version of the server:
You are probably trying to open a Query view on a local replica of the server or on a system that is not db2 enabled.

Quatsch, mach ich nicht!

Also, da hab ich wohl noch einiges zu tun. Wer Tipps hat, immer her damit.

VG
Björn
Titel: Re: Entfernte DB2-Datenbanken auslesen...
Beitrag von: dabjoern am 20.01.06 - 16:36:27
Update der Situation:
- Ich habe gestern und heute die Testumgebung von Grund auf neu aufgesetzt.
- Statt DB2 UDB ESE 8.2 mit Fixpack 7 (!) verwende ich nun Fixpack 10. Durch das Fixpack konnte ich prima "db2set -i DB2 DB2_ALLOW_SETAUTH_WITH_REMOTECONNECT=1" absetzen.
- Seitdem erhalte ich den Fehler im Domino Log nicht mehr. Somit ist 1. meines vorherigen Posts erledigt.
- Ich habe mich mit der Rechtevergabe von Domino, DB2 und meinem BS (Windows 2000 Server) auseinandergestzt und einige Fortschritte dort gemacht.
- 3. ist nach wie vor ein Problem. Michael3007 hat geschrieben, dass es mittlerweile bei ihm funktioniert. Da heißt es wohl kräftig weiter rumprobieren...

Vielleicht hat jemand einen Tip zu 3. Ansonsten schönes WE.

Grüße
Björn
Titel: Re: Entfernte DB2-Datenbanken auslesen...
Beitrag von: flaite am 20.01.06 - 19:58:44
Hast du vielleicht mal hier gepostet?
http://www-10.lotus.com/ldd/d7db2.nsf/DateAllThreadedWeb?OpenView
Die Integration von IBM Produkt A mit IBM Produkt B kann manchmal sehr frustrierend sein.