質問

私はグローバル一時テーブルを使用したことがありませんが、それらが PHP 環境でどのように機能するかについていくつかの質問があります。

データはどのように共有されるか:oci8 を使用した php 経由の oracle への永続的な接続を想定しています。データはデータベース ID に関連付けられていますか?Apache httpd デーモンに基づいて行われますか?それとも、個々のリクエストはそれぞれ固有のものですか?

セッションのデータはいつグローバル一時テーブルから消去されますか?私は、php スクリプトが終了したときにそれが完了すると仮定しています (またはむしろ願っています)。そうでない場合は、スクリプトを終了する前に削除する必要があると思います。

役に立ちましたか?

解決

グローバル一時テーブルは、単にテーブル構造の論理定義 (名前、列名、列のデータ型など) です。セッションがデータを挿入して参照すると、そのセッションのデータのみを保持するデータ セグメントが一時表領域に作成されます。したがって、異なるセッションは同じ論理テーブル定義を参照できます。各セッションには専用のデータ セグメントがあり、コミット時またはセッションの切断時に他のセッションに影響を与えることなく簡単にパージできるからです。

GTT 内のデータのパージは、作成時に使用したオプションに応じて、コミット時またはセッション終了時に行われます。どちらの場合も、切断する前に自分でパージを行う必要はありません。

GTT の便利な代替手段は、サブクエリ ファクタリング句 (「WITH」) です。これを使用すると、SQL ステートメントで以前に宣言されたリレーションを参照できる複数のリレーションを作成できます。これらは、特定のメモリ使用量を超えたときに Oracle によって自動的に、または MATERIALIZE オプティマイザ ヒントを使用して手動で、一時表領域内のデータ セグメントとして実体化できます。

他のヒント

私の記憶が正しければ、グローバル一時テーブル内のデータは、1 つのアクティブなセッションからのみ、またこのアクティブなセッション (セッション = 接続) でのみ使用できます。したがって、アクティブなセッションで以前に挿入されたデータのみを表示できます。したがって、このデータはセッション終了後に消去されると思います。どの言語を使用していても構いません。

少なくとも私はそう思う。:D

ここに書かれているように:http://www.oracle-base.com/articles/8i/TemporaryTables.php

グローバル一時テーブル内のデータはプライベートであるため、セッションによって挿入されたデータにはそのセッションのみがアクセスできます。

一時テーブル内のデータは、データベース セッションが異常終了した場合でも、終了時に自動的に削除されます。

私の下手な英語でごめんなさい。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top