Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

eseguire sp_addlinkedserver per collegare AS/400

297 views
Skip to first unread message

hyppos

unread,
May 18, 2004, 12:20:19 PM5/18/04
to
Dato che molto spesso mi trova a eseguire procedure di estrazioni dati da
AS/400 su SQL Server, ho pensato di utilizzare l'ottima soluzione dei server
collegati, di modo da poter eseguire ad esempio SELECT con JOIN di tabelle
poste sui due Database Server.
Ho provato ad utilizzare sia OLE DB tramite il provider IBMDA400 installato
col Client Access che ODBC ottenendo perņ pessimi risultati: il primo non
riesce neanche a connettersi ad AS/400, il secondo invece si connette, ma
appena provo a fare una SELECT, mi restituisce solo il primo rigo e
successivamente un errore.

Di seguito un estratto delle operazioni e relativi errori.

CONNESSIONE OLE DB:
EXEC @RC = [master].[dbo].[sp_addlinkedserver]
@server='AS400_OLEDB',
@srvproduct='IBMDA400',
@provider='IBMDA400',
@datasrc='indirizzo_IP'

La SP va a buon fine, ma quando da EM provo a visualizzare le Tabelle o le
Viste ottengo il seguente errore:
Errore 7302: Impossibile creare un'istanza del provider OLE DB 'IBMDA400'.
Traccia di errore OLE DB [Non-interface error: CoCreate of DSO for IBMDA400
returned 0x80040154].


CONNESSIONE ODBC:
EXEC @RC = [master].[dbo].[sp_addlinkedserver]
@server='AS400_ODBC',
@srvproduct='MSDASQL',
@provider='MSDASQL',
@datasrc='LDML3001'

Anche in questo caso la SP va a buon fine, ma quando da Query Analyzer
eseguo un'istruzione di questo tipo

SELECT * FROM OPENQUERY(AS400_ODBC,'SELECT * FROM STMLTB')

ottengo solo il primo record della tabella ed il seguente errore:
Server: messaggio 7399, livello 16, stato 1, riga 1
Il provider OLE DB 'MSDASQL' ha segnalato un errore.
[OLE/DB provider returned message: [IBM][Client Access Express ODBC Driver
(32-bit)]Il programma di controllo non pu. eseguire la funzione richiesta.]
Traccia di errore OLE DB [OLE/DB Provider 'MSDASQL' IRowset::GetNextRows
returned 0x80004005: ].

che sembra appunto indicare l'impossiblitą per il provider di passare al
record successivo.

Qualcuno ha qualche informazione in merito per risolvere il problema?
Grazie,
Filippo

P.S.: ovviamente ho qui tralasciato la parte riguardante l'assegnazione del
login per l'accesso ad AS/400 che č andata anch'essa a buon fine.

Lorenzo Benaglia

unread,
May 18, 2004, 5:21:05 PM5/18/04
to
hyppos wrote:
> Qualcuno ha qualche informazione in merito per risolvere il problema?

Ciao Filippo,

sul numero di Marzo 2003 di SQL Server Magazine, Michael Otey ha scritto
l'articolo "Bridging the Gap" sull'utilizzo dei DTS per il trasferimento di
dati tra SQL Server e AS/400.
Tra i vari argomenti, troverai anche le istruzioni passo passo per linkare
il server AS/400 in SQL Server.
Michael ha utilizzato l'IBM Client Access ODBC Driver fornito insieme a
iSeries Access for Windows (Client Access Express) V5R1, in quanto afferma
che il provider OLE DB di IBM è instabile e genera spesso dei locks nei
processi.

L'articolo è disponibile anche online ma solo se si possiede un abbonamento
alla rivista al seguente link:
http://www.sqlmag.com/Articles/Index.cfm?ArticleID=37639

Il consiglio che ti posso dare è quello di cercare la rivista in qualche
negozio specializzato o contattare direttamente la Penton.

> Grazie,
Prego.

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://mvp.support.microsoft.com
http://italy.mvps.org


David

unread,
May 19, 2004, 12:18:09 PM5/19/04
to
hyppos wrote:
> Dato che molto spesso mi trova a eseguire procedure di estrazioni dati da
> AS/400 su SQL Server, ho pensato di utilizzare l'ottima soluzione dei server
> collegati, di modo da poter eseguire ad esempio SELECT con JOIN di tabelle
> poste sui due Database Server.
> Ho provato ad utilizzare sia OLE DB tramite il provider IBMDA400 installato
> col Client Access che ODBC ottenendo perň pessimi risultati: il primo non

> riesce neanche a connettersi ad AS/400, il secondo invece si connette, ma
> appena provo a fare una SELECT, mi restituisce solo il primo rigo e
> successivamente un errore.

Ciao hyppos,
io ho fatto cosě:
1) creo una dsn al mio AS/400, utilizzando "Client Access ODBC Driver
(32-bit). La mia versione di Client Access č V5R1M0 (nessun sp installato);
2) in EM, creo un server collegato:
2.1) Provider = "Microsoft OLEDB Provider for ODBC Driver"
2.2) Origine dati = dsn creata al punto 1
2.3) Protezione = In base al seguente contesto di protezione (username
+ password validi per accedere all'AS/400)
3) da QA, faccio una query nel seguente modo:
"SELECT * FROM OPENQUERY('nome_dsn', 'SELECT * FROM
nomelibreriaAS400.nomefileAS400')"

Avvertenze:
1) Nella dsn, io ho impostato le opzioni del tipo di collegamento in
"Sola lettura", per evitare possibili danni;
2) Potresti trovarti con dati restituiti un po' diversi da quelli che ti
aspetti, nel senso che il result set non ha tutti i record che pensavi,
oppure piů colonne aggiungi al result set della openquery, meno record
ti vengono restituiti. Per ovviare al problema, vai nella dsn, nella
scheda "Prestazioni", poi "Avanzate" e togli la spunta all'opzione
"Utilizzare il blocco con una fetch di 1 riga".

PS: se non conosci bene l'AS400, o non hai qualcuno che ti spiega le
opzioni che leggi nell'articolo segnalato da Lorenzo, evita di
smanettare sull'AS! :-)

Buon divertimento!

David

hyppos

unread,
May 24, 2004, 3:47:49 AM5/24/04
to
Grazie ad entrambi, provero a cercare l'articolo.
Per David: i passaggi che mi hai suggerito gli avevo già fatti quasi tutti,
dico quasi perché ho la release Express 4.5 che non ha il pulsante avanzate
nella scheda prestazioni. Comunque credo sia un problema di release.
Grazie ancora

0 new messages