오라클 배치(Batch)는 대량의 데이터를 효율적으로 처리하거나 주기적인 작업을 자동으로 수행하기 위해 사용됩니다. 배치는 반복 작업의 성능을 최적화하고, 트랜잭션을 일괄적으로 처리하여 성능 및 리소스 관리를 개선하는 데 유용합니다. 이번 글에서는 오라클 배치 처리의 개념, 작성법, 다양한 예제와 함께 사용 시 유의점을 상세히 설명하겠습니다.
1. 오라클 배치 처리란?
배치 처리란 대량의 작업을 한 번에 묶어서 처리하는 방식으로, 데이터 삽입, 갱신, 삭제 등의 작업을 효율적으로 실행하는 방법입니다. 주로 데이터 웨어하우스, 대용량 데이터 처리, 데이터 마이그레이션, 백업 및 복구 작업에 사용됩니다.
1.1 배치 처리가 필요한 이유
- 대량 데이터 처리: 하나씩 처리하는 대신, 작업을 묶어서 실행함으로써 성능을 향상.
- 성능 최적화: 네트워크 및 디스크 I/O를 줄이고, 트랜잭션 관리를 단순화.
- 자동화 작업: 야간 배치 처리, 주기적 데이터 업데이트 등의 작업에 적합.
1.2 배치 처리의 주요 특징
- 일괄 실행: 대량 데이터를 한 번에 처리하여 네트워크 및 데이터베이스 작업을 줄임.
- 자동화: 사전에 설정된 작업을 스케줄러로 주기적으로 실행 가능.
- 트랜잭션 제어: 일괄 작업 전체를 하나의 트랜잭션으로 관리하거나, 일부 성공 시 커밋 가능.
2. 오라클 배치 처리의 구성 요소
오라클에서 배치 처리를 구현하려면 다음 요소를 활용합니다.
2.1 SQL*Plus 스크립트
SQL*Plus는 오라클의 기본 CLI 도구로, 스크립트를 실행하여 배치 작업을 처리합니다.
2.2 PL/SQL 블록
PL/SQL은 절차형 언어로 대량 데이터를 처리할 수 있는 루프 및 조건문을 제공합니다.
2.3 Oracle Scheduler
Oracle Scheduler를 사용하면 작업 스케줄링 및 관리가 가능합니다. 이는 DBMS_SCHEDULER 패키지를 통해 구현됩니다.
2.4 JDBC 배치 처리
Java 애플리케이션에서 JDBC를 활용하여 배치를 실행할 수 있습니다.
3. 배치 처리 작성법과 유형별 예제
3.1 SQL*Plus 스크립트를 활용한 배치 처리
예제: 테이블 데이터 백업
SET ECHO ON
SET FEEDBACK ON
SET SERVEROUTPUT ON
-- 기존 테이블 데이터 백업
BEGIN
EXECUTE IMMEDIATE 'CREATE TABLE employees_backup AS SELECT * FROM employees';
END;
/
설명
- SQL*Plus 스크립트를 작성하여 주기적으로 실행합니다.
- 스크립트를 운영체제 스케줄러(cron, Task Scheduler)와 결합하여 자동화할 수 있습니다.
3.2 PL/SQL 블록을 활용한 배치 처리
예제: 대량 데이터 삽입
DECLARE
v_counter NUMBER := 0;
BEGIN
FOR i IN 1..10000 LOOP
INSERT INTO employees (employee_id, first_name, last_name, salary)
VALUES (i, 'First' || i, 'Last' || i, 5000 + i);
v_counter := v_counter + 1;
-- 1000건마다 커밋
IF MOD(v_counter, 1000) = 0 THEN
COMMIT;
END IF;
END LOOP;
COMMIT; -- 최종 커밋
END;
/
설명
- 루프를 사용해 데이터를 반복적으로 삽입합니다.
MOD
를 활용하여 특정 횟수마다 커밋을 실행하여 메모리 부담을 줄입니다.
3.3 Oracle Scheduler를 활용한 배치 작업
예제: 주기적인 테이블 데이터 아카이빙
BEGIN
DBMS_SCHEDULER.CREATE_JOB(
job_name => 'archive_old_data',
job_type => 'PLSQL_BLOCK',
job_action => 'BEGIN DELETE FROM employees WHERE hire_date < ADD_MONTHS(SYSDATE, -12); COMMIT; END;',
start_date => SYSTIMESTAMP,
repeat_interval => 'FREQ=DAILY; BYHOUR=1; BYMINUTE=0; BYSECOND=0',
enabled => TRUE
);
END;
/
설명
- Oracle Scheduler를 사용해 매일 새벽 1시에 오래된 데이터를 삭제.
DBMS_SCHEDULER.CREATE_JOB
으로 작업 스케줄을 설정.
3.4 JDBC를 활용한 배치 처리 (Java)
예제: 대량 데이터 삽입
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class OracleBatchExample {
public static void main(String[] args) {
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user = "hr";
String password = "password";
try (Connection conn = DriverManager.getConnection(url, user, password)) {
conn.setAutoCommit(false);
String sql = "INSERT INTO employees (employee_id, first_name, last_name, salary) VALUES (?, ?, ?, ?)";
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
for (int i = 1; i <= 10000; i++) {
pstmt.setInt(1, i);
pstmt.setString(2, "First" + i);
pstmt.setString(3, "Last" + i);
pstmt.setDouble(4, 5000 + i);
pstmt.addBatch();
if (i % 1000 == 0) {
pstmt.executeBatch();
conn.commit();
}
}
pstmt.executeBatch(); // 남은 배치 실행
conn.commit();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
설명
- JDBC의
addBatch
와executeBatch
를 사용해 일괄 삽입 처리. - 1,000건마다
commit
을 실행하여 메모리 사용량을 최적화.
3.5 대량 데이터 처리 최적화: BULK COLLECT와 FORALL
예제: BULK COLLECT와 FORALL 사용
DECLARE
TYPE emp_tab IS TABLE OF employees%ROWTYPE;
v_employees emp_tab;
BEGIN
SELECT * BULK COLLECT INTO v_employees
FROM employees
WHERE department_id = 10;
FORALL i IN v_employees.FIRST .. v_employees.LAST
INSERT INTO employees_backup VALUES v_employees(i);
COMMIT;
END;
/
설명
BULK COLLECT
: 데이터를 메모리에 한꺼번에 로드하여 처리 속도 향상.FORALL
: 반복 작업을 최적화하여 실행 속도 개선.
4. 배치 처리 시 유의사항
트랜잭션 관리
- 대량 데이터를 처리할 때 트랜잭션 크기를 적절히 설정하여 메모리 오버헤드를 방지합니다.
- 너무 큰 트랜잭션은 데이터베이스의 성능에 부정적 영향을 미칠 수 있습니다.
성능 최적화
- 인덱스 및 파티션을 활용하여 성능을 개선합니다.
- 가능한 경우
DIRECT PATH INSERT
를 사용해 성능을 극대화합니다.
오류 처리
- 배치 처리 중 발생한 오류를 로그에 기록하고, 작업을 재시도할 수 있는 메커니즘을 구현합니다.
- 트리거 또는 제약 조건으로 인해 오류가 발생하지 않도록 데이터 유효성을 사전에 검증합니다.
병렬 처리
DBMS_PARALLEL_EXECUTE
를 사용하여 대량 작업을 병렬로 나누어 처리합니다.
5. 결론
오라클 배치 처리는 대량 데이터 작업에서 필수적인 기술이며, 효율적인 처리 방법과 자동화를 통해 데이터베이스 성능을 향상할 수 있습니다. 이 글에서 설명한 SQL*Plus, PL/SQL 블록, Scheduler, JDBC, BULK COLLECT 등 다양한 방법을 활용하여 자신만의 배치 처리를 설계해 보세요.
위 내용을 참고하여 블로그에 작성하면, 오라클 배치 처리에 대한 완성도 높은 자료가 될 것입니다!
'개발 > 오라클' 카테고리의 다른 글
오라클 SQL 실행 계획 최적화 - 성능 향상을 위한 실전 가이드 (0) | 2025.02.03 |
---|---|
오라클에서 조인의 종류와 활용법: 자세한 가이드 (0) | 2025.01.23 |
오라클 트리거의 작성법과 다양한 유형의 예제 (0) | 2025.01.17 |
오라클 VIEW 작성법과 다양한 유형의 예제 (0) | 2025.01.17 |
오라클 패키지 작성법과 다양한 유형의 예제 (0) | 2025.01.17 |