English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Oracle에서8i 또는 이상 버전에서는 다음 두 가지 일시적 테이블을 생성할 수 있습니다:
1。세션 전용 일시적 테이블
CREATE GLOBAL TEMPORARY <TABLE_NAME> ( <column specification> )
ON COMMIT PRESERVE ROWS;
2。트랜잭션 전용 일시적 테이블
CREATE GLOBAL TEMPORARY <TABLE_NAME> ( <column specification> )
ON COMMIT DELETE ROWS;
CREATE GLOBAL TEMPORARY TABLE MyTempTable
만든 일시적 테이블은 존재하지만, insert 한 레코드를 다른 연결로 등록하여 select 해보면, 레코드가 비어 있습니다. 이해했습니다. 아래 두 문장을 다시 붙여넣습니다:
--ON COMMIT DELETE ROWS는 일시적 테이블이 트랜잭션 지정된 것을 의미하며, 매번 커밋할 때마다 ORACLE이 테이블을 자르거나(모든 행을 지우는) 됩니다.
--ON COMMIT PRESERVE ROWS는 일시적 테이블이 세션 지정된 것을 의미하며, 세션이 중단될 때 ORACLE이 테이블을 자르게 됩니다.
충돌 문제는 전혀 고려할 필요가 없습니다.
일시적 테이블은 현재 세션(session)에서 사용하는 데이터를 저장하는 것이며, 데이터는 트랜잭션 또는 세션 기간 동안만 존재합니다.
CREATE GLOBAL TEMPORARY TABLE 명령어로 일시적 테이블을 생성하면, 트랜잭션 유형의 일시적 테이블은 데이터가 트랜잭션 기간 동안만 존재하며, 세션 유형의 일시적 테이블은 세션 기간 동안 데이터가 존재합니다.
세션 데이터는 현재 세션에 대한 프라이빗입니다. 각 세션은 자신의 데이터만 볼 수 있으며 수정할 수 있습니다. DML 락은 일시적 테이블 데이터에 추가되지 않습니다. 아래 명령어는 행 존재성을 제어합니다.
● ON COMMIT DELETE ROWS 테이블 행은 트랜잭션 기간 동안만可见
● ON COMMIT PRESERVE ROWS 테이블 이름 행은 전체 세션 기간 동안 볼 수 있습니다.
일시적 테이블에 인덱스, 뷰, 트리거를 생성할 수 있으며, export 및 import 도구를 사용하여 테이블 정의를导入 및 导出할 수 있지만, 데이터를 导出할 수 없습니다. 테이블 정의는 모든 세션에 대해 볼 수 있습니다.
Temporary Tables 일시적 테이블
1개요
ORACLE 데이터베이스는 영구 테이블 외에도 일시적 테이블(temporary tables)을 구축할 수 있습니다. 이 일시적 테이블은 세션 SESSION의 데이터를 저장하기 위해 사용됩니다.
또는 트랜잭션에서 필요한 데이터를 저장합니다. 세션이 탈퇴하거나 사용자가 커밋 및 롤백 트랜잭션을 제출했을 때, 일시적 테이블의 데이터는 자동으로 비워집니다.
하지만 일시적 테이블의 구조 및 메타데이터는 사용자 데이터 딕셔너리에 저장됩니다.
일시적 테이블은 oracle에서만8i 및 이상 제품에서 지원됩니다.
2상세히 설명
Oracle 일시적 테이블은 세션 수준 일시적 테이블과 트랜잭션 수준 일시적 테이블로 나뉩니다.
세션 수준의 일시적 테이블은 세션 생명주기 동안만 데이터가 존재합니다. 사용자가 세션을 탈퇴했을 때, Oracle이 자동으로 일시적 테이블 데이터를 지웁니다.
트랜잭션 수준의 일시적 테이블은 트랜잭션 생명주기 동안만 데이터가 존재합니다. 트랜잭션이 종료되면(커밋 또는 롤백), Oracle이 자동으로 일시적 테이블 데이터를 지웁니다.
일시적 테이블의 데이터는 현재 세션에만 유효하며, 각 세션은 자신의 일시적 데이터를 가지고 있으며, 다른 세션의 일시적 테이블 데이터에 접근할 수 없습니다. 따라서
일시적 테이블은 DML 락이 필요하지 않습니다. 세션이 종료되었을 때(사용자가 정상적으로 탈퇴했을 때, 사용자가 비정상적으로 탈퇴했을 때 ORACLE 인스턴스가 충돌했을 때) 또는 트랜잭션이 종료되었을 때, Oracle은 이 세션에 대해
TRUNCATE 문을 통해 테이블의 데이터를 비우습니다. 다만, 다른 세션의 일시적 테이블 데이터는 비워지지 않습니다.
일시적 테이블에 인덱스를 만들고, 일시적 테이블을 기반으로 뷰를 구축할 수 있습니다. 또한, 일시적 테이블에 구축된 인덱스는 일시적이며, 현재 세션 또는 트랜잭션에만 유효합니다.
일시적 테이블은 트리거를 가질 수 있습니다.
3일시적 테이블을 구축하다
일시적 테이블의 정의는 모든 세션 SESSION에 대해 볼 수 있습니다만, 테이블의 데이터는 현재 세션 또는 트랜잭션에만 유효합니다.
구축 방법:
1) ON COMMIT DELETE ROWS 정의는 트랜잭션 수준의 일시적 테이블을 구축하는 방법을 정의합니다.
CREATE GLOBAL TEMPORARY TABLE admin_work_area (startdate DATE, enddate DATE, class CHAR(20)) ON COMMIT DELETE ROWS;
EXAMPLE:
SQL> CREATE GLOBAL TEMPORARY TABLE admin_work_area (startdate DATE, enddate DATE, class CHAR(20)) ON COMMIT DELETE ROWS; SQL> create table permernate( a number); SQL> insert into admin_work_area values(sysdate,sysdate, ‘temperary table ‘); SQL> insert into permernate values(1); SQL> commit; SQL> select * from admin_work_area; SQL> select * from permernate; A 1
2)ON COMMIT PRESERVE ROWS 정의로 세션 수준 임시 테이블을 생성하는 방법을 정의합니다.
CREATE GLOBAL TEMPORARY TABLE admin_work_area (startdate DATE, enddate DATE, class CHAR(20)) ON COMMIT PRESERVE ROWS; EXAMPLE:
세션1:
SQL> drop table admin_work_area; SQL> CREATE GLOBAL TEMPORARY TABLE admin_work_area 2 (startdate DATE, 3 enddate DATE, 4 class CHAR(20)) 5 ON COMMIT PRESERVE ROWS; SQL> insert into permernate values(2); SQL> insert into admin_work_area values(sysdate,sysdate, ‘session temperary ‘); SQL> commit; SQL> select * from permernate; A ---------- 1 2 SQL> select * from admin_work_area; STARTDATE ENDDATE CLASS ---------- ---------- -------------------- 17-1;63;63; -03 17-1;63;63; -03 session temperary
세션2:
SQL> select * from permernate; A ---------- 1 2 SQL> select * from admin_work_area;
선택된 행이 없습니다.
세션2불가见的 세션1에서 임시 테이블의 데이터.
4 ORACLE 임시 테이블과 SQLSERVER 임시 테이블의 차이와 유사점
SQL SERVER 임시 테이블
임시 테이블을 생성할 수도 있습니다. 임시 테이블은 영구 테이블과 유사하지만, tempdb에 저장되며 더 이상 사용되지 않으면 자동으로 제거됩니다.
로컬과 글로벌 임시 테이블의 두 가지 유형이 있으며, 이들은 이름, visible성, 사용 가능성에서 다릅니다. 로컬 임시 테이블의 이름은 단일 숫자 기호 (#)로 시작합니다;
그들은 현재 사용자 연결에만 visible입니다; 사용자가 Microsoft? SQL Server? 2000 인스턴스가 연결을 끊을 때 제거됩니다. 글로벌 임시 테이블의 이름은 수학 기호로 시작합니다
(##)로 시작하는 테이블은 생성后被 all users에게可见이며, 모든 테이블을 참조하는 사용자가 SQL Server에서 연결을 끊을 때 제거됩니다.
예를 들어, employees라는 테이블을 생성하면, 데이터베이스에 사용할 수 있는 테이블의 보안 권한을 가진 모든 사람이 해당 테이블을 사용할 수 있습니다. 제거된 경우는 제외합니다.
만약 #employees라는 이름의 로컬 임시 테이블을 생성하면, 그 테이블에 대한 작업을 수행할 수 있는 것은 당신뿐이며, 연결이 끊어지면 해당 테이블이 제거됩니다. 만약 ##employees라는 글로벌 임시 테이블을 생성하면
데이터 테이블의 모든 사용자가 테이블에 작업을 수행할 수 있습니다. 만약 이 테이블이 생성된 후 다른 사용자가 사용하지 않으면, 연결을 끊을 때 테이블이 제거됩니다. 만약 이 테이블이 생성된 후 다른 사용자가 사용한다면,}}
다음 사용자가 사용하기 시작하면, SQL Server는 모든 사용자가 연결을 끊은 후에 테이블을 제거합니다.
차이점:
1. SQL SERVER 일시적인 테이블은 '메모리 테이블'로, 테이블이 메모리에 저장되어 있습니다. ORACLE 일시적인 테이블은 DROP TABLE을 실행하지 않는 한 테이블 정의가 데이터 딕셔너리에 유지됩니다.
2. SQL SERVER 일시적인 테이블은 ORACLE 일시적인 테이블의 트랜잭션 수준 기능과 유사하지 않습니다.
3 SQL SERVER의 로컬 일시적인 테이블(#)은 ORACLE의 세션 수준 일시적인 테이블과 유사하지만, 세션에서 로그아웃할 때 ORACLE는 테이블을 제거하지 않습니다.
4 SQL SERVER의 전역 일시적인 테이블(##)은 여러 연결이 동일한 메모리 영역을 공유하는 것을 의미합니다. 해당 메모리 영역에 대한 포인터가 더 이상 참조되지 않을 때, SQL SERVER는 자동으로 전역 일시적인 테이블을 해제합니다.
5 ORACLE는 메모리 내의 데이터베이스가 아니기 때문에, ORACLE가 SQL SERVER와 유사하게 일시적인 테이블을 반복적으로 생성하고 제거하는 경우 성능에 영향을 미칠 수 있습니다.
따라서 ORACLE는 사용자가 DROP TABLE을 실행할 때까지 일시적인 테이블 정의를 유지합니다.
6 ORACLE에서 여러 사용자가 하나의 테이블을 공유해야 한다면 (SQL SERVER의 전역 일시적인 테이블##와 유사하게)
또한 테이블에 유일하게 사용자를 식별할 수 있는 열을 추가합니다. 트리거와 뷰를 사용하여 사용자가 로그아웃할 때, 해당 로그인 사용자의 유일한 정보를 기반으로 해당 테이블에서 데이터를 지우는 것입니다.
이 방법은 ORACLE에 일정량의 부하를 주었습니다.
이상이 oracle 일시적인 테이블에 대한 자료 정리입니다. 이후 추가적인 자료를 계속 보충하겠습니다. 감사합니다.