IT study

[RDS for ORACLE] RMAN(Recovery Manager) 로 데이터베이스 백업 본문

DATABASE/Oracle

[RDS for ORACLE] RMAN(Recovery Manager) 로 데이터베이스 백업

DBnA 2025. 12. 23. 13:41

Amazon RDS ORACLE DB 인스턴스에서 Oracle RMAN(Recovery Manager) DBA 작업을 수행하는 방식을 알아보며
rdsadmin.rdsadmin_rman_util 패키지 사용하여 오라클 데이터베이스 백업을 진행 테스트를 진행

0. 테스트데이터 생성

CREATE TABLE xtmp_test (
    id          NUMBER PRIMARY KEY,
    name        VARCHAR2(100),
    created_at  DATE DEFAULT SYSDATE
);

BEGIN
  FOR i IN 1..100 LOOP
    INSERT INTO xtmp_test (id, name)
    VALUES (i, 'User_' || i);
  END LOOP;
  COMMIT;
END;
/

1. RMAN 백업 사전 요구 사항 확인

--마스터계정에서
GRANT SELECT ANY DICTIONARY TO testdb;

--archivelog 모드 확인
SELECT log_mode FROM v$database;

--redo log 보존 기간 확인 (0이상)
SELECT name, value
FROM v$parameter
WHERE name LIKE '%retention%';

--redo log 보존 기간 설정 (--admin계정에서 실행)

begin
    rdsadmin.rdsadmin_util.set_configuration(
        name  => 'archivelog retention hours',
        value => '24');
end;
/
commit;

2. 데이터베이스 검증
BEGIN
rdsadmin.rdsadmin_rman_util.validate_database;
END;

--충분한 저장공간 확보
--freestoragespace로 요유공간 모니터링


--전체 백업 수행
BEGIN
    rdsadmin.rdsadmin_rman_util.backup_database_full(
        p_owner               => 'SYS', 
        p_directory_name      => 'DATA_PUMP_DIR',
        p_section_size_mb     => 1024,
        p_tag                 => 'FULL_DB_BACKUP',
        p_rman_to_dbms_output => FALSE);
END;

--증분 백업 수행
BEGIN
    rdsadmin.rdsadmin_rman_util.backup_database_incremental(
        p_owner               => 'SYS', 
        p_directory_name      => 'DATA_PUMP_DIR',
        p_level               => 1, 
        p_section_size_mb     => 1024,
        p_tag                 => 'MY_INCREMENTAL_BACKUP',
        p_rman_to_dbms_output => FALSE);
END;

--파일확인
 SELECT filename,type,filesize/1024/1024 size_megs,to_char(mtime,'DD-MON-YY HH24:MI:SS') timestamp
FROM TABLE(rdsadmin.rds_file_util.listdir(p_directory => upper('DATA_PUMP_DIR'))) order by 4;


--파일 삭제
BEGIN
  FOR rec IN (
    SELECT filename
    FROM TABLE(rdsadmin.rds_file_util.listdir(p_directory => upper('DATA_PUMP_DIR')))
    WHERE TYPE='file'  -- 필요한 경우 필터 조건
  ) LOOP
    BEGIN
      UTL_FILE.FREMOVE('DATA_PUMP_DIR', rec.filename);
      DBMS_OUTPUT.PUT_LINE('Deleted: ' || rec.filename);
    EXCEPTION
      WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('Failed to delete: ' || rec.filename || ' - ' || SQLERRM);
    END;
  END LOOP;
END;


 

참고 : https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/Appendix.Oracle.CommonDBATasks.RetainRedoLogs.html

 

https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/Appendix.Oracle.CommonDBATasks.RMAN-requirements.html