메뉴 여닫기
개인 메뉴 토글
로그인하지 않음
만약 지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

아카이브로그 디스크 사용량 조회: 두 판 사이의 차이

DB STUDY
(새 문서: * Oracle에서 아카이브 로그가 저장되는 디스크의 남은 공간을 확인하려면, 아카이브 로그의 저장 경로를 확인한 후 해당 경로의 디스크 사용량을 확인해야 합니다. * 아래 절차를 따라 진행합니다. == 아카이브 로그 저장 경로 확인 == * 파라미터에서 아카이브 로그가 저장되는 경로를 확인 *: LOG_ARCHIVE_DEST 또는 LOG_ARCHIVE_DEST_1 파라미터 값 조회 <source lang=sql> SHOW PARAMET...)
 
 
(사용자 2명의 중간 판 2개는 보이지 않습니다)
21번째 줄: 21번째 줄:
</source>
</source>


2. 디스크 남은 공간 확인 (OS 명령어 사용)
== 디스크 남은 공간 확인 (OS 명령어 사용) ==
 
* 아카이브 로그 저장 경로가 확인되면, 디스크 사용량을 확인하기 위해 운영 체제 명령어를 사용합니다.
아카이브 로그 저장 경로가 확인되면, 디스크 사용량을 확인하기 위해 운영 체제 명령어를 사용합니다.
 
Linux/Unix:
 
디스크 사용량과 남은 공간을 확인하려면 df 명령어를 사용합니다.


=== Linux/Unix ===
* 디스크 사용량과 남은 공간을 확인하려면 df 명령어를 사용합니다.
<source lang=bash>
df -h /u01/app/oracle/archivelog
df -h /u01/app/oracle/archivelog
</source>


출력 예:
* 출력 예:
 
<source lang=bash>
Filesystem      Size  Used Avail Use% Mounted on
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1      100G  60G  40G  60% /u01
/dev/sda1      100G  60G  40G  60% /u01
• Size: 디스크의 전체 용량
• Size: 디스크의 전체 용량
• Used: 사용 중인 공간
• Used: 사용 중인 공간
• Avail: 남은 공간
• Avail: 남은 공간
• Use%: 사용 비율
• Use%: 사용 비율
</source>


Windows:
=== Windows ===
 
* Windows 환경에서는 dir 명령어를 사용해 특정 경로의 남은 공간을 확인할 수 있습니다.
Windows 환경에서는 dir 명령어를 사용해 특정 경로의 남은 공간을 확인할 수 있습니다.
<source lang=bash>
 
dir /-c "C:\oracle\archivelog"
dir /-c "C:\oracle\archivelog"
</source>


출력 예:
* 출력 예:
 
<source lang=bash>
   100,000,000,000 bytes total disk space.
   100,000,000,000 bytes total disk space.
   40,000,000,000 bytes available.
   40,000,000,000 bytes available.
</source>


3. SQL을 사용해 남은 디스크 공간 확인
== SQL을 사용해 남은 디스크 공간 확인 ==


Oracle 내에서 PL/SQL로 디스크 남은 공간을 확인할 수도 있습니다. DBMS_SCHEDULER.FILE_WATCHER 또는 외부 OS 명령어 호출을 사용해 남은 디스크 공간을 읽어 올 수 있습니다.
* Oracle 내에서 PL/SQL로 디스크 남은 공간을 확인할 수도 있습니다.  
 
* DBMS_SCHEDULER.FILE_WATCHER 또는 외부 OS 명령어 호출을 사용해 남은 디스크 공간을 읽어 올 수 있습니다.
PL/SQL을 통한 디스크 공간 조회 예제


=== PL/SQL을 통한 디스크 공간 조회 예제 ===
<source lang=sql>
DECLARE
DECLARE
   v_free_space NUMBER;
   v_free_space NUMBER;
70번째 줄: 71번째 줄:
END;
END;
/
/
</source>


DBMS_SCHEDULER로 OS 명령 호출 예제
* DBMS_SCHEDULER로 OS 명령 호출 예제
 
<source lang=sql>
BEGIN
BEGIN
   DBMS_SCHEDULER.create_job(
   DBMS_SCHEDULER.create_job(
82번째 줄: 84번째 줄:
END;
END;
/
/
</source>
== 디스크 남은 용량 모니터링 및 알림 설정 ==
* 운영 환경에서는 디스크가 가득 차기 전에 알림을 설정하는 것이 중요합니다.
* 이를 위해 다음 방법을 사용할 수 있습니다:
** 1.Oracle Enterprise Manager (OEM): 디스크 사용량 알림 설정.
** 2. Shell Script: 디스크 공간을 모니터링하는 스크립트 작성 후 크론 잡 설정.
** 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>


4. 디스크 남은 용량 모니터링 및 알림 설정


운영 환경에서는 디스크가 가득 차기 전에 알림을 설정하는 것이 중요합니다. 이를 위해 다음 방법을 사용할 수 있습니다:
[[category:oracle]]
1. Oracle Enterprise Manager (OEM): 디스크 사용량 알림 설정.
2. Shell Script: 디스크 공간을 모니터링하는 스크립트 작성 후 크론 잡 설정.
3. SQL 기반 경고: 주기적으로 디스크 남은 공간을 확인하는 SQL 작업을 스케줄러로 설정.

2025년 4월 21일 (월) 13:08 기준 최신판

  • 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')
);