BBED (Block Browser and Editor)

 

< BBED 를 이용한 Block Recovery >

- Block 을 탐색하고 수정하는 유틸리티

- 사용을 위해서는 Linking 작업이 추가로 필요

 

10g Version

[oracle@rac1 lib]$ pwd

/home/oracle/product/10g/db/rdbms/lib

[oracle@rac1 lib]$ make -f ins_rdbms.mk

/home/oracle/product/10g/db/rdbms/lib/bbed

[oracle@rac1 lib]$ pwd

/home/oracle/product/10g/db/rdbms/lib

[oracle@rac1 lib]$ ls -l bbed

-rwxr-xr-x 1 oracle dba 554330 10월 21 15:33 bbed

[oracle@rac1 lib]$ cp bbed $ORACLE_HOME/bin/

[oracle@rac1 lib]$

Next Step – 모든 Version 동일

[oracle@rac1 lib]$ bbed

Password: blockedit (기본 암호)

 

BBED: Release 2.0.0.0.0 - Limited Production on Fri Oct 21 15:39:55 2011

 

Copyright (c) 1982, 2007, Oracle. All rights reserved.

 

************* !!! For Oracle Internal Use only !!! ***************

 

BBED>

 

BBED Option

 

옵션명

설명

BLOCKSIZE

편집할 데이터 파일의 블록 사이즈를 적어줍니다.

MODE 

BBED를 실행할 모드를 설정합니다.(browser or edit)

SILENT 

작업결과를 표준 출력으로 보여줄지를 제어(Y,N)

SPOOL

BBED 작업 log 를 bbed.log 파일에 저장할 것인지를 제어 (Y, N)

LISTFILE

작업할 파일의 목록을 적어줍니다.

CMDFILE 

실행할 파일들의 목록을 적어줍니다.

BIFILE

변경 전 파일의 이미지를 저장할 파일명을 적어줍니다.(기본값-Bifile.bbd)

LOGFILE

User log를 저장할 파일명을 지정합니다.(기본값- log.bbd)

PARFILE

BBED 를 실행할 때 사용할 파라미터 등을 적어주는 파일명을 지정합니다.

 

예제 (옵션사용)

 

SQL> select file#||' '||name||' '||bytes from v$datafile;

 

- 위 내용을 list file 을 만들어서 거기에 등록하고 listfile 옵션을 사용하여 bbed 를 실행

1 /dev/raw/raw6 628097024

2 /dev/raw/raw8 208666624

3 /dev/raw/raw7 313524224

4 /dev/raw/raw9 208666624

5 /dev/raw/raw10 9437184

6 /dev/raw/raw28 52428800

7 /dev/raw/raw30 20971520

8 /dev/raw/raw31 8388608

 

[oracle@rac1 lib]$ cd ~

[oracle@rac1 ~]$ vi filelist.log

[oracle@rac1 ~]$

 

[oracle@rac1 ~]$ vi bbed.par

blocksize=8192

listfile=/home/oracle/filelist.log

mode=edit

 

[oracle@rac1 ~]$ bbed parfile=bbed.par

 

BBED 명령어

 

1) help all

- BBED 관련 도움말을 보여 줍니다.

 

2) set dba

- 작업하고자 하는 데이터 파일과 블록을 지정.

- 여기에 지정될 데이터 파일은 listfile 에 등록되어 있어야 함

BBED> set dba 2,50

DBA 0x00800032 (8388658 2,50)

 

BBED>

- 위 명령은 2번 파일의 50번 블록에 작업을 하겠다고 설정하는 것입니다.

 

3) set filename

- 작업할 데이터 파일을 이름으로 지정합니다.

BBED> set filename '/dev/raw/raw30'

FILENAME /dev/raw/raw30

 

4) set file

- 작업할 데이터 파일을 번호로 지정합니다.

BBED> set file 8;

FILE# 8

 

5) set block

- 현재 설정되어 있는 파일에서 작업을 원하는 block 을 지정합니다.

BBED> set block 20

BLOCK# 20

 

6) set offset

- 현재 작업하기 원하는 offset 번호를 지정합니다.

 

7) set blocksize

- 현재 작업하는 파일의 blocksize 를 지정합니다.

BBED> set blocksize 8192

BLOCKSIZE 8192

 

8) set listfile

- 작업을 수행할 파일의 목록이 적혀있는 list file 을 지정합니다.

BBED> set listfile '/home/oracle/filelist.log'

LISTFILE /home/oracle/filelist.log

 

9) set width

- 현재 보이는 화면의 폭을 지정합니다.

BBED> set width 200

WIDTH 200

 

10) set count

- Dump 명령어 수행시 화면에 보여줄 data block 의 byte 수를 지정합니다.

BBED> set count 100

COUNT 100'

 

11) set ibase

- 내부적으로 사용되는 값들의 표현식을 지정합니다.

- 기본값은 10진수이며 16진수(Hexadecimal) 이나 8진수(Octal) 로 변경 가능합니다.

 

12) set obase

- 기능 모름

 

13) set mode

- BBED 수행 mode 를 설정 합니다.

 

14) set spool

- 기능 모름

 

15) show

- 현재 설정되어 있는 내용들을 보여줍니다.

BBED> show

FILE# 1

BLOCK# 1

OFFSET 0

DBA 0x00400001 (4194305 1,1)

FILENAME /dev/raw/raw6

BIFILE bifile.bbd

LISTFILE /home/oracle/filelist.log

BLOCKSIZE 8192

MODE Edit

EDIT Unrecoverable

IBASE Dec

OBASE Dec

WIDTH 200

COUNT 100

LOGFILE log.bbd

SPOOL No

 

16) info

- 현재 작업중인 파일 내용을 보여줍니다.

BBED> info

File# Name Size(blks)

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

1 /dev/raw/raw6 76672

2 /dev/raw/raw8 25472

3 /dev/raw/raw7 38272

4 /dev/raw/raw9 25472

5 /dev/raw/raw10 1152

6 /dev/raw/raw28 6400

7 /dev/raw/raw30 2560

8 /dev/raw/raw31 1024

 

17) map

- 현재 작업중인 블록에 대한 자세한 정보를 보여줍니다.

BBED> map /v dba 1,20

File: /dev/raw/raw6 (1)

Block: 20 Dba:0x00400014

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

Undo Data

 

struct kcbh, 20 bytes @0

ub1 type_kcbh @0

ub1 frmt_kcbh @1

ub1 spare1_kcbh @2

ub1 spare2_kcbh @3

ub4 rdba_kcbh @4

ub4 bas_kcbh @8

ub2 wrp_kcbh @12

ub1 seq_kcbh @14

ub1 flg_kcbh @15

ub2 chkval_kcbh @16

ub2 spare3_kcbh @18

 

struct ktubh, 82 bytes @20

struct ktubhxid, 8 bytes @20

ub2 ktubhseq @28

ub1 ktubhcnt @30

ub1 ktubhirb @31

ub1 ktubhicl @32

ub1 ktubhflg @33

ub2 ktubhidx[34] @34

 

ub1 freespace[346] @102

 

ub1 undodata[7740] @448

 

ub4 tailchk @8188

 

18) dump

- Block 의 내용을 실제 dump 해서 화면에 보여주는 명령어

- 자세한 내용을 알기 위해 /v 옵션을 함께 사용하는 경우가 많습니다.

- DBA, filename, file, block, offset 등 set 명령어로 설정된 값들을 다 조회 가능

 

- 다음은 1번 파일의 10번 블록을 offset 1-127 번까지 dump 를 수행한 내용입니다.

BBED> set width 100

WIDTH 100

 

BBED> dump /v dba 1,10 offset 0 count 128

File: /dev/raw/raw6 (1)

Block: 10 Offsets: 0 to 127 Dba:0x0040000a

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

02a20000 0a004000 4e870200 00000104 l ......@.N.......

284e0000 00004800 27000000 36001f1f l (N....H.'...6...

0000e81f ec1ef01d f41cf81b fc1a001a l ................

04190818 0c171016 14151814 1c132012 l .............. .

24112810 2c0f300e 340d380c 3c0b400a l $.(.,.0.4.8.<.@.

44094808 4c075006 54055804 5c036002 l D.H.L.P.T.X.\.`.

64010000 00000000 00000000 00000000 l d...............

00000000 00000000 00000000 00000000 l ................

 

<16 bytes per line>

 

19) (p)rint

- 현재 작업중인 정보를 보여줍니다.

BBED> p

kcbh.type_kcbh

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

ub1 type_kcbh @0 0x02

 

BBED> p kcbh

struct kcbh, 20 bytes @0

ub1 type_kcbh @0 0x02

ub1 frmt_kcbh @1 0xa2

ub1 spare1_kcbh @2 0x00

ub1 spare2_kcbh @3 0x00

ub4 rdba_kcbh @4 0x0040000a

ub4 bas_kcbh @8 0x0002874e

ub2 wrp_kcbh @12 0x0000

ub1 seq_kcbh @14 0x01

ub1 flg_kcbh @15 0x04 (KCBHFCKV)

ub2 chkval_kcbh @16 0x4e28

ub2 spare3_kcbh @18 0x0000

 

BBED>

 

20) e(x)amine

- 이 명령어는 DBA, filename, file, block, offset 등의 값을 정해진 포멧형식으로 보여줍니다.

BBED> x

kcbh.type_kcbh @0

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

0x02

 

BBED> x /2

kcbh.type_kcbh @0

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

0x02 0xa2

 

BBED> x /b

kcbh.type_kcbh @0

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

0x02

 

BBED> x /h

kcbh.type_kcbh @0

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

0xa202

 

BBED> x /w

kcbh.type_kcbh @0

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

0x0000a202

 

BBED> x /l

kcbh.type_kcbh @0

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

0x0000a202

 

BBED> x /r

kcbh.type_kcbh @0

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

BBED-00402: operation only allowed for data/index blocks

 

- 옵션

/b : bytes 단위로 보여줌

/h : half-word 단위로 보여줌

/w : word 단위로 보여줌

/l : long 단위로 보여줌

/r : table/index row 를 보여줌

 

21) (f)ind

- 원하는 데이터를 찾아내는 기능

 

BBED> set file 7

FILE# 7

 

BBED> show

FILE# 7

BLOCK# 10

OFFSET 0

DBA 0x01c0000a (29360138 7,10)

FILENAME /dev/raw/raw30

BIFILE bifile.bbd

LISTFILE /home/oracle/filelist.log

BLOCKSIZE 8192

MODE Edit

EDIT Unrecoverable

IBASE Dec

OBASE Dec

WIDTH 100

COUNT 128

LOGFILE log.bbd

SPOOL No

 

BBED> find /c EW

File: /dev/raw/raw28 (6)

Block: 1 Offsets: 342 to 391 Dba:0x01800001

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

45570000 00000000 00000000 00000000 00000000 00000000 00000600 00000000

00000000 00009671 982d0000 00000000 0000

 

<32 bytes per line>

 

BBED>

BBED> d /v dba 6,1 offset 342 count 50

File: /dev/raw/raw28 (6)

Block: 1 Offsets: 342 to 391 Dba:0x01800001

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

45570000 00000000 00000000 00000000 l EW..............

00000000 00000000 00000600 00000000 l ................

00000000 00009671 982d0000 00000000 l .......q.-......

0000 l ..

 

<16 bytes per line>

 

BBED>

 

- find 명령어와 쓸 수 있는 옵션

/x : 16진수 값을 찾습니다.

/d : 10진수 값을 찾습니다.

/u : 부호없는 10진수 값을 찾습니다.

/o : 8진수 값을 찾습니다.

/c : 문자값을 찾습니다.

à find 명령어는 날짜와 숫자 값 검색은 지원하지 않습니다.

 

22) copy

- 이 명령어는 블록을 복사하는 명령어

 

 

BBED> copy dba 6,1 to dba 7,1

File: /dev/raw/raw30 (7)

Block: 1 Offsets: 342 to 391 Dba:0x01c00001

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

45570000 00000000 00000000 00000000 00000000 00000000 00000600 00000000

00000000 00009671 982d0000 00000000 0000

 

<32 bytes per line>

 

BBED>

- 위 명령어는 6번 파일의 1번 블록을 7번 파일의 1번 블록으로 복사하라는 명령어

- 이 명령어는 백업 파일에서 특정 블록만을 운영 파일 등으로 복사해 올 때만 조심해서 사용해야 합니다.

 

RAC 복구 (Redo log file 전체 손상)

 

Case :

- Redo log file 전체 손상

- Archive log mode

- Begin Backup 존재

 

작업 순서

  1. 모든 노드에서 DB 정상 종료 후 Begin Backup 수행
  2. DB Open 후 Test 용 데이터 생성
  3. 장애 발생 후 Shutdown immediate 로 정상 종료
  4. Backup File 복원
  5. Archive file 복사
  6. 복구 수 resetlogs 로 DB open

 

Step 1. Begin Backup 수행

SQL> alter tablespace system begin backup;

SQL> !dd if=/dev/raw/raw6 of=/data/backup/open/raw6_system bs=8k

SQL> alter tablespace system end backup;

 

Step 2. DB Open 후 Test용 데이터 생성

- 데이터 삽입 후 commit 그리고 Switch 발생

 

-다시 데어터 삽입 후 commit 하지만 Switch 를 발생 안시킵니다.

 

 

Step 3 이제 redo log file 에 장애를 발생 시키겠습니다.

그리곤 정상 종료

SQL>shutdown immediate;

- 강제 종료 됩니다.

Stet 4. 백업 Data 파일 복원(open/close 상관 없음)

 

Step 5. Archive File 복사

- Archive 파일이 대단히 많아야 정상이지만 Backup 을 받은 후 Archive 파일을 정리 해준 것 같다.

 

Step 6. 복구 후 resetlogs 로 Open

 

- 3 을 제외한 나머지는 복구 완료 되었습니다.

- 당연한 얘기지만 log switch 가 발생되지 못했고 shutdown immediate 를 하여 정상 종료를 시도 했지만 terminated 되었기 때문에 archive log 파일이 생성되지 못했던 데이터에 대해서는 복구가 되질 않았습니다.

 

RAC (Archive mode 에서 장애 복구)

 

Case :

- Offline 안되는 테이블 스페이스 장애 발생 (Archive 파일이 필요한 경우) – system tablespace

- Backup 파일 존재

 

- 장애 발생 상황

- tt03 테이블을 system 테이블스페이스에 생성 후 Data를 입력 합니다.

- 데이터를 insert 한 후 log switch 를 발생 시킵니다.

- /dev/zero 파일로 덮어 씌웁니다.

- 잠시 후 인스턴스가 강제 종료되는 것을 alert log 를 통해 확인 할 수 있습니다.

- 복구

1. 클러스터를 확인하면 오류로 인해 강제 종룔 된 것을 확인 할 수 있습니다.

$crs_stat -t.

2. 노드 2 에서 아카이브 파일을 복사해 옵니다.

3. 복구를 수행합니다.

SQL>recover database;

- auto

SQL>alter database open;

- 양 쪽 노드 모두 Open 시킨 후 확인 합니다.

'Oracle > Backup&Recover' 카테고리의 다른 글

DBVerify 실행하기  (0) 2011.10.19
RAC 복구 (Redo log file 전체 손상)  (0) 2011.10.19
RAC (Archive mode 에서 장애 복구 2)  (0) 2011.10.18
RAC (Archive mode 에서 장애 복구 1)  (0) 2011.10.18
Raw Device 백업(Cold backup)  (0) 2011.10.18

RAC (Archive mode 에서 장애 복구 2)

 

Case :

- Offline 되는 테이블 스페이스 장애 발생 (Archive 파일이 필요한 경우)

- Backup 파일 존재

 

- 장애 발생 상황

- tt02 테이블을 ts_new 테이블스페이스에 생성 후 Data를 입력 합니다.

- 데이터를 insert 한 후 log switch 를 발생 시킵니다.

- /dev/zero 파일로 덮어 씌웁니다.

- alter tablespace ts_new offline immediate; 시킨 후 복구를 수행 합니다.

 

- 복구

1. 파일을 백업 파일로부터 복원 합니다.

2. 복구를 시도 하지만 실패 하는 것을 확인 할 수 있습니다.

3. 복구를 수행합니다.

SQL>recover tablespace ts_new;

- auto

SQL>alter tablespace ts_new online;

 

4. 만약 3번 과정에서 archive log 파일이 필요하다는 Message 가 나올 수 있다.

ORA-00308: cannot open archived log '/경로/xx.dbf' ß 이 Message 는 현재 노드에 Archive log 파일이 존재 하지 않기 때문에 발생하는 것으로 해당 노드에서 Archive log 파일을 현재 복구작업을 하는 노드의 log_archive_dest_x 경로로 복사해 와야 한다.

RAC (Archive mode 에서 장애 복구 1)

 

Case :

- Offline 되는 테이블 스페이스 장애 발생 (Archive 파일이 필요 없는 경우)

- Backup 파일 존재

 

- 장애 발생 상황

- tt01 테이블을 ts_new 테이블스페이스에 생성 후 Data를 입력 합니다.

- ts_new tablespace offline 시킨 후 /dev/zero 파일로 덮어 씌웁니다.

- online 이 되지 않고 장애가 발생 한 것을 확인 할 수 있습니다.

- 복구

1. 복구를 시도 하지만 실패 하는 것을 확인 할 수 있습니다.

2. backup file 을 /dev/raw/raw28 로 복사합니다.

SQL>dd if=/data/backup/close/raw28_ts_new of=/dev/raw/raw28 bs=8k

3. 복구를 수행합니다.

SQL>recover tablespace ts_new;

SQL>alter tablespace ts_new online;

백업파일이나 아카이브 로그에 문제 있을 때 복구하기

(Clone DB // Export&Import 사용)

 

- noarchive log mode 로 변경

- alter database noarchivelog;

- begin backup 없이 copy 명령어로 백업 수행

- 백업파일의 SCN 정보다 서로 불일치

-

- conn / as sysdba;

SQL>!rm –rf /home/temp1/example01.dbf ß장애 발생

SQL>shutdown abort;

ORACLE instance shut down.

SQL>startup

- 이제 ORACLE_SID 를 testdb3 로 하고

/data/temp2 아래에서 복구 수행

- db_name='testdb3'

- control_file='/data/temp2/control01.ctl'

 

 

- testdb 에서 trace 파일 생성 (컨트롤파일 재성성을 위해)

- resetlogs 용으로 remake.sql 파일 수정

- redo log file 들을 temp2 로 복사

$cp /data/temp1/redo* /data/temp2

-> testdb 의 redo log 파일을 사용할 것이다.

- 복구시도

 

-> 하지만 복구가 되지 않는다. 아카이브 파일이 없어서 복구가 안됨

 

-> 히든 파라미터 적용하기

- 파라미터 파일에 다음을 적용하고 DB를 종료하고 다시 시작한다.

SQL>alter session set events '10015 trace name adjust_scn level 1';

- 안 올 라 온 다 ㅡ,ㅡ;;

SQL>alter session set events '10015 trace name adjust_scn level 2';

다시 시도 level 2 로 바꿔준다. 이렇게 3까지 간다.

 

이것도 안되면

1 startup mount

2. recover database

3. alter database open

이렇게만 실행

- alert log 파일을 보면 인스턴스를 open 시 강제로 terminated 시킨다. 이렇게 될 경우 위 처럼 수행하면 됨.

이렇게 확인 후 파라미터 파일에서 3개의 히든 파라미터를 삭제 시켜주어야 한다.

이 후 전체 DB 를 export 로 백업을 받아야 함.

이렇게 해도 안올라오면 답이 없다

'Oracle > Backup&Recover' 카테고리의 다른 글

Control File Backup (DB Open or DB mount)  (0) 2011.10.05
Row Level Flashback  (0) 2011.10.04
SQL Loader  (0) 2011.10.04
DB Link 설정  (0) 2011.09.30
Clone DB && DB Link (drop table 복구)  (0) 2011.09.29

+ Recent posts