oracle CDB, PDB 백업 받을 당시의 주의점

19c CDB 환경에서 RMAN 백업 스크립트 짜다가 아카이브로그 백업만 계속 안 돼서 한참 삽질함. 원인은 환경변수 하나였음. 겸사겸사 CDB/PDB 백업할 때 주의할 점 같이 정리해 둠.

1. 백업은 CDB$ROOT에서

  • 아카이브로그, 컨트롤파일, SPFILE은 CDB 레벨 자원 → root에서만 백업 가능
  • PDB에 붙은 RMAN으로는 그 PDB 데이터파일만 다룰 수 있음
  • 정기 백업은 무조건 root 접속 기준으로 짜는 게 맞음

2. ORACLE_PDB_SID 환경변수 (직접 겪은 거)

  • 증상
    • rman target / 접속은 정상
    • 근데 LIST ARCHIVELOG ALL 결과가 비어 있고 BACKUP ARCHIVELOG ALL도 안 됨
    • 아카이브로그는 분명히 쌓이고 있는 상태
  • 원인 : oracle 계정 프로파일에 ORACLE_PDB_SID가 들어가 있었음
$ env | grep ORACLE
ORACLE_SID=ORCLCDB
ORACLE_PDB_SID=PDB1
  • 18c부터 먹히는 비공식(undocumented) 환경변수
  • 로컬 접속하면 해당 PDB로 자동 전환해 줌
  • sqlplus 편하게 쓰려고 넣어둔 건데 rman target /도 같이 PDB로 붙어버림

3. PDB에서 BACKUP DATABASE 돌리면 일부만 백업됨

  • 에러 없이 정상 종료됨
  • 근데 실제로는 그 PDB 하나만 백업됨 (root, seed, 다른 PDB, 아카이브로그 다 빠짐)
  • 복구할 때 가서야 알게 되는 케이스라 제일 위험함

4. 그 외

  • 새로 만든 PDB는 바로 백업 한 번 받아두기
  • 특정 PDB만 받을 때도 root에서 BACKUP PLUGGABLE DATABASE PDB1 식으로

5. 확인해 볼 곳

  • 환경변수 : env | grep ORACLE
  • 프로파일 : ~/.bash_profile, ~/.bashrc, /etc/profile.d/ 쪽
  • 접속 컨테이너 : SQL*Plus는 show con_name, RMAN은 SELECT sys_context('userenv','con_name') FROM dual;
  • 백업 범위 : REPORT SCHEMA, LIST BACKUP SUMMARY로 데이터파일 수 비교
  • cron이나 백업 SW에서 도는 스크립트는 환경변수 상속이 달라서 수동이랑 결과가 다를 수 있음 → 스크립트 안에 unset ORACLE_PDB_SID 넣어두는 거 추천

결론 : CDB 환경에서 RMAN이 이상하면 지금 어느 컨테이너에 붙어 있는지부터 확인하기.