I'm testing out the excellent fix_ipa utility from Art Kagel but I'm running into a few problems.
fix_ipa: Features Version 1.0, Source Revision: 1.13 !
Copyright 2016-2024 by Art S. Kagel, ASK Database Management Corp.
Informix Server 12.10.FC12WE using cooked space.
- I intermittently get a temporary dbspace is full error while running fix_ipa -D {database}. I can clear it by bouncing the database but that's not a permanent fix.
- fix_ipa throws: Error: -229(0) on open of slot cursor.
- The Informix server log shows: 13:46:51 WARNING: temporary DBspace tmpdata is full
- Querying the temp space only shows 4 records.
- Some tables still show in fix_ipa -l after fix_ipa -d {db} -t {table} has been run and completed without error.
- fix_ipa -l shows 1 page to process but fix_ipa shows 3 pages processed and it still shows up in fix_ipa -l as if it didn't run.
Database: ued Table: stomfgfd Partition: 2098865 has 1 pages to process.
dbs6:# ./fix_ipa -d ued -t stomfgfd
Opening database ued.
Working on database: ued.
Seeking columns for table: ued:stomfgfd.
Working on table: stomfgfd partnum: 2098865, updating using column: zero_qtys.
EOD encountered.
Processing tail block:
UPDATE stomfgfd
SET zero_qtys = zero_qtys
WHERE ROWID IN ( 769,513,261 );
Updated 3 pages in table stomfgfd partition: 2098865.
Committed updates to 3 pages.
3 pages processed in 1 tables from 1 databases.
dbs6:# ./fix_ipa -l
Database: ued Table: stomfgfd Partition: 2098865 has 1 pages to process.
dbs6:# ./fix_ipa -d ued -t stomfgfd
VersQry: SELECT st.dbsname database, st.tabname table, sp.partnum partnum, sp.nrows nrows, sp.pta_totpgs as pta_pages, sp.npdata datapages, pta_oldvers as minver, pta_newvers as maxver, pta_newvers as curver FROM sysptnhdr sp, sysmaster:systabnames st WHERE sp.partnum = st.partnum AND dbsname NOT IN ('sysmaster') AND pta_totpgs != 0 AND dbsname matches 'ued' AND tabname matches 'stomfgfd' INTO TEMP tabvers WITH NO LOG;
Slot query:
SELECT st.dbsname, st.tabname, st.partnum, ssl.pagenum::BIGINT as pagenum, min(ssl.slotnum)::BIGINT AS slotnum FROM tabvers as tv, ( SELECT ss.partnum, ss.pagenum, ss.slotnum FROM sysslttab AS ss WHERE ss.slotptr != 0 AND ss.pagenum > 0 ) as ssl( partnum, pagenum, slotnum ), systabnames st WHERE tv.partnum = ssl.partnum AND tv.maxver > tv.minver AND tv.maxver IS NOT null AND tv.minver IS NOT null AND ssl.partnum = st.partnum AND dbsname matches 'ued' AND tabname matches 'stomfgfd' GROUP BY 1, 2, 3, 4 ORDER BY 1, 2, 3, 5;
Opening database ued.
Working on database: ued.
Seeking columns for table: ued:stomfgfd.
Working on table: stomfgfd partnum: 2098865, updating using column: zero_qtys.
Made rowid: 769 from pagenum: 3 and slotnum: 1 for partnum: 2098865.
Made rowid: 513 from pagenum: 2 and slotnum: 1 for partnum: 2098865.
Made rowid: 262 from pagenum: 1 and slotnum: 6 for partnum: 2098865.
EOD encountered.
Processing tail block:
UPDATE stomfgfd
SET zero_qtys = zero_qtys
WHERE ROWID IN ( 769,513,262 );
Updated 3 pages in table stomfgfd partition: 2098865.
Committed updates to 3 pages.
3 pages processed in 1 tables from 1 databases.
------------------------------
Daniel Karwatka
------------------------------