You are on page 1of 1

Document 787004.

Export Receives The Errors ORA-1555 ORA-22924 ORA-1578 ORA-22922 (Doc ID 787004.1)

Pgina 1 de 1

To Bottom

In this Document
Symptoms
Cause
Solution
References

APPLIES TO:
Oracle Database - Enterprise Edition - Version 9.2.0.1 to 11.2.0.3 [Release 9.2 to 11.2]
Information in this document applies to any platform.
***Checked for relevance on 7-FEB-2011***

SYMPTOMS
When exporting tables having LOB columns, using data pump or conventional export the following errors might occur:
expdp:
Processing
ORA-31693:
ORA-29913:
ORA-01555:
ORA-22924:

object type DATABASE_EXPORT/SCHEMA/POST_SCHEMA/PROCACT_SCHEMA


Table data object "SCOTT"."LOBDATA" failed to load/unload and is being skipped due to error:
error in executing ODCIEXTTABLEPOPULATE callout
snapshot too old: rollback segment number with name "" too small
snapshot too old

exp:
. . exporting table LOBDATA
EXP-00056: ORACLE error 1555 encountered
ORA-01555: snapshot too old: rollback segment number with name "" too small
ORA-22924: snapshot too old
or:
EXP-00056: ORACLE error 22922 found
ORA-22922: nonexistent LOB value
. . Export der Tabelle LOBDATA 2 rows exported

CAUSE
The ORA-1555 does not always confirm a corruption in LOB segment. This can also occur due to the fact that LOB PCTVERSION or RETENTION are low. The
proposed solution below should not be used on ORA-1555, if:
1. You can't confirm that no updates were made to that LOB while you ran the script
and:
2. You don't have confirmation that exactly the identical ROWIDs are reported by 2 independent script executions.
Otherwise, all the above errors are produced when exporting, because the LOBs stored in the table to be exported might be corrupted.
To have this checked a PLSQL block should be run against the table.
As there is already a PLSQL procedure indicated in various notes such as: Note 452341.1 or Note 253131.1, the reason for this article is to propose a PLSQL block
which will run faster and consumes much less memory.
The PLSQL indicated in the previous articles cannot be run against large tables due to the fact that they can fail with memory errors like an ORA-04031 error.

SOLUTION
For this reason I propose a simple PLSQL block in this new note, which runs faster and does not consume much of the system resources.
LOBDATA was used as the table which should be checked for any potential corrupted LOBs:
-- 1. Create a new temporary table for storing all rowids of the corrupted LOBs. Let's call it "corrupt_lobs"
SQL> create table corrupt_lobs (corrupt_rowid rowid, err_num number);
-- 2. Make a desc on the table containing the LOB column:
DESC LOBDATA
Name
Null?
---------- --------ID
NOT NULL
DOCUMENT

Type
-----------NUMBER
BLOB

-- Run the following PLSQL block:


declare
error_1578 exception;
error_1555 exception;
error_22922 exception;

https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=4175192789852... 26/09/2015