사전 테이블(Dictionary Tables)과 뷰(Views) 소개
Oracle 데이터베이스의 사전(Dictionary)은 데이터베이스 자체에 대한 메타데이터를 저장하는 핵심적인 부분입니다. 이러한 사전은 테이블과 뷰 형태로 제공되며, 데이터베이스 관리자(DBA)와 개발자가 데이터베이스의 구조, 객체, 설정 등을 이해하고 관리하는 데 필수적인 정보를 제공합니다.
사전 테이블과 뷰의 중요성
- 데이터베이스 구조 이해: 데이터베이스 내의 모든 테이블, 인덱스, 사용자, 권한 등의 정보를 제공하여 전체적인 구조를 파악하는 데 도움을 줍니다.
- 객체 관리: 테이블, 뷰, 프로시저 등 다양한 데이터베이스 객체의 속성, 상태, 의존성 등을 확인하고 관리할 수 있습니다.
- 성능 튜닝: 성능 관련 통계 정보를 제공하여 병목 현상을 진단하고 성능 개선을 위한 튜닝 작업을 수행할 수 있도록 지원합니다.
- 보안 관리: 사용자 권한, 감사 설정 등 보안 관련 정보를 제공하여 데이터베이스 보안 정책을 수립하고 관리하는 데 활용됩니다.
주요 사전 테이블 및 뷰
DBA_TABLES
DBA_TABLES
는 데이터베이스 내의 모든 테이블에 대한 정보를 제공합니다. 테이블 이름, 소유자, 테이블스페이스, 로우 수 등 기본적인 테이블 속성을 확인할 수 있습니다.
SELECT owner, table_name, tablespace_name, num_rows
FROM dba_tables
WHERE owner = 'HR';
실행 결과 예시:
OWNER | TABLE_NAME | TABLESPACE_NAME | NUM_ROWS ------|------------|-----------------|---------- HR | EMPLOYEES | USERS | 107 HR | DEPARTMENTS| USERS | 27 ...
DBA_INDEXES
DBA_INDEXES
는 데이터베이스 내의 모든 인덱스에 대한 정보를 제공합니다. 인덱스 이름, 테이블 이름, 인덱스 유형 등을 통해 인덱스 상태를 모니터링하고 성능 문제를 진단할 수 있습니다.
SELECT index_name, table_name, index_type, uniqueness
FROM dba_indexes
WHERE table_owner = 'HR';
실행 결과 예시:
INDEX_NAME | TABLE_NAME | INDEX_TYPE | UNIQUENESS -----------|------------|------------|------------ EMP_EMAIL_UK| EMPLOYEES | NORMAL | UNIQUE DEPT_ID_PK | DEPARTMENTS| NORMAL | UNIQUE ...
DBA_USERS
DBA_USERS
는 데이터베이스에 등록된 모든 사용자에 대한 정보를 제공합니다. 사용자 이름, 계정 상태, 생성일 등을 확인할 수 있습니다.
SELECT username, account_status, created
FROM dba_users
WHERE username LIKE 'HR%';
실행 결과 예시:
USERNAME | ACCOUNT_STATUS | CREATED ----------|----------------|---------------- HR | OPEN | 20-NOV-23 ...
DBA_ROLES
DBA_ROLES
는 데이터베이스에 정의된 모든 롤에 대한 정보를 제공합니다. 롤 이름, 롤 ID 등을 통해 데이터베이스 권한 설정을 관리할 수 있습니다.
SELECT role, role_id
FROM dba_roles
WHERE role LIKE 'CONNECT%';
실행 결과 예시:
ROLE | ROLE_ID ---------|---------- CONNECT | 47 ...
DBA_SYS_PRIVS
DBA_SYS_PRIVS
는 사용자 또는 롤에 부여된 시스템 권한 정보를 제공합니다. 이를 통해 어떤 사용자 또는 롤이 어떤 시스템 권한을 가지고 있는지 확인할 수 있습니다.
SELECT grantee, privilege, admin_option
FROM dba_sys_privs
WHERE grantee = 'HR';
실행 결과 예시:
GRANTEE | PRIVILEGE | ADMIN_OPTION ---------|--------------|-------------- HR | CREATE TABLE | N ...
DBA_TAB_PRIVS
DBA_TAB_PRIVS
는 사용자 또는 롤에 부여된 객체 권한 정보를 제공합니다. 특정 테이블 또는 뷰에 대한 사용자 권한을 확인할 수 있습니다.
SELECT grantee, owner, table_name, privilege
FROM dba_tab_privs
WHERE grantee = 'PUBLIC'
AND table_name = 'EMPLOYEES';
실행 결과 예시:
GRANTEE| OWNER| TABLE_NAME| PRIVILEGE -------|------|-----------|---------- PUBLIC | HR| EMPLOYEES| SELECT
V$SQLAREA
V$SQLAREA
는 공유 SQL 영역에 캐시된 SQL 구문에 대한 성능 정보를 제공합니다. 실행 횟수, CPU 시간, 디스크 읽기 횟수 등을 통해 어떤 SQL 구문이 많은 자원을 소모하는지 확인할 수 있습니다.
SELECT sql_text, executions, cpu_time, disk_reads
FROM v$sqlarea
WHERE executions > 100
ORDER BY cpu_time DESC
FETCH FIRST 10 ROWS ONLY;
실행 결과 예시:
SQL_TEXT | EXECUTIONS| CPU_TIME| DISK_READS ----------------------------------------|-----------|---------|---------- SELECT * FROM employees WHERE ... | 500 | 0.5 | 1000 UPDATE departments SET ... | 200 | 0.2 | 500 ...
사전 테이블 및 뷰 활용 전략
- 정기적인 모니터링: 중요한 테이블 및 뷰의 상태를 정기적으로 모니터링하여 성능 저하 또는 보안 문제 발생 가능성을 사전에 감지합니다.
- 자동화된 스크립트 활용: 스크립트를 작성하여 데이터베이스 상태를 자동적으로 점검하고 리포트를 생성하도록 합니다.
- 커스터마이징: 필요에 따라 사용자 정의 뷰를 생성하여 특정 정보를 쉽게 확인할 수 있도록 합니다.
결론
Oracle 데이터베이스의 사전 테이블과 뷰는 데이터베이스 관리 및 개발에 있어서 필수적인 도구입니다. 이러한 사전 정보를 효과적으로 활용하면 데이터베이스의 효율적인 관리, 성능 개선, 보안 강화에 기여할 수 있습니다.