sql >> データベース >  >> RDS >> Oracle

ORA削除/切り捨て

    レコードをバッチで削除することはPL/SQLループで実行できますが、削除全体は通常1つのトランザクションと見なされるため、一般的には悪い習慣と見なされます。これは、SQL*Loader制御ファイル内からは実行できません。 DBAはUNDOのサイズを設定する必要があります あなたがする必要がある仕事を収容するためのスペース。

    テーブル全体を削除する場合は、いずれにせよ、制御ファイル内

    options(skip=1,load=250000,errors=0,ROWS=30000,BINDSIZE=10485760)
    load data
    infile 'G:1.csv' "str '^_^'"
    truncate
    into table IMPORT_ABC
    ...
    

    または、個別の切り捨てとして ロードを開始する前のSQL*Plus / SQL Developer /その他のクライアントのステートメント:

    truncate table import_abc;
    

    欠点は、新しい行が読み込まれている間、他のユーザーにはテーブルが空に見えることですが、それが専用のインポート領域(名前から推測)の場合は、とにかく問題にならない可能性があります。

    UNDOの場合 は実際には非常に小さいため、複数のロードを実行する必要がある場合があります。その場合、おそらく明らかに、 truncateのみがあることを確認する必要があります。 最初のものの制御ファイルで(または別の truncateを使用します ステートメント)、を追加 代わりに、コメントで指摘したように、後続の制御ファイルで。

    外部テーブル も検討することをお勧めします。 UNDO がないため、このデータをベースとして他のデータを入力する場合 外部データソースを置き換える際のオーバーヘッド。おそらく、その設定と必要なディレクトリ権限の付与についてDBAに相談する必要があります。



    1. 警告:mysqli_connect():(HY000 / 1045):ユーザー'root' @'localhost'のアクセスが拒否されました(パスワードを使用:NO)

    2. VARCHAR(255)の次善の策は何ですか

    3. PL/SQLを使用してPDFレポートを作成する方法

    4. SQLの結合から重複する列を削除する方法