DDLが切り捨てられるのはなぜですか?


15

インタビューの質問があります。これはインタビューの中で尋ねられました。私は質問に答えましたが、インタビュアーは私の答えにそれほど納得していませんでした。だから、誰でも私の理解で私を修正してください?

Q. TruncateがDDLであり、DeleteがDMLである理由 両方ともほぼ同じジョブを実行します(行を削除します)

回答 Truncateを使用している場合、undo-table-spaceに保存せずに、データによって割り当てられたスペース全体の割り当てを解除しています。ただし、削除の場合、すべてのデータをUNDO表スペースに入れてから、すべてのデータを削除します。

上記のベストアンサーを知っている人がいたら、説明してください。


コメントは詳細なディスカッション用ではありません。この会話はチャットに移動さました
ポールホワイトモニカーを復活

回答:


14

DMLとDDLの区別は、その名前が示すほど明確ではないため、状況が少し濁ることがあります。

Oracle は、 『コンセプトガイド』ではDDLとして明確に分類しTRUNCATEDELETEいますが、DMLとして分類しいます。

TRUNCATE私が理解しているように、OracleのDDLキャンプの主なポイントは次のとおりです。

  • TRUNCATEストレージパラメータ(NEXTパラメータ)を変更できます。これらはオブジェクト定義の一部であり、DDLキャンプにあります。
  • TRUNCATE暗黙的commitであり、ロールバック(フラッシュバックは別として)できません-Oracleのほとんど(すべて?)DDL操作はこれを行いますが、DMLは行いません。

トリガーをTRUNCATE実行しないという事実ON DELETEは、通常のDML操作とは異なります(ただし、一部の直接パスDML操作もトリガーをスキップするため、明確な指標ではありません)。

DELETEUNDO を生成するのと同じドキュメントノートは生成しますが、生成TRUNCATEしないので、この点でステートメントは正しいです。(ただし、復元/回復の場合に切り捨てを再生できるようにTRUNCATEいくつかを生成することに注意してくださいREDO。)しかし、一部のNOLOGGING操作では、UNDOが減少することもあります(まったくわかりません)。

だから私はそれを次のように要約します:

  • truncateコミットしてロールバックできないという意味で「トランザクション」ではなく、オブジェクトストレージ属性を変更できます。したがって、通常のDMLではありません-OracleはそれをDDLとして分類します。
  • delete 通常のDMLステートメントです。

テーブルを作成するとき、どのテーブルスペースに入るか、初期サイズ、次エクステントサイズなどを指定できます。これらはストレージ属性です。はい、それらはテーブル(またはインデックス、またはパーティション)メタデータの一部です。
マット

SQL標準では、「データ操作」の章にTRUNCATEがINSERT、DELETE、およびUPDATEとともにリストされていることに注意してください。
-a_horse_with_no_name

2

それらはすべてテーブル上で機能するため、つまり、テーブルレベルのコマンドであるtruncateためdropalterに似ていると思いcreateます。「削除は」と似ていますがinsertselectupdate行のすべての作業として、彼らはすべての行レベルのコマンドですすなわち。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.