There are several methods to work around this situation. The first is most strongly recommended, the remainder all carry their associated risks.
Method 1: Go to backup a) Restore the last verified database backup.
b) Add new bi extents as may be appropriate with the
"PROSTRCT add" utility
c) Roll forward the appropriate ai files (if after-imaging is in use) up to the point of failure.
Method 2: EnableLargeFiles With the Enterprise License for Progress 9.1C and later, large files can be enabled against the database with the "
proutil -C EnableLargeFiles" utility. This will allow the current bi file to extend beyond this 2GB limit when access resumes.
Bear the following in mind before doing so:
a) EnableLargeFiles is only available with Enterprise Licenses
b) Ensure that the files system is enabled to support large files
c) The Progress license must support large files for the operating system (example: even though SCO or Linux may support large files, the Progress product does not in support large files on SCO and started supporting large files on Linux in 9.1E)
d) Ensure that there will be enough space for the before-image extent to expand. When the database is eventually re-started, roll-back recovery will kick in. During this phase the before-image can grow to up twice as much its current size in a worst case scenario,
e) Should this fix fail, refer to Option 1.
Method 3: Move the database to a new structure This method has worked in as many cases as it has not worked. It all depends on the variety of actions customers may have taken before-hand and how absolutely near the physical size of this errant variable bi extent is.
a) Take a backup of the database with the
-norecover option, which defers the truncation of the bi to the subsequent PROREST action:
$ PROBKUP dbname dbname.bak –norecover
$ PROREST dbname dbname.bak -vf
b) Delete the database
$ PRODEL dbname
c) Create a new database structure with additional bi extents to facilitate twice the current bi file sizes:
$ PROSTRCT create dbname dbname.st -blocksize <n>
d) Restore the backup into this new structure:
$ PROREST dbname dbname.bak -verbose
e) Should this fix fail, refer to Option 1
Method 4: Force into the database (This is by far the most drastic measure).
If no backup is available it may be possible to force entry into the database and access it, but the database will be logically inconsistent and may not (very possibly will not) be reliable from this point forward. Please first review Article:
Consequences of using the -F startup option ** Take an OS backup of all the database files to a safe place to ensure a recoverable baseline. **
a) Force into the database by skipping crash recovery:
$ PROUTIL db-name -C truncate bi -F -G 0
b) Remove all the bi file(s) from the database, run the following command until no bi files remain:
$ PROSTRCT remove dbname bi
c) Create a new st file that contains only information about the new bi files that need to be added:
# example addbi.st
b . f 2000000
b .
d) Add these bi extents to the database structure:
$ PROSTRCT add dbname addbi.st
e) Run a PROSTRCT list to verify the added extents:
$ PROSTRCT list dbname dbname.st
f) Take a backup of the database and initiate corrective actions. It is strongly suggested that this includes a full dump and load of the recovered database. Otherwise database teams need to also run database integrity checks (DBTOOL for data and IDXCHECK for indexes). Once physical integrity is restored, development teams need to run application logic backend reports, to assure business logic (delivery notes without invoices) and parent-child relational (order-lines without orders) integrity.