ちゃむ前回は、主に一時表領域に関して説明した。今回は、一時表領域と専用一時表領域との違いについてさらに検証する。複数のソート処理によって本当に一時セグメントのセグメント数に一時表領域と専用一時表領域とで違いが出るのか?「一時表領域」1_1.ソート処理を行なう際、その処理に対応した一時セグメントを割り当てる。(複数のソート処理で複数の一時セグメントを使用する。1402ソート処理別に一時セグメント(SEGMENT_TYPE=TEMPORARY)が割当てられているのがわかる。SEGMENT_NAMEは、「HEADER_FILE.HEADER_BLOCK」で命名される様子もわかる。これは、セグメントヘッダの場所を示している。<ソート処理終了後のdba_segmentsの検索>ソート処理終了後は、dba_segmentsを検索してもデータは何も検索されない。1_2.ソート処理を行なう際、必ず、単一の一時セグメントを割り当てる。(複数のソート処理で一つの一時セグメントを使用する。2一時セグメントが一つしか存在しないのが、確認できるだろう。5800=2900+2900であり、大きさ的にも1_1.で行なったソート処理の大きさである。<ソート処理終了後のdba_segmentsの検索>ソート処理終了後にdba_segmentsを検索すると、上記のSQLの結果とまったく同じである。これがソート後すぐに一時セグメントが解放されない裏付けである。解放されるタイミングは、OracleのSHUTDOWN処理時だが実はもう一つある。それは、以下のコマンドで永続表領域にすることである。これにより、単なる一時表領域になるので、エクステントが解放されるのは理解しやすい。PERMANENT;ちなみに専用一時表領域に再び戻すコマンドは以下のとおり。専用一時表領域の内部的な動きである。解放しっぱなしの一時セグメントが他のソート処理を行なうプロセスから効率的に再利用されるために、このように全体の領域を管理する一つのセグメントヘッダが必要だったためと思われる。以下にそのイメージを示す。それぞれの方法について理解していただけたと思う。今回は「整合性制約の管理」についてお送りしようと思う。管理」とは、制約の実行タイミングや制約の状態を設定することである。>制約の実行タイミングは、二通り存在する。即時制約と遅延制約である。方法は、制約定義時である。・即時制約とは、表に対するDML実行時に制約をチェックすることである。・遅延制約とは、表に対するDML実行後、COMMIT時に制約をチェックすることである。言い換えると、制約のチェックをトランザクションの最後まで遅延するのである。)SELECT,UPDATE,INSERT,DELETE文のことである。処理を行うことである。それでは、即時制約と遅延制約の動きをみてみよう。遅延不可能かつ初期即時制約指定(デフォルト)表を作る。遅延制約の設定に関する内容は、次回で詳しく説明する。それでは、2つの表に対して同じ値を挿入してみよう。制約がチェックされるタイミングの違いがみれるはずである。1行が作成されました。エラーが発生しました。INSERT文を実行時にチェックされているのが確認できる。これが即時制約である。1行が作成されました。1行が作成されました。エラーが発生しました。トランザクションがロールバックされました。INSERT文を実行時にチェックされず、トランザクション終了時(COMMIT時)に制約のチェックが実行されているのが確認できる。これが遅延制約である。————————-次回は、「整合性制約の管理」のつづきを、お送りしようと思う。「どっぷり入門生活」では、基本的な質問をお待ちしています。このようなテーマでやってほしい等の要望がございましたら、メールでどしどしお寄せください。reserved.トップページ企業概要プライバシーポリシ。