2009-05-28 11 views
3

3954275行の挿入文を使用してスクリプトをOracle 10gにインポートするにはどうすればよいですか。私はsqlplus user/pass @ script.sqlでそれを行うことができますが、これは遅いです(さらに悪いことに、この900MBファイルの最後にコミットがあります。私のOracle構成がこれを処理できるかどうかはわかりません)。データをインポートするためのより良い(より速い)方法がありますか? Btw。 DBはインポート前に空です。インポート3954275 Oracle 10gへの挿入文

答えて

8

SQL*Loaderを使用してください。

データを別の形式にしていない場合でも、INSERTコマンドを解析することができます。

0

上記と一致します。SQL * Loaderを使用します。それはオプションがない場合は、SQL Plusは、スクリプトの先頭で声明

SET arraysize 1000; 

を置くことによってでもたらすことが

しかし、あなたはブロックの大きさを調整することができます。これは自分のスクリプトの単なる例であり、待ち時間などを考慮してニーズに合わせて細かく調整する必要があるかもしれません。デフォルトは15のようにデフォルト設定されていると思いますので、スクリプトでオーバーヘッドが大きくなります。

3

900MBファイルに同じテーブルへの挿入文が含まれている場合は、SQL * Loaderを使用することをお勧めします。多数のテーブルが含まれていると面倒です。しかし、これは最速のオプションです。

何らかの理由で少し改善があれば、セッションのCURSOR SHARINGパラメータがFORCEまたはSIMILARに設定されていることを確認してください。ファイル内の各insertステートメントは、値を除いて同じである可能性があります。 CURSOR_SHARINGがEXACTに設定されている場合、各INSERTステートメントは一意であるため、ハード解析する必要があります。 FORCEとSIMILARは自動的にVALUES句のリテラルを変数にバインドし、ハード解析の必要性を何度も何度も取り除きます。

あなたはこれをテストするには、以下のスクリプトを使用することができます。

set echo on 
alter system flush shared_pool 
/
create table t 
(id int 
, name varchar2(30) 
) 
/
set echo off 
set feedback off 
set heading off 
set termout off 
spool sof11.txt 
prompt begin 
select 'insert into t (id,name) values (' || to_char(level) || ', ''name' || to_char(level) || ''');' 
    from dual 
connect by level <= 10000 
/
prompt end;; 
prompt/
spool off 
set termout on 
set heading on 
set feedback on 
set timing on 
@sof11.txt 
set timing off 
alter session set cursor_sharing = force 
/
set timing on 
@sof11.txt 
set timing off 
alter session set cursor_sharing = exact 
/
set echo off 
drop table t purge 
/

の例では、 "; トン(ID、名前)の値(1、 'NAME1')に挿入" のような万のステートメントを実行します。私のラップトップの出力:

SQL> alter system flush shared_pool 
    2/

Systeem is gewijzigd. 

SQL> create table t 
    2 (id int 
    3 , name varchar2(30) 
    4 ) 
    5/

Tabel is aangemaakt. 

SQL> set echo off 

PL/SQL-procedure is geslaagd. 

Verstreken: 00:00:17.10 

Sessie is gewijzigd. 


PL/SQL-procedure is geslaagd. 

Verstreken: 00:00:05.50 

CURSOR_SHARINGをFORCEに設定して3倍以上の速さです。

これが役に立ちます。

よろしく、 ロブ。

関連する問題