今天开发邮件回来说备份报错:
ORA-31693: Table data object "YCDATA"."T_MESSAGESYNC_HIS" failed to load/unload and is being skipped due to error:
ORA-02354: error in exporting/importing data
ORA-01555: snapshot too old: rollback segment number 171 with name "_SYSSMU171_1375589658$" too small
调整了undo_retantion的值为3600,原来的是900
In this Document
APPLIES TO:Oracle Database - Enterprise Edition - Version 10.2.0.1 and later Information in this document applies to any platform. SYMPTOMSUsing Database Data Pump (expdp), one table fails to export with the following errors: ORA-31693: Table data object "APPLSYS"."FND_LOBS" failed to load/unload and is being skipped due to error: ORA-02354: error in exporting/importing data ORA-01555: snapshot too old: rollback segment number with name "" too small ORA-22924: snapshot too old Followed the steps in Note:452341.1 and/or Note:787004.1, CAUSEThe old versions (consistent read) of the LOB can be specified by either the PCTVERSION or the RETENTION parameters. For SecureFiles, only the RETENTION parameter can be specified. for BasicFiles LOBs you can specify either PCTVERSION or RETENTION , but not both. - PCTVERSION : This parameter specifies the percentage of all used BasicFiles LOB data space that can be occupied by old versions of BasicFiles LOB data pages. Under 11g compatibility, this parameter is silently ignored when SecureFiles LOBs are created. PCTVERSION is the default in manual undo mode and the default value is 10, meaning that older versions of the LOB data are not overwritten until they consume 10% of the overall LOB storage space. You can specify the PCTVERSION parameter whether the database is running in manual or automatic undo mode. - RETENTION is the default in automatic undo mode. You can specify the RETENTION parameter only if the database is running in automatic undo mode. Oracle Database uses the value of the UNDO_RETENTION initialization parameter to determine the amount of committed undo data to retain in the database. In automatic You can specify the optional settings after RETENTION only if you are using SecureFiles. You can see more details about the RETENTION parameter for SecureFiles and BasicFiles LOBs in the following link : http://docs.oracle.com/cd/E11882_01/appdev.112/e18294/adlob_tables.htm#ADLOB45282 RETENTION Parameter for SecureFiles LOBs http://docs.oracle.com/cd/E11882_01/appdev.112/e18294/adlob_tables.htm#ADLOB45281 RETENTION Parameter for BasicFiles LOBs To Determine whether LOB segment is using RETENTION or PCTVERSION , use the following statement : SQL> select COLUMN_NAME,SECUREFILE,PCTVERSION,RETENTION from dba_lobs where OWNER=upper(‘&OWNER‘) and TABLE_NAME=upper(‘&TABLE_NAME‘) ; COLUMN_NAME SEC PCTVERSION RETENTION ------------------------------ --- ---------- ---------- FILE_DATA NO 900 Note : If You‘ve a value for both PCTVERSION and RETENTION columns , this is incorrect output and to really know which option the LOB is using Please Check Note 422826.1 : How To Identify LOB Segment Use PCTVERSION Or RETENTION From Data Dictionary The LOB Retention is not defined properly , This is confirmed by queries: SQL> show parameter undo; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ undo_management string AUTO undo_retention integer 900 undo_tablespace string UNDOTBS1 SQL> select max(maxquerylen) from v$undostat; MAX(MAXQUERYLEN) ---------------- 16331 We see the retention comes back showing 900 seconds (15 minutes) which is the same as the current UNDO_RETENTION, but the maxquery length is 16331 seconds. When the LOB was created, the actual setting for RETENTION was defined by the current setting for UNDO_RETENTION. This time is not long enough. SOLUTION1. Modify the current UNDO_RETENTION for the database: SQL>ALTER SYSTEM SET UNDO_RETENTION = 16500 scope=both sid=‘*‘; 2. Modify the LOB retention to become greater than the undersized retention parameter following the steps from Note:563470.1 SQL> alter table APPLSYS.FND_LOBS modify lob(FILE_DATA) (pctversion 5); Table altered. SQL> alter table APPLSYS.FND_LOBS modify lob(FILE_DATA) (retention); Table altered. 3. Query the lob retention again to verify that the change has taken hold: SQL> select COLUMN_NAME,SECUREFILE,PCTVERSION,RETENTION from dba_lobs where OWNER=upper(‘&OWNER‘) and TABLE_NAME=upper(‘&TABLE_NAME‘) ; COLUMN_NAME SEC PCTVERSION RETENTION ------------------------------ --- ---------- ---------- FILE_DATA NO 16500 4. Perform the export again. |