Oracle

게시글 보기
작성자 유건데이타 등록일 2015-05-18
제목 Oracle7 / Oracle8 / OS에서 datafile의 block dump를 얻는 방법
Oracle7 / Oracle8 / OS에서 datafile의 block dump를 얻는 방법
------------------------------------------------------------

'block dump'는 database 내의 block의 내용을 dump받도록 해준다.
이렇게 얻어진 dump에는 block 내에 포함된 모든 내용을 포함하는데 단, 이것은
OS level의 image dump는 아니며, oracle에서 user가 이해하는 데 도움이 되도록
정해진 SYMBOL로 표현되므로 이렇게 얻어진 내용을 해석하기 위해서는
Oracle에 dependent하며, 별도의 자료를 참조하여야 한다.
여기에서는 해석 방법은 포함하지 않으며 dump를 얻는 방법에 대해서만 기술하였다.

1. Oracle7에서 block dump 사용하는 방법

oracle7에서 block dump를 얻기 위해서는 항상 database가 OPEN 상태에서만 가
능하며, datafile도 ONLINE 상태여야 한다.

(1) dump하고자 하는 block의 DBA를 십진수 값으로 얻는다.
file 번호와 block 번호를 이용해 DBA를 얻는 방법은
이용한다.

(2) 다음 문장을 실행하여 dump 내용을 포함하는 trace file을 생성한다.
sqlplus system/manager
SQL>alter session set events 'immediate trace name BLOCKDUMP level ';

(3) 다음과 같이 trace file이 생성된 위치를 확인한다.
os>svrmgrl
SVRMGR>connect internal
SVRMGR>show parameter user_dump_dest


2. Oracle8 에서 BLOCK DUMP

Oracle7에서는 block dump를 얻기 위해서는 DBA를 얻어야하고 DBA를 이용하여
dump를 생성하는 sql 문의 syntax도 친숙하지 않은 것이었다. Oracle8에서는
보다 간단하고 사용자에게 익숙한 형태로 block dump가 가능하도록 하였다.

sqlplus로 접속한 상태에서 아래에 나열된 것과 같이 file 이름이나 번호,
block 번호나 범위를 지정하여 dump를 얻을 수 있다.

- ALTER SYSTEM DUMP DATAFILE {'filename'}|{filenumber};
- ALTER SYSTEM DUMP DATAFILE {'filename'}|{filenumber} BLOCK {blockno};
- ALTER SYSTEM DUMP DATAFILE {'filename'}|{filenumber} BLOCK MIN {blockno}
BLOCK MAX {blockno};

여기에서 blockno는 dump하고자 하는 block의 십진수 값이다.
예를 들어 다음과 같이 하면 된다.

- ALTER SYSTEM DUMP DATAFILE 1 BLOCK 5586;
- ALTER SYSTEM DUMP DATAFILE 1 BLOCK MIN 5585 BLOCK MAX 5586;
- ALTER SYSTEM DUMP DATAFILE '/u01/oradata/MYDB/system01.dbf' BLOCK 98;

주의: 그런데 이 때 잘못된 block file number를 입력하는 등의 잘못된 명령에도
불구하고 'Statement processed'라는 정상 처리 형태의 메시지가 나타난다.
이러한 경우 trace file에는 dump 내용 대신 다음과 같은 오류 메시지가
적혀 있다.
Error: alter system dump datafile: input file # 100 is too big

BLOCK 절을 생략하면 datafile의 모든 block에 대해서 dump가 생성된다.
이 때 trace file의 크기는 MAX_DUMP_FILE_SIZE에 의해 제한을 받으므로 전체
block을 모두 포함하지 않는 dump가 생성될 수 있다.

{filenumber} 를 사용할 때에는 database는 항상 OPEN된 상태이고 file은 ONLINE
이어야 한다. 그리고 이 때의 {filenumber}는 tablespace 내의 상대적인 값이 아닌,
절대적인 값이어야 한다.

'filename' 을 사용하면 같은 block size를 가지고 있는 다른 데이타베이스의
데이타화일도 dump를 할 수 있다. 이러한 경우에 dump를 수행하는 instance는
최소한nomount는 되어야 한다. 즉 다음과 같이 하면 된다.

SVRMGR>startup nomount
SVRMGR>alter system dump datafile mnt3/rctest73/server/eykim/test01.dbf'
block 88;

dump의 결과가 저장되는 trace 화일은 USER_DUMP_DEST 디렉토리에 생성된다.
USER_DUMP_DEST를 확인하는 방법은 1-(3)번(Oracle7)에서 기술하였다.


3. OS block dump

UNIX: dd if=dbfile.dbf bs=2k skip={block} count=1 | od -x > dump.out
여기에서 {block}은 dump 하지 않기 위해 skip하고자 하는 block의 갯
수를 지정한다.

NT: 다음과 같은 제품들이 사용가능하다.
MKS Toolkit , FileView (Shareware), HEdit
Comment
등록된 코멘트가 없습니다.