콘텐츠로 이동

1. Altibase SQL 소개#

이 장에서는 Altibase SQL의 특징과 구성에 대해서 간략하게 소개하고 있다.

SQL 개요#

SQL(Structured Query Language)은 데이터베이스 객체를 정의하고 관리하며, 데이터베이스의 데이터를 조작하고 검색하기 위한 언어이다. 이 절은 Altibase의 SQL 특성에 대해 기술한다.

Altibase SQL 특징#

빠른 질의 성능#

Altibase의 경우 대부분의 질의들에 대해 SQL 준비 (PREPARE)과정 후 실행하기 전까지 시스템 카탈로그 정보가 변하지 않는 점에 착안해서 준비과정에서 최적화된 실행 계획 트리(execution plan tree)를 만들어 두고 실행시에는 이 실행 계획 트리를 사용하도록 하여 실제 질의가 반복 실행될 때의 수행속도를 대폭 향상시켰다. 이와 같은 방법은 초기 데이터베이스 스키마 생성 후 데이터 정의어(DDL) 구문의 수행은 거의 일어나지 않고 데이터 조작어(DML) 구문의 수행이 빈번한 응용 애플리케이션에 매우 유용하다.

SQL/92 표준 지원#

Altibase SQL은 SQL/92 표준 사양을 지원하므로 다른 데이터베이스의 SQL 사용 경험이 있는 사용자들은 별도의 숙지 없이 Altibase를 쉽게 사용할 수 있다.

강력한 부질의(subquery) 지원#

일반적으로 부질의는 SELECT 구문, CREATE TABLE ~ AS SELECT 구문, INSERT ~ SELECT 구문의 수식과 IN 절에 주로 사용된다. 여기에 사용되는 부질의는 대부분 여러 칼럼의 여러 레코드를 검색해 준다.

Altibase의 경우 부질의의 결과가 하나의 값(한 레코드의 한 칼럼)일 경우, 그 부질의는 상수값 대신에 사용할 수 있으며 부질의는 빠른 검색을 지원하므로, 여러 SQL문으로 처리하는 것보다 부질의를 포함하는 SQL문으로 처리하는 것이 더 낫다. 따라서 복잡한 응용 애플리케이션에서 부질의는 유용하다.

다양한 시스템 제공 함수 지원#

SQL/92의 표준 사양 이외에 Altibase는 사용자에게 유용한 다양한 시스템 함수를 지원한다.

질의 최적화와 실행 계획#

질의 성능을 높이기 위해서는 SQL구문을 효과적으로 작성해야 한다. Altibase가 SQL구문을 처리하는 방식을 이해하는 것은 최적화된 SQL구문을 작성하는데 도움이 될 것이다.

Altibase에서의 SQL문 처리 과정은 크게 준비(PREPARE) 과정과 실행(EXECUTE) 과정으로 나뉘어진다.

  • 준비 과정
    SQL문의 문법을 분석하여 정당성을 검사하고 최적화 한 후 실행 계획을 수립해 실행 계획 트리(execution plan tree)를 생성하는 과정이다. 이 과정에서 메타 테이블에 접근해 테이블과 인덱스 정보 등을 읽어서 최적화된 접근 계획을 수립한다.
    따라서 클라이언트가 direct execution 대신에 준비와 실행을 나뉘어서 수행한다면, 준비 후 메타의 변경이 일어나지 않아야 준비(PREPARE) 과정에서 생성된 실행 계획 트리가 실행시에 수정 없이 그대로 사용될 수 있다. 예를 들어, 준비 과정에서 존재했던 인덱스가 실행 과정에서는 존재하지 않는다면 준비 과정에서 인덱스를 사용하는 것으로 최적화된 실행 계획 트리는 실행 과정에서는 무효한 것이 되어 사용할 수 없게 된다.
  • 실행 과정
    준비 과정에서 생성된 실행 계획에 따라 질의문을 실제로 수행하는 과정이다. 클라이언트가 호스트 변수를 사용한 SQL문을 prepare 한 후 호스트 변수 값을 변경하면서 여러번 수행하는 경우, 준비 과정은 한번 수행되고 변수값 설정과 실행 과정은 여러번 수행된다.

SQL문 분류#

Altibase가 지원하는 전체 SQL문은 다음과 같이 분류된다.

  • 데이터 정의어 (DDL)
  • 데이터 조작어 (DML)
  • 데이터 제어어 (DCL)

이 장에서는 각 SQL문에 대해 간략히 소개한다.

자세한 사용방법은 3장 데이터 정의어, 4장 데이터 조작어, 5장 데이터 제어어를 참조한다.

데이터 정의어(DDL)#

DDL(Data Definition Language)은 데이터베이스 객체를 정의하고 변경하는데 사용된다.

SQL 문 설명
ALTER DATABASE 데이터베이스 정의 변경
ALTER INDEX 인덱스 정의 변경
ALTER JOB 작업(JOB) 변경
ALTER REPLICATION 이중화의 정의 변경
ALTER SEQUENCE 시퀀스의 정의 변경
ALTER TABLE 테이블의 정의 변경
ALTER TABLESPACE 테이블스페이스 정의 변경
ALTER TRIGGER 트리거 정의 변경
ALTER USER 사용자의 암호 변경
ALTER VIEW 뷰 재 컴파일
CONJOIN TABLE 논 파티션드 테이블을 파티션드 테이블의 파티션으로 변환
CREATE DATABASE 데이터베이스 생성
CREATE DIRECTORY 저장 프로시저 내에서 파일 처리를 위한 디렉토리 객체 생성
CREATE INDEX 인덱스 생성
CREATE JOB 작업(JOB) 생성
CREATE QUEUE 큐 생성
CREATE REPLICATION 이중화 생성
CREATE SEQUENCE 시퀀스 생성
CREATE SYNONYM 객체의 별칭(시노님) 생성
CREATE TABLE 테이블 생성
CREATE TABLESPACE 테이블스페이스 생성
CREATE TRIGGER 트리거 생성
CREATE USER 사용자 생성
CREATE VIEW 뷰 생성
DISJOIN TABLE 파티션을 논 파티션드 테이블로 변환
DROP DIRECTORY 디렉토리 객체 삭제
DROP INDEX 인덱스 삭제
DROP JOB 작업(JOB) 삭제
DROP QUEUE 큐 삭제
DROP REPLICATION 이중화 삭제
DROP SEQUENCE 시퀀스 삭제
DROP SYNONYM 시노님 삭제
DROP TABLE 테이블 삭제
DROP TABLESPACE 테이블스페이스 삭제
DROP TRIGGER 트리거 삭제
DROP USER 사용자 삭제
DROP VIEW 뷰 삭제
FLASHBACK TABLE 휴지통의 테이블 복원
GRANT 권한 부여
PURGE TABLE 휴지통의 테이블 제거
RENAME 테이블 이름 변경
REVOKE 권한 취소
TRUNCATE TABLE 테이블의 모든 레코드 삭제

[표 1‑1] 데이터 정의어 목록

메타 정보가 변경되는 위의 DDL 구문들이 수행되면 그 세션의 현재 시작되어 있는 트랜잭션은 종료되고 새로운 트랜잭션으로 그 DDL 문이 처리된 후 그 트랜잭션은 종료된다. 즉 DDL 문은 하나의 트랜잭션으로 처리되는 SQL문들이다. 다시 말해서 AUTOCOMMIT 모드가 비설정(OFF)된 상태에서 데이터 조작어(DML)를 수행하고 명시적으로 커밋(COMMIT)을 호출하지 않았다 하더라도 위의 SQL문들을 수행하면 Altibase 내부적으로 이전에 수행된 데이터 조작어(DML)들이 모두 묵시적으로 커밋된다. 즉, 위 DDL문을 수행하기 전에 수행된 DML 트랜잭션은 DDL문 수행 후 롤백문을 이용해 철회될 수 없다.

데이터 조작어(DML)#

DML(Data Manipulation Language) 문은 데이터를 조작하는데 사용된다. 데이터 정의어(DDL)와 달리 AUTOCOMMIT 모드가 비설정(OFF) 되어 있는 상태에서 DML문을 수행하면 수행 후 묵시적으로 커밋되지 않는다. 따라서, AUTOCOMMIT 모드가 비설정(OFF)된 상태에서 어떤 트랜잭션이 여러 개의 DML문을 수행하고 롤백(rollback)을 호출하면 그 트랜잭션은 철회된다.

SQL 문 설명
DELETE 데이터의 삭제
INSERT 데이터의 삽입
LOCK TABLE 특정한 모드에서 테이블 잠금
SELECT 데이터의 검색
UPDATE 데이터의 변경
MOVE 한 테이블에서 다른 테이블로 데이터 이동
ENQUEUE 메시지를 큐에 삽입
DEQUEUE 메시지를 큐에서 꺼내고 큐에서 삭제

[표 1‑2] 데이터 조작어 목록

데이터 제어어(DCL)#

DCL(Data Control Language) 문은 데이터를 제어하는데 사용된다.

세션 제어문과 트랜잭션 제어문은 각 세션에만 영향을 미치고 다른 세션에는 영향을 미치지 않는다.

이중화 객체 제어문#

SQL 문 설명
ALTER REPLICATION...STOP/FLUSH 이중화 객체 제어

[표 1‑3] 이중화 객체 제어문 목록

데이터베이스 링크 객체 제어문#

SQL 문 설명
ALTER DATABASE LINKER 데이터베이스 링크 시작, 종료

[표 1‑4] 데이터베이스 링크 객체 제어문 목록

시스템 제어문#

SQL 문 설명
ALTER SYSTEM 프로퍼티 변경, 체크포인트와 데이터베이스 백업 수행

[표 1‑5] 시스템 제어문 목록

세션 제어문#

SQL 문 설명
ALTER SESSION 세션의 프로퍼티 변경

[표 1‑6] 세션 제어문 목록

트랜잭션 제어문#

SQL 문 설명
COMMIT 트랜잭션 정상 종료
ROLLBACK
or
ROLLBACK TO SAVEPOINT savepoint_name
트랜잭션 전체 철회 또는
savepoint_name 시점으로 트랜잭션 부분 철회
SAVEPOINT savepoint_name 트랜잭션내에서 마커 설정
SET TRANSACTION READ-ONLY 또는 READ-WRITE 트랜잭션 시작, 또는
트랜잭션의 ISOLATION LEVEL 설정 변경

[표 1‑7] 트랜잭션 제어문 목록

감사(Audit) 제어문#

SQL 문 설명
AUDIT 감사 조건 설정
DELAUDIT 감사 조건 삭제
NOAUDIT 감사 조건 해제

[표 1‑8] 감사 제어문 목록