C'è qualche modo per accedere a Sql server da z/OS mainframe e avere il risultato in emulazione di terminale 3270 IBM?

StackOverflow https://stackoverflow.com/questions/2220191

Domanda

C'è un modo (possibilmente a basso costo) per accedere a Microsoft Sql Server da z/OS mainframe (COBOL programmi) e sono il risultato di emulazione di terminale 3270?
Sono consapevole del fatto che 3270 è piuttosto vecchio sistema, ma in banca CED, è ancora molto popolare.

È stato utile?

Soluzione

Dipende da quello che in realtà si sta cercando di fare. La mia lettura della tua domanda è che si desidera avere un mainframe basato accesso processo di un database SQL Server, e poi fare qualcosa con il risultato, probabilmente, che coinvolge un terminale 3270.

Se è possibile utilizzare Unix System Services, è possibile compilare una libreria come TDS FreeTDS e quindi utilizzare un programma in C per fare quello che vuoi con il risultato. Se si desidera ottenere più complesse, è possibile eseguire la connessione dalla ambiente nativo z / OS compilando il codice con IBM C, SAS C o Dignus C / C ++ . Posso consigliare Dignus e l'ho usato per costruire il codice che interagisce con altre lingue su z / OS. L'intestazioni e libreria di runtime Dignus hanno (a memoria) un po 'di FreeBSD lignaggio che aiuta a semplificare il porting.

Con questo approccio è possibile ottenere un modulo di carico che si può chiamare da qualche altra parte del vostro sistema per fare il lavoro, è possibile collegare il codice con le altre parti del sistema, oppure si può semplicemente inviare un lavoro e ottenere il uscita.

Se si desidera utilizzare Java, è possibile usare qualcosa come jTDS e scrivere codice Java di fare ciò hai bisogno. Non ho usato Java su z / OS, quindi non posso offrire consulenza specifica lì, ma ho usato jTDS su altre piattaforme e sono stato contento del risultato.

Aggiornamento:

È possibile esportare una funzione C come punto di ingresso ad un modulo di carico e quindi chiamare che dal Cobol. Il C / C ++ implementazione deve affrontare strutture di dati Cobol; sono ben definiti e prevedibili in modo che non è un problema. A seconda di come flessibile è necessario che le cose siano, si potrebbe compilare la query nel codice C e solo una funzione che eseguito una query predefinita e aveva un'interfaccia per recuperare il risultato, o si potrebbe avere qualcosa di più complesso in cui è stata fornita la query dal programma Cobol.

Ho usato questo metodo per fornire funzioni API per Adabas / sviluppatori naturali e ha funzionato bene. Il compilatore Dignus ha un meccanismo per chi chiama per fornire un handle a una libreria di runtime in modo che è possibile gestire il ciclo di vita dell'ambiente runtime C dal programma chiamante.

Per una / C ++ sviluppatore C, che dovrebbe essere abbastanza semplice. Se gli sviluppatori sono tutti gli sviluppatori Cobol, le cose potrebbero essere un po 'più complicato.

L'approccio gateway è possibile, e sono sicuro che ci sono prodotti gateway in giro, ma non posso raccomandare uno. Ho visto quelle schifose che io non lo consiglio, ma questo non significa che non ci sia una buona da qualche parte.

Per completezza, citerò la possibilità di implementare il protocollo TDS in Cobol. Suona come punizione crudele e al solito, però.

Altri suggerimenti

Se si dispone di 3270 emulazione di terminale, cosa sono i terminali stai usando? PC?

Una trucco interessante sta usando un router Cisco di fare al volo 3270 per la conversione TCP vaniglia, e quindi scrivendo una semplice delega TCP per le procedure di SQL Server

Non come tali - 3270 emulatori si connettono a un mainframe IBM. Al fine di ottenere a dati da un database del server SQL su un mainframe, che avrebbe dovuto scrivere un programma in esecuzione sul mainframe che legge i dati dal server SQL DB. Ciò richiederebbe di avere driver software in esecuzione sul mainframe. Potreste essere in grado di trovare una terza parte che rende questo tipo di cosa, ma è probabile che sia molto costoso.

Se avete bisogno di mettere insieme un dati del report o qualcosa che unisce da un sistema mainframe con origini dati esterne può essere più facile per ottenere i dati fuori dal mainframe e fare l'integrazione altrove -. Forse una sorta di data mart

Un'alternativa sarebbe quella di estrarre i dati THD si desidera dal database di SQL Server e caricarlo mainframe come un file flat per l'elaborazione di lì.

Qui è una possibilità se si sta scrivendo COBOL programmi che sono in esecuzione in CIC.

Prima di avvolgere il vostro database di SQL Server stored procedure con un web service wrapper.Guarda devx.com articolo 28577 per un esempio.

Dopo di che, chiamata SQL Server nuovo servizio web ospitato utilizzando un CICS chiamata al servizio web.

L'ultima, CICS standard BMS comandi per presentare i dati all'utente.

Appliation di Sviluppo per CICS Servizi Web

Basta avere il driver JDBC per accedere al server MS-SQL. È quindi possibile creare una sottoclasse ed usarlo nel vostro programma Cobol e accedere al database come se si stesse utilizzando da Java.

Dopo aver ottenuto i risultati, è possibile presentare tramite regolari funzioni BMS.

Non ci sono hack o trucchi sporchi networking fantasia necessari. Con IBM Enterprise COBOL, è davvero possibile solo creare una classe Java e utilizzarlo come si farebbe in spazio Java.

Si potrebbe essere in grado di fare qualcosa che ho fatto in passato. Ho scritto DB2 per i programmi MS-SQL COBOL / funzioni che rendono il MS-SQL tabella / vista selezionare solo a DB2. Ha coinvolto la creazione di un servizio in esecuzione su un server di rete che avrebbe accettato le connessioni TCP / IP solo dal mainframe e utilizzare le credenziali passate come l'ID utente / PW utilizzato per accedere alla tabella di MS-SQL. Sarebbe quindi emettere una select contro il tavolo / vista e passare alla lista i nomi dei campi di nuovo prima con il numero totale di righe. Sarebbe quindi passare ogni riga, come scheda campi delimitata, al mainframe. Il programma COBOL avrebbe salvato i nomi dei campi di una tabella da utilizzare per determinare quale di routine da utilizzare a tradurre ogni campo MS-SQL per DB2. Dal punto di vista DB2, sembra una funzione che restituisce i campi. Abbiamo circa 30 di questi in esecuzione. Ho dovuto creare un MS-SQL descrivono procedura per contribuire a creare le definisce iniziali delle transations campo per il programma COBOL. anche dovuto creare un programma COBOL per leggere i dati descrivere e creare i comandi divisione sollevatore e procedure. Un programma COBOL per ogni MS-SQL tabella / vista. Ecco una definizione di funzione di esempio. CREATE FUNCTION
    TCL.BALANCING_RECON (VARCHAR (4000))
    RESI
      TAVOLO (
SCOMPANY CHAR (6),
PNOTENO VARCHAR (14),
PUNIT CHAR (3),
LATEFEES dicembre (11,2),
FASB_4110 dicembre (11,2),
FASB_4111 dicembre (11,2),
USERAMOUNT1 dicembre (11,2),
USERAMOUNT2 dicembre (11,2),
USERFIELD1 VARCHAR (14)
   )
     Linguaggio Cobol
     CONTINUA dopo il fallimento
     NON
DETERMINISTICO      Legge i dati SQL
     NOME ESTERNO DB2TCL02
     COLLID DB2TCL02
     Parametro di stile SQL
     CHIAMATO ON NULL INPUT
     NO AZIONE ESTERNA
     Disallow
PARALLELO      SCRATCHPAD 8000
      ASUTIME LIMIT 100 |       Stay Resident SI
      TIPO DI PROGRAMMA SUB
      WLM AMBIENTE DB2TWLM
      SICUREZZA DB2
      DBINFO
  ; COMMIT;
    GRANT EXECUTE ON FUNZIONE TCL.BALANCING_RECON PUBBLICO;

Per richiamare la funzione: SELECT * FROM
  TABELLA (TCL.BALANCING_RECON ( ''
  )) AS X;

Si potrebbe mettere tutti i comandi di filtro MS-SQL tra le virgolette.

Sono non stato chiesto di aggiornare i dati di MS-SQL in modo non ho ancora jumpped questo ostacolo. C'è anche una banca dati in DB2 che tiene traccia del PW e ID del server / che ha il compito di corsa iniziata. Questo è così, se il server si sovraccarica, diverse seleziona può essere spinto a diversi server. La risposta è rapida, anche per tabelle di grandi dimensioni. Timeout è lo stesso del timeout 60 stallo. Il trasporto è basato IP primarly. DB2 vede simly i dati come un riferimento tabella esterna.

Come hack sporchi vanno, hai pensato di creare un HTTP semplici o server TCP che restituisce un .csv dei dati della tabella di cui avete bisogno?

Questo significa che il cliente ha bisogno di solo un semplice client HTTP / TCP per accedere ai dati, piuttosto che una libreria client di database.

Nella mia azienda, usiamo Java per connettersi a SQL Server.

E una chiamata CL questo programma Java:)

Molto semplice ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top