오라클 데이터베이스 내의 다양한 메타데이터 정보를 추출하여 테이블별 행 수, 열 수, 스토어 프로시저 수 등을 리포트하는 방법을 설명하겠습니다. 오라클은 이러한 정보를 시스템 뷰(예: ALL_TABLES, ALL_TAB_COLUMNS, ALL_PROCEDURES 등)에서 제공하므로, 이를 쿼리하여 필요한 정보를 추출할 수 있습니다.
1. 테이블 수, 테이블별 행 수, 열 수
테이블과 관련된 정보는 ALL_TABLES와 ALL_TAB_COLUMNS 시스템 뷰에서 얻을 수 있습니다.
a. 테이블 수
오라클 데이터베이스 내의 전체 테이블 수를 확인하려면 ALL_TABLES 뷰를 사용합니다.
SELECT COUNT(*) AS table_count
FROM all_tables;
b. 각 테이블별 행 수
각 테이블의 행 수는 ALL_TABLES와 DBMS_STATS 패키지를 사용하여 조회할 수 있습니다. 예를 들어:
SELECT table_name, num_rows
FROM all_tables
WHERE owner = 'SCHEMA_NAME'; -- 원하는 스키마 이름으로 필터링
num_rows 컬럼은 ANALYZE 또는 DBMS_STATS.GATHER_TABLE_STATS 등의 통계를 통해 업데이트되어야 합니다. num_rows 값이 정확하지 않다면, 통계를 갱신하는 것이 필요합니다.
EXEC DBMS_STATS.GATHER_SCHEMA_STATS('SCHEMA_NAME');
c. 각 테이블별 열 수 (컬럼 수)
테이블마다 컬럼 수를 조회하려면 ALL_TAB_COLUMNS 뷰를 사용합니다.
SELECT table_name, COUNT(*) AS column_count
FROM all_tab_columns
WHERE owner = 'SCHEMA_NAME'
GROUP BY table_name;
2. 스토어 프로시저 및 함수 수
오라클 데이터베이스 내의 스토어 프로시저와 함수는 ALL_PROCEDURES 뷰에서 조회할 수 있습니다.
a. 스토어 프로시저 수
스토어 프로시저의 수를 확인하려면 ALL_PROCEDURES 뷰에서 object_type이 PROCEDURE인 항목을 필터링합니다.
SELECT COUNT(*) AS procedure_count
FROM all_procedures
WHERE object_type = 'PROCEDURE'
AND owner = 'SCHEMA_NAME'; -- 원하는 스키마 이름으로 필터링
b. 함수 수
함수는 ALL_PROCEDURES에서 object_type이 FUNCTION인 항목을 필터링하여 확인할 수 있습니다.
SELECT COUNT(*) AS function_count
FROM all_procedures
WHERE object_type = 'FUNCTION'
AND owner = 'SCHEMA_NAME';
3. 트리거, 뷰 등 다른 객체들
다른 데이터베이스 객체들(뷰, 트리거 등)의 수를 확인하려면 ALL_VIEWS, ALL_TRIGGERS 등의 뷰를 사용할 수 있습니다.
a. 뷰 수
SELECT COUNT(*) AS view_count
FROM all_views
WHERE owner = 'SCHEMA_NAME';
b. 트리거 수
SELECT COUNT(*) AS trigger_count
FROM all_triggers
WHERE owner = 'SCHEMA_NAME';
4. 전체 리포트 쿼리 예시
모든 정보를 한 번에 조회하려면 여러 쿼리를 조합할 수 있습니다. 예시로 아래와 같은 리포트를 작성할 수 있습니다.
SELECT
(SELECT COUNT(*) FROM all_tables WHERE owner = 'SCHEMA_NAME') AS table_count,
(SELECT SUM(num_rows) FROM all_tables WHERE owner = 'SCHEMA_NAME') AS total_rows,
(SELECT COUNT(DISTINCT table_name) FROM all_tab_columns WHERE owner = 'SCHEMA_NAME') AS total_columns,
(SELECT COUNT(*) FROM all_procedures WHERE object_type = 'PROCEDURE' AND owner = 'SCHEMA_NAME') AS procedure_count,
(SELECT COUNT(*) FROM all_procedures WHERE object_type = 'FUNCTION' AND owner = 'SCHEMA_NAME') AS function_count,
(SELECT COUNT(*) FROM all_views WHERE owner = 'SCHEMA_NAME') AS view_count,
(SELECT COUNT(*) FROM all_triggers WHERE owner = 'SCHEMA_NAME') AS trigger_count
FROM dual;
5. 스키마 및 테이블별로 더욱 세부적인 리포트 작성
더욱 세부적인 리포트를 원한다면, ALL_TABLES, ALL_TAB_COLUMNS, ALL_PROCEDURES 등에서 각 테이블별, 컬럼별 통계 및 프로시저 정보를 상세히 조회할 수 있습니다. 예를 들어, 테이블별 열 수와 행 수를 함께 조회하려면 아래와 같은 쿼리를 사용할 수 있습니다.
SELECT
t.table_name,
COUNT(c.column_name) AS column_count,
t.num_rows
FROM all_tables t
JOIN all_tab_columns c
ON t.table_name = c.table_name
WHERE t.owner = 'SCHEMA_NAME'
GROUP BY t.table_name, t.num_rows
ORDER BY t.table_name;
이렇게 하면 테이블별로 열 수와 행 수를 함께 확인할 수 있습니다.
6. 전체 리포트 실행 결과 예시
위 쿼리를 실행하면 다음과 같은 형식의 리포트를 얻을 수 있습니다.
테이블 수 전체 행 수 전체 열 수 스토어 프로시저 수 함수 수 뷰 수 트리거 수
테이블 수 | 전체 행 수 | 전체 열 수 | 스토어 프로시저 수 | 함수 수 | 뷰 수 | 트리거 수 |
50 | 10,000 | 250 | 10 | 5 | 20 | 8 |
위와 같은 방법으로 오라클 데이터베이스 내 테이블, 스토어 프로시저, 함수 등의 정보를 손쉽게 리포트 형태로 추출할 수 있습니다.
오라클 데이터베이스의 중요한 메타데이터 및 통계 정보를 추가로 확인하고 싶다면, 다음과 같은 항목들도 유용할 수 있습니다. 이들 정보는 데이터베이스의 성능, 보안, 유지관리 등에 중요한 영향을 미칠 수 있습니다.
1. 인덱스 정보
인덱스는 데이터베이스 성능에 중요한 역할을 합니다. 인덱스가 잘 설계되어 있지 않으면 쿼리 성능에 큰 영향을 줄 수 있습니다.
a. 인덱스 수 및 세부 정보
각 테이블에 대한 인덱스 수 및 세부 정보를 확인하는 것이 중요합니다.
SELECT table_name, COUNT(*) AS index_count
FROM all_indexes
WHERE owner = 'SCHEMA_NAME'
GROUP BY table_name
ORDER BY index_count DESC;
b. 인덱스 크기
인덱스의 크기는 성능에 큰 영향을 미칩니다. 큰 인덱스는 성능을 저하시킬 수 있으므로 인덱스 크기 또한 확인해야 합니다.
SELECT index_name, SUM(bytes) / 1024 / 1024 AS index_size_mb
FROM all_indexes
JOIN all_segments ON all_indexes.index_name = all_segments.segment_name
WHERE owner = 'SCHEMA_NAME'
GROUP BY index_name;
2. 테이블 및 인덱스에 대한 공간 사용
테이블과 인덱스가 사용하는 디스크 공간을 파악하는 것은 매우 중요합니다. 불필요한 공간이 낭비되는 것을 막기 위해서는 이 정보를 확인하고 정기적으로 관리해야 합니다.
a. 테이블 및 인덱스 크기
테이블과 인덱스가 사용하는 공간을 확인하려면 DBA_SEGMENTS 뷰를 사용할 수 있습니다.
SELECT segment_name, segment_type, ROUND(SUM(bytes) / 1024 / 1024, 2) AS size_mb
FROM dba_segments
WHERE owner = 'SCHEMA_NAME'
GROUP BY segment_name, segment_type
ORDER BY size_mb DESC;
3. 오라클 사용자 권한 정보
사용자 권한 관리와 보안은 데이터베이스 관리에서 중요한 부분입니다. 사용자별 권한을 확인하고 불필요한 권한을 제거하는 것이 좋습니다.
a. 사용자 권한
각 사용자에 대해 부여된 권한을 확인하려면 DBA_TAB_PRIVS 및 DBA_ROLE_PRIVS 뷰를 사용할 수 있습니다.
-- 테이블 권한
SELECT grantee, table_name, privilege
FROM dba_tab_privs
WHERE owner = 'SCHEMA_NAME';
-- 역할 권한
SELECT grantee, granted_role
FROM dba_role_privs
WHERE grantee IN (SELECT username FROM dba_users WHERE default_tablespace = 'SCHEMA_NAME');
4. 데이터베이스 객체 의존성 정보
테이블, 뷰, 프로시저 등 다양한 객체들 간의 의존성을 파악하는 것이 중요합니다. 이를 통해 객체 간의 관계를 이해하고 관리할 수 있습니다.
a. 뷰가 의존하는 테이블
뷰가 의존하는 테이블을 파악하는 것이 필요할 수 있습니다. DBA_DEPENDENCIES 뷰를 사용하여 이를 확인할 수 있습니다.
SELECT name, type, referenced_name, referenced_type
FROM dba_dependencies
WHERE owner = 'SCHEMA_NAME'
AND type = 'VIEW';
b. 프로시저/함수가 의존하는 테이블
프로시저나 함수가 사용하는 테이블을 확인하려면 다음과 같이 조회할 수 있습니다.
SELECT name, type, referenced_name, referenced_type
FROM dba_dependencies
WHERE owner = 'SCHEMA_NAME'
AND type IN ('PROCEDURE', 'FUNCTION');
5. 트랜잭션 및 롤백 세그먼트
트랜잭션 관련 정보는 성능과 데이터 일관성에 중요한 영향을 미칩니다. 롤백 세그먼트 및 현재 실행 중인 트랜잭션을 확인하는 것도 중요합니다.
a. 현재 트랜잭션 상태
현재 진행 중인 트랜잭션을 확인하려면 V$TRANSACTION 뷰를 사용할 수 있습니다.
SELECT * FROM v$transaction;
b. 롤백 세그먼트 상태
롤백 세그먼트의 상태를 확인하여 성능 저하를 방지할 수 있습니다.
SELECT segment_name, tablespace_name, status
FROM dba_rollback_segs;
6. 오라클 시스템 리소스 및 성능 지표
데이터베이스 성능을 최적화하려면 시스템 자원 사용 현황 및 성능 지표를 주기적으로 확인하는 것이 중요합니다.
a. CPU 및 메모리 사용
현재 데이터베이스가 사용하는 CPU 및 메모리 정보를 확인하려면 V$OSSTAT 뷰를 사용할 수 있습니다.
SELECT stat_name, value
FROM v$osstat
WHERE stat_name IN ('NUM_CPU_CORES', 'NUM_CPU_SOCKETS', 'MEMORY_SIZE');
b. 세션 정보 및 대기 이벤트
현재 연결된 세션 및 대기 이벤트를 확인하면 성능 문제를 진단하는 데 유용합니다.
-- 세션 정보
SELECT sid, serial#, username, status, osuser, machine, program
FROM v$session
WHERE username IS NOT NULL;
-- 대기 이벤트
SELECT event, total_waits, time_waited
FROM v$session_wait
WHERE sid = <your_sid>;
7. 오라클 파라미터 설정
오라클 데이터베이스의 파라미터 설정은 성능과 안정성에 중요한 영향을 미칩니다. V$PARAMETER 뷰를 사용하여 데이터베이스 파라미터 값을 확인할 수 있습니다.
SELECT name, value
FROM v$parameter
WHERE name LIKE '%memory%' OR name LIKE '%buffer%';
8. 로그 및 경고 메시지
경고 로그 및 기타 시스템 로그 파일을 통해 데이터베이스의 상태를 파악할 수 있습니다. 로그 파일에 중요한 오류나 경고가 기록되어 있을 수 있기 때문에 주기적으로 확인하는 것이 좋습니다.
a. 경고 로그 메시지 확인
오라클의 alert.log 파일을 통해 경고 메시지를 확인할 수 있습니다. 파일 위치는 alert.log의 경로를 확인해야 합니다.
tail -f $ORACLE_BASE/diag/rdbms/<db_name>/<sid>/trace/alert_<sid>.log
9. 백업 및 복구 상태
백업은 데이터베이스 보호 및 복구 전략의 핵심입니다. 오라클에서는 RMAN을 통해 백업 상태를 확인할 수 있습니다.
a. 백업 상태 확인
RMAN을 통해 백업 상태를 확인할 수 있습니다.
RMAN> LIST BACKUP;
이 외에도 오라클 데이터베이스는 다양한 메타데이터 정보를 제공하며, 이를 통해 데이터베이스 상태, 성능, 보안 등을 관리할 수 있습니다. 데이터베이스의 효율적인 운영을 위해 이러한 정보들을 주기적으로 모니터링하고 점검하는 것이 중요합니다.
오라클 데이터베이스는 방대한 양의 데이터를 효율적으로 관리하고 분석하기 위한 강력한 도구입니다. 데이터베이스의 성능을 최적화하고 안정적인 운영을 위해서는 정확한 데이터에 대한 깊이 있는 이해가 필수적입니다. 이를 위해 오라클은 다양한 메타데이터를 제공하며, 이를 활용하여 데이터베이스의 구조, 상태, 성능 등을 파악하고 관리할 수 있습니다.
메타데이터란 데이터에 대한 데이터를 의미하며, 데이터베이스 객체(테이블, 뷰, 인덱스 등)에 대한 정보를 담고 있습니다. 오라클은 ALL_TABLES, ALL_TAB_COLUMNS, ALL_PROCEDURES 등과 같은 시스템 뷰를 제공하여 이러한 메타데이터에 쉽게 접근할 수 있도록 합니다.
메타데이터를 활용한 데이터베이스 관리
- 객체 수량 및 크기 파악: 테이블, 스토어 프로시저, 함수, 뷰 등 다양한 객체의 수를 파악하고, 각 객체가 차지하는 공간을 확인하여 데이터베이스의 전체적인 크기를 가늠할 수 있습니다.
- 객체 간 의존성 분석: 객체 간의 의존 관계를 분석하여 객체 변경 시 발생할 수 있는 영향을 예측하고, 데이터베이스 설계를 개선할 수 있습니다.
- 성능 문제 진단: 느린 쿼리, 높은 CPU 사용률 등 성능 문제 발생 시, 메타데이터를 분석하여 문제의 원인을 파악하고 해결 방안을 모색할 수 있습니다.
- 데이터베이스 최적화: 인덱스 활용도, 테이블 분할, 파티셔닝 등 다양한 최적화 기법을 적용하여 데이터베이스 성능을 향상시킬 수 있습니다.
- 보안 관리: 사용자 권한, 객체 접근 권한 등을 관리하여 데이터베이스 보안을 강화할 수 있습니다.
- 백업 및 복구 관리: 백업 및 복구 작업의 효율성을 높이고 데이터 손실 위험을 줄일 수 있습니다.
메타데이터 활용 예시
- 테이블별 행 수, 열 수 확인: 테이블의 크기와 구조를 파악하여 데이터베이스 설계를 개선하고, 필요한 경우 테이블 분할 등을 고려할 수 있습니다.
- 인덱스 활용도 분석: 인덱스가 쿼리 성능에 미치는 영향을 분석하여 불필요한 인덱스를 제거하고, 새로운 인덱스를 생성하여 쿼리 성능을 향상시킬 수 있습니다.
- 스토어 프로시저 성능 분석: 스토어 프로시저의 실행 시간, 자원 사용량 등을 분석하여 성능 병목 현상을 찾아내고, 프로시저를 최적화할 수 있습니다.
- 데이터베이스 공간 사용량 분석: 테이블, 인덱스, 롤백 세그먼트 등이 사용하는 공간을 분석하여 저장 공간을 효율적으로 관리하고, 필요에 따라 테이블스페이스를 확장하거나 축소할 수 있습니다.
- 데이터베이스 백업 및 복구: 백업 로그를 분석하여 백업의 완전성을 확인하고, 필요한 경우 복구 작업을 수행할 수 있습니다.
메타데이터 활용 시 주의사항
- 메타데이터는 실시간 정보가 아닐 수 있습니다. 특히 통계 정보는 정기적으로 갱신해야 정확한 값을 얻을 수 있습니다.
- 메타데이터 해석에 대한 이해가 필요합니다. 메타데이터를 정확하게 해석하고 활용하기 위해서는 오라클 데이터베이스의 구조와 동작 원리를 충분히 이해해야 합니다.
- 복잡한 쿼리 작성 능력이 요구됩니다. 다양한 메타데이터를 조합하여 원하는 정보를 추출하기 위해서는 복잡한 SQL 쿼리를 작성할 수 있어야 합니다.
'Oracle Database 강좌' 카테고리의 다른 글
Oracle 외래 키 제약 조건 무시 및 데이터 대량삽입 (1) | 2024.12.08 |
---|---|
오라클 프로시저에서 사용되는 테이블 추적하기 (0) | 2024.12.08 |
Oracle 데이터를 PostgreSQL로 손쉽게 마이그레이션하는 ora2pg: 상세 가이드 (0) | 2024.12.02 |
Oracle에서 JSON 형태로 데이터 생성하기 (1) | 2024.11.30 |
Oracle의 DBMS_SQL 또는 V$SQL 뷰를 사용해 런타임에 실제 실행된 SQL을 추적하는 방법 (0) | 2024.11.28 |