편집 요약 없음 |
편집 요약 없음 |
||
90번째 줄: | 90번째 줄: | ||
** 2. Shell Script: 디스크 공간을 모니터링하는 스크립트 작성 후 크론 잡 설정. | ** 2. Shell Script: 디스크 공간을 모니터링하는 스크립트 작성 후 크론 잡 설정. | ||
** 3. SQL 기반 경고: 주기적으로 디스크 남은 공간을 확인하는 SQL 작업을 스케줄러로 설정. | ** 3. SQL 기반 경고: 주기적으로 디스크 남은 공간을 확인하는 SQL 작업을 스케줄러로 설정. | ||
== Oracle에서 Java Stored Procedure로 확인 (DB 안에서 조회하고 싶을 때) == | |||
* Oracle에 Java를 이용한 함수를 등록해 OS의 디렉토리 용량을 조회할 수 있습니다. | |||
=== Java 소스 등록 === | |||
<source lang=sql> | |||
CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "DirSize" AS | |||
import java.io.*; | |||
public class DirSize { | |||
public static long getSize(String path) { | |||
File dir = new File(path); | |||
return getDirSize(dir); | |||
} | |||
private static long getDirSize(File dir) { | |||
long size = 0; | |||
if(dir.isDirectory()) { | |||
for(File f : dir.listFiles()) { | |||
if(f.isFile()) size += f.length(); | |||
else size += getDirSize(f); | |||
} | |||
} | |||
return size; | |||
} | |||
} | |||
/ | |||
</source> | |||
=== Java 함수 호출용 PL/SQL 함수 생성 === | |||
<source lang=sql> | |||
CREATE OR REPLACE FUNCTION get_dir_size(p_path VARCHAR2) | |||
RETURN NUMBER | |||
AS LANGUAGE JAVA | |||
NAME 'DirSize.getSize(java.lang.String) return long'; | |||
/ | |||
</source> | |||
* 실행 예제 | |||
<source lang=sql> | |||
SELECT get_dir_size('/u01/app/oracle/external_data')/1024/1024 AS size_mb FROM dual; | |||
</source> | |||
** 주의: Java 기능이 DB에서 비활성화된 경우 loadjava 권한이 필요하거나 JAVAVM 컴포넌트가 설치되어야 합니다. | |||
---- | |||
== 외부 테이블 + 스크립트로 수집 == | |||
* cron + shell script로 디렉터리 크기를 측정하여 Oracle 테이블에 기록하거나, 외부 테이블을 통해 조회할 수 있습니다. | |||
예) /home/oracle/dir_size.txt 생성 스크립트: | |||
=== 수집 쉘 스크립트 === | |||
<source lang=bash> | |||
#!/bin/bash | |||
du -s /u01/app/oracle/external_data | awk '{print $1}' > /home/oracle/dir_size.txt | |||
</source> | |||
=== Oracle 외부 테이블 === | |||
<source lang=sql> | |||
CREATE TABLE dir_size ( | |||
size_kb NUMBER | |||
) | |||
ORGANIZATION EXTERNAL ( | |||
TYPE ORACLE_LOADER | |||
DEFAULT DIRECTORY ext_dir | |||
ACCESS PARAMETERS ( | |||
RECORDS DELIMITED BY NEWLINE | |||
FIELDS TERMINATED BY WHITESPACE | |||
) | |||
LOCATION ('dir_size.txt') | |||
); | |||
</source> | |||
[[category:oracle]] |
2025년 4월 21일 (월) 13:06 판
- Oracle에서 아카이브 로그가 저장되는 디스크의 남은 공간을 확인하려면, 아카이브 로그의 저장 경로를 확인한 후 해당 경로의 디스크 사용량을 확인해야 합니다.
- 아래 절차를 따라 진행합니다.
아카이브 로그 저장 경로 확인
- 파라미터에서 아카이브 로그가 저장되는 경로를 확인
- LOG_ARCHIVE_DEST 또는 LOG_ARCHIVE_DEST_1 파라미터 값 조회
SHOW PARAMETER log_archive_dest; 또는 SELECT name, value FROM v$parameter WHERE name LIKE 'log_archive_dest%';
NAME VALUE -------------------------- ------------------------------ log_archive_dest_1 /u01/app/oracle/archivelog
디스크 남은 공간 확인 (OS 명령어 사용)
- 아카이브 로그 저장 경로가 확인되면, 디스크 사용량을 확인하기 위해 운영 체제 명령어를 사용합니다.
- Linux/Unix:
- 디스크 사용량과 남은 공간을 확인하려면 df 명령어를 사용합니다.
df -h /u01/app/oracle/archivelog
출력 예:
Filesystem Size Used Avail Use% Mounted on /dev/sda1 100G 60G 40G 60% /u01
• Size: 디스크의 전체 용량 • Used: 사용 중인 공간 • Avail: 남은 공간 • Use%: 사용 비율
- Windows:
Windows 환경에서는 dir 명령어를 사용해 특정 경로의 남은 공간을 확인할 수 있습니다.
dir /-c "C:\oracle\archivelog"
출력 예:
100,000,000,000 bytes total disk space. 40,000,000,000 bytes available.
SQL을 사용해 남은 디스크 공간 확인
- Oracle 내에서 PL/SQL로 디스크 남은 공간을 확인할 수도 있습니다.
- DBMS_SCHEDULER.FILE_WATCHER 또는 외부 OS 명령어 호출을 사용해 남은 디스크 공간을 읽어 올 수 있습니다.
PL/SQL을 통한 디스크 공간 조회 예제
DECLARE v_free_space NUMBER; BEGIN -- 사용 가능한 디스크 공간 조회 SELECT ROUND(SUM(bytes_free)/1024/1024, 2) AS free_space_mb INTO v_free_space FROM v$asm_diskgroup WHERE name = 'ARCHIVELOG'; -- 아카이브 디스크 그룹 이름 입력 DBMS_OUTPUT.PUT_LINE('Available Disk Space (MB): ' || v_free_space); END; /
- DBMS_SCHEDULER로 OS 명령 호출 예제
BEGIN DBMS_SCHEDULER.create_job( job_name => 'CHECK_DISK_SPACE', job_type => 'EXECUTABLE', job_action => '/bin/df -h /u01/app/oracle/archivelog', enabled => TRUE ); END; /
디스크 남은 용량 모니터링 및 알림 설정
- 운영 환경에서는 디스크가 가득 차기 전에 알림을 설정하는 것이 중요합니다.
- 이를 위해 다음 방법을 사용할 수 있습니다:
- 1.Oracle Enterprise Manager (OEM): 디스크 사용량 알림 설정.
- 2. Shell Script: 디스크 공간을 모니터링하는 스크립트 작성 후 크론 잡 설정.
- 3. SQL 기반 경고: 주기적으로 디스크 남은 공간을 확인하는 SQL 작업을 스케줄러로 설정.
Oracle에서 Java Stored Procedure로 확인 (DB 안에서 조회하고 싶을 때)
- Oracle에 Java를 이용한 함수를 등록해 OS의 디렉토리 용량을 조회할 수 있습니다.
Java 소스 등록
CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "DirSize" AS import java.io.*; public class DirSize { public static long getSize(String path) { File dir = new File(path); return getDirSize(dir); } private static long getDirSize(File dir) { long size = 0; if(dir.isDirectory()) { for(File f : dir.listFiles()) { if(f.isFile()) size += f.length(); else size += getDirSize(f); } } return size; } } /
Java 함수 호출용 PL/SQL 함수 생성
CREATE OR REPLACE FUNCTION get_dir_size(p_path VARCHAR2) RETURN NUMBER AS LANGUAGE JAVA NAME 'DirSize.getSize(java.lang.String) return long'; /
- 실행 예제
SELECT get_dir_size('/u01/app/oracle/external_data')/1024/1024 AS size_mb FROM dual;
- 주의: Java 기능이 DB에서 비활성화된 경우 loadjava 권한이 필요하거나 JAVAVM 컴포넌트가 설치되어야 합니다.
외부 테이블 + 스크립트로 수집
- cron + shell script로 디렉터리 크기를 측정하여 Oracle 테이블에 기록하거나, 외부 테이블을 통해 조회할 수 있습니다.
예) /home/oracle/dir_size.txt 생성 스크립트:
수집 쉘 스크립트
#!/bin/bash du -s /u01/app/oracle/external_data | awk '{print $1}' > /home/oracle/dir_size.txt
Oracle 외부 테이블
CREATE TABLE dir_size ( size_kb NUMBER ) ORGANIZATION EXTERNAL ( TYPE ORACLE_LOADER DEFAULT DIRECTORY ext_dir ACCESS PARAMETERS ( RECORDS DELIMITED BY NEWLINE FIELDS TERMINATED BY WHITESPACE ) LOCATION ('dir_size.txt') );