After some years with my procedures in place up & running we decided to expand the capacity of the system expanding the max size of the LOB column for the documents in Db2 from 10Mb up to 64Mb.
Quite easy, isnt'it?
Just a couple of days and then started the troubles.
The symptom was an error message on the server console:
23/09/2013 13.05.16 HTTP Server: Agent 'db2out_age' error: Error: Unable to allocate memory, Connector 'db2', Method -Fetch-
The file, of course, was not exported to the filesystem .....
....
As this blog i moving you can find the full article here :
http://www.fabiodipaola.it/2013/10/20/reaching-the-limit/
Visualizzazione post con etichetta Db2. Mostra tutti i post
Visualizzazione post con etichetta Db2. Mostra tutti i post
8 ott 2013
12 dic 2012
Il mio show in IBM
Con un po' di ritardo posso ora rendere pubblica la presentazione che ho tenuto in IBM quest'estate:
29 ott 2010
Lotusscript verso Db2 - parte seconda
Una volta connessi al nostro Db2 (vedi post precedente della serie) passiamo a scrivere e leggere i dati , che e' quello che realmente ci serve.
Il primo esempio e' ovviamente quello piu' semplice: costruiamo uan query in SQL , la passiamo al Db2 e poi gestiamo i risultati.
Nelle dim inserisco una dichiarazione
Dim fldLst As New LCFieldList
Cosa significa ? LCFieldList rappresenta un results set che puo contenere uno o piu' record coi relativi campi ed e' il "contenitore" dove vanno a finire i risultati della query .
Poi vediamo come utilizzarla
Primo passo : in una variabile inserisco la query SQL
interroga="select * from schema.tabella where nome='Pippo' order by cognome"
(occhio alle virgolette/apici)
e poi la faccio eseguire , magari controllando che mi ritorni effettivamente dei dati:
If (connect.Execute (interroga, fldLst) = 0) Then
Print "Spiacente, non ci sono documenti che corrispondono alla query "
Exit Sub
End If
Da notare la la parte connect.Execute (interroga, fldLst) dove in pratica chiedo di eseguire la query SQL tramite la LCConnection che ho dichiarato (vedi post precedente) e di inserire il risultato in fldLst.
Nel caso la execute mi ritorni uno zero significa che non ci sono record corrispondenti e quindi avverto ed esco.
Se invece i risultati ci sono lo script prosegue e comincia a ciclarli con un while cosi' strutturato:
While (connect.Fetch (fldLst) > 0)
.....
Wend
ed al cui interno inserisco quello che mi serve: banalmente faccio una print dei dati estratti
Print fldlst.nome(0)
Print fldlst.cognome(0)
dove nome e cognome sono i campi Db2 ritornati dalla query
In pratica l'elemento chiave qui (ed in altri casi simili) e' la classe LCFieldlist , una volta capito il suo scopo e funzionamento si va' via spediti .
Ah, dimenticavo: LCFieldlist contiene ovvimanete degli oggetti di tipo LCField che sono i campi veri e propri della tabella, poi parliamo anche di questi
Il primo esempio e' ovviamente quello piu' semplice: costruiamo uan query in SQL , la passiamo al Db2 e poi gestiamo i risultati.
Nelle dim inserisco una dichiarazione
Dim fldLst As New LCFieldList
Cosa significa ? LCFieldList rappresenta un results set che puo contenere uno o piu' record coi relativi campi ed e' il "contenitore" dove vanno a finire i risultati della query .
Poi vediamo come utilizzarla
Primo passo : in una variabile inserisco la query SQL
interroga="select * from schema.tabella where nome='Pippo' order by cognome"
(occhio alle virgolette/apici)
e poi la faccio eseguire , magari controllando che mi ritorni effettivamente dei dati:
If (connect.Execute (interroga, fldLst) = 0) Then
Print "Spiacente, non ci sono documenti che corrispondono alla query "
Exit Sub
End If
Da notare la la parte connect.Execute (interroga, fldLst) dove in pratica chiedo di eseguire la query SQL tramite la LCConnection che ho dichiarato (vedi post precedente) e di inserire il risultato in fldLst.
Nel caso la execute mi ritorni uno zero significa che non ci sono record corrispondenti e quindi avverto ed esco.
Se invece i risultati ci sono lo script prosegue e comincia a ciclarli con un while cosi' strutturato:
While (connect.Fetch (fldLst) > 0)
.....
Wend
ed al cui interno inserisco quello che mi serve: banalmente faccio una print dei dati estratti
Print fldlst.nome(0)
Print fldlst.cognome(0)
dove nome e cognome sono i campi Db2 ritornati dalla query
In pratica l'elemento chiave qui (ed in altri casi simili) e' la classe LCFieldlist , una volta capito il suo scopo e funzionamento si va' via spediti .
Ah, dimenticavo: LCFieldlist contiene ovvimanete degli oggetti di tipo LCField che sono i campi veri e propri della tabella, poi parliamo anche di questi
19 ott 2010
Lotusscript verso Db2
Ritorniamo indietro al mio progetto per la gestione di documenti in Db2 . Ora che la connessione fra Domino e Db2 e' instaurata si puo' cominciare a scrivere codice per usarla.
Partiamo da un agent che va a scrivere in Db2 cosi' vediamo cosa possiamo fare .
Prima cosa : nelle options piazziamo una bella riga Uselsx "*lsxlc" che vuol dire caricare le LotusScript Extension for Lotus Domino Connectors (LSX LC). Questo ci mette a diposizioni metodi e classi non solo per Db2 ma anche per il file system, Oracle e Sybase. La relativa documentazione la trovate qui .
Partiamo con le prime due Dim necessarie:
La seconda riga e' quella che fisicamente crea la connessione al database Db2 (o Oracle o altro supportato, basta cambiare il parametro di LCConnection)
Nota : per sapere quali sono i connettori disponibili potete usare LCSession.ListConnector
Potete anche scriverla in questo modo per intercettare eventuali problemi di connessione:
Ultima cosa di questa puntata: ricordatevi, al termine dello script, di chiudere la connessione con un bel connessione.Disconnect
Partiamo da un agent che va a scrivere in Db2 cosi' vediamo cosa possiamo fare .
Prima cosa : nelle options piazziamo una bella riga Uselsx "*lsxlc" che vuol dire caricare le LotusScript Extension for Lotus Domino Connectors (LSX LC). Questo ci mette a diposizioni metodi e classi non solo per Db2 ma anche per il file system, Oracle e Sybase. La relativa documentazione la trovate qui .
Partiamo con le prime due Dim necessarie:
Dim lcs As New LCSession
Dim connessione As New LCConnection ("db2")
La classe LCSession permatte di accedere all'ambiente in cui gira il connettore (in modo simile alla session di Notes) . Possiamo acceder ad una serie di metodi e testare lo stato della connessione stessa. Non elenco qui il tutto (li trovate nel link alla documentazione qui sopra) ma ho trovato particolarmente utile usare LCSession.ConnectionPooling .Dim connessione As New LCConnection ("db2")
La seconda riga e' quella che fisicamente crea la connessione al database Db2 (o Oracle o altro supportato, basta cambiare il parametro di LCConnection)
Nota : per sapere quali sono i connettori disponibili potete usare LCSession.ListConnector
Dim connessione As New LCConnection ("db2")
connessione.Database = "nomedatabase"
connessione.Database = "nomedatabase"
connessione.UserID = "nomeutenza"
connessione.Password = "passwordutenza"
connessione.Connect
Queste righe si spiegano da sole , passate alla LCConnection il nome del database (meglio usare la forma schema.nomedb ) , il nome utente che abbia le necessarie grant e la sua password , dopodiche' effettuate la Connect al database.Potete anche scriverla in questo modo per intercettare eventuali problemi di connessione:
On error go to Trap
connessione.Connect
Print "Connesso a DB2"
Anche per la classe LCConnection esistono una serie di proprietà e metodi per cui rimando alla documentazione . Significative sono le possibilità di gestire Commit e Rollback del Db2 .connessione.Connect
Print "Connesso a DB2"
Ultima cosa di questa puntata: ricordatevi, al termine dello script, di chiudere la connessione con un bel connessione.Disconnect
12 ott 2010
Notes <-> Db2
Bene, torniamo alla gestione documentale ed al dialogo fra Notes e Db2. Il primo passo e' stato capire come funziona e cosa serve.
Come ho gia' scritto l'idea di base e' un server Domino che dialoga con un Db2. Ma cosa ci va in mezzo? La risposta iniziale e' stata "Db2 Connect" un sw Ibm che mi permette di instaurare le connessioni con i relativi driver Odbc (che non uso) e CLI (che sono quelli che servono) piu' tutta una serie di utility per il Db2.
In breve tempo, pero', da Db2 Connect sono passato ad un altro prodotto chiamato "Ibm data server client" che ha caratteristiche molto simili ma soprattutto non ha costi di licenza. La cosa fondamentale e' che offra la connessione CLI con le relative librerie che vengono utilizzate dalle estensioni di Domino.
Per maggiori info sulla parte CLI (che non significa Client come pensavo all'inizio ma bensì Call Level Interface) vi rimando a questo link. ed aggiungo una citazione:
It is a 'C' and 'C++' application programming interface for relational database access that uses function calls to pass dynamic SQL statements as function arguments. It is an alternative to embedded dynamic SQL, but unlike embedded SQL, DB2 CLI does not require host variables or a precompiler.
Ok , quindi il primo passo e' quello di installare Domino avendo cura di scegliere l'opzione Installa DECS ! Questo non significa che andrete ad usare le funzionalità di Decs, io non carico nemmeno la task relativa ma e' necessario per avere le librerie Domino necessarie poi per LotusScript .
Per verificare di avere tutto installato correttamente date un'occhiata alla directory dei programmi di Domino e cercate dei file con estensione .dcx , in particolare per Db2 serve ndb2.dcx (ce ne sono altri per Oracle, Sybase ecc.)
Ora il passo successivo è quello di installare Db2 Connect o IBM Data Server Client. Una volta fatto questo lanciate l'Assistente di configurazione e configurate la vostra connessione a un server e un database Db2. Fatto? Bbene !
Come ho gia' scritto l'idea di base e' un server Domino che dialoga con un Db2. Ma cosa ci va in mezzo? La risposta iniziale e' stata "Db2 Connect" un sw Ibm che mi permette di instaurare le connessioni con i relativi driver Odbc (che non uso) e CLI (che sono quelli che servono) piu' tutta una serie di utility per il Db2.
In breve tempo, pero', da Db2 Connect sono passato ad un altro prodotto chiamato "Ibm data server client" che ha caratteristiche molto simili ma soprattutto non ha costi di licenza. La cosa fondamentale e' che offra la connessione CLI con le relative librerie che vengono utilizzate dalle estensioni di Domino.
Per maggiori info sulla parte CLI (che non significa Client come pensavo all'inizio ma bensì Call Level Interface) vi rimando a questo link. ed aggiungo una citazione:
It is a 'C' and 'C++' application programming interface for relational database access that uses function calls to pass dynamic SQL statements as function arguments. It is an alternative to embedded dynamic SQL, but unlike embedded SQL, DB2 CLI does not require host variables or a precompiler.
Ok , quindi il primo passo e' quello di installare Domino avendo cura di scegliere l'opzione Installa DECS ! Questo non significa che andrete ad usare le funzionalità di Decs, io non carico nemmeno la task relativa ma e' necessario per avere le librerie Domino necessarie poi per LotusScript .
Per verificare di avere tutto installato correttamente date un'occhiata alla directory dei programmi di Domino e cercate dei file con estensione .dcx , in particolare per Db2 serve ndb2.dcx (ce ne sono altri per Oracle, Sybase ecc.)
Ora il passo successivo è quello di installare Db2 Connect o IBM Data Server Client. Una volta fatto questo lanciate l'Assistente di configurazione e configurate la vostra connessione a un server e un database Db2. Fatto? Bbene !
Iscriviti a:
Post (Atom)