티스토리 뷰

2025-11-13 오전 10시에 발생한 특정 Table Truncate 상황 하에서

해당 Table을 복구한 과정을 까먹지 않기 위한 기록

 

이 기능 없었으면 대체 몇시간이 걸렸을지 감도 안잡힘.

 

 

 

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

■ DR (ADG Standby DB) Server

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

 

## DB STATUS 확인

SQL> SELECT OPEN_MODE,DATABASE_ROLE,FLASHBACK_ON FROM V$DATABASE;

 

OPEN_MODE                DATABASE_ROLE          FLASHBACK_ON

--------------------------  -------------------------- ------------------

READ ONLY WITH APPLY  PHYSICAL STANDBY     YES

 

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

■ 운영 (Primary DB) Server

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

## Primary DB에서 Standby Database로 Redo Log 전송(Log Shipping)을 일시적으로 중단

ALTER SYSTEM SET log_archive_dest_state_2='DEFER' SCOPE=MEMORY SID='*';

 

## 2node RAC의 경우 양쪽 노드에서 결과 점검

SQL> show parameter log_archive_dest_state_2

 

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

■ DR (ADG Standby DB) Server

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

## 작업할 node#1만 startup 상태로 다른 모든 node DB Stop

## login node#2

SQL> shutdown immediate

 

## login node#1

## 이후 모든 작업은 node#1에서만 진행

 

## CANCEL THE RECOVERY PROCESS

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

 

SQL> SHUTDOWN IMMEDIATE;

SQL> STARTUP MOUNT;

 

## ADG standby DB에서 flashback을 하기 위하여 SNAPSHOT STANDBY로 전환해야 함

## SNAPSHOT STANDBY 전환

SQL> ALTER DATABASE CONVERT TO SNAPSHOT STANDBY;

 

SQL> ALTER DATABASE OPEN;

 

SQL> SELECT OPEN_MODE,DATABASE_ROLE FROM V$DATABASE;

 

 

OPEN_MODE           DATABASE_ROLE

---------------------  -------------------------

READ WRITE           SNAPSHOT STANDBY

 

SQL> SHUTDOWN IMMEDIATE;

SQL> STARTUP MOUNT;

 

 

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

■ 운영 (Primary DB) Server

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

## 복구할 시점의 scn 조회 (primary DB 에서 조회할 것)

SQL> SELECT TIMESTAMP_TO_SCN(TO_TIMESTAMP('2019-11-12 08:43:54','YYYY-MM-DD HH24:MI:SS')) SCN FROM DUAL;

 

        SCN

------------

 900692541

 

 

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

■ DR (ADG Standby DB) Server

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

## FLASHBACK DATABASE

SQL>  FLASHBACK DATABASE TO SCN 900692541;

 

SQL> ALTER DATABASE OPEN RESETLOGS;

 

============== 참고 Alert log (12c 버전 예) ===========================

 

$ tail -f $ORACLE_DIAG_BASE/rdbms/$ORACLE_DB_NAME_LOWER/$ORACLE_SID/trace/alert_$ORACLE_SID.log

 

FLASHBACK DATABASE TO TIMESTAMP TO_TIMESTAMP('2019-11-12 08:43:54','YYYY-MM-DD HH24:MI:SS')

2019-11-12T09:28:51.253191+08:00

Flashback Restore Start

2019-11-12T09:28:52.600931+08:00

Flashback Restore Complete

Flashback Media Recovery Start

2019-11-12T09:28:52.634199+08:00

Setting recovery target incarnation to 1

 

2019-11-12T09:28:52.652532+08:00

 Started logmerger process

2019-11-12T09:28:52.943088+08:00

Parallel Media Recovery started with 8 slaves

Flashback Media Recovery Log /oraarch/SCGRID1DR/scgrid1dr_1_1457_1019315711.arc

Flashback Media Recovery Log /oraarch/SCGRID1DR/scgrid1dr_2_485_1019315711.arc

2019-11-12T09:28:53.510229+08:00

Incomplete Recovery applied until change 900692554 time 11/12/2019 08:43:55

2019-11-12T09:28:53.513155+08:00

Flashback Media Recovery Complete

2019-11-12T09:28:53.706739+08:00

Setting recovery target incarnation to 2

2019-11-12T09:28:53.766642+08:00

Completed: FLASHBACK DATABASE TO TIMESTAMP TO_TIMESTAMP('2019-11-12 08:43:54','YYYY-MM-DD HH24:MI:SS')

 

=========================================

 

## 복구 대상 Table expdp/impdp

 

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

■ 운영 (Primary DB) Server

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

## standby DB 원복을 위한 Step

 

## Primary DB에서 Standby Database로 Redo Log 전송(Log Shipping)을 재시작

ALTER SYSTEM SET log_archive_dest_state_2='ENABLE' SCOPE=MEMORY SID='*';

 

## 2node RAC의 경우 양쪽 노드에서 결과 점검

SQL> show parameter log_archive_dest_state_2

 

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

■ DR (ADG Standby DB) Server

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

## standby DB 원복을 위한 Step

 

## Physical Standby 전환

SQL> SHUTDOWN IMMEDIATE;

SQL> STARTUP MOUNT;

 

SQL> ALTER DATABASE CONVERT TO PHYSICAL STANDBY;

SQL> ALTER DATABASE OPEN;

 

 

## REDO APPLY

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

 

## DB STATUS 확인

SQL> SELECT OPEN_MODE,DATABASE_ROLE,FLASHBACK_ON FROM V$DATABASE;

 

OPEN_MODE                DATABASE_ROLE          FLASHBACK_ON

--------------------------  -------------------------- ------------------

READ ONLY WITH APPLY  PHYSICAL STANDBY     YES

 

 

############################

## Monitoring gap check

############################

 

## MRP Process 기동 여부 확인

 

SELECT inst_id, PROCESS, DELAY_MINS FROM gV$MANAGED_STANDBY WHERE  PROCESS LIKE 'MRP%' OR PROCESS='RFS';

SELECT PROCESS, DELAY_MINS FROM V$MANAGED_STANDBY WHERE  PROCESS LIKE 'MRP%' OR PROCESS='RFS';

 

PROCESS   DELAY_MINS

--------- ----------

RFS                0   -> DB Mount 되면 RFS (remote file server process)가 기동하여, redo data 및 archive log를 전송 받음.

RFS                0   -> DB Mount 되면 RFS (remote file server process)가 기동하여, redo data 및 archive log를 전송 받음.

MRP0               0   -> MRP 기동 상태 확인

 

 

## DATAGUARD_STATS

set lines 500

col name for a13

col value for a20

col unit for a30

 

SELECT NAME, VALUE, UNIT, TIME_COMPUTED

     FROM V$DATAGUARD_STATS

     WHERE NAME IN ('transport lag', 'apply lag');

 

NAME      VALUE UNIT                TIME_COMPUTED

------------- -------------------- ------------------------------ ------------------------------

 

transport lag +00 00:00:00   day(2) to second(0) interval   11/04/2019 15:32:31

apply lag      +00 00:00:00   day(2) to second(0) interval   11/04/2019 15:32:31

 

 

## Redo Transfer 상태 확인 : Status가 VALID가 아니면 Redo Transfer에 문제가 발생한 것 이며, 문제 발생시 ERROR 컬럼의 값을 확인하여 조치

 

set line 200

col dest_id for a20

col destination for a20

col status for a10

col target for a10

col schedule for a10

col process for a10

col error for a50

select dest_id "ID",destination,status,target, schedule,process,error from v$archive_dest where rownum < 3;

 

 

        ID    DESTINATION          STATUS     TARGET     SCHEDULE   PROCESS    ERROR

----------   -------------------- ---------- ---------- -----  ----- ---------- --------------------------------------------------

         1    /oraarch/SCGRID1DR      VALID      LOCAL        ACTIVE       ARCH

         2    SCGRID1DADG              VALID      REMOTE     PENDING    LGWR

댓글
공지사항
퍼렁별여행자
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2026/01   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함
링크