Corrupt Data Found During RMAN Backup Troubleshoot

   

1. 이슈사항

  • RMAN Full BACKUP을 수행 할 때, 특정 TBS에서 Block Corrupt 현상이 발견되는 상태
  • 운영 시에는 Block Corrupt현상이 없으며 RMAN FULL BACKUP이 수행되는 새벽시간에만 해당 에러가 발생되고 있는 상태
  • 현재 ASM Disk의 경우에 3중(HIGH)으로 Mirroring 되어 있는 상태

ORA-27061: waiting for async I/Os failed

Linux-x86_64 Error: 5: Input/output error

Additional information: -1

Additional information: 4194304

WARNING: Read Failed. group:1 disk:4 AU:626 offset:0 size:4194304

WARNING: failed to read mirror side 1 of virtual extent 1977 logical extent 0 of file 261 in group [1.103449180] from disk DATA_0004 allocation unit 626 reason error; if possible, will try another mirror side

NOTE: successfully read mirror side 2 of virtual extent 1977 logical extent 1 of file 261 in group [1.103449180] from disk HDD_E0_S01_975274559P1 allocation unit 4776

Tue Apr 28 03:10:41 2015

Hex dump of (file 4, block 1028608) in trace file /u01/app/oracle/diag/rdbms/SID/SID1/trace/SID1_ora_21436.trc

Corrupt block relative dba: 0x010fb200 (file 4, block 1028608)

Completely zero block found during backing up datafile

Trying mirror side HDD_E1_S06_1135637411P1.

Reread of blocknum=1028608, file=+DATA/datafile/undotbs2.261.794895089. found same corrupt data

Reread of blocknum=1028608, file=+DATA/datafile/undotbs2.261.794895089. found valid data

Hex dump of (file 4, block 1028609) in trace file /u01/app/oracle/diag/rdbms/SID/SID1/trace/SID_ora_21436.trc

Corrupt block relative dba: 0x010fb201 (file 4, block 1028609)

Completely zero block found during backing up datafile

….

..

Corrupt block relative dba: 0x00800201 (file 2, block 513)

Bad header found during backing up datafile

Data in bad block:

 type: 1 format: 2 rdba: 0x00003102

 last change scn: 0xb408.00000003 seq: 0x8 flg: 0x01

 spare1: 0x8 spare2: 0x1 spare3: 0x0

 consistency value in tail: 0x00000000

 check value in block header: 0x9

 block checksum disabled

ksfdrfms:Mirror Read file=+DATA/wind/datafile/sysaux.257.797856311 fob=0x3cb15a548 bufp=0x7f1f74501000 blkno=513 nbytes=8192

ksfdrfms: Read success from mirror side=1 logical extent number=0 disk=DATA_0002 path=/dev/asmdisks/oracle_ocr02p1

Mirror I/O done from ASM disk /dev/asmdisks/oracle_ocr02p1 

Trying mirror side DATA_0002.

Reread of blocknum=513, file=+DATA/wind/datafile/sysaux.257.797856311. found same corrupt data

ksfdrnms:Mirror Read file=+DATA/wind/datafile/sysaux.257.797856311 fob=0x3cb15a548 bufp=0x7f1f74501000 nbytes=8192

ksfdrnms: Read success from mirror side=2 logical extent number=1 disk=DATA_0003 path=/dev/asmdisks/oracle_recovery01p1

Mirror I/O done from ASM disk /dev/asmdisks/oracle_recovery01p1 

Reread of blocknum=513, file=+DATA/wind/datafile/sysaux.257.797856311. found valid data

   

2. 원인 분석

  • Corrupt Data Found During RMAN Backup (문서 ID 1610350.1) 오라클 공식 문서 참조

     


3. 분석 내용

  • RMAN Full Backup이 수행 될 때에 Corrupt Data를 확인하여 Alert log에 보여주는 것으로 판단되며 현재 3중으로

    Mirroring되어 있어 운영에는 큰 영향이 없는 상태(정상적인 Block을 확인하여 백업 진행)

  • 해당 되는 TBS를 확인하여 복구작업을 진행해야 함.

       

4. 해결

  • 공식 문서에 수행해야 하는 절차가 상세하게 나와있다.
  • Full Backup 후에 DB를 내리고 Mount 상태에서 복구를 진행하면 된다.

1) Take a full backup of the database and archivelogs

2) Shutdown the database and startup mount the database

3) Restore and recovery as follows:

   

RMAN > run

{

allocate channel c1 type disk;

allocate channel c2 type disk;

allocate channel c3 type disk;

allocate channel c4 type disk;

restore datafile < list all the affected files separated by commas >;

recover database;

sql 'alter database open';

}

   

Item 1 this will backup the database if the block is corrupt on the primary side RMAN will get the good block from the mirror. So once you have a good backup restoring the datafile will restore with good blocks. 

 


'1. IT Story > DB' 카테고리의 다른 글

Oracle Backup & Recovery의 종류  (0) 2015.09.15
DBMS_CRYPTO Package를 이용한 단방향 암호화  (0) 2015.09.08
Fine Grained Auditing의 활용  (0) 2015.09.08
WRAP Utility 활용  (0) 2015.09.08
DATABASE 암호화 기술들  (0) 2015.09.04
Oracle oradebug활용 Troubleshoot  (0) 2015.09.04
Oracle RAC 11gR2 주요 Command(명령어)  (0) 2015.09.04
Oracle Flashback  (0) 2015.09.04
블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,


DATABASE 암호화 기술들

 

1. DB 암호화 기법

   

  

이름 

장점 

단점 

비고 

ECB모드

 전자부호표모드

(Electric Codebook mode)

* 간단

* 고속

* 병렬처리가능(암호화.복호화 양쪽)

* 평문속의 반복이 암호문에 반영된다.

* 암호문 블록의 삭제나 교체에 의한 평문의 조작이 가능

* 비트단위의 에러가 있는 암호문을 복호화하면 대응하는 블록이 에러가 된다.

* 재전송공격이 가능

사용해서는 안됨.

CBC모드

 암호블록 연쇄모드

(Cipher Block Chaining mode)

* 평문의 반복은 암호문에 반영되지 않는다.

* 병렬처리가능(복호화만)

* 임의의 암호문 블록을 복호화할 있다.

  

   

 권장

CFB모드

 암호피드백모드

(Cipher Feedback mode)

* 패딩이 필요 없다.

* 병렬처리가능(복호화만)

* 임의의 암호문 블록을 복호화할 있다.

  

현재는 사용 안함.

CTR모드를 사용하는 편이 나음.

 OFB모드

 출력피드백모드

(Output Feedback mode)

* 패딩이 필요 없다.

* 암호화/복호화의 사전 준비를 있다.

* 암호화와 복호화가 같은 구조를 하고 있다.

* 비트 단위의 에러가 있는 암호문을 복호화하면 평문의 대응하는 비트만 에러가 된다.

  

CTR모드를 사용하는 편이 나음.

CTR모드 

 카운터모드

(Counter mode)

* 패딩이 필요 없다.

* 암호화/복호화의 사전 준비를 있다.

* 암호화와 복호화가 같은 구조를 하고 있다.

* 비트 단위의 에러가 있는 암호문을 복호화하면 평문의 대응하는 비트만 에러가 된다.

* 병렬처리가능(암호화/복호화 양쪽)

  

권장

   

   

2. DB 암호화 알고리즘 종류

3. DB 암호화 제품의 유형

   

   

4. DB 암호화 제품의 비교

  • 추가적인 S/W의 변경 및 개선 사항이 있을 수 있음.

       

  

Oracle TDE (11g)

E사

P사

K사

암호화된 Index를 통한 색인검색 기능

지원

(Tablespace 암호화 시 Range 검색 가능)

지원

불가 (평문 Index 구축시는 지원) *

불가 (평문 Index 구축시는 지원)

무중단 암호화 기능 (리스너 재기동 및 Lock 없는 조건)

무중단

무중단

중단 (DB Restart)

중단(수초 ~ 수분 이내)

DB서버내의 키 기밀성

유지안됨.

(e-wallet 파일에 저장)

유지됨. (디스크에 저장되지 않고, 메모리로만 로딩 됨.)

유지(파일로 저장되지만 메모리로 로딩이 됨)

유지(키 서버를 통해 분리 구축)

국내 법정 알고리즘 지원 여부

불가

(ARIA, SEED 및 일방향 알고리즘 없음)

개인정보 용: ARIA, SEED

비밀번호 용: SHA-1, SHA-256/384/512 (일방향 알고리즘)

개인정보 용: SEED

비밀번호 용: SHA-1, SHA-256/384/512 (일방향 알고리즘)

개인정보 용: ARIA, SEED

비밀번호 용: SHA-1, SHA-256/384/512 (일방향 알고리즘

지원 알고리즘

AES, TDES

ARIA, SEED, AES, TDES, DES, SHA

SEED, ARIA, AES, TDES, SHA,, 3DE,

ARIA, SEED, AES, TDES, DES, SHA

공공기관 사용 가능 여부

부분 가능 (기존 Oracle DB 사용중인 국립병원이 TDE 암호화 사용)

가능

가능

가능

대용량 (파티션) 테이블 암호화 지원

지원

지원 (RANGE, LISH, HASH, SUB IOT)

지원

지원

접근통제 및 감사 기능

없음 (별도 설정 필요)

지원

지원

지원

권한 분리

불가(별도 설정 필요)

지원

지원

지원

HSM (FIPS-140 level2) 지원 여부

지원

지원

불가

불가

DB 재기동시 키 로딩 방법

파일 또는 테이블에서 읽어 로딩 (키 기밀성 유지 안됨)

RSA 방식으로 자동 로딩

(키 기밀성 유지)

파일 또는 테이블에서 읽어 로딩 (키 기밀성 유지 안됨)

키 서버에서 암호화 키 로딩

암호모듈검증기준 준수

준수 못함

준수

준수

준수

암호화 구성

TDE(Transparent Data Encryption)

API, Plug-in, Hybrid

API, Plug-in, Hybrid

API, Plug-in, Hybrid

 


블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,


Oracle oradebug활용 Troubleshoot

   

 1.이슈사항

  • SMON Process가 CPU를 높게 점유하고 archive log file이 많이 쌓여 Disk Full 현상이 발생됨.
  • Session monitoring, alert log에는 이슈가 될만한 에러 및 Session내역은 보이지 않음. 

              

        

  2.원인분석

- Alert log, 실시간 Session으로 보여지는 내용이 없어 Oracle Process Trace 수행

- 특정 Process Hang 발생시 Oracle 분석기법

sqlplus "/as sysdba"

   

oradebug setospid 352612  -- Topas에서 확인된 pid 값

oradebug unlimit 

oradebug dump systemstate 10   --1분당 3번

oradebug tracefile_name 

   

oradebug setospid 352612 -- Topas에서 확인된 pid 값

oradebug unlimit

oradebug hanganalyze 3     --1분당 3번

oradebug tracefile_name 

   

[생성된 Trace 파일]

Trace file /oracle/diag/rdbms/orcl/trace/orcl_smon_352612.trc

   

*** 2015-09-01 13:57:47.068

*** SESSION ID:(571.1) 2015-09-01 13:57:47.068

*** CLIENT ID:() 2015-09-01 13:57:47.068

*** SERVICE NAME:(SYS$BACKGROUND) 2015-09-01 13:57:47.068

*** MODULE NAME:() 2015-09-01 13:57:47.068

*** ACTION NAME:() 2015-09-01 13:57:47.068

   

DISTRIB TRAN orcl.88b119e8.65.16.61955

  is local tran 65.16.61955 (hex=41.10.f203)

  insert pending collecting tran, scn=14418954135276 (hex=d1d.2ca3a6ec)

Serial Transaction recovery caught exception 30319

Serial Transaction recovery caught exception 30319

   

*** 2015-09-01 18:51:50.478

Serial Transaction recovery caught exception 30319

   

*** 2015-09-01 18:55:50.719

Serial Transaction recovery caught exception 30319

  

-2015-09-01 13:57:47.068 시점부터 특정 Transaction에 대한 Recovery 작업을 진행.

-금일 오전, 오후에 대량의 Transaction에 대한 쿼리 수행에 따른 취소로 인한 Transaction Recovery일 수 있을 것으로 보여짐.

   

 3.분석 내용

- alert log를 보면 2015-09-01 13:57경에 Session Kill이 발생된 것이 확인되며 같은 시간에 oradebug를 통하여 SMON을 트레이스를 수행한 결과 enqueue로 인하여  Lock현상에 따른 Session Kill로 확인됩니다.

- 해당 Session Kill에 따른 Transaction Recovery가 발생되면서 SMON의 사용량이 높아지며 많은 양의 Archive log를 내린 것으로 판단됨.

   

[alert log 분석]

 

[oradebug 분석]

   

4. 해결

- 해당 Transaction Recovery 작업이 완료되어 시스템이 정상으로 회복.


'1. IT Story > DB' 카테고리의 다른 글

Fine Grained Auditing의 활용  (0) 2015.09.08
WRAP Utility 활용  (0) 2015.09.08
Corrupt Data Found During RMAN Backup Troubleshoot  (0) 2015.09.08
DATABASE 암호화 기술들  (0) 2015.09.04
Oracle RAC 11gR2 주요 Command(명령어)  (0) 2015.09.04
Oracle Flashback  (0) 2015.09.04
Oracle RAC 11gR2 Management  (0) 2015.09.04
Oracle RAC 11gR2 Failover 구성  (0) 2015.09.04
블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,


Oracle RAC 11gR2 주요 Command(명령어)

   

1.OLSNODES

   

 ① OLSNODE란?

- 해당 명령어는 클러스터에 참여하고 있는 노드의 리스트확인과 각종 정보를 제공해주는 명령어로써, 클러스터의 운영상태,

클러스터에 조인되어 있는 멤버(노드)정보등을 쉽고 빠르게 확인할 수 있도록 해준다.

     




 ② OLSNODES command

              (Grid 유저에서 사용)

OLSNODES command:

olsnodes [[-n] [-i] [-s] [-t] [node_name | -l [-p]] | [-c]] [-g] [-v]

  

Command

Description

-n

클러스터에 조인한 node의 numbers 출력

-i

각 노드의 VIP출력

-s

각 노드의 상태를 active, inactive 형태로 출력

-t

각 노드 타입 출력

Node_name

특정 노드에 대한 정보를 출력하고 싶을 때 노드이름 명시

-l[-p]

-p 옵션과 함께 사용하여 로컬 노드의 private interconnect ip 정보 출력

-c

클러스터 이름 출력.

-g

좀 더 자세한 클러스터 정보 출력

-v

verbose mode로 클러스터 정보 출력.

Ex) 각 노드의 VIP출력

$ lsnodes -i

rac1@+ASM1 : /app/grid> olsnodes -i

rac1 rac1-vip

rac2 rac2-vip

   

2.CRSCTL

   

  ① CRSCTL란?

  • 오라클 클러스터 환경에서 CRSCTL 명령어를 통해 아래와 같은 작업들을 수행 할 수 있다.
  • 클러스터 리소스 시작/정지
  • 클러스터 데몬 사용여부설정 ( enable , disable )
  • 클러스터 상태 체크
  • 클러스터 컴포넌트 Debugging Oracle Clusterware components

   

  ② CRSCTL command

             (GRID유저에서 사용)

Check the CRS status:

  

$ crsctl check crs

$ crs_stat -t –v

Check the voting disk:

$ crsctl query css votedisk

crsctl check css

Cluster Synchronization Services의 상태를 체크하는 명령어이다. ASM홖경에서 자주 사용된다.

< 예시 : 상태체크 >

$ crsctl check css

crsctl add resource

  

Database, service, listener 등의 리소스를 클러스터에 추가할 때 사용된다.

$ crsctl add resource resource_name -type resource_type [-file file_path -attr "attribute_name=attribute_value, attribute_name=

attribute_value,..."]

[-i] [-f]

   

< 예시 : 각종 옵션을 추가해서 vip resource 추가 >

$ crsctl add resource app.appvip -type app.appvip.type -attr "RESTART_ATTEMPTS=2,START_TIMEOUT=100,STOP_TIMEOUT=100,CHECK_INTERVAL=10)

- Resource_name와 –type resource_type 옵션은 반드시 명시되어야 한다.

- 리소스 추가시 ora로 시작하는 이름을 사용하지 않도록 권고한다.

crsctl delete resource

  

리소스를 제거할 때 사용한다.

$ crsctl delete resource resource_name [-i] [-f]

   

<예시 : 리소스 삭제 >

$ crsctl delete resource myResource

- -I 옵션 사용 시 해당 리소스를 다른 프로세스가 사용중이면 에러를 출력한다.

- 반대로 –f 옵션은 모듞 조건을 무시하고 강제로 리소스를 제거한다.

- Resource_name 은 반드시 명시되어야한다.

crsctl modify resource

  

명시된 리소스의 속성을 변경할 때 사용한다.

crsctl modify resource resource_name -attr "attribute_name=attribute_value"

[-i] [-f] [-delete]

   

< 예시 : 리소스 속성 변경 >

$ crsctl modify resource appsvip -attr ORA_VIP=10.1.220.17 –i

crsctl start resource

리소스 시작

crsctl start resource {resource_name [...] | -w filter | -all} [-n server_name]

[-k cid] [-d did] [-env "env1=val1,env2=val2,..."] [-i] [-f]

   

< 예시 >

# crsctl start resource myResource -n server1

crsctl status

리소스 상태 확인

crsctl status resource {resource_name [...] | -w "filter"} [-p | -v [-e]] |

[-f | -l | -g] [[-k cid | -n server_name] [-d did]] | [-s -k cid [-d did]] [-t]

< 예시 : vip에 대한 상태 확인 >

$ crsctl status resource ora.staii14.vip

NAME=ora.staii14.vip

TYPE=ora.cluster_vip_net1.type

TARGET=ONLINE

STATE=ONLINE on staii14


 3.SRVCTL

   

  ① SRVCTL란?

                 (GRID 유저에서 사용)

  • RAC환경에서 databases, instances, listeners, SCAN listeners, services, grid naming service (GNS), and Oracle ASM등에 대한 구성정보들을 관리한다.

   

  • SRVCTL 명령어로 registered, Oracle Clusterware starts, stops, monitors, and restarts the database instance 가 가능합니다.

   

  ② SRVCTL command

_ Listener (stop, start, status)

- srvctl stop listener -n <hostname> -l LISTENER

srvctl stop listener -n rac1 -l LISTENER

srvctl start listener -n rac1 -l LISTENER

srvctl status listener -n rac1 -l LISTENER

   

srvctl stop listener -n rac2 -l LISTENER

srvctl start listener -n rac2 -l LISTENER

srvctl status listener -n rac2 -l LISTENER

_ Oracle instance and service (status)

- srvctl status database -d <database_name>

srvctl status database -d RAC

_ Oracle 11g RAC stop commands

- srvctl stop instance -d <database_name> -i

CRMDB1<instance_name>

- srvctl stop listener -n r<hostname> -l LISTENER

- srvctl stop nodeapps -n <hostname>

--RAC1

emctl stop dbconsole

srvctl stop instance -d RAC -i RAC1

   

srvctl status instance -d RAC -i RAC1

srvctl stop listener -n rac1 -l LISTENER

srvctl status listener -n rac1 -l LISTENER

srvctl stop nodeapps -n rac1

   

--RAC2

emctl stop dbconsole

srvctl stop instance -d RAC -i RAC2

srvctl status instance -d RAC -i RAC2

srvctl stop listener -n rac2 -l LISTENER

srvctl status listener –n rac2 -l LISTENER

srvctl stop nodeapps –n rac2

_ Oracle 11g RAC start commands

- srvctl start listener -n r<hostname> -l

LISTENER

- srvctl start instance -d <database_name> -i

<instance_name>

--RAC1

srvctl start nodeapps -n rac1

srvctl status nodeapps -n rac1

   

srvctl start listener –n rac1 -l LISTENER

srvctl status listener -n rac1 -l LISTENER

   

srvctl start instance -d RAC -i RAC1

srvctl status instance -d RAC -i RAC1

   

emctl start dbconsole

   

--RAC2

srvctl start nodeapps -n rac2

srvctl status nodeapps -n rac2

   

srvctl start listener -n credb02 -l LISTENER

srvctl status listener -n credb02 -l LISTENER

   

srvctl start instance -d RAC -i RAC2

srvctl status instance -d RAC -i RAC2

   

emctl start dbconsole

_ All Database (stop, start)

- srvctl start database -d <database name>

srvctl start database -d RAC

srvctl stop database -d RAC

   

 4.ASMCMD

              (GRID 유저에서 사용)

ASMCMD를 통하여 데이터파일들에 접근 및 조작.

-help

$asmcmd

   

ASMCMD> ls

DATA/

ORADATA/

ASMCMD>

   

 

[그 외 11g부터 지원하는 명령]

  • cp ← OS와 ASM간 파일 복사 기능. ASM과 ASM간 파일 복사도 가능.

    (CP를 통하여 조금 복잡하긴 하지만 Hot Backup과 Cold Backup 도 가능)

       

  • lsdsk ← ASM 디스크 헤더를 읽어서 요약 정보를 보여줌.
  • remap ← ASM Disk가 장애 났을 때 다른 디스크로 remapping 해주고 기존 장애 디스크를 unusable 로 변경하는 명령어.

 

'1. IT Story > DB' 카테고리의 다른 글

WRAP Utility 활용  (0) 2015.09.08
Corrupt Data Found During RMAN Backup Troubleshoot  (0) 2015.09.08
DATABASE 암호화 기술들  (0) 2015.09.04
Oracle oradebug활용 Troubleshoot  (0) 2015.09.04
Oracle Flashback  (0) 2015.09.04
Oracle RAC 11gR2 Management  (0) 2015.09.04
Oracle RAC 11gR2 Failover 구성  (0) 2015.09.04
OCR, VOTE ASM Disk에서 RawDevice로 Disk 변경 TEST  (0) 2015.08.26
블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,

Oracle Flashback

1. IT Story/DB 2015. 9. 4. 10:53


Oracle Flashback


- DBMS
기능으로써, drop 테이블, 또는 테이블의 데이터를 특정 시점으로 복구할 있다.

   

   ① 삭제된 테이블 복구(table drop recyclebin)

- 의도하지 않은 오류로 인해 테이블이 drop 경우, 아래와 같이 복구가 가능하다.

다만 해당 테이블에 속해 있는 Index Constraint등은 복구가 되지만 이름이 원래 이름으로 돌아오지 않으므로 매뉴얼 하게 수정이 필요하다.

step

장애 내용

처리 방법

1

테이블 삭제 발생

  

2

복구 가능여부 확인

SQL> select * from dba_recyclebin where original_name='<테이블명>';

3

flashback table drop 실행

flashback table <장애object> to before drop;

4

테이블의 인덱스 및 Constraint를 조사하여 원래 이름으로 변경

SQL> alter index <Drop된 인덱스 이름> rename to <Original 이름>;

SQL> alter table <Drop된 테이블 이름> rename constratin <Drop된 Constraint이름> to <Original 이름>;

   

아래는 복구 예제이다.

 SQL1 > select index_name from user_indexes where table_name = 'FLASHBACK_TEST';

   

Index Name

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

PK_FLASHBACK_TEST

IX_FLASHBACK_TEST_01

   

SQL1 > drop table flashback_test;

   

SQL1 > desc flashback_Test;

ERROR:

ORA-04043: object flashback_Test does not exist

   

SQL1 > select * from dba_recyclebin where original_name = 'FLASHBACK_TEST';

   

OWNER OBJECT_NAME ORIGINAL_NAME OPERATION TYPE

TS_NAME CREATETIME

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

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

DROPTIME DROPSCN PARTITION_NAME CAN CAN RELATED BASE_OBJECT PURGE_OBJECT SPACE

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

DBA01 BIN$HUCzSx+DYoLgRAAWNYRg4A==$0 FLASHBACK_TEST DROP TABLE

USERS 2011-12-21 21:19:41

2011-12-21 21:20:30 7.7763E+12 YES YES 1050494 1050494 1050494 512

   

SQL1 > flashback table FLASHBACK_TEST to before drop;

SQL1 > select index_name from user_indexes where table_name = 'FLASHBACK_TEST';

Index Name

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

BIN$HUCzSx+CYoLgRAAWNYRg4A==$0

BIN$HUCzSx+BYoLgRAAWNYRg4A==$0

SQL1 > alter index "BIN$HUCzSx+CYoLgRAAWNYRg4A==$0" rename to PK_FLASHBACK_TEST;

SQL1 > alter index "BIN$HUCzSx+BYoLgRAAWNYRg4A==$0" rename to IX_FLASHBACK_TEST_01;

SQL1 > select index_name from user_indexes where table_name = 'FLASHBACK_TEST';

   

Index Name

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

PK_FLASHBACK_TEST

IX_FLASHBACK_TEST_01

 

테이블 시점 복구(flashback table)

- 데이터 조작오류 (update 또는 delete) 의해 데이터가 논리적으로 손상되었을 경우,과거의 특정시점으로 테이블을 복구할수 있다. Undo retention 파라미터가 보증하는 시간까지만 복구가 가능하며, undo_retention 보증하는 시간범위를 초과하는 복구의 경우는 incomplete recovery 수행하여야 한다.

step

장애 내용

처리 방법

1

복구 상황 발생

  

2

특정 시점으로 flashback table 실행

SQL> alter table <테이블명> enable row movement;

SQL> flashback table <테이블명> to timestamp to_timestamp (<시간format>);

   

아래는 복구 예제이다.

Ex) AAA 테이블을 2014 03 11 11 20 시점으로 flash back

   

SQL> alter table DBM.AAA enable row movement;

SQL> flashback table DBM.AAA to timestamp to_timestamp ('2014/03/11 11:21:00','YYYY/MM/DD HH24:MI:SS');

( flashback전에 enable row movement 내용을 반드시 disable하지 않아도 된다)

 


블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,


Oracle RAC 11gR2 Management

   

 1.GRID & DB 기동 및 종료

기동

- 데이터베이스 기동과 관련된 절차는 다음과 같다.

순서

작업

비고

1

CRS 기동

CRS down 경우에만 실행

2

CRS 어플리케이션 기동

노드에서 명령어 실행(수동실행시)

3

LISTENER 기동

노드에서 명령어 실행(수동실행시)

4

DB 인스턴스 기동

노드에서 명령어 실행(수동실행시)

   

- CRS RAC 구성하는 노드 각종 리소스를 제어하는 프로세스이다.

- CRS 기동은 root권한으로 되어야 한다.

   

- 서버 재부팅 자동 기동된다. 아래 내용은 수동으로 기동하는 방법이다.

   

*DB 서버 각각의 노드에서 "root" 유저로 실행한다.

=>노드#1

# cd /gridhome/grid/bin

# ./crsctl start crs

   

=>노드#2

# cd /gridhome/grid/bin

# ./crsctl start crs

   

CRS 주요 프로세스는 아래와 같으며, CRS 상태 확인은 crsctl check crs 으로 가능하다.

$ps -ef | grep "d\.bin" | grep -v grep

root 3866688 1 0 Jan 18 - 114:41 /gridhome/grid/bin/crsd.bin reboot

oracle 4718796 1 0 Jan 18 - 23:25 /gridhome/grid/bin/gpnpd.bin

root 4849710 1 0 Jan 18 - 103:53 /gridhome/grid/bin/ohasd.bin reboot

oracle 6815908 1 0 Jan 18 - 1:13 /gridhome/grid/bin/mdnsd.bin

oracle 7012560 1 0 Jan 18 - 42:49 /gridhome/grid/bin/evmd.bin

oracle 5112196 1 0 Jan 18 - 110:59 /gridhome/grid/bin/gipcd.bin

oracle 5374298 5308576 1 Jan 18 - 204:38 /gridhome/grid/bin/ocssd.bin

root 6488528 1 0 Jan 18 - 47:04 /gridhome/grid/bin/octssd.bin reboot

root 38273316 1 3 Feb 06 - 728:28 /gridhome/grid/bin/osysmond.bin$cd $GRID_HOME/bin

   

$crsctl check crs

CRS-4638: Oracle High Availability Services is online

CRS-4537: Cluster Ready Services is online

CRS-4529: Cluster Synchronization Services is online

CRS-4533: Event Manager is online

   

CRS Application 기동

- 위의 2.1.1에서 CRS기동 자동 기동된다. 아래 내용은 수동으로 기동하는 방법이다.

- CRS 구성하는 어플리케이션은 아래 명령어로 기동한다.

   

* DB 서버{노드#1}에서 "oracle" 유저로 실행한다.

$srvctl start nodeapps -n HOSTNAME

$srvctl start nodeapps -n HOSTNAME

   

Listener 기동

- 위의 2.1.1에서 CRS기동 자동 기동된다. 아래 내용은 수동으로 기동하는 방법이다.

- LISTENER 아래 명령어로 기동한다.

   

* DB 서버{노드#1}에서 "oracle" 유저로 실행한다.

$srvctl start listener -n HOSTNAME

$srvctl start listener -n HOSTNAME

   

DB Instance 기동

- 위의 2.1.1에서 CRS기동 자동 기동된다. 아래 내용은 수동으로 기동하는 방법이다.

- DB인스턴스는 아래 명령어로 기동한다.

   

*DB 서버{노드#1}에서 "oracle" 유저로 실행한다.

$srvctl start database -d G_SID

   

CRS Application/Listener/DB Instance확인

$ crsctl status res -t

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

NAME TARGET STATE SERVER STATE_DETAILS

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

Local Resources

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

ora.TEST_ELSE.lsnr

ONLINE ONLINE hostname

ONLINE ONLINE hostname

ora.TEST_GIGA.lsnr

ONLINE ONLINE hostname

ONLINE ONLINE hostname

ora.TEST_1_ELSE.lsnr

ONLINE ONLINE hostname

ONLINE ONLINE hostname

ora. TEST_1_GIGA.lsnr

ONLINE ONLINE hostname

ONLINE ONLINE hostname

ora.gsd

OFFLINE OFFLINE hostname

OFFLINE OFFLINE hostname

ora.net1.network

ONLINE ONLINE hostname

ONLINE ONLINE hostname

ora.ons

ONLINE ONLINE hostname

ONLINE ONLINE hostname

ora.registry.acfs

OFFLINE OFFLINE hostname

OFFLINE OFFLINE hostname

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

Cluster Resources

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

ora.test.db

1 ONLINE ONLINE hostname Open

2 ONLINE ONLINE hostname Open

ora.cvu

1 ONLINE ONLINE hostname

ora.test_1.db

1 ONLINE ONLINE hostname Open

2 ONLINE ONLINE hostname Open

ora.oc4j

1 ONLINE ONLINE hostname

ora.hostname.vip

1 ONLINE ONLINE hostname

ora. hostname.vip

1 ONLINE ONLINE hostname

   

  - 중요 resource

- ora.[listener_name].lsnr -> listener 상태를 나타냄

- ora.net1.network -> public network 상태를 나타냄

- ora.[DB_name].db -> Database 상태를 나타냄

- ora.[hostname].vip -> VIP 상태를 나타냄(장애인 경우 failover 상태가 )

   

종료

- 데이터베이스 종료와 관련된 절차는 다음과 같다.

순서

작업

비고

1

CRS 어플리케이션 종료

노드에서 명령어 실행(오라클 유저로)

2

LISTENER 종료

노드에서 명령어 실행(오라클 유저로)

3

DB 인스턴스 종료

노드에서 명령어 실행(오라클 유저로)

4

CRS 종료

양쪽 노드에서 명령어 실행(root유저로)

5

서버 종료

양쪽 노드에서 명령어 실행(root유저로)

   

CRS Application 종료

- CRS 구성하는 어플리케이션은 아래 명령어로 종료한다.

   

* DB 서버{노드#1}에서 "oracle" 유저로 실행한다.

$srvctl stop nodeapps n HOSTNAME

$srvctl stop nodeapps -n HOSTNAME

   

LISTENER 종료

- LISTENER 아래 명령어로 종료한다.

   

* DB 서버{노드#1}에서 "oracle" 유저로 실행한다.

$srvctl stop listener -n HOSTNAME

$srvctl stop listener -n HOSTNAME

   

DB Instance 종료

- DB인스턴스는 아래 명령어로 종료한다.

   

*DB 서버{노드#1}에서 "oracle" 유저로 실행한다.

$srvctl stop database -d SID


블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,


Oracle RAC Failover


 1.FailOver 구성

 

  ① CTF(Connection Time Failover)

  • 기본적으로 RACA 구성하면 적용 .

  ② TAF(Transparent Application Failover)

  • TAF 별도의 구성작업 필요.

TAF_11G_TEST =

(DESCRIPTION = (LOAD_BALANCE=ON) (FAIL_OVER=ON)

(ADDRESS_LIST=

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.20X)(PORT = 1521))

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.20X)(PORT = 1521)))

(CONNECT_DATA=

(SERVICE_NAME = RAC)

(FAILOVER_MODE=

(TYPE=select)

(METHOD=PRECONNECT)

)

)

   

TYPE

1) Session : select fetch중에 Fail 발생 / Long Query 수행 재실행 필요

2) Select : Fetch중에 Fail 발생하더라도 Fetch 계속 / Fail시점에 부하 증가

METHOD

1) BASIC : Fail-Over 시점에 Connection 시도 / Fail 시점에 부하증가

2) Preconnect : Fail 시점이 아닌 Initial Connection 맺어 놓음 / Memory 사용량 증가(PGA)

   

  ③ JDBC FailOver 설정

jdbc:oracle:thin:@(DESCRIPTION= (LOAD_BALANCE=OFF)(FAILOVER=ON) (ADDRESS=(PROTOCOL=TCP) (HOST=서버주소1) (PORT=1521)) (ADDRESS=(PROTOCOL=TCP) (HOST=서버주소2) (PORT=1521)) (CONNECT_DATA=(SERVICE_NAME=서비스네임)))

 <pre>jdbc:oracle:thin:@(DESCRIPTION=(LOAD_BALANCE=OFF)(FAILOVER=ON)(ADDRESS=(PROTOCOL=TCP) (HOST=서버주소1) (PORT=1521))(ADDRESS=(PROTOCOL=TCP) (HOST=서버주소2) (PORT=1521))(CONNECT_DATA=(SERVICE_NAME=서비스네임)))

   

 2.FailOver TEST Scenario

Target

설명

비고

동작 후 상태

예상결과

Node 1

네트워크 1번 장애시 서비스 정상 유무 확인

Node1에 미리 접속되어있는 세션 alive 여부 확인

Listener shutdown

신규 세션은 2번노드로 접속

Node 2

네트워크 1번 장애시 서비스 정상 유무 확인

Node2에 미리 접속되어있는 세션 alive 여부 확인

Listener shutdown

신규 세션은 1번노드로 접속

Node 1

VIP FAILBACK 확인

  

  

  

Node 2

VIP FAILBACK 확인

  

  

  

Node 1, 2

Private Network 라인 절체 ( 브레인 스플릿 )

기존 세션 alive 여부 확인

CRS 재기동 후 통신X

신규 세션은 1번노드로 접속

Node 1

/etc/hosts의 VIP address 변경 후 cluster 시작

  

  

IP 관련 에러메시지와 함께 cluster(CRS) 시작 불가

Node 2

/etc/hosts의 VIP address 변경 후 cluster 시작

  

  

IP 관련 에러메시지와 함께 cluster(CRS) 시작 불가

Node 1

srvctl stop instance -d SID -i SID1

Node1에 미리 접속되어있는 세션 alive 여부 확인

Instance shutdown

신규 세션은 2번노드로 접속

Node 2

srvctl stop instance -d SID -i SID2

Node2에 미리 접속되어있는 세션 alive 여부 확인

Instance shutdown

신규 세션은 1번노드로 접속

Node 1

shutdown immediate

Node1에 미리 접속되어있는 세션 alive 여부 확인

  

신규 세션은 2번노드로 접속

Node 2

shutdown immediate

Node2에 미리 접속되어있는 세션 alive 여부 확인

  

신규 세션은 1번노드로 접속

Node 1

SID1의 oracle Instance의 smon을 kill로 죽였을 경우

  

Instance 재기동

신규 세션은 2번노드로 접속후 DB 재기동 후 다시 1번노드로 정상접속

Node 2

SID 2의 oracle Instance의 smon을 kill로 죽였을 경우

  

Instance 재기동

신규 세션은 1번노드로 접속후 DB 재기동 후 다시 2번노드로 정상접속

Node 1

srvctl stop listener -n node1

  

Listener shutdown

신규 세션은 2번노드로 접속, 기존세션 영향X

Node 2

srvctl stop listener -n node2

  

Listener shutdown

신규 세션은 1번노드로 접속, 기존세션 영향X

Node 1

Listener Process를 kill로 죽였을 경우

  

CRS가 Listener 재기동

신규 세션은 2번노드로 접속후 리스너 재기동 후 다시 1번노드로 정상접속, 기존세션 영향X

Node 2

Listener Process를 kill로 죽였을 경우

  

CRS가 Listener 재기동

신규 세션은 1번노드로 접속후 리스너 재기동 후 다시 2번노드로 정상접속, 기존세션 영향X

Node 1

crsctl stop crs

Node1에 미리 접속되어있는 세션 alive 여부 확인

CRS정지

신규 세션은 2번노드로 접속

Node 2

crsctl stop crs

Node2에 미리 접속되어있는 세션 alive 여부 확인

CRS정지

신규 세션은 1번노드로 접속

Node 1

kill -9

Node1에 미리 접속되어있는 세션 alive 여부 확인

즉시 재기동

영향 없음

Node 2

kill -9

Node2에 미리 접속되어있는 세션 alive 여부 확인

즉시 재기동

영향 없음

Node 1

kill -9

Node1에 미리 접속되어있는 세션 alive 여부 확인

즉시 재기동

영향 없음

Node 2

kill -9

Node2에 미리 접속되어있는 세션 alive 여부 확인

즉시 재기동

영향 없음

Node 1

kill -9

Node1에 미리 접속되어있는 세션 alive 여부 확인

ohasd.bin restart

영향 없음

Node 2

kill -9

Node2에 미리 접속되어있는 세션 alive 여부 확인

ohasd.bin restart

영향 없음

Node 1

kill -9

Node1에 미리 접속되어있는 세션 alive 여부 확인

즉시 서버 리부트

신규 세션은 2번노드로 접속

Node 2

kill -9

Node2에 미리 접속되어있는 세션 alive 여부 확인

즉시 서버 리부트

신규 세션은 1번노드로 접속

Node 1

kill -9

Node1에 미리 접속되어있는 세션 alive 여부 확인

즉시 서버 리부트

신규 세션은 2번노드로 접속

Node 2

kill -9

Node2에 미리 접속되어있는 세션 alive 여부 확인

즉시 서버 리부트

신규 세션은 1번노드로 접속

Node 1

shutdown -r now(init 6)

  

서버 다운

신규 세션은 2번노드로 접속

Node 2

shutdown -r now(init 6)

  

서버 다운

신규 세션은 1번노드로 접속

Node 1

전원 off

Node1에 미리 접속되어있는 세션 alive 여부 확인

서버 다운

신규 세션은 2번노드로 접속

Node 2

전원 off

Node2에 미리 접속되어있는 세션 alive 여부 확인

서버 다운

신규 세션은 1번노드로 접속

 


블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,


OCR, VOTE ASM Disk에서 RawDevice로 Disk 변경 TEST

  • 해당 TEST 내역은 개인적인 RAC 환경에서 진행한 내역으로 참고적으로 판단하여 사용하길 바란다.

   

1.OCR ASM Disk에서 RawDevice로 변경

OCR 상태조회

[root@rac1 bin]# ./ocrcheck

   

OCR Disk 변경

[root@rac1 bin]# ./ocrconfig -add /dev/OCR/ocr1

[root@rac1 bin]# ./ocrconfig -add /dev/OCR/ocr2

[root@rac1 bin]# ./ocrcheck

   

③ OCR ASM Disk 제거

[root@rac1 bin]# ./ocrconfig -delete +DATA

[root@rac1 bin]# ./ocrcheck

   

2.Vote ASM Disk에서 RawDevice로 변경

Vote ASM DISK Replace 진행(에러)

[root@rac1 bin]# ./crsctl replace votedisk /dev/VOTE/vote1

Now formatting voting disk: /dev/VOTE/vote1.

CRS-4256: Updating the profile

CRS-4602: Failed 27 to add voting file 2448120a036d4f11bf362b1db9d6ff0f.

Failure 27 with Cluster Synchronization Services while deleting voting disk.

Failure 27 with Cluster Synchronization Services while deleting voting disk.

Failure 27 with Cluster Synchronization Services while deleting voting disk.

CRS-4000: Command Replace failed, or completed with errors.

[root@rac1 bin]#

   

에러발생시에 아래와 동일하게 진행

   

Vote ASM DISK Replace 진행 (RAC1,RAC2 모두 STOP 이후 진행)

[CRS 재기동]

[root@rac1 bin]# ./crsctl start crs -excl -nocrs (crsctl stop crs 를 진행 이후)

CRS-4123: Oracle High Availability Services has been started.

CRS-2672: Attempting to start 'ora.mdnsd' on 'rac1'

CRS-2676: Start of 'ora.mdnsd' on 'rac1' succeeded

CRS-2672: Attempting to start 'ora.gpnpd' on 'rac1'

CRS-2676: Start of 'ora.gpnpd' on 'rac1' succeeded

CRS-2672: Attempting to start 'ora.cssdmonitor' on 'rac1'

CRS-2672: Attempting to start 'ora.gipcd' on 'rac1'

CRS-2676: Start of 'ora.cssdmonitor' on 'rac1' succeeded

CRS-2676: Start of 'ora.gipcd' on 'rac1' succeeded

CRS-2672: Attempting to start 'ora.cssd' on 'rac1'

CRS-2672: Attempting to start 'ora.diskmon' on 'rac1'

CRS-2676: Start of 'ora.diskmon' on 'rac1' succeeded

CRS-2676: Start of 'ora.cssd' on 'rac1' succeeded

[root@rac1 bin]#

[root@rac1 bin]#

   

[Vote disk 상태 확인]

[root@rac1 bin]# ./crsctl query css votedisk

[root@rac1 bin]#

[root@rac1 bin]#

   

[Vote Disk Replace, RawDevice로 변경]

[root@rac1 bin]# ./crsctl replace votedisk /dev/VOTE/vote1

[root@rac1 bin]# ./crsctl replace votedisk /dev/VOTE/vote2

[root@rac1 bin]# ./crsctl replace votedisk /dev/VOTE/vote3

   

CRS 정상 기동 확인

[root@rac1 bin]# ./crsctl stop crs

CRS-2791: Starting shutdown of Oracle High Availability Services-managed resources on 'rac1'

CRS-2673: Attempting to stop 'ora.cssd' on 'rac1'

CRS-2673: Attempting to stop 'ora.mdnsd' on 'rac1'

CRS-2677: Stop of 'ora.cssd' on 'rac1' succeeded

CRS-2673: Attempting to stop 'ora.gipcd' on 'rac1'

CRS-2677: Stop of 'ora.mdnsd' on 'rac1' succeeded

CRS-2677: Stop of 'ora.gipcd' on 'rac1' succeeded

CRS-2673: Attempting to stop 'ora.gpnpd' on 'rac1'

CRS-2677: Stop of 'ora.gpnpd' on 'rac1' succeeded

CRS-2793: Shutdown of Oracle High Availability Services-managed resources on 'rac1' has completed

CRS-4133: Oracle High Availability Services has been stopped.

[root@rac1 bin]#
[root@rac1 bin]# ./crsctl start crs

(생략)

..

[root@rac1 bin]# ./crsctl query css votedisk

 

   

[RAC 1번 작업 이후 2번에서도 해주어야 된다!]


블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,