오라클 글로벌 임시 테이블/PHP 상호 작용 질문


0

필자는 Global Temporary Tables를 한번도 사용해 본 적이 없지만 PHP 환경에서 어떻게 작동 할 것인가에 대한 질문이 있습니다.

데이터 공유 방법 : oci8을 사용하여 php를 통해 oracle에 대한 지속적인 연결을 가정합니다. 데이터가 데이터베이스 ID에 연결되어 있습니까? 아파치 httpd 악마를 기반으로 이루어 집니까? 또는 각각의 개별 요청은 고유합니까?

세션의 데이터가 글로벌 임시 테이블에서 지워지는시기는 언제입니까? 나는 php 스크립트가 종료 될 때 PHP 스크립트가 끝났다고 가정한다. 또는 스크립트가 종료되기 전에 스크립트를 제거해야한다고 가정합니다.

3

글로벌 임시 테이블은 단순히 테이블 구조 (이름, 열 이름, 열 데이터 형식 등)의 논리적 정의입니다. 세션이 데이터를 삽입하여 세션을 참조 할 때 해당 세션의 데이터 만 보유하기 위해 임시 테이블 공간에 데이터 세그먼트가 작성됩니다. 따라서 서로 다른 세션은 커밋시 쉽게 삭제되거나 다른 세션에 영향을주지 않고 세션의 연결이 끊어 질 때 전용 데이터 세그먼트를 갖기 때문에 동일한 논리적 테이블 정의를 참조 할 수 있습니다.

GTT에서 데이터 제거는 생성 된 옵션에 따라 커밋되거나 세션이 끝날 때 수행 할 수 있습니다. 두 경우 모두 연결을 끊기 전에 퍼지에 신경을 쓸 필요가 없습니다.

GTT의 유용한 대안은 이전에 해당 SQL 문에 선언 된 참조를 참조 할 수있는 다중 관계를 만들 수있는 하위 쿼리 인수 절 ("WITH")입니다. 이들은 특정 메모리 사용량을 초과 할 때 Oracle이 자동으로 임시 테이블 공간에서 데이터 세그먼트로 또는 MATERIALIZE 옵티 마이저 힌트를 사용하여 수동으로 구체화 할 수 있습니다.


1

내가 기억한다면 전역 임시 테이블의 데이터는 한 개의 활성 세션에서만 사용할 수 있으며이 활성 세션 (즉 세션 = 연결)에서만 사용할 수 있습니다. 따라서 활성 세션에서 이전에 삽입 된 데이터 만 볼 수 있습니다. 따라서 저는 믿습니다.이 데이터는 세션을 닫은 후에 지워집니다. 어떤 언어를 사용하든 상관 없습니다.

적어도 그렇게 생각합니다. : D

가 여기에 기록 된대로 : http://www.oracle-base.com/articles/8i/TemporaryTables.php

데이터를 전역 임시 테이블에 세션에 의해 삽입 된 데이터가 해당 세션에 액세스 할 수 있도록, 비공개입니다.

비정상적으로 종료 되더라도 임시 테이블의 데이터는 데이터베이스 세션이 끝날 때 자동으로 삭제됩니다.

죄송합니다.