1. Snapshot Standby Database로 전환
A) Standby DB를 snapshot standby로 전환
Convert database 명령으로 역할 전환
CONVERT DATABASE [standby 글로벌 DB명] TO SNAPSHOT STANDBY;
DGMGRL> SHOW CONFIGURATION; Configuration - dg_orcl Protection Mode: MaxPerformance Members: orcl - Primary database orcl_stby - Physical standby database Fast-Start Failover: Disabled Configuration Status: SUCCESS (status updated 8 seconds ago) DGMGRL> CONVERT DATABASE 'orcl_stby' TO SNAPSHOT STANDBY; Converting database "orcl_stby" to a Snapshot Standby database, please wait... Database "orcl_stby" converted successfully DGMGRL> SHOW CONFIGURATION; Configuration - dg_orcl Protection Mode: MaxPerformance Members: orcl - Primary database orcl_stby - Snapshot standby database Fast-Start Failover: Disabled Configuration Status: SUCCESS (status updated 50 seconds ago)
Standby database가 snapshot standby로 롤이 변경된 것을 확인할 수 있습니다.
SQL> SELECT db_unique_name, instance_name, status, open_mode, database_role, switchover_status FROM v$database d, v$instance i; DB_UNIQUE_NAME INSTANCE_NAME STATUS OPEN_MODE DATABASE_ROLE SWITCHOVER_STATUS -------------------- -------------------- --------------- -------------------- -------------------- -------------------- orcl_stby orcl OPEN READ WRITE SNAPSHOT STANDBY NOT ALLOWED
{}
2. Standby Database 테스트
A) 기존 데이터 존재 여부 확인
Primary DB에 테스트 유저 존재 여부 확인
select username from dba_users where username = 'SNAPSHOT';
SQL> SELECT db_unique_name, instance_name, status, open_mode, database_role, switchover_status FROM v$database d, v$instance i; DB_UNIQUE_NAME INSTANCE_NAME STATUS OPEN_MODE DATABASE_ROLE SWITCHOVER_STATUS -------------------- -------------------- --------------- -------------------- -------------------- -------------------- orcl orcl OPEN READ WRITE PRIMARY FAILED DESTINATION SQL> select username from dba_users where username = 'SNAPSHOT'; no rows selected
Snapshot Standby Database 기능을 테스트하기 위한 계정은 standby 데이터베이스에만 존재하면 됩니다.
B) Standby DB에서 테스트 데이터 생성
Standby DB에 유저 및 테이블 생성 후 테스트 데이터 입력
create user snapshot identified by snapshot; GRANT dba TO snapshot; CREATE TABLE SNAPSHOT.SNAP_TEST (id varchar2(5), name varchar2(20)); INSERT INTO SNAPSHOT.SNAP_TEST VALUES ('001','scott'); COMMIT: select * from SNAPSHOT.SNAP_TEST;
SQL> SELECT db_unique_name, instance_name, status, open_mode, database_role, switchover_status FROM v$database d, v$instance i; DB_UNIQUE_NAME INSTANCE_NAME STATUS OPEN_MODE DATABASE_ROLE SWITCHOVER_STATUS -------------------- -------------------- --------------- -------------------- -------------------- -------------------- orcl_stby orcl OPEN READ WRITE SNAPSHOT STANDBY NOT ALLOWED SQL> CREATE USER snapshot IDENTIFIED BY snapshot; User created. SQL> GRANT dba TO snapshot; Grant succeeded. SQL> CREATE TABLE snapshot.snap_test (id VARCHAR2(5), name VARCHAR2(20)); Table created. SQL> INSERT INTO snapshot.snap_test VALUES ('001','scott'); 1 row created. SQL> commit; Commit complete. SQL> select * from SNAPSHOT.SNAP_TEST; ID NAME ----- -------------------- 001 scott
Standby 데이터베이스에 테스트를 위한 계정을 만들고 권한을 부여한 후에 테스트를 위한 테이블과 데이터를 입력합니다.
이 테이블은 Standby 데이터에서만 조회되어야 합니다.
C) Primady DB에서 조회 불가 확인
Primary DB에서 테스트 테이블 조회 여부 확인
select * from SNAPSHOT.SNAP_TEST;
SQL> SELECT db_unique_name, instance_name, status, open_mode, database_role, switchover_status FROM v$database d, v$instance i; DB_UNIQUE_NAME INSTANCE_NAME STATUS OPEN_MODE DATABASE_ROLE SWITCHOVER_STATUS -------------------- -------------------- --------------- -------------------- -------------------- -------------------- orcl orcl OPEN READ WRITE PRIMARY TO STANDBY SQL> select * from SNAPSHOT.SNAP_TEST; select * from SNAPSHOT.SNAP_TEST * ERROR at line 1: ORA-00942: table or view does not exist
Snapshot Standby Database에만 생성된 테이블이므로 Primary DB에서는 테스트 데이터를 조회할 수 없습니다.
3. Physical Standby Database로 복원
A) Standby DB를 Physical Standby로 복원
Convert database 명령으로 역할 전환
CONVERT DATABASE [standby 글로벌 DB명] TO PHYSICAL STANDBY;
DGMGRL> CONVERT DATABASE 'orcl_stby' TO PHYSICAL STANDBY; Converting database "orcl_stby" to a Physical Standby database, please wait... Operation requires shut down of instance "orcl" on database "orcl_stby" Shutting down instance "orcl"... Connected to "orcl_stby" Database closed. Database dismounted. ORACLE instance shut down. Operation requires start up of instance "orcl" on database "orcl_stby" Starting instance "orcl"... Connected to an idle instance. ORACLE instance started. Connected to "orcl_stby" Database mounted. Connected to "orcl_stby" Continuing to convert database "orcl_stby" ... Database "orcl_stby" converted successfully DGMGRL> SHOW CONFIGURATION Configuration - dg_orcl Protection Mode: MaxPerformance Members: orcl - Primary database orcl_stby - Physical standby database Fast-Start Failover: Disabled Configuration Status: SUCCESS (status updated 23 seconds ago)
Physical Standby로 전환하면서 Snapshot Standby 모드에서 생성된 테스트 테이블과 유저가 제거된 것을 확인할 수 있습니다.
SQL> SELECT db_unique_name, instance_name, status, open_mode, database_role, switchover_status FROM v$database d, v$instance i; DB_UNIQUE_NAME INSTANCE_NAME STATUS OPEN_MODE DATABASE_ROLE SWITCHOVER_STATUS -------------------- -------------------- --------------- -------------------- -------------------- -------------------- orcl_stby orcl OPEN READ ONLY WITH APPLY PHYSICAL STANDBY NOT ALLOWED SQL> select * from SNAPSHOT.SNAP_TEST; select * from SNAPSHOT.SNAP_TEST * ERROR at line 1: ORA-00942: table or view does not exist SQL> select username from dba_users where username = 'SNAPSHOT'; no rows selected