IDMS/SQL
News 9.1 Vol 9.1 Technical Information for Mainframe and IDMSâ Users March 2000 |
In This Issue |
|
---|---|
HeadlinesSQL CornerIDMS/SQL - Fatal Shortcomings! |
PotPourriString Searching within ADS Process Source Web Attacks and The White House Special DispatchesLinux Story for the IDMS Veteran Web development using OS/390 IDMS |
This page at http://geocities.datacellar.net/idmssql/idms91.htm
Playing
with Tape Numbers What
IDMS Tape you are running? 10.2, 12.0, 14.0, 14.1 ? Multiple page group support. Yes, but is this feature easy to use ? Needed for everyone? Needed for the dying IDMS client who is sitting with last-but-one IDMS application? In spite of the Y2K hype, there are clients who have successfully used 10.2 system without any Y2K problems! Since Y2K support within the builtin functions can easily be installed under 10.2, there was no big deal. Release 15.0 has been announced. Earlier in late 90s SQL clients got the reply that the timestamp issue with respect to SQL database backup and copy will be solved in 15.0. But now 15.0 specifications on the table does not include this problem. CA does not have enough development mass for IDMS to implement such a feature. Once upon a time 10.2 tapes were run parallel in two series - S1020X and S10210X with minimal differences in actual database/application software (There was some difference in PERFMON support). Release 14.1 Tools Tape [CH on IDMS-L] Some time ago discussion
appeared on IDMS-L list about there being no 14.1 tools
installation guide. There ARE some differences (between
the 14.0 TOOLS INSTALLATION MANUAL and the 14.1
INSTALLATION JOBS(base 199911)) that I thought I would
share with the list: running CAISAG creates jobs 1-10,
but not in the order listed in the 14.0 TOOLS install
guide: 1 Allocate Allocate 2 Link CAIIPDS Link CAIIPDS 3 Customize Options Customize Options 4 Build RHDCUXIT Build GSISVCX 5 Build GSISVCX SMP/E RECEIVE 6 SMP/E RECEIVE SMP/E APPLY 7 SMP/E APPLY SMP/E ACCEPT 8 SMP/E ACCEPT GENASM 9 GENASM UPDATE IDD 10 UPDATE IDD Build RHDCUXIT Obviously, looking at the jobs will tell you what is happening in each job, but for those new to installations, it is a bit disconcerting when the doc does not match what is in front of you on the terminal screen ..... |
IDMS/PC RememberedIDMS/SQL News 8.1 had a brief history of IDMS Database. We got many letters from the readers - many of them original Cullinane/Cullinet employees. A warm thanks to all of you who responded. We had briefly mentioned IDMS/PC there. Originally IDMS/PC was called TAB (The Application Builder). The idea was to give a PC based (DOS) IDMS database and ADS mainly to develop mainframe applications on PC. Something like Microfocus-CICS/COBOL. Typically emulating 3270 type terminals, not the current graphical Windows Interface. Mid eighties, this was quite reasonable. TAB used to advertise seminars in Computerworld and was an instant success. TAB was a very good product for its age. One could easily develop ADS, COBOL applications with fully portable IDMS database definitions on PC. This was good for learning and very useful for consulting companies who wanted to prototype an IDMS database and ADS application. The ability to define a CODASYL database on PC was remarkable. Later TAB supported network. Unlike the fileservers this was a true network product which generated very little traffic. A client in Finland in fact had made production level applications using TAB on 386! Another one in Sweden (not an IDMS MF client at all) was running TAB in production on PC! After acquiring TAB, CA changed the name to IDMS/PC. For a while it was also combined with CA-DB/VAX to provide IDMS/UNIX. There was even talk about IDMS/PC as a production platform. Talk was there to test CAS under IDMS/PC. This was too much. One cannot expect 100% portability between IDMS and IDMS/PC. Whatever was available was very good for offloading application development from TSO to PC for ADS and COBOL. Soon the PC world changed to Windows and 95. CA also acquired new PC/UNIX products like Ingres etc. Focus was shifted away. A client in Holland did indeed use IDMS/UNIX successfully. Many wished CA had developed the product to give SQL and even Windows support. This was possible. If ADS+/PC could be transformed into Powerbuilder, IDMS/PC/DOS could have been modified to provide a Windows based IDMS. But the will was not there. With positioning on the mainframe IDMS itself under question, one cannot expect the vendor to put resources on something like IDMS/PC. In spite of all these, there are still old IDMS guys running IDMS/PC on their desktop. It's a pleasure to do OBTAIN CALC on your PC and having an ADSA dialog there! |
In this Issue : Back to Top |
Ever since the first non-trivial SQL application was put into production in 1994 in Norway, IDMS/SQL News has been in the forefront of advocating SQL for IDMS Clients. Not surprisingly, the introductory seminars attracted many participants from clients in Norway and Finland. Today after almost 8 years since Release 12.0 came out, it is time to look back. SQL has been used by some clients but not many. If you compare with ADS/Online implemenstations within 5 years of its introduction during 1983-1988, the spread of SQL among IDMS clients is negligible.
But we read in the industry journals that Cullinet and IDMS lost the leading market in the late eighties, because they did not have pure SQL. Now SQL is there and no one is using it! This sounds like a paradox.
IDMS/SQL has not come very far from 92 to 2000. The product as a first release was, surprisingly, well ahead of the competing products (at least the early releases of the competing products). Until DB2 4.3 was released some time in the 90s (Yes 90s) IDMS R12.0 SQL implementation was far ahead. DB2 4.3 was the first attempt where the main database features caught up with IDMS/SQL. This might be surprising news for all those IDMS fellows who were under the wrong impression that IDMS/SQL implementation was a patchwork. But as new releases came out, there were minimum enhancements to the core, though fancy tools like Quickbridge and Visual DBA were given by the vendor.
The main problem is caused by not really IDMS but as the bye-product of a well known SQL feature - the timestamp. IDMS faithfully implements the timestamp and runs into all the troubles associated with the timestamp.
Backup and Restore
When a backup of SQL database is made, one should also backup the catalog. Similarly when a RESTORE is made, the database and the catalog should be restored at the same time. Simple cases, this works fine. But if a catalog contains more than one SQL database, there is no way to individually backup one of them. Synchronization requires that one backs up all databases defined in one catalog. This will be problematic in practice, especially if the databases are large. Also restore is required if one detects a problem in one of the databases. In that case it is meaningless to restore all the others.
Copying SQL Database from Production to Test
Another side effect of this issue is that one cannot copy databases alone from production to test. One has to copy the catalog also. Again this will create practical problems except in simple cases. There is no guarantee that the test catalog does not have any more tables than the production catalog.
What happens if your Catalog goes corrupt?
What happens if your catalog goes corrupt? And the database is in tact. Can you reproduce a catalog to match that of the database ?
In the case of network database, even in the worst case situation of complete loss of dictionary, one can recreate the dictionary and populate with schema definitions [Obviously we have the schema source somewhere!]
But for SQL, even if you have the whole schema and table definitions in tact in source form, once the catalog is damaged, there is no way to recreate a new catalog. If you restore an old backup of the catalog, timestamp synchronization problems may arise.
Today, IDMS gives no way - documented or undocumented - of getting out of this serious situation. You cannot use your database at all, until you have a valid catalog at run time. And there is no way to re-create a valid catalog that will match the table timestamps in the database area.
Timestamp Manipulation Utility?
The solution to all these timestamp problems is a timestamp manipulation utility. User should be able to synchronize the database and the catalog at will. If the integrity is guaranteed by the user, the utility should be able to update the catalog timestamp with that of the database. This way one can copy production databases to test IDMS and synchronize the test catalog. If the catalog itslef is corrupt or lost, one can create new definitions and synchronize the timestamp from the database.
Multiple Database Issue
In the existing IDMS environment uses multiple database feature. This is implemented such that one needs only a single logical definition for any number of physically different . This is achieved by DBNAME mapping. In the case of SQL Databases, such a mapping is not possible. One has to duplicate definition for each physical database. Timestamp issue dictates that one cannot physically copy database from one 'db' to the other 'db'.
While accessing multiple databases, SQL needs to repeat logical definitions. The program source and load module can be shared. But not the access module. For every SQL program (dialog, cobol program), you also get an access module. In certain cases access module can be shared across programs (when the run unit is shared). If you have to access multiple databases, then the access module have to be recreated for every one of the multiple databases. Unlike the network solution, it is not possible to dynamically do a dbname mapping. The following table illutrates the situation and compares with the multiple database support in SQL and network IDMS.
Situation | # of access modules SQL | # of AM for 10 multiple dbs (SQL) | Newtork subschema | Subschema for 10 multiple dbs |
1 program | 1 | 10 | 1 | 1 |
10 programs | 10 | 10*10 = 100 | 1 | 1 |
100 programs | 100 | 10*100=1000 | 1 | 1 |
1000 programs | 1000 | 10*1000=10000 | 1 | 1 |
This makes pathetic reading! If the client has another complete set for learning then again it gets multiplied. In network database today, you need only one subschema no matter how many 'dbnames' you have! Relational makes this into a horrible situation. How can you load all these into program pools? How can we store all these access modules into SQL load Area? How do we maintain this mess? We tried to find out how this is done in other relational systems. [See below Multiple Database Support in SQL]
Table Load from a flat file - An exampleWe had a question from one Jim regarding SQL using flat file input. As far as we could understand SQL cannot access a simple flat file. But IDMSBCF can be used to load a table with input from a flat file. Here is a simple example. After this job the user must build indexes (if any) and validate. The table to be loaded is IDMSSQL.TESTLOAD CREATE TABLE IDMSSQL.TESTLOAD ( TESTDATATEST 1 12345678ENDTEST COMMENTS 1 TESTDATATEST 2 11111111ENDTEST COMMENTS 2 TESTDATATEST 3 33333333ENDTEST COMMENTS 3 |
Recently the issue of multiple database support in SQL has surfaced in IDMS-L discussion forum. A letter from Kate Hall says "I am in the process of defining an SQL schema for the first time. There will be multiple physical definitions for this schema. I can find no way to have one logical definition (schema) related to multiple physical definitions (segment/dbname). Has anyone done this? Do you have any advice? Also, any other problems you have encountered in creating SQL databases that I can avoid would be much appreciated! "
Kay Rozeboom comments "I went through this some time ago, and I was informed by the CA Support Center that it can't be done. In other words, you must have a separate logical definition for each physical definition.
It seems silly to me that CA would implement IDMS/SQL in the same release (R12) that implemented separate physical and logical definitions for the old IDMS network databases, and not provide the same capability for the new IDMS/SQL databases. I guess this was a case of the right hand not knowing what the left hand was doing! "
Not really! The real problem here is not CA! That's the way SQL works! But with the experience on IDMS, the development people could have bent a little to give a better solution.
Philippe Jacqmin has the explanation: "As soon as a CREATE TABLE is done in OCF/BCF, IDMS will set a D2S2 (Date/time stamp) for this table in the Catalog and for this physical table, in the physical area also. D2S2 will make sure that IDMS/SQL will work with the correct definitions from the SQL Catalog, on the correct physical table using the correct Access Module at run time. This mechanism prevents any potential desynchronization between these entities. This can be considered as a step backwards compared to navigational but as physical access is SQL engine's responsibility and sits outside of your program, this will enforce consistency between the different components."
That's the problem! Unlike the network database definition, CREATE Table indeed creates the table physically in the data area! This establishes a 1:1 sync relationship between the definition and the physical database. Techincally, IDMS could easily deactivate the timestamp checking and share an access module just the same way it does now for SQL against network databases. Then there must be some way to tell the runtime that we (the programmers) guarantee the synchronization (not at physical level, but at least at logical level) between the two 'SQL' databases. If the size of one SQL database is 1000 pages and the other one 100000 pages, access strategy for the same program will obviously be different. Then the access module has to be different.
IDMS/SQL News tried to investigate how this is done in other SQL databases. The result was
"Water water everywhere,
Not a drop to drink!"
That is: we got 'xyz' answers, but none of them satisfactory! Does any of the readers know how exactly this is done in DB2? Can they avoid duplication of definitions? Can they avoid duplication of access modules? And what about the omnipotent Unix based "big mouth" products? How do they handle this issue?
It's high time the people in the industry put the SQL standards into the waste paper basket and find some practical solutions to the SQL database problems. For example, why can't we make a static Global SQL Access Module and give an option to the DBA of using that instead of access modules which have to timestamp checked every time? If the subschema can be trusted for the network DML access why can't we trust such an AM for SQL?
Area and Table TimestampsTimestamps are kept in SQL Application Catalog. The
stamp in System Catalog (where DMCL is stored) is not
used by SQL. If by mistake one end up using the wrong
stamps in System Catalog (CATSYS), it can create
confusion and errors. CONNECT TO SQLCAT; |
Defaults
on DATE, TIME and TIMESTAMP Fields
SQL supports many data types which are
unfamiliar in the network database world. Most people know
INTEGER and CHARCATER data types. What about DECIMAL? NUMERIC ?
DATE? TIMESTAMP? How are they stored? How much space do they take?
There is a simple way to find out the conversion. Create a table
in SQL and try to display the table 'AS REC' within OCF. Here we
go:
CREATE TABLE
IDMSSQL.XYZ
*+ DEFINITION TIMESTAMP 1999-05-11-09.29.15.578622
*+ DATE CREATED 1999-05-11-09.29.15.578622 BY MRY
*+ DATE LAST UPDATED 1999-05-11-09.29.15.578622 BY MRY
(I1_INTEGER INTEGER NOT NULL WITH DEFAULT,
I2_SMALLINT SMALLINT NOT NULL WITH DEFAULT,
I3_CHAR10 CHARACTER(10) NOT NULL WITH DEFAULT,
I4_NUMERIC5 NUMERIC(5) NOT NULL WITH DEFAULT,
I5_DECIMAL5 DECIMAL(5) NOT NULL WITH DEFAULT,
I6_DATO DATE NOT NULL WITH DEFAULT,
I7_TIME TIME NOT NULL WITH DEFAULT,
I8_TIMESTAMP TIMESTAMP NOT NULL WITH DEFAULT );
Now we display the table in OCF as
follows:
DIS TABLE XYZ LIKE
REC AS SYN;
ADD RECORD NAME IS XYZ
RECORD NAME SYNONYM IS XYZ
LANGUAGE IS SQL COMMENT
'Record built from SQL TABLE IDMSSQL.XYZ' .
03 I1-INTEGER PIC S9(8) USAGE COMP.
03 I2-SMALLINT PIC S9(4) USAGE COMP.
03 I3-CHAR10 PIC X(10).
03 I4-NUMERIC5 PIC S9(5).
03 I5-DECIMAL5 PIC S9(5) USAGE COMP-3.
03 I6-DATO PIC X(10).
03 I7-TIME PIC X(8).
03 I8-TIMESTAMP PIC X(26).
How does the timestamp look like internally?
SELECT I6_DATO, HEX(I6_DATO), I7_TIME, HEX(I7_TIME), I8_TIMESTAMP, HEX(I8_TIMESTAMP) FROM XYZ; *+ *+ I6_DATO HEX(FUNCTION) I7_TIME HEX(FUNCTION) *+ ------- -------------- ------- ------------- *+ 1999-05-11 0164638000000000 09.30.19 000000085AB00000 *+ *+ I8_TIMESTAMP HEX(FUNCTION) *+ ------------ ------------- *+ 1999-05-11-09.30.19.177943 016463885AB2B717 *+ *+ 1 row processed
PotPourri - Technical
and not so Technical
In
this Issue : Back to Top (Contents) |
When a new product is out in the market, the documentation may be incomplete or incorrect. But when the product is 7-8 years old one expects these errors to be fixed. Well, noy always.
On Print Log the Utility Manual gives
print log
from archive
start at '1996-1-18:20:00'
stop at '1996-1-19-02.59.59.999999';
This won't work. Gives syntax errors. The correct way to give time is
PRINT LOG
FROM DATABASE
START AT '2000-02-15-14.20.00.000000'
STOP AT '2000-02-15-14.26.00.000000'
In our tests giving
time as ''2000-02-15-14.20' or ''2000-02-15:14:20' did not work.
COBOL DML Reference Manual talks about ENQUEUE "The ENQUEUE statement acquires or tests the availability of a resource or list of resources. Resources are defined during installation and system generation and typically include storage areas, common routines, queues, and processor time." Again in the syntax it says
"resource-id :The symbolic name of a user-defined field that contains the resource ID. The resource ID must be the name of a resource defined to the DC system."
All this implies that if you have to ENQUEUE a resource you have to define it in sysgen. So how do you enqueue a piece of storage? How do you define a piece of your storage is sysgen, during installation ?
The Manual has given an example too:
Example 1: The
following statement requests CA-IDMS to enqueue the CODE-VALUE
and PAYROLL-LOCK resources. CODE-VALUE is reserved for the
issuing task's exclusive use; PAYROLL-LOCK can be shared.
ENQUEUE
WAIT
NAME CODE-VALUE LENGTH 10
NAME PAYROLL-LOCK LENGTH 16 SHARED.
In this example how and where do you define CODE-VALUE
in sysgen?
PERFMON Manual
The perfmon sysadmin book is incorrect in the following: it stats that in order to cut TSKWAIT smf records, either IMDCLOG=YES or IMSMF=YES must be set. This is incorrect. TSKWAIT records are controlled by the application monitor, NOT the interval monitor, and are therefore controlled by AMDCLOG=YES and/or AMSMF=YES. CH on IDMS-L News adds here that CA will provide a docup.
Recently there has been heavy discussions on IDMS-L on this issue. Jim Lancelot,U. S. Department of Veterans started the discussion with the following question: "One of our programmers re-complied a COBOL II program and varied the program NEW COPY, but old copy stayed in memory until the CV was re-cycled. The result of the DCMT VARY PROG said the program was marked to new copy, but when it was displayed with DCMT, the "times loaded = 1" didn't increment and old version remained in memory. Program defined in SYSGEN as NEW COPY ENABLED and is located in the highest concatenated application library under CDMSLIB. We tried every variation of DCMT VARY PROG we could think of, but, nothing loaded the new version of the program until the CV was re-cycled. We're running 12.01 9607 on MVS. "
There were various responses on IDMS-L to this. Most pointed to the question of pdes for DICTNAME and loadlib. Here are a few of them:
* I somehow created a program entry under the dictionary I was using by neglecting the asterisk in front of the program name. From that point on the program under that dictionary name seemed to be referenced, until the CV cycled or the program under the dictionary name is deleted.
* I don't think anything is really wrong, I believe that you had 2 PDE's for the program and only new copied one of them.
To avoid this in the future you can do a DCMT DIS PROG FROM PPPPPPPP where PPPPPPPP is the name of the program, if there are two PDE's you will see both of them. The reason you get two most likely is that one user does not set a DICTNAME and executes the program and another user sets a DICTNAME and executes the program. In this case there would be two PDE's for the same program, if you only new copy the one, some users will still execute the old.
* When you look at the DCMT DIS PROG
FROM you will see CDMSLIB or a DICTNAME,
if you see CDMSLIB issue DCMT VARY PRO *.PPPPPPP NEW COPY
if you see a DICTNAME issue DCMT VARY PRO DICTNAME.PPPPPPPP NEW
COPY
* It sounds to me like you may have had more than 1 active PDE for the program. The NC was done on one PDE, and the other was the one being picked up. We have hit this a few times. There can be 1 PDE for each place the program has been loaded from (or something like that). For instance 1 for CDMSLIB (if applicable) and one for a secondary dictionary (if applicable).
* Try LOOK PROGRAM=xyz or SHOWMAP xyz, these both should load new copy of the program. See times loaded after command(s).
* Just a few things to add...
A dcmt v prog to new copy does just that. It only marks it for
new copy.The new prog will not be loaded into memory until it is
called for. A showmap can do this for you. Also, If you are
calling a prog that was new copied, my understanding is that the
new prog will not be loaded into memory if this same prog is
active at the same time by another job or task.
* I'm curious. We have subschemas that we NC occasionally on our test system. When we do a NC on one in particular we always get a message:
DCMT VARY PROGRAM ASUB001 NC
<number> <type> <source> 1 SUBSCHEMA LOADLIB 2 SUBSCHEMA DICTIONARY
MULTIPLE PROGRAMS SATISFY CRITERIA ENTER <number> TO PROCESS, ANYTHING ELSE TO EXIT
Is the fact that multiple PDEs exist for the subschema the reason for this?
* You proably have a CV batch job run that's loaded the subschema from the CDMSLIB and an online program that loaded it from the dictionary also.
In the new spectrum of things since 12.0 showmap should give an error stating that this is not a map. The command
look program=programname
is the proper way of doing this. The compile information of the
program is displayed also. This is also useful when you issue a
dcmt v program programname nci
Most of the comments are centered around the dictionary issue. But dictionary based PDE is only used for dictionary based load modules - maps, subschemas, dialogs. COBOL program is not loaded from dictionary. So there must be something else going on. Also one can sysgen a program and say NODYNAMIC. For example, this is done for ADSOMAIN. It only guarantees single PDE. But IDMS can still load two copies with a single PDE! If you do DCMT D PRO *.ADSOMAIN you may see multiple copies at the bottom. [This is typically caused by tasks running below and above the line - ADSOMAIN will be loaded in both 24 and 31 bit pools]. The immediate effect for the user is that ADSALIVE may not function from now on until CV is recycled.
But this still does not answer the COBOL mystery. Yet another thing which is not mentioned in the IDMS-L discussion is the issue of COBOL compiler! If you are using one of the 'modern' IBM compilers (COBOL/370/370 LE bla bla), with some options IDMS won't be able to load the program at all! It will create PDE and even find out how big is the load module, but load will fail - even if you are using only LOOK. Here is an example:
DCMT D PRO *.PCOB0100 Program Name PCOB0100 Ddname CDMSLIB Type PROGRAM Type LOADLIB Language COBOL Dictname Size (bytes) 00008056 Dictnode ISA size 00000000 Database key NOT IN DICT Status ENABLED AND INSRV Storage Prot YES Dynamic ALLOWED Residence NOT IN POOL Reusable YES Threading CONCURRENT Reentrant FULLY REENTRANT Overlayable YES Tasks use ct 000 New Copy ENABLED Times called 00000001 Times loaded 000001 PGM chk thrh 005 Pgm check ct 000 Dump thrh 000 Dump ct 000 Amode 31 Rmode ANY PDE address 06D27ABC MPmode SYSTEM
The program was dynamically defined with
DCMT V DYN PRO *.PCOB0100 COBOL REENT .
If an ADS dialog is trying to link to this COBOL program we get a better message
07:01 COBOL-BAD COMPILER/OPTION/VERB DC028001 V2 T124 TASK:ADS2 PROG:ADSOMAIN; VERSION OF COBOL COMPILE IS NOT RECOGNIZABLE DC171030 V2 APPLICATION ABORTED. INVOKED USER PROGRAM PCOB0100 NOT AVAILABLE DC466014 V2 Abort occurred in dialog ...
At this even LOOK fails to load the program.
LOOK PROGRAM=PCOB0100 IDMSLOOK - Selection Parameter Follows: IDMSLOOK - Failed Trying To Load Module PCOB0100 - Reason Code 08
At this stage the user deleted the dynamic definition of the COBOL program (or removed it from Sysgen).
Without any definition executed LOOK It worked LOOK PROGRAM=PCOB0100 PCOB0100 was ÆLOADed From --> CDMSLIB Entry Point Offset +0 - Reentrant - AMODE 31 - RMODE ANY 6,752 Bytes in Load Module PCOB0100 loaded at 07301A00 Module Offset Date Time RHDCLENT +718 960705 1722 . . .
IDMS also created a dynamic PDE for this D PRO PCOB0100 Program Name PCOB0100 Ddname CDMSLIB Type UNDEFINED Type LOADLIB Language ASM Dictname Size (bytes) 00006752 Dictnode ISA size 00000000 Database key NOT IN DICT Status ENABLED AND INSRV Storage Prot NO Dynamic ALLOWED Residence IN POOL AT 07301 Reusable YES Threading CONCURRENT Reentrant FULLY REENTRANT Overlayable NO Tasks use ct 000 New Copy ENABLED Times called 00000001 Times loaded 000001 PGM chk thrh 005 Pgm check ct 000 Dump thrh 000 Dump ct 000 Amode 31 Rmode ANY PDE address 06D27094 MPmode SYSTEM
In this case the problem was that LE/370 COBOL program was compiled with DYNAM option which is not supported. Once the user changed this to NODYNAM everything worked.
Recently there was a question in IDMS-L news from Brian Brown of McGraw Hill. The question was on how to find out what dialogs use a particular DC-COBOL subroutine when
ADS process call DC-COBOL subroutines as in
LINK TO POROGRAM 'P001COB1' USING (SUBSCHEMA-CONTROL, WS-LINK).
Such control commands are not cross-referenced in IDD. How to list all ADS processes which are calling COBOL programs ? Michael A. Newman, Sophisticated Business Systems, Inc. gave the answer "I have used a batch OLQ query for years to look for strings inside ADS dialogs. Here is the syntax I use. You can search for any number of strings by adding to the where criteria. I have used this in both release 12 and 14. " This is a general solution for searching any string.
//SYSIPT DD *
SET USER xxxxxxxx
SIGNON SS=IDMSNWKA DBNAME=yourdict DICTNAME=SYSDIRL
SELECT UNIQUE -
MOD-NAME-067 AS MODULE -
IDD-SEQ-088 AS SEQ -
SOURCE-088 AS SOURCE -
FROM MODULE-067,TEXT-088 -
WHERE MODULE-TEXT -
AND (SOURCE-088 CONTAINS 'string-1' -
OR SOURCE-088 CONTAINS 'string-2') -
ORDER BY MODULE,SEQ
DISPLAY SPREAD 1 COLS=(MODULE SEQ SOURCE)
That's it. One can run this in OLQ Online too provided the dictionary is not very large. OLQBATCH is preferable where one can even run it in local mode without affecting the online performance.
So the Y2K noise is over, at least from the media. On that "fateful" day when the clocks rolled over at midnight in New Zealand and Australia, many were expecting disasters. Nothing happened! And then the clocks ticked past midnight in China, South East Asia, Indian Subcontinent - nothing happened ! By now it was clear that the Y2K was too much of a media hype. Besides program failures, the much feared breakdowns were expected with power supplies, utility services and worst case even nucelar reactors! The chip did n't have much of an embedded code for the millennium shift and nothing happened!
By the time new year dawned over Europe, other than CNN Live Coverage of the celebrations, there was a feeling of anti-climax. There was a feeling of 'no-happenings'! Countries which spent billions in Y2K precautions still tried to justify the expenditure. The US treasury had a reserve of more than 100 billion dollar cash, just in case the banking system collapsed! But Italy who did not spent a penny for any Y2K extra effort, did not have any problems either.
There indeed was the real program code issue where you were going to subtract 00-98 etc. But most of these were already taken care of. Such errors would have already appeared ever since mid 90s. There are IDMS clients who put yyyy for year as early as 1984! In any case, such errors just won't explode at midnight of 31 Dec 1999. [Recall that one software company was hyping an advertisement with big explosions at midnight!]
In fact the real preparations were all finished by 1997-98. Most of the money spent in 98-99 was simply moneymaking game. Consultants wrote huge reports and solutions in Word about Y2K without writing a single line of IDMS, DB2 or CICS code. Companies sold 'snake oil' tools of all kinds. One of them just listed out all the COBOL or ADS line which contained a date string! A simple QFILE in OLQ would have listed all processes with any string!!
Is the problem over?
Hype is over and not surprisingly some of the program code errors can indeed surface now. Also many places even if the date is internally handled correctly, the display still shows only two digits for the year. This can cause some minor problems. One simple example from PC follows. PC clock handles Y2K allright. Sill the directory listing will show only 2 digits for the year. Sort on date fails. The following is listing of C: disk sorted on date! Like this there are 1000s of places, where date is still listed with 2 digits for the year. Subsequent usage of such a date will create problems.
CONFIG SYS 309 2-19-00 4:51p FFASTUN FFA 4491 2-19-00 8:55pH FFASTUN FFL 172032 2-19-00 8:55pH FFASTUN FFO 73728 2-19-00 8:55pH FFASTUN0 FFX 376832 2-19-00 8:55pH COMMAND COM 94600 5-15-98 8:01p IO SYS 222390 5-15-98 8:01pH STRTLOGO OEM 129080 5-15-98 8:01p LANG TXT 140 9-07-99 12:40p SOFTWARE TXT 8129 9-07-99 12:40p AUTOEXEC DOS 393 9-13-99 3:49p CONFIG DOS 213 9-13-99 3:49p
Wolf! Wolf!!
Now if a real Y2K issue is brought up no one takes it seriously! EDP Manager won't allocate a penny for any more Y2K activities. Then the programmer will be left with fixing the "real thing", which the snake oil solutions never managed to tackle. Already several places '00' is appearing in print and output files. These files are supposed to be correct. But if they are input to further processing without handling '00' as 2000 you are in trouble.
Special Dispatch I In this Issue : Back to Top |
- Pekka Salminen, Finnish Institute of Technology, Otaniemi, Helsinki, Finland
Linux is a complete clone of UNIX, which is one of the most popular operating systems worldwide because of its large support base and distribution. It was originally developed at AT&T as a multitasking system for minicomputers and mainframes in the 1970's but has since grown to become one of the most widely-used operating systems anywhere, despite its sometimes confusing interface and lack of central standardization.
Many hackers feel that UNIX is the Right Thing--the One True Operating System. Hence, the development of Linux by an expanding group of UNIX hackers who want to get their hands dirty with their own system.
Linux is a free version of UNIX developed primarily by Linus Torvalds at the University of Helsinki in Finland, with the help of many UNIX programmers and wizards across the Internet. The Linux kernel uses no code from AT&T or any other proprietary source, and much of the software available for Linux was developed by the GNU project of the Free Software Foundation in Cambridge, Massachusetts, U.S.A. However, programmers from all over the world have contributed to the growing pool of Linux software.
Linux was originally developed as a hobby project by Linus Torvalds. Itwas inspired by Minix, a small UNIX system developed by Andy Tanenbaum. The first discussions about Linux were on the Usenet newsgroup, comp.os.minix. These discussions were conc erned mostly with the development of a small, academic UNIX system for Minix users who wanted more.
The very early development of Linux mostly dealt with the task-switching features of the 80386 protected-mode interface, all written in assembly code. Linus writes.``After that it was plain sailing: hairy coding still, but I had some devices, and debugging was easier. I started using C at this stage, and it certainly speeds up development. This is also when I started to get serious about my megalomaniac ideas t o make `a better Minix than Minix.' I was hoping I'd be able to recompile gcc under Linux someday... ``Two months for basic setup, but then only slightly longer until I had a disk driver (seriously buggy, but it happened to work on my machine) and a small file system. That was about when I made 0.01 available (around late August of 1991): it wasn't pretty, it had no floppy driver, and it couldn't do much of anything. I don't think anybody ever compiled and it couldn't do much of anything. I don't think anybody ever compiled that version. But by then I was hooked, and didn't want to stop until I could chuck out Minix.''
On October 5, 1991, Linus announced the first ``official'' version of Linux, which was version 0.02. At that point, Linus was able to run bash (the GNU Bourne Again Shell) and gcc (the GNU C compiler), but not much else. Again, this was intended as a hacker's system. The primary focus was kernel development--user support, documentation, and distribution had not yet been addressed. Today, the Linux community still seems to treat these issues as secondary to ``real programming''- kernel development.
Linux supports features found in other implementations of UNIX, and many which aren't found elsewhere. Linux is a complete multitasking, multiuser operating system, as are all other versions of UNIX. This means that many users can log into and run programs on the same machine simultaneously.
The Linux system is mostly compatible with several UNIX standards (inasmuch as UNIX has standards) at the source level, including IEEE POSIX.1, UNIX System V, and Berkely System Distribution UNIX. Linux was developed with source code portability in mind, and it's easy to find commonly used features that are shared by more than one platform. Much of the free UNIX software available on the Internet and elsewhere compiles under Linux ``right out of the box.'' In addition, all of the source code for the Linux system, including the kernel, device drivers, libraries, user programs, and development tools, is freely distributable.
Linux supports various file systems for storing data, like the ext2 file system, which was developed specifically for Linux. The Xenix and UNIX System V file systems are also supported, as well as the Microsoft MS-DOS and Windows 95 VFAT file systems on a hard drive or floppy. The ISO 9660 CD-ROM file system is also supported. We'll talk more about file systems in Chapter 2 and Chapter 4. Linux provides a complete implementation of TCP/IP networking software.This includes device drivers for many popular Ethernet cards, SLIP (Serial Line Internet Protocol) and PPP (Point-to-Point Protocol), which provide access to a TCP/IP network via a serial connection, PLIP (Parallel Line Internet Protocol), and NFS (Network File System). The complete range of TCP/IP clients and services is also supported, which includes FTP, telnet, NNTP, and SMTP.
The Linux kernel is developed to use protected-mode features of Intel 80386 and better processors. In particular, Linux uses the protected-mode, descriptor based, memory-management paradigm, and other advanced features. Anyone familiar with 80386 pro tected-mode programming knows that this chip was designed for multitasking systems like UNIX. Linux exploits this functionality [just as Windows misused this compeletely!].
The kernel supports demand-paged, loaded executables. Only those segments of a program which are actually in use are read into memory from disk. Also, copy-on-write pages are shared among executables. If several instances of a program are running at once, they share physical memory, which reduces overall usage. In order to increase the amount of available memory, Linux also implements disk paging. Up to one gigabyte of swap space may be allocated on disk (upt to 8 partitions of 128 megabytes each). When thesystem requires more physical memory, it swaps ina ctive pages to disk, letting you run larger applications and support more users. However, swapping data to disk is no substitute for physical RAM, which is much faster.
Linux is by no means the first Unix-clone for the PC. In fact there were several attempts in the late 80s and early 90s to provide a cheap alternative to Unix. One notable product was Coherent from Mark Williams Company. Coherent was a character based complete clone of Unix for 386 processors distributed on just 4 diskettes. It came with a 1000 page superb manual on how to use the components and was brilliant for $99 price tag. But it was a proprietary product and not a joint effort by the internet hacker community and that was probably the reason why it failed to make it in the commercial market place. By mid 90s Linux was available freely from the internet and Coherent was a casualty in the run.
IDMS/SQL: Recently one of us went to a mainframe site and talked to about 5 IDMS programmers and no one has heard of Linux! So IDMS/SQL asked University Student Pekka to contribute this article. Pekka is a born Linux hacker. We will have comments from IDMS mainframe users on Linux in the next issue.
Heard on IDMS-L : Cheaper Mainfram Power!
A mainframe MIP in 1990 cost $100,000. Right now, that same MIP costs $2,247. By the end of 2003, they estimate that same MIP will cost only $400.
Special Dispatch II In this Issue : Back to Top |
Web Development Using OS/390 IDMSThere has been some discussions in IDMS forums about
Web access to IDMS Data. The recent discussion was
triggered by a question from John Elliott on "Web
Developement Using OS/390 IDMS : Wanted to know what
development software tools people were using to get IDMS There were many responses from the IDMS-L members. Before going into the details, we want to stress that one of the first commercial Web/IDMS application was developed in Scandinavia by an IDMS/SQL Client as early as 1995! This was done using SQL, ODBC, IDMS Server, Powerbuilder front-end using some code on the Server. For 1995 this was a remarkable achievement. Now the time has changed. People want to do more. Since the much prophesied "death of mainframe" did not materialize, many clients are seriously looking at MVS databases as serious Web Servers. Since the front end person on WWW doesn't care where the data is residing there are all the more reasons to keep this data on a safe and reliable place, at the same time providing all the 'modern' interfaces to the end user. IDMS-L reponses:Let's us browse through some of the responses: "We have done some web development using the CICS Web Server and are currently evaluating the TACT/Vegasoft IDMS Web Server. The CICS Web Server development is done in that very high level language COBOL! Our response times are excellent. If you are going to CA World, I am giving an overview session on many of the ways one can access IDMS data from the web." "We are starting a project here using the Shadow Web Server product from Neon. Another site at our company has successfully used this product to Web-ize their COBOL-IMS application. It has been in production for a couple of years now. The benefits for us are that we only have to buy one additional product (the Shadow Web Server that runs on the mainframe) and we continue to code PL/1 programs making DML calls to our network database (less training & can use the same development process & config. control).I can't say this is the most forward thinking solution, but when you are strapped for cash (or time) it is at least a step forward." "We are implementing our web system using the following: We run Websphere on the mainframe in Unix system services The code running there is Java and static html (I think) We use a product called MQSeries from IBM to communicate between websphere and IDMS. In IDMS we use a product from Aquisoft called OCA-MQSeries that takes output/input from existing dialog code and sends it to websphere. In this we used most of our existing system to provide input to the web application." "We use VegaSoft's Web Server, which resides in the IDMS region. You may need various components to tailor your needs. Check their website: http://www.vegasoft.com and their US distributor is at http://www.tact.com" "EDBC provides real-time, high-performance read/write connectivity to OS/390 Enterprise Databases from mission-critical Windows client/server and Web-deployed (Internet, Intranet, & Extranet) applications. Leveraging existing mainframe technology, EDBC directly connects Web-based and multi-tiered business applications to mainframe-based enterprise databases such as native VSAM, CICS/VSAM, IMS, DB2, CA-IDMS, and CA-Datacom http://www.cai.com/products/edbc.htm" "Have you looked at CA-OPAL?
It uses existing 3270-type application screens and can (I
think) be used on a Web server, generating the web HTML
for you. I've not used it fully yet, but it looks like an
inexpensive solution for something." "Web Engineer has been re-branded, and is now LiveContent VISION. Its owned and sold directly by PeerLogic (www.PeerLogic.com) and also distributed by partners notably International Software Products (www.ispinfo.com). It is highly suitable for web-enabling/integrating IDMS applications to the web." IDMS/SQL News AnalysisIt is obvious there are solutions available now. But some are more suitable than others. Here we restrict to Web Access to IDMS. The original question from John Elliott already mentions CA-Server and ODBC for Web. This is in fact the same solution used by a pioneering SQL site. This is the Web extension of the ODBC access from PC. For simple query this is good enough. For high volume update applications there are serious limitaions here. ODBC connection using CA-Server and ENF is not fast or direct enough. You need code on the Server besides you need ODBC on your PC. A couple of people mention CA-OPAL. But this is only screen scraper front-end, not a true programmable Web Interface. CA themselves now talk about a new product called EDBC above. On the other hand, we don't have much information about EDBC. We can't recall this being presented in the last IMC 99. Then it is most likely a product CA has acquired recently, quickly being tailored to meet 'all' databases and VSAM! Last IMC 99, CA solution was CA- ICE, which required all the following : Spyglass Webserver (CGI/API) -
NT or UNIX (NT - 150M HD or UNIX - 120 M HD) Some clients have mentioned MQSeries and Websphere; both are being heavily pushed by IBM. MQSeries itself has nothing to do with web, but can be used for web connection too. Both Vegasoft and Acquisoft provide MQSeries interface to IDMS. But we feel that the primary purpose of MQSeries is not Web. Direct Web Interface to IDMSWhat is needed is a direct interface to IDMS cutting all the middle layers. Two products stand out unique doing the same thing. TCP/IP Interface from Vegasoft and Acquisoft. Both are based on standard Socket Interface from IBM. They provide direct programmable interface between IDMS and TCPIP/390. [Many other connections including ODBC support TCPIP as a connectivity medium, but not as a programmable interface]. Using TCPIP link any platform (Unix, PC..) supporting TCPIP can access IDMS database. One can write applications in DC-COBOL with embdded calls to Vega TCP/IP modules. Once TCPIP link is established Web Interface is an automatic bye-product. As far as we see it, WebServer from Vegasoft is doing this job in the simplest and direct way. Webserver supports special builtin functions in ADS, so that in the simplest case, one can even make Web applications using ADS alone. Simple 'MOVE' statements do the job for you. C++, Java etc programs can also access IDMS data. Compared to many solutions which were mentioned above, the Webserver seems to be the simplest and most direct. Because it does not need anything on the NT or UNIX boxes. In fact, there is nothing needed on the PC front-end either. There is even the possibility of storing 'jpg, gif' images on IDMS (IDD load area). This way the whole application can reside in one and only one place - within IDMS. Vegasoft Webserver also allows you to store html templates within IDD. html pages can be standard html only code or can contain Java Scripts or applets. SQL is not needed, but fully supported. There is also an added advantage here: it supports both IDMS and DB2 from IDMS address space. This means that the same ADS/Online web dialog can access IDMS and DB2, if needed. |
Yes, we are talking about Microsoft Windows! It's incredible how this third rate product conquered the market. One thing it was able to beat OS/2 which was a superior product in all respects. PC programmers and users who are enchanted by the versatilities of MS Windows are typical single users who don't mind doing CTRL/ALT/DEL a couple of times a day! My Pentium PC with 24M was running Windows 95 and Word 95 reasonably well. And until recently I had an old browser MSIE2.0! One thing, it was fast because it ignored all Java Code! Yes, it was good enough, but could not browse pages with frames. So I had to change to IE 3.0 and then to IE4.0. Also I could no longer manage with Word 95 and Word 97 Viewer. It was time to switch over to Word97.
I noticed that with Word and IE on the PC was taking too much space for SWAP file. During a session SWAP file which started at 16M at startup grew to 50M or more. Friends told me that it was time to change the PC. Yes I got a Pentium 500 with 128M RAM with Windows 98. For simple internet access, I was expecting lightning speed. Nothing happened. It was a little faster. But the PC was still using enormous SWAP files! 128 M and still it needs SWAP files. In fact the swap file was bigger than my old PCs! This was strange! And the idle PC suddenly wakes up and there is a flurry of disk activity (tic-tic reminding one of Morse Code Message Sending) for about a minute. My son thought there might be some ghosts inside the PC. Did some tuning which required me to allocate a huge SWAP file permanent.[Imagine I changed the PC only to get rid of SWAP file, here I am sitting with permament SWAP file of 256M!]. Some improvements. But not the lightning speed I was hoping for. Tic-Tic was reduced, but not eliminated! I upgraded to IE5.0. Yes this seems better and faster than IE4.0.
And while using FrontPage Express with a small html code, it ran out of memory! All I did was to do some cut and paste from Word97(which it didn't do the right way, but ate all the memory!). And take this 11th commandment! "Though shall not do too many cut and paste with Word or any Microsoft product, it will eat away your memory!"
It is impossible to believe such a PC is the front end for many UNIX/NT applications all of which claim superfast response times! Simple Bluff! the PC startup time itself is too long. If one is using a network PC, then this is still longer.
And what about networks? Well here is a working example. 3270 Connection from a PC Network is always slower than a remote ISDN line to the same MVS through TCP/IP! Think of it: Your 3270 connection through NT network from your PC which is on the third floor of your Computer Center in New York, is slower than using the same MVS terminal by someone sitting in Fiji Islands and dialing to New York with an ISDN Line! This is not a joke, simple reality.
Part of the trouble here is the Novell Network. Though Novell prefers to call "Novell Network Operating System", it started as a simple file server and evolved into today's monster product. Novell does n't understand operating systems at all, else they would not have thrown away Unix which came into their hands.
Bottom line is that Windows and Windows Products are written with the wrong 'a priori' assumption that there is incredible memory and CPU power. The net effect is that one is able to type and print a letter with all the necessary business fonts and pictures using an old stupid 386 running Windows 3.1 and with a damaged harddisk of 40M and an old Word processor faster and cleaner than a person sitting with Pentium500, Windows98 and Word97!
Downgrade your software!
Recently happened to come across a site which gives tips for Windows . Some of the tips helps, some doesn't. The best tip was missing and here it is. If you have an old PC (which today everyone has, the moment you reach home from the shop the PC is outdated!), resist the temptation to upgrade to the latest Windows. Either keep it the way you got it or still better downgrade your software without loss of functionalities. For example, if the bottleneck is Windows98, throw it away and try Windows 95. You use much less storage. It's faster. Word97 etc runs much faster too. This is irrespective of the benchmark figures propagated by the vendors of software and of course, hardware!
In this Issue : Back to Top
Back to Main Page
This page at http://geocities.datacellar.net/idmssql/idms91.htm
Comments to idmssql@yahoo.com This page hosted by Get your own Free Home Page