|
The standard
way to fix UniVerse files is to run the UVFIXFILE command. However,
the other day I ran into a problem with a Type 2 file on an NT/Universe
system where a basic program when writing specific records would abort and
disconnect the user from the system. Since this was the Universe
DBMS we ran UVFIXFILE to see what that discovered and there was no
reported problem with the file. It is documented that UVFIXFILE will
not find every file problem -- apparently this was one of those
situations.
The process
that was causing the problems wrote records to a file with ID’s like
123*1 123*2 123*3… After much research, we found that the process
would abort when a record whose item-ID ended with *10 was being
written. This was very odd as records 123*1 to 123*9 were written
without a problem. We tested writing a record with the *10 ID and
got disconnected.
Now what do you do? You use a solution that is
as old as the PICK Operating System! We created a temporary file and
counted the number of records in the corrupted file:
>CREATE-FILE TEMP-PAUL 1 1001
>COUNT FILE1
85637 records counted.
We next copied the records from the corrupted file to
the temporary file:
>COPY FILE1 * (IN
TO:(TEMP-PAUL
85637 records copied.
Fortunately, it copied the same number of
records. Next, we cleared the original file, and then copied our
data back:
>CLEAR-FILE DATA FILE1
File "FILE1" has been cleared.
>COPY
TEMP-PAUL * (IN
TO:(FILE1
85637 records copied.
Next we tested the file by trying to write a record
with exactly the same ID as one that failed – It worked:
>ED
FILE1 123*10
New record.
----:
Last, we got rid of the
temporary-file:
>DELETE-FILE
TEMP-PAUL
Now, there was lots of data to
fix – lots of orphaned records and summarized data that was overstated,
but at least the system would allow us to work on that file!
Note - These commands
will work on UniData with the same syntax except that you may not wish
to use an “I” option with the COPY command as the “I” option
will list all items being copied while on Universe it suppresses that
list.
|