iotk-explain-oracle-error.php is a facility that helps to provide substantive documentation for common Oracle errors that you might encounter while using IOTK. It was added to the framework because of the often abstract or unrelated messages given by Oracle’s error reporting facility oerr.
For example, if you receive an ORA-00257 error you can execute the following Oracle command:
oerr ora 257
oerr will produce the following documentation:
00257, 00000, "archiver error. Connect internal only, until freed." // *Cause: The archiver process received an error while trying to archive // a redo log. If the problem is not resolved soon, the database // will stop executing transactions. The most likely cause of this // message is the destination device is out of space to store the // redo log file. // *Action: Check archiver trace file for a detailed description // of the problem. Also verify that the // device specified in the initialization parameter // ARCHIVE_LOG_DEST is set up properly for archiving.
Instead of executing oerr to get a description of the issue, you can execute IOTK’s ioerr using the same command line parameters passed to oerr:
ioerr ora 257
Will produce the following documentation:
ORA-257
-------
Oracle's (oerr ora 257) official description:
archiver error. Connect internal only, until freed.
PROBLEM DESCRIPTION
-------------------
Attempts to service requests by querying or making transactions against Oracle
produce the following error:
exception 'ut_Oracle_Error' with message '
==================================================
Array
(
=> 257
[message] => ORA-00257: archiver error. Connect internal only, until freed.
[offset] => 0
[sqltext] =>
)
==================================================
As a result of this issue, Oracle is essentially useless for retrieving or
manipulating data.
RESOLUTION
----------
o Log into Oracle as sysdba by executing the following as the oracle user:
sqlplus / as sysdba
o Execute this command at the SQL*Plus prompt:
SQL> show parameter db_recovery
(Note, "SQL>" is the SQL*Plus prompt.)
o You should see something like the following:
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string /path/to/flash_recovery_area
db_recovery_file_dest_size big integer 2G
o Exit SQL*Plus and execute:
df -k
o You need to determine if the path set for "db_recovery_file_dest" (in this
case "/path/to/flash_recovery_area") is 100% full. If so, Oracle can no
longer write archive logs. If the disk is full you need to free up space.
o If the disk is not full you most likely need to increase the amount of space
Oracle is allowed to use for archive logs, defined by "db_recovery_file_dest
_size". In this case, the value is set to "2G" or 2 gigabytes. Oracle might
need more than 2 gigs for archive logs. You need to increase this.
o Log into Oracle as sysdba by executing the following as the oracle user:
sqlplus / as sysdba
o Execute the following:
SQL> alter system set db_recovery_file_dest_size = 5g;
(In this case, I'm increasing "db_recovery_file_dest_size" from 2 gigs to
5 gigs thus giving Oracle 3 more gigs to use for archive logs.)
o When this completes successfully you should see:
System altered.
o Next, execute the following:
SQL> alter system switch logfile;
o When this completes successfully you should see:
System altered.
The system should be recovered.
In total, documentation is provided for 21 errors ranging from issues with straightforward solutions (like this one) to more complex issues with solutions requiring code changes or upgrades of Oracle.