Oracleグローバル・テンポラリ・テーブル/ PHPの対話の質問


0

私は一度もグローバル・テンポラリ・テーブルを使用したことはありませんが、PHP環境でどのように動作するのかという質問があります。

どのようにデータが共有されているか:oci8を使用してphpを使用してoracleに永続的な接続を行うと仮定します。データはデータベースIDに結びついていますか?それはApacheのhttpdの悪魔に基づいて行われますか?または、それぞれの個別のリクエストは一意ですか?

セッションのデータがグローバル一時テーブルからクリアされるのはいつですか?私はPHPスクリプトが終了したときに完了したと仮定しています。代わりに、私はスクリプトの終了前に削除する必要があると仮定していない場合。

3

グローバル・テンポラリ・テーブルは、単にテーブル構造(名前、カラム名、カラム・データ・タイプなど)の論理的定義です。セッションがデータを挿入してセッションを参照すると、そのセッションのデータのみを保持するために、一時的な表領域にデータ・セグメントが作成されます。したがって、異なるセッションは、コミット時に簡単にパージできる、またはセッションが他のセッションに影響を与えずに切断される独自の専用データセグメントを持つため、同じ論理テーブル定義を参照できます。

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

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


1

覚えていれば、グローバルなテンポラリテーブルのデータは、アクティブなセッションからのみ使用できます。このアクティブなセッション(セッション=接続)を意味します。したがって、アクティブセッションで前に挿入されたデータだけが表示されます。したがって、私は信じて、このデータはセッションを終了した後にクリアされます。どの言語を使用していても問題ありません。

少なくとも私はそうだと思います。 :D

それはここに書かれているとおり http://www.oracle-base.com/articles/8i/TemporaryTables.php

データをグローバルテンポラリテーブル内のセッションによって挿入されたデータのみがそのセッションによってアクセスすることができるように、プライベートです。

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

私の悪い英語のために申し訳ありません。