PDA

View Full Version : VB .NET Connection zu DB2 via IBM.Data.DB.iSeries



Toschie
29-05-18, 14:39
Hallo zusammen,

ich connecte via IBM.Data.DB.iSeris auf die DB2.
Das klappt soweit auch.
Ich sehe unter wrkactjob meine Jobs, beende ich das Programm, sind diese dort auch wieder weg.

Wenn ich nun via netstat -> 3, die Jobs meiner IP suche, habe ich die "4 Pärchen"
as-svrmap
as-signon
as-svrmap
as-data >

Soweit, so gut.
Wenn ich mein Programm nun beende und neu starte, werden nicht die vier oben aufgeführten Jobs verwendet, sondern 4 neue auf gemacht und die anderen 4 bzw. 3 idlen dann und sind irgendwann weg.

Aus der Vergangenheit (Noch unter VB6) weiß ich, das unser Programm, immer die gleichen Jobs unter Netstat verwendet hat bzw. keine neuen auf gemacht hat.

Gibt es hier etwas zu beachten?
Ich habe etwas Bedenken, das irgendwann mal die Ports "ausgehen" (Wäre zwar weit hin bis dahin aber wenn es vermieden werden kann?).

Ich verbinde mich mit der iSeries wie folgt:



Dim connectionString As String
Dim connection As iDB2Connection = Nothing

connectionString = String.Format("DataSource={0};UserID={1};Password={2};", serverIp, userName, userPassword)
connection = New iDB2Connection(connectionString)
connection.Open()





Die Verbindung wird über


connection.Close()
connection.Dispose()



geschlossen.

Mache ich noch was falsch?
Ich habe es auch mit weiteren Parametern wie z.B.:


connectionString = String.Format("DataSource={0};UserID={1};Password={2};DataCompres sion=true;ConnectionTimeout=30;EnablePreFetch=fals e;Pooling=true;CheckConnectionOnOpen=true;MinimumP oolSize=1;MaximumPoolSize=-1;", serverIp, userName, userPassword)

versucht.

Das Ergebnis bleibt das Gleiche.

Danke für eure Zeit

Fuerchau
29-05-18, 15:09
Die "as-xxx"-Jobs sind ausschließlich Servicejobs. Wann und wie oft die gestartet werden obliegt halt den Services. Wobei der Service "as-database" nur für die Initiierung einer ODBC-Verbindung steht.

Sobald deine Datenbankverbindung geöffnet ist, arbeitest du mit einem QZDASONIT-Job.
Dies ist der SQL-Servicejob für genau die eine Verbindung.

Per "WRKOBJLCK MYUSER *USRPRF" wird dir dieser dann auch angezeigt.

Trägst du z.B. "TRACE=n;" in deine Verbindungsfolge ein, kannst du die Debugausgaben in dem QZDASOINT-Job verfolgen.

BenderD
29-05-18, 15:11
... alles im grünen Bereich, die Connections werden Server seitig in einem Pool von vorgestarteten Jobs verwaltet.

D*B

Toschie
29-05-18, 15:17
Hallo Fuerchau,
hallo BenderD,

das bedeutet, das ich darauf keinen Einfluss habe und das System das selbstständig macht?
Hatte mich nur gewundert, da es wie geschrieben, bei einem VB6-Produkt (Allerdings via ODBC-Connect) immer so war, das er die bisherigen Service Jobs "recycled" hat und diese dann weiter verwendet hat.

Toschie
29-05-18, 15:19
Hall Fuerchau,

ich habe zum Test mal die Ergänzung im connection-String gemacht:
connectionString = String.Format("DataSource={0};UserID={1};Password={2};Trace=N;", serverIp, userName, userPassword)

und erhalte nun die Meldung:
"The ConnectionString property is invalid."

BenderD
29-05-18, 15:21
Hallo Fuerchau,
hallo BenderD,

das bedeutet, das ich darauf keinen Einfluss habe und das System das selbstständig macht?
Hatte mich nur gewundert, da es wie geschrieben, bei einem VB6-Produkt (Allerdings via ODBC-Connect) immer so war, das er die bisherigen Service Jobs "recycled" hat und diese dann weiter verwendet hat.

... vielleicht hat die Anwendung die Connections auf Client Seite gepooled, was im Java Bereich oft gefordert ist, aber gegen die DB2/400 nicht viel bringt.

D*B

Toschie
29-05-18, 15:50
Ok,

dem werde ich dann nochmal auf den Grund gehen.

Wie sieht es grundsätzlich aus, wenn man sich mit der iSeries verbinden möchte?
Wie erhalte ich die beste Performance?

Bei meinem Vorhaben geht es um den Abruf von Massen-Daten und der späteren Bereitstellung an eine Druck-Api.

Fuerchau
29-05-18, 16:14
Da kann man keine pauschale Aussage treffen da es zu viele Abhängigkeiten gibt.
Ich habe da Transferraten von 100 Sätze/Sekunde bis 2000 Sätze/Sekunde.
Abhängig von Indexoptimierung bis hin zur Netzwerkgeschwindigkeit.
Wenn das Netz relativ zu ist (auch bei 1GBit = netto ca. 100MByte) bekommt man halt nur ein paar MB/Sekunde durch.

Toschie
29-05-18, 16:27
Ok, danke für die Antwort.
Dann gehe ich anders an die Frage ran.
Wie machen es die Profis? :D
Wenn wir mal davon ausgehen, dass die Dateien über logische, etc. sauber geschlüsselt sind.

Bisher haben wir immer via odbc zugegriffen.
Man liest immer wieder, das bei odbc die Performance nicht die beste sein soll.
Daher die Frage, wie ihr sowas macht.

BenderD
29-05-18, 20:06
Ok, danke für die Antwort.
Dann gehe ich anders an die Frage ran.
Wie machen es die Profis? :D
Wenn wir mal davon ausgehen, dass die Dateien über logische, etc. sauber geschlüsselt sind.

Bisher haben wir immer via odbc zugegriffen.
Man liest immer wieder, das bei odbc die Performance nicht die beste sein soll.
Daher die Frage, wie ihr sowas macht.

... ich kann nur sagen, wie ich es mache:
- Festlegung Anforderung Transaktionsraten
- Abschätzung Transaktionsvolumina
- bei hohen Transaktionsvolumina und oder hohem Durchsatz
-- Vorab Evaluierung mit Zugriffsmodellen
- first make it right, then make it fast
- Optimierung:
-- messen
-- Analyse: Warum dauert das so lang, wie es dauert
-- Index?, Parallelisierung?, ??
-- messen!!!
- alle Meinungen von "Experten" und denen, die sich dafür halten oder gehalten werden sind Kaffeesatz
- was zählt sind Messungen im Realumfeld
- Hardware ist oft billiger als Software Optimierung

D*B