0

Oracle 11G、200GB スペースの Linux。約 25GB がすでにいくつかのファイルで占有されていました。

50GBの " " ファイルを受け取りました。.dmpインポートを実行するために、100GB の bigdatafile で bigtablespace を作成しました (これで十分だと思ったからです)。

インポート コマンド:

imp user/pwd full=Y log=/home/oracle/log.txt file=/usr/oracle/public/dump.dmp

しかし、多くのテーブルをインポートして大量のデータを挿入した後、次のエラー メッセージを受け取りました。

IMP-00017: following statement failed with ORACLE error 603:
 "CREATE UNIQUE INDEX "PR_TABLE1" ON "TABLE1" ("TABLE1_ID" , "ROW_NUM" , "COL_NUM" ) "
 " PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE(INITIAL 4294967294 FREELISTS 1 "
 "FREELIST GROUPS 1 BUFFER_POOL DEFAULT)                      NOLOGGING"
IMP-00003: ORACLE error 603 encountered
ORA-00603: ORACLE server session terminated by fatal error
ORA-01114: IO error writing block to file 201 (block # 1719438)
ORA-27072: File I/O error
Linux-x86_64 Error: 25: Inappropriate ioctl for device Additional information: 4 Additional information: 1719438 Additional information:
114688
ORA-01114: IO error writing block to file 201 (block # 1719438)
ORA-27072: File I/O error
Linux-x86_64 Error: 25: Inappropriate ioctl for device Additional information: 4 Additional information: 1719438 Additional info
IMP-00017: following statement failed with ORACLE error 3114:
 "BEGIN  SYS.DBMS_EXPORT_EXTENSION.SET_IMP_SKIP_INDEXES_OFF; END;"
IMP-00003: ORACLE error 3114 encountered
ORA-03114: not connected to ORACLE
IMP-00000: Import terminated unsuccessfully

「temp」データファイルによって約 15GB が消費されました。

自分自身を拡張しようとしているデータファイルについてオンラインで読んだことによると、スペースが不足しているようです。Linux では約 8GB の空き容量が表示されますが、別の用途に予約されている可能性があります。

質問は、インポートを正常に実現するために、ハード ドライブにどのくらいの容量を割り当てればよいかを知る方法はありますか?

これを尋ねる理由は、「.dmp」ファイルをサーバーにアップロードするのに非常に時間がかかり、「.dbf」ファイルを作成してインポートを実現するのにさらに多くの時間がかかるためです。

クライアントはこの情報を知りません。私は Oracle DBA ではありませんが、.Net アプリケーションを Oracle データベースに正常に接続したことがあります。

4

1 に答える 1

1

データファイルと一時ファイルがファイルシステムにあると思いますか?

そのため、一時ファイルの場合、Oracle はそれらをスパース ファイルとして作成します。たとえば、100MB の空き容量があるファイルシステムがあるとします。空き容量が 100MB しかない場合でも、そのファイルシステムにサイズが 2GB の一時テーブルスペースを作成できます。そのため、スペースを過剰に割り当てるのは簡単です。したがって、この一時スペースの使用を開始するとすぐに、使用量が 100MB を超えると、上記の「デバイスに不適切な ioctl」というエラーが発生します。

そのため、データ ファイルと一時ファイルのサイズ、および実際の空き容量を確認してください。一時ファイルのスペースの使用を開始すると、ファイルのサイズ (O/S によって報告される) はおそらく変化しませんが、O/S によって報告される空きスペースは、ヒットするまで減少します。ゼロで、ファイルシステムがいっぱいです。

また、特に WORKAREA_SIZE_POLICY=AUTO および PGA_AGGREGATE_TARGET を使用している場合は、大きなテーブルでインデックスを作成すると、大量の一時領域が使用される可能性があることに注意してください。(DBA ではなく、Oracle を初めて使用する場合は、意味をなさないかもしれませんが、心配する必要はありません。)

あなたがやりたいことは、「INDEXES = N」でインポートを実行して、データをインポートするだけで、スクリプトから実行して、事後にインデックスを作成することです。このようにして、WORKAREA_SIZE_POLICY=MANUAL を設定し、非常に大きな sort_area_size と sort_area_retained_size を設定できます。これにより、一時テーブルスペースのスペース使用量が削減される場合があります (作成されるインデックスのサイズによっては削減されない場合もあります)。

要約すると、まず一時ファイルのサイズと、ファイルシステムに残っているスペースを確認してください。最初はスパース ファイルに問題があり、現在は容量をオーバーコミットしている場合は、それを解決する必要があります。最善の策は、一時テーブルスペースを削除し、ファイル システムの空き容量を確認してから、状況に応じて新しい一時テーブルスペースを作成することです。

次に、手動のワークエリア サイズ ポリシーを使用し、明示的に sort_area_size/sort_area_retained_size を設定して、インデックスの作成中に TEMP スペースの消費を調整できるかどうかを確認します。

それが役立つことを願っています。

于 2012-10-18T23:07:37.400 に答える