Est-il possible d'accéder au serveur Sql de mainframe z / OS et ont le résultat dans l'émulation de terminal IBM 3270?

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

Question

Est-il possible (peut-être pas cher) pour accéder à Microsoft Sql Server à partir mainframe z / OS (programmes COBOL) et ont le résultat 3270 émulation de terminal
Je suis conscient du fait que 3270 est un système assez vieux, mais dans la banque CED, est toujours très populaire.

Était-ce utile?

La solution

Cela dépend de ce que vous essayez de faire réellement. Ma lecture de votre question est que vous voulez avoir un accès processus basé sur mainframe une base de données SQL Server, puis faire quelque chose avec le résultat, impliquant probablement un terminal 3270.

Si vous pouvez utiliser Unix System Services, vous pouvez compiler une bibliothèque TDS comme FreeTDS puis utiliser un programme C pour faire ce que vous voulez avec le résultat. Si vous souhaitez obtenir plus complexe, vous pouvez exécuter la connexion de l'environnement z / OS natif en compilant le code avec IBM C, C ou SAS jTDS et écrire du code Java pour faire ce que vous avez besoin. Je ne l'ai pas utilisé Java sur z / OS, donc je ne peux pas vous donner des conseils précis, mais je l'ai utilisé jTDS sur d'autres plateformes et j'ai été satisfait du résultat.

Mise à jour:

Vous pouvez exporter une fonction C comme point d'entrée à un module de charge, puis appeler à partir Cobol. La mise en œuvre de C / C doit traiter des structures de données Cobol; ils sont bien définis et prévisibles de sorte que n'est pas un problème. En fonction de la flexibilité dont vous avez besoin que les choses soient, vous pouvez compiler la requête dans le code C et juste une fonction exécutée une requête prédéfinie et a une interface pour récupérer le résultat, ou vous pourriez avoir quelque chose de plus complexe où la requête a été fournie du programme Cobol.

Je l'ai utilisé cette approche pour fournir des fonctions de l'API pour les développeurs / Adabas Natural et il a bien fonctionné. Le compilateur Dignus dispose d'un mécanisme pour les appelants de fournir une poignée à une bibliothèque d'exécution afin que vous puissiez gérer la durée de vie de l'environnement d'exécution C du programme appelant.

Pour un développeur C ++ / C, qui devrait être assez simple. Si vos développeurs sont tous les développeurs Cobol, les choses pourraient être un peu plus délicat.

L'approche de la passerelle est possible, et je suis sûr qu'il ya des produits autour de la passerelle, mais je ne peux pas recommander un. J'ai vu les merdiques que je ne recommanderais pas, mais cela ne veut pas dire qu'il n'y a pas un bon endroit.

Pour être complet, je vais mentionner la possibilité de mettre en œuvre le protocole TDS en Cobol. Sonne comme un châtiment cruel et d'habitude, cependant.

Autres conseils

Si vous avez 3270 émulation de terminal, ce que les terminaux utilisez-vous? PC?

Une astuce intéressante utilise un routeur Cisco pour faire à la volée 3270 à la conversion de TCP à la vanille, puis d'écrire une simple approximation TCP pour vos procédures SQL Server

Non en tant que tel - 3270 émulateurs se connectent à un ordinateur central IBM. Afin d'obtenir à des données d'une base de données de serveur SQL sur un ordinateur central, vous devez écrire un programme en cours d'exécution sur l'ordinateur central qui lit les données à partir du serveur de base de données SQL. Cela vous avez besoin d'avoir un logiciel de pilote en cours d'exécution sur l'ordinateur central. Vous pourriez être en mesure de trouver un tiers qui fait ce genre de chose, mais il est susceptible d'être assez cher.

Si vous avez besoin de mettre en place un rapport ou quelque chose combinant les données d'un système central avec des sources de données externes, il peut être plus facile d'obtenir les données hors du mainframe et faire l'intégration ailleurs -. Peut-être une sorte de datamart

Une autre possibilité serait d'extraire des données de thd que vous voulez à partir de la base de données SQL Server et le télécharger sur l'ordinateur central en tant que fichier plat pour le traitement il.

Voici une possibilité si vous écrivez des programmes COBOL qui sont en cours d'exécution dans CICS.

Tout d'abord, enveloppez votre procédure de base de données SQL Server stockées avec un wrapper de service Web. Regardez l'article de devx.com 28577 pour un exemple.

Après cela, appelez votre nouveau service Web hébergé SQL Server à l'aide d'un appel de service Web CICS.

Dernier utilisation des commandes standards BMS CICS pour présenter les données à l'utilisateur.

Appliation Développement CICS Web Services

Procurez-vous le pilote JDBC pour accéder au serveur MS-SQL. Vous pouvez ensuite sous-classe et de l'utiliser dans votre programme Cobol et accéder à la base de données comme si vous utilisiez de Java.

Une fois que vous obtenez vos résultats, vous pouvez les présenter par l'intermédiaire des fonctions régulières BMS.

Pas de hacks sale ou fantaisie trucs de réseautage nécessaires. Avec IBM Enterprise Cobol, vous pouvez vraiment créer simplement une classe Java et l'utiliser comme vous le feriez dans l'espace Java.

Vous pourriez être en mesure de faire quelque chose que je l'ai fait dans le passé. Je l'ai écrit DB2 aux programmes / fonctions MS-SQL COBOL qui font la table MS-SQL / SELECT vue uniquement à DB2. Il impliquait la création d'un service en cours d'exécution sur un serveur de réseau qui accepte les connexions TCP / IP uniquement de l'ordinateur central et utiliser les informations d'identification transmises comme l'ID utilisateur / PW utilisé pour accéder à la table MS-SQL. Il émettrait ensuite une sélection sur la table / vue et transmettre la liste des noms de champs en arrière d'abord avec le nombre total de lignes. Il serait alors passer chaque ligne, comme onglet champs délimités, de retour à l'ordinateur central. Le programme COBOL sauverait les noms de champs dans une table à utiliser pour déterminer quelle routine à utiliser pour traduire chaque champ MS-SQL pour DB2. Du point de vue de DB2, il ressemble à une fonction qui renvoie les champs. Nous avons environ 30 de ces cours d'exécution. Je devais créer une procédure MS-SQL décrivent pour aider à créer les premières définit des champs transations pour le programme COBOL. Il y avait également de créer un programme COBOL pour lire les données de description et de créer les commandes de la division liaison et procédure. Un programme COBOL pour chaque table MS-SQL / vue. Voici une définition de fonction de l'échantillon. CREATE FONCTION
    TCL.BALANCING_RECON (VARCHAR (4000))
    RETOURS
      TABLE (
SCOMPANY CHAR (6),
PNOTENO VARCHAR (14),
PUNIT CHAR (3),
LATEFEES DEC (11,2),
FASB_4110 DEC (11,2),
FASB_4111 DEC (11,2),
USERAMOUNT1 DEC (11,2),
USERAMOUNT2 DEC (11,2),
USERFIELD1 VARCHAR (14)
   )
     LANGUE COBOL
     PERSISTENT APRÈS PANNE
     NOT DETERMINISTIC
     SQL DATA
READS      NOM EXTERNE DB2TCL02
     COLLID DB2TCL02
     PARAMETER STYLE SQL
     ON NULL APPELÉ ENTRÉE
     AUCUNE ACTION EXTERNE
     REFUSER PARALLÈLE
     SCRATCHPAD 8000
      ASUTIME LIMITE 100
      SEJOUR RESIDENT OUI
      TYPE DE PROGRAMME SOUS
      WLM ENVIRONNEMENT DB2TWLM
      SÉCURITÉ DB2
      DBINFO
  ; COMMIT;
    GRANT EXECUTER SUR TCL.BALANCING_RECON FONCTION PUBLIQUE;

Pour appeler la fonction: SELECT * FROM
  TABLE (TCL.BALANCING_RECON ( ''
  )) En tant que X;

Vous mettriez des commandes de filtre MS-SQL entre les guillemets.

Je n'ai pas demandé de mettre à jour les données MS-SQL, donc je ne l'ai pas encore jumpped cet obstacle. Il y a aussi une base de données DB2 qui conserve la trace de l'ID / PW et le serveur qui a la tâche en cours d'exécution a commencé. Il en est ainsi si le serveur est surchargé, peuvent être différentes sélections poussés vers des serveurs différents. La réponse est rapide, même pour les grandes tables. Délai d'attente est le même que le délai de 60 impasse. Le transport est basé sur IP primarly. DB2 voit simly les données comme une référence de table externe.

hacks sales aller, avez-vous pensé à créer d'un simple serveur HTTP ou TCP qui retourne une .csv des données de table que vous avez besoin?

Cela signifie que votre client a besoin d'un simple client HTTP / TCP pour accéder aux données plutôt que d'une bibliothèque de base de données client.

Dans mon entreprise, nous utilisons Java pour se connecter à SQL Server.

Et un appel CL ce programme Java:)

Très simple ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top