Oracle 스냅샷 대기 테스트 권장 사항

Oracle 스냅샷 대기 데이터베이스는 Oracle의 Data Guard 소프트웨어 기능 중 하나로, 물리적 대기 데이터베이스를 일시적으로 스냅샷 대기 데이터베이스로 전환하여 읽기-쓰기 작업을 수행할 수 있게 해줍니다. 위험 부담 없는 테스트에 적합하며, 모든 변경 사항을 삭제하고 다시 재개 데이터 적용을 재개하면서 물리적 대기 데이터베이스로 되돌릴 수 있습니다.

download-icon
무료 다운로드
for VM, OS, DB, File, NAS, etc.
daniel-kim

업데이트 김대니얼 현재 2025/08/18

목차
  • Oracle 스냅샷 대기 데이터베이스란 무엇인가요?

  • Oracle 스냅샷 대기 테스트 모범 사례

  • 프로페셔널한 솔루션으로 Oracle 데이터베이스 보호하기

  • 결론


Oracle 스냅샷 대기 데이터베이스란 무엇인가요?


Oracle 11g의 Data Guard는 액티브 데이터 가드(Active Data Guard)를 통해 실시간 쿼리 기능이라는 뛰어난 기능뿐만 아니라 스냅샷 대기 데이터베이스(Snapshot Standby database) 기능이라는 또 하나의 편리한 기능도 제공합니다. 이 기능을 사용하면 대기 데이터베이스를 "읽기-쓰기(read-write)" 모드로 전환하여 운영용 주 데이터베이스에서 직접 테스트하기 곤란한 작업, 예를 들어 온라인 배포 시뮬레이션 등의 작업을 수행할 수 있는 테스트 환경으로 활용할 수 있습니다. 읽기-쓰기 상태에서 작업이 완료되면 스냅샷 대기 데이터베이스를 다시 일반 대기 데이터베이스 역할로 전환하여 주 데이터베이스와의 동기화를 재개할 수 있습니다. 스냅샷 대기 데이터베이스 상태에서는 주 데이터베이스의 로그를 수신할 수 있지만 해당 변경 사항을 대기 데이터베이스에 적용할 수는 없습니다.

Oracle 스냅샷 대기 테스트 모범 사례

1. Redo 적용 프로세스 중지

대기 데이터베이스가 현재 Redo 적용 절차를 진행 중인 경우 먼저 이를 종료해야 합니다.

sys@ora11gdg> alter database recover managed standby database cancel;
 
Database altered.

2. 대기 데이터베이스의 현재 상태를 점검하여 MOUNTED 상태인지 확인합니다.

sys@ora11gdg> select database_role,open_mode from v$database;
 
DATABASE_ROLE OPEN_MODE
 
PHYSICAL STANDBY MOUNTED

이 시점에서 대기 데이터베이스는 물리적 대기 역할을 하며 MOUNTED 모드에서 작동합니다.

3. 플래시백 복구 영역이 지정되었는지 확인

친절한 안내: 스냅샷 대기 데이터베이스 기능을 활성화하는 것은 기본 및 대기 데이터베이스 모두에서 플래시백 데이터베이스 기능을 활성화할 필요가 없습니다. 이는 플래시백 데이터베이스 기능이 활성화되었는지와는 별개로 동작합니다.

sys@ora11gdg> show parameter db_recovery_file_dest
 
NAME TYPE VALUE
 
db_recovery_file_dest string /u01/app/oracle/flash_recovery_area
db_recovery_file_dest_size big integer 3852M

기본 데이터베이스에서 플래시백 기능이 사용 중이 아닌지 확인하십시오.

sys@ora11g> select FLASHBACK_ON from v$database;
 
FLASHBACK_ON
NO

스탠바이 데이터베이스에서 플래시백 기능이 활성화되지 않았는지 확인하십시오.

6. 전환 프로세스 동안 로그 정보 분석

Oracle 11g용 주 데이터베이스 경고 로그:

Mon Mar 19 18:46:28 2012
LNS: Attempting destination LOG_ARCHIVE_DEST_2 network reconnect (3135)
LNS: Destination LOG_ARCHIVE_DEST_2 network reconnect abandoned
Errors in file /u01/app/oracle/diag/rdbms/ora11g/ora11g/trace/ora11g_nsa2_27302.trc:
ORA-03135: connection lost contact
Error 3135 for archive log file 2 to 'ora11gdg'
Errors in file /u01/app/oracle/diag/rdbms/ora11g/ora11g/trace/ora11g_nsa2_27302.trc:
ORA-03135: connection lost contact
LNS: Failed to archive log 2 thread 1 sequence 50 (3135)
Errors in file /u01/app/oracle/diag/rdbms/ora11g/ora11g/trace/ora11g_nsa2_27302.trc:
ORA-03135: connection lost contact

Oracle 11g 대기 데이터베이스 경고 로그:

중요한 정보 줄에는 "생성된 보장 복원 지점 SNAPSHOT_STANDBY_REQUIRED_03/19/2012 18:46:26"이라고 명시되어 있습니다. 이는 이후 복구를 용이하게 하기 위해 우리가 스냅샷으로 전환된 시점을 나타냅니다.

7. 스냅샷 대기 데이터베이스가 기본 데이터베이스 로그를 수신하는지 테스트합니다.

기본 데이터베이스가 로그 전환을 수행하더라도 대기 데이터베이스는 해당 로그를 계속 수신하지만, 적용하지는 않습니다.

1) 기본 데이터베이스에서 로그 스위치를 켭니다.

sys@ora11g> alter system switch logfile;
 
System altered.

2) 기본 데이터베이스에 의해 기록된 경고 로그 내용

Oracle 11g의 주 데이터베이스 경고 로그:

Mon Mar 19 18:52:00 2012
Thread 1 cannot allocate new log, sequence 52
Private strand flush not complete
Current log# 3 seq# 51 mem# 0: /u01/app/oracle/oradata/ora11g/redo03.log
Mon Mar 19 18:52:00 2012
ARC3: Standby redo logfile selected for thread 1 sequence 50 for destination LOG_ARCHIVE_DEST_2
Thread 1 advanced to log sequence 52 (LGWR switch)
Current log# 1 seq# 52 mem# 0: /u01/app/oracle/oradata/ora11g/redo01.log
Mon Mar 19 18:52:03 2012
Archived Log entry 91 added for thread 1 sequence 51 ID 0xf8cd26a2 dest 1:
Mon Mar 19 18:52:03 2012
LNS: Standby redo logfile selected for thread 1 sequence 51 for destination LOG_ARCHIVE_DEST_2
LNS: Standby redo logfile selected for thread 1 sequence 52 for destination LOG_ARCHIVE_DEST_2

Oracle 11g 대기 데이터베이스 알림 로그:

Mon Mar 19 18:52:00 2012
RFS[5]: Assigned to RFS process 9174
RFS[5]: Identified database type as 'snapshot standby': Client is ARCH pid 27296
Mon Mar 19 18:52:00 2012
RFS[6]: Assigned to RFS process 9176
RFS[6]: Identified database type as 'snapshot standby': Client is ARCH pid 27300
RFS[6]: Selected log 4 for thread 1 sequence 50 dbid -120744030 branch 778023141
Mon Mar 19 18:52:00 2012
Archived Log entry 47 added for thread 1 sequence 50 ID 0xf8cd26a2 dest 1:
Mon Mar 19 18:52:03 2012
RFS[7]: Assigned to RFS process 9180
RFS[7]: Identified database type as 'snapshot standby': Client is LGWR ASYNC pid 27302
RFS[7]: Selected log 4 for thread 1 sequence 51 dbid -120744030 branch 778023141
Mon Mar 19 18:52:04 2012
Archived Log entry 48 added for thread 1 sequence 51 ID 0xf8cd26a2 dest 1:
RFS[7]: Selected log 4 for thread 1 sequence 52 dbid -120744030 branch 778023141

3) 기본 및 대기 데이터베이스의 아카이브 디렉터리에 있는 로그 파일 내용 검토

(1) 기본 데이터베이스의 아카이브 로그 파일:

ora11g@secdb /home/oracle/arch/ora11g$ ls -ltr
total 879M
...omitted...
-rw-r----- 1 oracle oinstall 1.1M Mar 19 18:51 1_50_778023141.arc
-rw-r----- 1 oracle oinstall 363K Mar 19 18:52 1_51_778023141.arc

(2) 대기 데이터베이스의 아카이브 로그 파일:

ora11g@secdb /home/oracle/arch/ora11gdg$ ls -ltr
total 847M
...omitted...
-rw-r----- 1 oracle oinstall 1.1M Mar 19 18:52 1_50_778023141.arc
-rw-r----- 1 oracle oinstall 363K Mar 19 18:52 1_51_778023141.arc

관측된 바와 같이 대기 데이터베이스가 기본 데이터베이스에서 전송한 로그 파일을 성공적으로 수신했습니다.

8. 스냅샷 대기 데이터베이스에서 사용자 생성, 테이블 생성 및 초기 데이터 설정

sys@ora11gdg> create user ocmu identified by ocmu;
 
User created.
 
secooler@ora11gdg> grant dba to ocmu;
 
Grant succeeded.
 
secooler@ora11gdg> conn ocmu/ocmu
Connected.
ocmu@ora11gdg> create table t (x varchar2(8));
 
Table created.
 
ocmu@ora11gdg> insert into t values ('Secooler');
 
1 row created.
 
ocmu@ora11gdg> commit;
 
Commit complete.
 
ocmu@ora11gdg> select * from t;
 
X
Secooler

이 시점에서 대기 데이터베이스는 변경 가능하고 조정 가능한 상태이며, 이는 원하는 “READ WRITE” 모드에 해당합니다.

스냅샷 스탠바이 데이터베이스 기능을 구현하는 것은 기본적으로 플래시백 데이터의 원리에 기반한다는 점에 주목해야 합니다. 따라서 데이터베이스의 플래시백 능력을 방해할 수 있는 어떠한 조치도 피해야 합니다. 그렇지 않으면 스냅샷 스탠바이 데이터베이스가 이전의 스탠바이 복구 상태로 다시 전환될 수 없게 됩니다.

9. 스냅샷 대기 데이터베이스를 물리적 대기 데이터베이스로 복원하기

1) 대기 데이터베이스를 MOUNTED 상태로 재시작합니다.

ocmu@ora11gdg> conn / as sysdba
Connected.
sys@ora11gdg> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
sys@ora11gdg> startup mount
ORACLE instance started.
 
Total System Global Area 313860096 bytes
Fixed Size 1336232 bytes
Variable Size 268438616 bytes
Database Buffers 37748736 bytes
Redo Buffers 6336512 bytes
Database mounted.
 
sys@ora11gdg> select database_role,open_mode from v$database;
 
DATABASE_ROLE OPEN_MODE
 
SNAPSHOT STANDBY MOUNTED

2) 물리적 스탠바이 데이터베이스의 원래 신분을 복원하는 명령을 실행하십시오.

sys@ora11gdg> alter database convert to physical standby;
 
Database altered.

3) 대기 데이터베이스의 경고 로그는 이 전환 과정을 꼼꼼히 기록합니다.

Mon Mar 19 19:30:24 2012
alter database convert to physical standby
ALTER DATABASE CONVERT TO PHYSICAL STANDBY (ora11gdg)
Flashback Restore Start
Flashback Restore Complete
Stopping background process RVWR
Deleted Oracle managed file /u01/app/oracle/flash_recovery_area/ORA11GDG/flashback/o1_mf_7pg3n2jc_.flb
Deleted Oracle managed file /u01/app/oracle/flash_recovery_area/ORA11GDG/flashback/o1_mf_7pg52yst_.flb
Guaranteed restore point dropped
Clearing standby activation ID 4174523254 (0xf8d22b76)
The primary database controlfile was created using the
'MAXLOGFILES 30' clause.
There is space for up to 27 standby redo logfiles
Use the following SQL commands on the standby database to create
standby redo logfiles that match the primary database:
ALTER DATABASE ADD STANDBY LOGFILE 'srl1.f' SIZE 52428800;
ALTER DATABASE ADD STANDBY LOGFILE 'srl2.f' SIZE 52428800;
ALTER DATABASE ADD STANDBY LOGFILE 'srl3.f' SIZE 52428800;
ALTER DATABASE ADD STANDBY LOGFILE 'srl4.f' SIZE 52428800;
Completed: alter database convert to physical standby

경고 로그에서 복구 방법으로 플래시백 데이터베이스 기능이 사용되었음을 알 수 있습니다. 이는 대기 데이터베이스가 플래시백 데이터베이스 모드에서 실행되고 있지 않았다 하더라도, 플래시백 데이터베이스 기능을 사용하여 대기 데이터베이스의 역할 전환이 여전히 가능함을 의미합니다.

4) 대기 데이터베이스를 자동 복구 로그 모드에서 다시 시작하십시오.

(1) 이 시점에서 데이터베이스는 NOMOUNTED 상태이며, 재시작해야 합니다.

ALTER 명령어를 사용하는 대신 데이터베이스를 재시작해야 한다는 점에 유의하시기 바랍니다. 그렇지 않으면 다음과 같은 오류 메시지가 발생합니다:

sys@ora11gdg> alter database mount;
alter database mount
 
l ERROR at line 1:
ORA-00750: database has been previously mounted and dismounted
sys@ora11gdg> shutdown immediate;
ORA-01507: database not mounted
 
ORACLE instance shut down.
sys@ora11gdg> startup mount;
ORACLE instance started.
 
Total System Global Area 313860096 bytes
Fixed Size 1336232 bytes
Variable Size 268438616 bytes
Database Buffers 37748736 bytes
Redo Buffers 6336512 bytes
Database mounted.
sys@ora11gdg> alter database recover managed standby database disconnect;
 
Database altered.

(2) 스탠바이 데이터베이스의 알림 로그를 검토함으로써 복구 프로세스를 명확하게 관찰할 수 있습니다.

Mon Mar 19 19:43:48 2012
Managed Standby Recovery not using Real Time Apply
Parallel Media Recovery started with 4 slaves
Waiting for all non-current ORLs to be archived...
All non-current ORLs have been archived.
Clearing online redo logfile 1 /u01/app/oracle/oradata/ora11gdg/redo01.log
Clearing online log 1 of thread 1 sequence number 1
Completed: alter database recover managed standby database disconnect
Clearing online redo logfile 1 complete
Clearing online redo logfile 2 /u01/app/oracle/oradata/ora11gdg/redo02.log
Clearing online log 2 of thread 1 sequence number 2
Clearing online redo logfile 2 complete
Media Recovery Log /home/oracle/arch/ora11gdg/1_49_778023141.arc
Media Recovery Log /home/oracle/arch/ora11gdg/1_50_778023141.arc
Media Recovery Log /home/oracle/arch/ora11gdg/1_51_778023141.arc
Media Recovery Log /home/oracle/arch/ora11gdg/1_52_778023141.arc
Media Recovery Log /home/oracle/arch/ora11gdg/1_53_778023141.arc
Media Recovery Log /home/oracle/arch/ora11gdg/1_54_778023141.arc
Media Recovery Waiting for thread 1 sequence 55

(3) V$ARCHIVED_LOG 동적 성능 뷰를 통해 로그 적용 상태를 모니터링할 수 있습니다.

sys@ora11gdg> select sequence#, first_time, next_time, applied from v$archived_log order by sequence#;
 
SEQUENCE# FIRST_TIME NEXT_TIME APPLIED
 
...omitted...
49 20120319 18:32:32 20120319 18:38:03 YES
50 20120319 18:38:03 20120319 18:51:00 YES
51 20120319 18:51:00 20120319 18:52:03 YES
52 20120319 18:52:03 20120319 19:09:57 YES
53 20120319 19:09:57 20120319 19:10:15 YES
54 20120319 19:10:15 20120319 19:10:25 YES
 
52 rows selected.

10. 스냅샷 대기 데이터베이스 이전에 수행된 작업이 롤백되었는지 확인하기 위해 대기 데이터베이스를 읽기 전용 상태로 전환할 수 있도록 설정.

sys@ora11gdg> alter database recover managed standby database cancel;
 
Database altered.
 
sys@ora11gdg> alter database open read only;
 
Database altered.
 
sys@ora11gdg> select database_role,open_mode from v$database;
 
DATABASE_ROLE OPEN_MODE
 
PHYSICAL STANDBY READ ONLY
 
sys@ora11gdg> select username from dba_users where username = 'OCMU';
 
no rows selected

이전에 생성된 테스트 사용자 "OCMU"가 존재하지 않는 것으로 결론이 확인되었습니다.

프로페셔널한 솔루션으로 Oracle 데이터베이스 보호하기

Oracle 스냅샷 대기 데이터베이스는 테스트 목적으로 매우 유용합니다. 하지만 데이터베이스 환경을 더욱 강력하게 보호하기 위해서는 프로페셔널한 백업 및 재해 복구 솔루션을 사용해 Oracle 데이터베이스를 백업하는 것이 좋습니다.

Vinchin 백업 및 복구

Vinchin Backup & Recovery 는 가상 머신과 물리 서버 내 데이터베이스 보호를 위해 자동적이고 유연하며 효율적인 강력한 기능을 제공합니다. Oracle DB, MySQL, SQL Server, Postgres Pro 및 MariaDB의 다양한 유형의 데이터베이스 보호 기능을 지원하며, 데이터베이스 압축, 중앙 집중식 작업 관리, 스마트 백업 전략, 핫 데이터베이스 백업 및 고급 SQL Server/Oracle 지원 기능을 제공합니다. 또한 강력한 랜섬웨어 보호 기능과 10개 이상의 가상 플랫폼 간 V2V 마이그레이션 기능도 지원합니다.

Vinchin Backup & Recovery는 수천 개의 기업에서 선택한 제품이며, 여러분도 60일간의 풀기능 체험판으로 이 강력한 시스템을 시작해 보실 수 있습니다! 또한, 문의하기 페이지에서 귀하의 요구사항을 남겨 주시면 귀사의 IT 환경에 맞는 솔루션을 받아보실 수 있습니다.

결론 

“스냅샷 대기 데이터베이스(Snapshot Standby database)”의 뛰어난 기능을 통해 대기 데이터베이스를 일시적으로 읽기-쓰기 가능한 독립형 데이터베이스로 사용할 수 있습니다. 이를 통해 대기 데이터베이스의 활용 가능성을 크게 확장할 수 있습니다. 이 특수한 기능을 활용하면 운영 환경에서 시뮬레이션하거나 재현하는 것이 "위험할 수 있는" 문제를 안전하게 테스트하고 재현할 수 있습니다. 테스트가 완료된 후에는 물리적 대기 데이터베이스로서의 신분으로 다시 복원한 후 로그 복구를 계속 진행할 수 있습니다.

공유하기:

카테고리: Database Tips