4. 데이터베이스 객체 및 권한 관리#
이 장에서는 스키마 객체와 비-스키마 객체를 구분하고 각각에 포함되는 데이터베이스 객체에 대해 설명한다.
데이터베이스 객체 개요#
데이터베이스 객체는 특정 스키마에 속하여 관리되는 스키마 객체와 스키마와 관계없이 데이터베이스 전체에서 관리되는 비-스키마 객체로 구분된다. 이 장에서는 스키마 객체와 비-스키마 객체를 구분하고 각각에 포함되는 데이터베이스 객체에 대해 설명한다.
스키마 객체#
스키마란 데이터 또는 객체들의 논리적 집합으로 한 사용자는 하나의 스키마를 소유하고 SQL문에 의해 관리한다. 이러한 스키마에 포함되는 객체를 스키마 객체라고 하며, Altibase는 다음과 같은 스키마 객체를 제공한다.
테이블(Table)#
테이블은 가장 기본적인 데이터 저장 단위로 칼럼들로 구성된 레코드들의 집합이다. Altibase의 테이블은 데이터의 저장 공간에 따라 메모리 테이블과 디스크 테이블로 구별된다. 그리고 시스템이 생성하고 관리하는 시스템 테이블과 일반 사용자가 생성하는 일반 테이블로 구별될 수도 있다.
시스템 테이블은 "데이터 딕셔너리"라고 하며 Altibase에서 제공하는 데이터 딕셔너리의 종류와 정보에 대해서는 General Reference > 3장. 데이터 딕셔너리에서 자세히 설명한다.
이중화 대상 테이블의 경우 테이블 관리가 특별하며 대용량 테이블의 경우에도 주의를 요하는 사항들이 있다.
이에 대한 보다 자세한 내용은 Administrator's Manual > 5장. 데이터베이스 객체 및 권한 > 테이블절에서 자세히 설명한다.
파티션드 테이블(Partitioned Table)#
테이블의 데이터를 여러 조각(각 조각을 파티션이라고 한다)으로 나누어 서로 다른 테이블스페이스에 저장하는 경우, 이 테이블을 파티션드 테이블(Partitioned Table)이라고 한다. 대용량 테이블의 경우 파티션드 테이블을 활용하면 데이터 관리가 용이할 것이다.
파티션드 테이블에 대한 자세한 내용은 Administrator's Manual > 7장. 파티션드 객체를 참조한다.
파티션드 인덱스(Partitioned Index)#
인덱스가 파티션되는 여부에 따라 파티션드 인덱스(partitioned index) 또는 논파티션드 인덱스(non partitioned index)로 분류한다. 논파티션드 인덱스는 파티션으로 분할되지 않은 인덱스를 의미하며, 파티션드 인덱스는 파티션드 테이블과 마찬가지로 파티션 조건에 따라 분리한 인덱스를 의미한다.
파티션드 인덱스에 대한 자세한 내용은 Administrator's Manual > 7장. 파티션드 객체를 참조한다.
임시 테이블(Temporary Table)#
하나의 세션 또는 트랜잭션이 유지되는 동안에 데이터를 일시적으로 보관하기 위해 임시 테이블을 사용할 수 있다. 임시 테이블을 이용하면 복잡한 질의를 사용할 때 수행 속도를 높일 수 있다.
임시 테이블은 휘발성 테이블스페이스에만 생성할 수 있다.
큐 테이블(Queue Table)#
Altibase는 메시지 큐잉 기능을 이용하여 데이터베이스와 사용자 프로그램간의 비동기 데이터 통신을 지원한다. 이때 사용되는 큐 테이블은 데이터베이스 객체의 하나로써 일반 테이블과 마찬가지로 DDL과 DML로 제어할 수 있다.
큐 테이블의 개념과 기능에 대해서는 Administrator's Manual > 5장. 데이터베이스 객체 및 권한 > 큐에서 자세히 설명한다.
제약조건(Constraint)#
제약조건이란 테이블의 데이터 삽입 또는 변경 시 데이터의 일관성을 유지할 수 있도록 부과하는 조건이다.
제약조건의 대상에 따라 칼럼 제약조건과 테이블 제약조건으로 구별할 수 있다. Altibase는 아래의 제약조건을 지원한다.
-
NOT NULL / NULL 제약조건
-
CHECK 제약조건
-
유일 키(unique key) 제약조건
-
주 키(primary key) 제약조건
-
외래 키(foreign key) 제약조건
-
TIMESTAMP 제약조건
이에 대한 보다 자세한 내용은 Administrator's Manual > 5장. 데이터베이스 객체 및 권한 > 제약조건절에서 자세히 설명한다.
인덱스(Index)#
인덱스는 테이블의 특정 칼럼들에 대해 색인을 생성하여 그 테이블의 레코드들에 대한 빠른 접근이 가능하도록 한다. 즉, 인덱스를 사용하여 DML문의 처리 성능을 향상시킬 수 있다.
이에 대한 보다 자세한 내용은 Administrator's Manual > 5장. 데이터베이스 객체 및 권한 > 인덱스)절에서 자세히 설명한다.
뷰(View)#
뷰는 실제 데이터 자체는 포함하지 않고, 하나 이상의 테이블, materialized view 또는 뷰를 기반으로 한 논리적 테이블 (logical table)이다.
이에 대한 보다 자세한 내용은 Administrator's Manual > 5장. 데이터베이스 객체 및 권한 > 뷰절에서 자세히 설명한다.
Materialized View#
Materialized view란 쿼리의 결과를 데이터로 저장하고 있는 데이터베이스 객체이다. 하나 이상의 테이블, 뷰, 및 다른 materialized view에 기반하여 데이터를 구성할 수 있다.
이에 대한 보다 자세한 내용은 Administrator's Manual > 5장. 데이터베이스 객체 및 권한 > Materialized view절에서 자세히 설명한다.
시퀀스(Sequence)#
Altibase는 유일키를 생성하기 위한 키 생성자로 시퀀스를 제공한다.
이에 대한 보다 자세한 내용은 Administrator's Manual > 5장. 데이터베이스 객체 및 권한 > 시퀀스절에서 자세히 설명한다.
시노님(Synonym)#
테이블, 시퀀스, 뷰, 저장 프로시저 및 저장 함수에 대한 별칭 (alias)을 부여하여 객체 사용에 대한 투명성을 보장할 수 있는 시노님을 제공한다.
이에 대한 보다 자세한 내용은 Administrator's Manual> 5장. 데이터베이스 객체 및 권한 > 시노님절에서 자세히 설명한다.
저장 프로시저 및 저장 함수(Stored Procedure or Function)#
저장 프로시저(Stored Prodedure)란 SQL문들과 흐름 제어문, 할당문, 오류 처리 루틴 등을 이용해 전체 업무 절차를 프로그래밍하여 하나의 모듈로 만든 후 데이터베이스에 영구적으로 저장해 두고, 모듈 이름만을 호출하여 전체 업무 절차를 서버에서 한번에 수행하는 데이터베이스 객체이다. 리턴 값을 가지지 않느냐와 가지느냐에 따라 저장 프로시저와 저장 함수로 구별된다.
이에 대한 보다 자세한 내용은 Administrator's Manual > 5장. 데이터베이스 객체 및 권한 > 저장 프로시저 및 저장 함수절에서 전반적인 관리 개요를 설명한다.
저장 프로시저의 특장점, 자세한 관리 방법 등에 대해서는 Stored Procedures Manual에서 자세히 설명한다.
타입 세트(Type Set)#
타입 세트(Type Set)란 저장 프로시저 및 저장 함수에서 사용하는 사용자 정의 타입들을 한 곳에 모아서 관리하도록 해 주는 데이터베이스 객체이다.
이에 대한 보다 자세한 내용은 Stored Procedures Manual에서 자세히 설명한다.
데이터베이스 트리거(Database Trigger)#
트리거란 테이블에 데이터가 삽입, 삭제, 또는 갱신될 때 시스템에 의해 작동되어 특정 작업 절차를 자동으로 수행할 수 있도록 하는 저장 프로시저의 한 종류이다. 사용자는 테이블에 대해 제약조건과 트리거를 정의하여 데이터의 일관성을 유지할 수 있다.
이에 대해서는 Administrator's Manual > 5장. 데이터베이스 객체 및 권한 > 트리거절에서 자세히 설명한다.
데이터베이스 링크(Database Link)#
데이터베이스 링크는 지역적으로 분리되어 있으나 네트워크로 연결된 데이터베이스 서버들을 연동하여 개별 데이터들을 통합해서 하나의 결과를 생성할 수 있게 한다.
이에 대해서는 Database Link User's Manual에 더 자세히 기술되어 있다.
외부 프로시저 및 외부 함수(External Procedure or Function)#
외부 프로시저 또는 외부 함수 객체는 사용자 정의 C/C++ 함수와 일대일로 대응하는 데이터베이스 객체이다. 사용자 정의 함수의 실행은 외부 프로시저 또는 외부 함수 객체를 통해 이루어진다. 리턴 값을 가지는 여부에 따라 외부 프로시저와 외부 함수로 구별된다.
자세한 내용은 C/C++ External Procedures Manual을 참고하도록 한다.
라이브러리(Library)#
외부 프로시저와 연결된 사용자 정의 C/C++ 함수를 포함하는 동적 라이브러리 파일을 Altibase 서버가 식별할 수 있도록 해야 한다. 이를 위해 Altibase는 동적 라이브러리 파일에 일대일로 대응하는 라이브러리 객체라는 데이터베이스 객체를 제공한다.
자세한 내용은 C/C++ External Procedures Manual을 참고하도록 한다.
비스키마 객체#
특정 스키마에 소속되지 않고 전체 데이터베이스 수준에서 관리되는 객체를 비스키마 객체라고 한다. Altibase는 다음과 같은 비스키마 객체를 제공한다.
디렉터리(Directory)#
저장 프로시저의 파일 제어 기능은 운영 체제의 텍스트 파일에 대한 읽기 및 쓰기 기능을 제공한다. 이 기능을 이용하여 사용자는 저장 프로시저 실행에 대한 별도의 메시지 등을 파일에 남길 수도 있으며, 파일로 결과를 보고하거나 파일로부터 데이터를 읽어와 테이블에 삽입하는 등 다양한 작업을 수행할 수 있다. 디렉터리 객체는 이러한 저장 프로시저에서 접근하는 파일들이 저장되어 있는 디렉터리에 대한 정보를 관리하는데 사용된다.
디렉터리 객체에 대한 자세한 기능은 SQL Reference를 참고한다.
저장 프로시저 내에서의 파일 제어 방법은 Stored Procedures Manual을 참고한다.
이중화(Replication)#
이중화는 시스템이 자동으로 한 지역서버에서 원격 서버로 데이터를 전송하고 복제하여 다른 서버들간의 테이블 데이터를 동일하게 유지해 줄 수 있도록 하는 객체이다.
이중화에 대한 자세한 기능과 이중화 관리에 대해서는 Replication Manual을 참조한다.
테이블스페이스(Tablespace)#
테이블스페이스는 가장 큰 논리적 데이터 저장 단위로 데이터베이스는 여러 개의 테이블스페이스 단위로 나뉘어져 관리된다.
Altibase는 데이터베이스를 생성하면 자동적으로 시스템 테이블스페이스가 생성되며, 사용자가 임의로 사용자 정의 테이블스페이스를 생성하기도 한다.
Altibase는 데이터베이스 객체가 디스크에 상주하는 디스크 테이블스페이스와 메모리에 상주하는 메모리 테이블스페이스, 메모리에 상주하면서 로깅을 하지않는 휘발성 테이블스페이스를 지원한다.
테이블스페이스에 대한 자세한 내용은 Administrator's Manual > 6장. 테이블스페이스를 참조한다.
사용자(User)#
사용자 계정은 Altibase 접속을 위해 필요하며, 스키마의 소유자이기도 하다. 시스템에 의해 생성되어 전체 시스템의 관리자인 시스템 사용자와 일반 사용자로 구분된다. 일반 사용자의 경우 데이터베이스에 접근하여 데이터를 조작하기 위해서는 적절한 권한이 필요하다.
사용자 권한에 대해서는 Administrator's Manual > 5장. 데이터베이스 객체 및 권한 > 권한과 롤절에서 자세히 설명한다.
작업(Job)#
작업(Job)은 저장 프로시저에 실행 일정을 더한 것이다. JOB 객체를 생성할 때 실행할 저장 프로시저와 실행 시각, 실행 반복 간격 등의 일정을 설정할 수 있다. 생성된 JOB이 자동으로 돌아가도록 하기 위해서는 JOB_SCHEDULER_ENABLE 프로퍼티를 1로 설정해야 한다. JOB의 생성, 변경 및 삭제와 작업 스케줄러에 대한 관리는 SYS 사용자에 의해서만 가능하다.
이에 대해서는 Administrator's Manual > 5장. 데이터베이스 객체 및 권한 > 작업(Job)절에서 자세히 설명한다.
권한#
사용자가 데이터베이스 객체 또는 데이터에 접근하기 위해서는 적절한 권한을 필요로 한다. 이 절에서는 사용자와 권한 및 객체와 권한에 대해 이를 관리하는 방법에 대해 설명한다.
권한 종류#
Altibase는 시스템 권한, 객체 권한 및 롤(role)을 지원한다.
시스템 권한(System Privilege)#
시스템 권한은 일반적으로 DBA가 관리를 하며, 데이터베이스에 특정한 작업을 수행하거나 모든 스키마에 있는 객체들을 관리할 수 있는 권한이다.
객체 권한(Object Privilege)#
객체 권한은 객체의 소유자가 관리를 하며, 객체에 접근하고 조작할 수 있는 권한이다. Altibase가 지원하는 전체 권한의 목록은 Administrator's Manual > 5장. 데이터베이스 객체 및 권한 > 권한과 롤을 참조하고, 관련된 자세한 설명은 SQL Reference을 참조한다.
롤(Role)#
롤은 권한들의 묶음이다. 여러 개의 권한을 사용자들에게 부여할 때 롤을 사용하는 것이 용이하다. 롤에 대한 자세한 설명과 제약에 대해서는 SQL Reference를 참조한다.
권한 부여#
데이터베이스 생성 이후 초기 상태에 존재하는 사용자인 SYSTEM_와 SYS 사용자의 경우 DBA로서 모든 권한을 갖고 있으며, 일반 사용자에게 임의의 권한을 부여할 수 있다.
일반 사용자의 경우 CREATE USER문 사용해 사용자가 생성될 때 CREATE SESSION, CREATE TABLE문 데이터베이스에 접근할 수 있는 최소 권한들을 시스템에 의해 자동으로 부여 받는다. 그 외의 권한들은 DBA로부터 명시적으로 권한을 부여 받아야 한다.
권한을 부여하고 관리하는 방법에 대한 자세한 내용은 Administrator's Manual > 5장. 데이터베이스 객체 및 권한 > 권한과 롤와 SQL Reference을 참조한다.
권한 해제#
SYSTEM_와 SYS 사용자를 제외한 일반 사용자의 경우 사용자에게 기 부여된 권한은 REVOKE문을 사용해 명시적으로 해제할 수 있다.
CREATE USER문으로 사용자 생성 시 시스템에 의해 자동으로 부여된 권한들도 필요한 경우 해제할 수 있다.
그러나 SYSTEM_와 SYS 사용자의 권한은 해제할 수 없다.