本番データベースでexpdpコマンドを実行しているときに問題が発生した場合(Windows環境でのOracle 11g)
cmd> expdp 'sys/123 @ PROD as sysdba' DUMPFILE = BACKUP_02082017_BACKUP.dmp LOGFILE = BakupLog_02082017_BACKUP.log SCHEMAS = A1、B2、C3、D4 .. exclude = statistics constant = y
7GBサイズのデータベースをエクスポートするのに1日以上かかりました。しかし、私の問題は、エクスポートにエラーがあり、エラーメッセージが表示されることです
ORA-31693:テーブルデータオブジェクト「所有者」。名前「_SYSSMU19_255734752 $」が小さすぎます
保存ポリシーをデフォルトの900から16500に設定したので、同じエラーが発生していました。
保持ポリシーを最大10時間、つまり36000に増やす予定なので、実行可能ですか?私のUNDO表スペースがこれに対応しているかどうか混乱していますか?
さらに詳細を提供する:
> show parameter undo_%;
NAME TYPE VALUE
-------------------------------------------------- ----------- --------
undo_management string AUTO
undo_retention integer 16500
undo_tablespace string UNDOTBS1
> select file_name,tablespace_name,trunc(bytes/1024/1024) mb, trunc(maxbytes/1024/1024) mm
FROM dba_data_files
where tablespace_name = 'UNDOTBS1';
FILE_NAME TABLESPACE_NAME MB MM
--------------------------------------------------------------------
C:\APP\ADMIN\ORADATA\PROD\UNDOTBS01.DBF UNDOTBS1 5630 32767
>Size of undo with current undo_retention :
Actual Undo size[MBytes]:5630
UNDO retention[Sec]:16500
Needed Undo Size[MBytes]:909.433359
この問題に悩まされています。誰でも私がこのエラーにどう対処するかアドバイスしてください?
前もって感謝します。
_ORA-01555
_エラーの原因は、_undo_retention
_パラメータが、パラメータ_consistent=y
_(これは11gで非推奨になり、_flashback_time
_または_flashback_scn
_)。
元に戻す保持では、エクスポートジョブの期間中、元に戻す情報を保持できる必要があります。
たとえば、エクスポートが_00:00 AM
_で始まり、完了するまでに2時間かかる場合、一貫したデータを取得するには、_undo_retention
_を少なくとも2時間に設定する必要があります。
テストサーバーで問題をシミュレートしました。
_[Oracle@orcl expdp_dump]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Wed Feb 8 09:41:40 2017
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options
SQL> show parameter undo
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 2400
undo_tablespace string UNDOTBS1
_
元に戻す保持は40分に設定されています。
_SQL> select bytes/1024/1024 from v$datafile where ts#=2;
BYTES/1024/1024
---------------
32764
_
そして、私のUNDOテーブルスペースは32GBです。
スキーマの1つをエクスポートしようとしました。
_expdp system/password directory=DP_DIR schemas=MYSCHEMA dumpfile=expdp_orcl_MYSCHEMA.dmp logfile=expdp_orcl_MYSCHEMA.log FLASHBACK_TIME=SYSTIMESTAMP
_
ジョブ "SYSTEM"。 "SYS_EXPORT_SCHEMA_07"が2月7日火曜日の1エラーで完了しました2017年2月14日22:14:46経過0 01:14:39
1時間14分かかりました。また、データベースには中程度のDML操作がありました。
_ORA-31693: Table data object "MYSCHEMA"."MS_TABLE":"MS_TABLE."MS_TABLE_B_2005" 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 84 with name "_SYSSMU84_1745672109$" too small
. . exported "MYSCHEMA"."PRORATE_EVENT" 8.789 KB 4 rows
. . exported "MYSCHEMA"."PRORATE_RULE_GROUP" 5.945 KB 1 rows
. . exported "MYSCHEMA"."Oracle_JOB_METADATA" 0 KB 0 rows
_
そして、_ORA-0155
_エラーが発生しました。
次に、取り消しの保持を1時間20分に増やしました。
_SQL> alter system set undo_retention=4800;
System altered.
_
もう一度スキーマをエクスポートしようとしました。
_expdp system/password directory=DP_DIR schemas=MYSCHEMA dumpfile=expdp_orcl_MYSCHEMA.dmp logfile=expdp_orcl_MYSCHEMA.log FLASHBACK_TIME=SYSTIMESTAMP
_
ジョブ "SYSTEM"。 "SYS_EXPORT_SCHEMA_07"が2017年2月8日水曜日22:15:52に正常に完了しました。経過時間は0 01:15:45です。
そして、もう_ORA-01555
_はありませんでした。
BLOCKSメソッドを使用した推定合計:182.9 GB
実際のファイルサイズは141 GBです。
ダンプファイルの見積もりと実際のサイズの違いはなぜですか?答えは this postを見てください。
輸出完了までの時間について。次のパラメータを使用してみてください。
また、エクスポートジョブを開始する前に、データディクショナリ統計を収集してください。
_SQL> connect / as sysdba
SQL> exec dbms_stats.gather_dictionary_stats;
SQL> exec dbms_stats.lock_table_stats (null,'X$KCCLH');
SQL> exec dbms_stats.gather_fixed_objects_stats;
_
参考文献: