Connettere un database di un AS400 remoto
Talvolta si ha la necessità di collegare su un server IBMi il database di un altro server IBMi remoto.
Per farlo aggiungere il database all'indirizzario con il seguente comando:
ADDRDBDIRE RDB(E102756C ASAIM) RMTLOCNAME('10.0.0.5' *IP)
dove:
- RDB è
- il nome del database locale sul sistema remoto. Lo si trova con il comando
WRKRDBDIRE
sul sistema remoto, è la "voce" di tipo *LOCAL - il nome alias di fantasia che verrà poi utilizzato sul sistema locale per la connessione al sistema remoto
- il nome del database locale sul sistema remoto. Lo si trova con il comando
- RMTLOCNAME è l'indirizzo IP del sistema remoto
A questo punto è possibile accedere al DB con SQL, ad esempio da STRSQL
:
si fa la connessione al DB:
CONNECT TO ASAIM USER <utente_remoto> USING '<password-utente-remoto>'
quindi si eseguono le istruzioni SQL desiderate.
Se si vuole evitare di indicare utente e password ad ogni connessione, è possibile associare le credenziali di autenticazione a tutti gli utenti del sistema locale che hanno bisogno di utilizzare il database remoto. Per farlo:
ADDSVRAUTE USRPRF(mio_utente) SERVER(ASAIM) USRID(<utente_remoto>) PASSWORD(<password-utente-remoto>)
dove:
- USRPRF: è l'utente locale che deve connettersi al DB remoto
- SERVER: è il server remoto (o il suo alias) così come configurato in precedenza con
ADDRDBDIRE
- USERID e PASSWORD: sono il nome utente e password del sistema remoto con cui autenticarsi
Dopo questo, l'utente locale a cui è stata aggiunga questa voce di autorizzazione server (nell'esempio mio_utente), può fare la CONNECT TO
in SQL senza dover specificare utente e password.
Per rimuove l'autorizzazione ad un utente locale si usa il seguente comando:
RMVSVRAUTE USRPRF(mio_utente) SERVER(ASAIM)
Utilizzo DDMF
Configurato il nuovo database remoto come indicato sopra, è possibile utilizzare anche i DDMF.
Creazione di un DDMF:
CRTDDMF FILE(lib_locale/PARTI00F) RMTFILE(lib_remota/PARTI00F) RMTLOCNAME(*RDB) RDB(ASAIM)
Dopo questo comando, il DDMF locale lib_locale/PARTI00F punterà alla tabella remota lib_remota/PARTI00F del database "ASAIM" precedentemente aggiunto con il comando ADDRDBDIRE
.
Oltre a poterlo leggere con programmi RPG, è possibile utilizzare l'SQL senza necessità di fare la connessione al DB remoto.
Esempio:
select * from lib_locale/PARTI00F
Troubleshooting
SQL0805: SQL package PROGRAM1 in MYLIB not found at DRDA Server
Se eseguendo istruzioni SQL all'interno di un programma SQLRPGLE, sia con SQL remoto che con SQL su DDMF locale, si ottiene l'errore SQL0805 - Pacchetto SQL MIO_PGM in MIA_LIB non trovato sul server DRDA. il problema è che cerca un oggetto di tipo "*SQLPKG" con lo stesso nome del programma in una libreria uguale a quella dove risiede l'oggetto programma ma sul sistema remoto.
Si risolve creando una libreria con lo stesso di quella locale (MIA_LIB) sul sistema remoto. In questo modo alla prima esecuzione del mio programma viene automaticamente creato l'oggetto sul sistema remoto nella libreria SME_OVV e tutto funziona!