Catalog Server 구성 테스트

- 시나리오

à 현재 복구 서버에 접속한 상태에서 rclient 에서 전체 백업을 수행

à 그 후 testdb에서 모든 control file 을 삭제한 후 DB를 종료

à 이 장애는 catalog server 를 사용하지 않으면 복구가 안 되는 장애이므로 catalog server 를 이용하여 복구

- 오류 발생 testdb 서버가 Noarchive log mode 였다.

- 다시 archive log mode 로 변경한 후 다시 실행해 봅니다.

- 다시 정상적으로 백업 되는 것을 확인 할 수 있습니다.

- 이제 testdb 의 컨트롤 파일을 모두 삭제하고 DB 를 재시작 해 보겠습니다.

 

- 이제 RMAN 으로 catalog server 에 접속해서 복구를 시작합니다.

- testdb 서버에서 restore controlfile 명령어를 실행하면 복구가 되는 것을 확인 할 수 있습니다.

- 다음을 통해 컨트롤 파일이 복구 된 것을 확인할 수 있습니다.

- 어라 abort 로 껐는데 복구 없이 올라온다. 이렇게 되면 안되는데 이상하다.

다시 한번 시도!! 컨트롤 지우고 다시 해봐야겠다

- 그래 이렇게 나와야 한다. 자세한 내용은 admin 에서… abort 로 종료를 하게되면 dirty database 가 되기 때문에 다음과 같이 나오게 된다

- 아차 싶다…. Redo log 파일은 rman 백업 대상에 제외된다. 또한 방금 resetlogs 옵션으로 DB를 올렸기 때문에 incanation number 가 증가 되었을 것이다. 그렇기 때문에 기존의 컨트롤 파일로 rman 으로 복구한 후 recover 를 하려 했으나 되질 않는다. 또한 Datafile 과 컨트롤 파일의 scn 또한 틀릴 것이다.

-Resetlogs 옵션으로 올린 후 꼭 백업을 다시 받아야 한다는 교훈을 새삼 느끼는 순간이다.

 

- 다른 방법으로 살렸다… 조심하자..

Recovery Catalog 구성

 

- Recovery catalog 란 RMAN 사용시에 RMAN 으로 백업 복구 작업을 하고 관련 정보를 저장해 두는 장소

- Recovery catalog Server 가 있을 경우 Recovery catalog 에 정보를 저장

1. Data file 및 Archive redo log file 의 백업 셋과 copy 된 이미지에 대한 정보

2. 백업 대상 서버의 물리적인 구조

3. 자주 사용하는 백업 스크립트(Recovery catalog Server 를 사용할 경우만 해당)

 

- Catalog Server 사용시 접속 방법 : rman target / catalog rcuser/rcuser@rcserver

- Catalog Server 미 사용시 접속 : rman target /

 

- rman 실행시 오류 발생

- 확인해보면 rman 의 경로가 다른 것으로 되어 있기에 변경 해 주면 됩니다.

 

1. Recovery Catalog DB 생성

- 운영 DB 와 Catalog DB 가 필요하므로 Clone DB를 같은 서버에 생성해서 만들도록 하겠습니다.

- Clone DB 를 만드는 것은 저의 다른 글을 참고 하시길

-ORACLE_SID=rcserver 로 하고 생성

- Clone DB 에서 작업

 

- 복구 카탈로그를 저장할 테이블 스페이스(rc_tbs01)을 생성

- 복구 카탈로그를 관리할 사용자 계정(rcuser)를 생성하고 권한을 설정

 

- tnsnames.ora 파일을 수정해 줍니다.

- testdb 에서 rcserver 로 접속이 되는지 테스트 합니다.

- 이 테스트를 위해서는 당연히 리스너가 실행되고 있어야 합니다.

 

 

$lsnrctl

LSNRCTL>start listener3

- testdb à rcserver 로의 접속 테스트

 

- testdb 서버에 rman 으로 접속하되 recovery catalog 서버에 접속합니다.

 

- 복구 카탈로그를 생성 합니다.

 

-이제 복구 서버에 testdb 서버가 등록되어 있는지 확인 합니다.

- rcserver 서버에서 확인 합니다.

- 아직 testdb 서버의 SID 가 등록되지 않았습니다.

- 위 작업은 testdb 서버에서 하는 작업 입니다.

- 다시 rcserver 에서 testdb 가 등록되었는지 확인 합니다.

- rcserver 에서의 테이블 스페이스와 testdb 의 테이블 스페이스를 각각 비교

- rcserver 에서의 확인은 당연히 rcuser 로 접속하거나 rcuser.rc_datafile 로 테이블을 select 해야 하는 것은 당연지사.

 

- testdb 에서의 테이블 스페이스 구조와 rcserver 의 rc_datafile 의 카탈로그 테이블의 구조가 같은 것을 확인할 수 있습니다.

Undo tablespace

- 사용자가 DML 을 수행할 경우 원본 데이터(undo data)들을 저장해 두는 특별한 Tablespace

- 사용자가 생성 가능하며 관리 할 수 있음

- Undo 라는 용어는 8i 버전까지 rollback 이라는 용어로 사용됨

 

1. Undo tablespace 의 특징

- Oracle Server Process 는 이 Tablespace 에 Undo segment 를 생성하고 기본적으로 각 사용자 별로 undo segment(ex: _SYSMU1$) 를 할당하여 관리하며 사용자는 관여할 수 없음

- Undo tablespace 는 Instance 당 여러 개가 동시에 존재 할 수 있지만 사용되는 것은 한번에 1개이다.

-> create undo tablespace undo01 datafile '/~~~~/undo01.dbf' size 10M 으로 만들어 줘도 파라미터에 적용 시키지 않으면 바뀌지 않음

- 관리 방법은 AUM(Automatic Undo Management) 과 MUM(Manual Undo Management) 이 있음 -> 9i 버전 부터는 AUM 방식을 권장

 

2. Undo Tablespace 의 사용 목적

- Transaction Rollback – 사용자가 rollback 이라는 명령어를 수행할 경우에 이곳에 저장된 undo data를 사용해서 rollback 을 수행함

- Read Consistency (읽기 일관성) –CR 작업을 통해 트랙잭션이 끝나지 않은 데이터는 변경 전 데이터를 보여줌.

- 다음 그림과 같이 update 가 발생하면 Datafile 에서 DB Buffer Cache 로 데이터 블록을 불러오게 되며 블록에는 lock 이 설정되어 아무도 내용을 볼 수 없는 상태

- 또한 원본 Data(Undo Data) 는 undo segment 에 저장되게 된다.

 

- Update 가 수행되던 중 사용자 2에 의해서 select 가 수행되었을 때 undo segment 에서 DB Buffer Cache 로 원본 Data 를 복사하여 사용자 2에게 결과값을 보여주게 됩니다. 대신 1(홍길동) Data 는 lock 이 설정되어 commit 이나 rollback 이 수행되기 전까지는 1 block 에 다른 사용자가 접근할 수 없습니다.

- Transaction Recovery (Instance recovery) : 운영 중이던 DB 서버가 비정상적으로 종료 되었을 때 Roll Forward 와 Roll backward 작업을 수행해서 Dirty Database 를 Clean DB 로 만들어 주는 과정에 사용됨

 

- Undo Parameter 확인

- 신규 Undo Tablespace 생성

SQL>create undo tablespace undo01

2 datafile '/data/temp2/undo01.dbf' size 10M

3 autoextend on;

Tablespace created.

- Undo tablespace 를 생성 하여도 파라미터 파일을 변경 하여야 함.

SQL>alter system set undo_tablespace=undo01;

 

-PFILE 의 경우 파라미터 값을 직접 변경해야 나중에 다시 DB Open 시 문제가 발생하지 않는다.

 

- 각 세션 별로 사용중인 undo segment 확인

SQL>select s.sid,s.serial#,s.username,r.name "ROLLBACK SEG"

1 from v$session s,v$transaction t,v$rollname r

2 where s.taddr=t.addr

3 and t.xidusn = r.usn;

 

 

3. Undo segment 할당되는 원리

- Undo tablespace 는 Data file 의 크기가 증가만 되고 절대 줄어들지 않는다.

<하늘색 : 트랜잭션 완료, 갈색 : 트랜잭션 미완료>

 

다음과 같이 사용자가 DML(E) 을 수행하게 되면 가장 먼저 Server Process 는 Undo Segment 를 확보하게 되는데 이 때 기존에 만들어져 있던 Segment 중 트랜잭션이 완료된 것이 없는지를 확인한 후 그 곳에 덮어쓰게 됩니다.

 

- 다음과 같이 완료된 트랜잭션이 존재하지 않을 경우 새로운 undo segment 를 새로 생성하게 됩니다.

- 이런 식으로 더 이상 빈 공간이 존재하지 않을 경우 Data file 의 저장 공간이 허요하는 범위까지 늘어나다가 만약 더 이상 공간이 없게 되면 하나의 Segment 에 2개 세션 이상의 undo data를 함께 기록하게 됩니다. 이것조차 불가능하게 된다면 해당 트랜잭션은 에러를 발생 합니다.

- Undo tablespace 의 용량을 줄이기 위해서는 새로운 Undo Tablespace 를 생성후 파라미터 값을 변경시킨 다음 기존 Undo Tablespace 를 삭제 하셔야 합니다.

 

4. 주요 Parameter

- undo_retention àcommit 수행 후에도 해당 undo segment 내의 데이터를 다른 서버 프로세스가 덮어 쓰지 못하고 일정 시간동안 대기 시켜주는 파라미터이며 이 파라미터는 undo segment 의 여분이 존재할 경우에만 적용되며 항상 보장하지 않습니다.

 

- undo_retention_guarantee à undo_retention 파라미터는 여분이 존재하지 않을 경우 undo segment 가 재사용 되어지는데 반해 undo_retention_guarantee 파라미터는 설정된 시간동안 무조건 보장해줍니다.

 

- Oracle 10g 버전 부터는 ORA-01555:Snapshot too old 라는 에러를 줄이기 위해 undo retention 을 자동으로 관리하는 기능을 제공합니다.

- 다음은 undo tablespace 를 확인하고 guarantee 로 바꿔주는 명령어

 

SQL>alter tablespace undotbs retention noguarantee;

- no guarantee 로 변경하는 명령어

 

- NOT APPLY 는 Undo tablespace 가 아니므로 적용할 수 없습니다.

실전! 오라클 백업과 복구
국내도서>컴퓨터/인터넷
저자 : 서진수
출판 : 생능출판사 2010.09.06
상세보기

'Oracle > Admin' 카테고리의 다른 글

Differences between a Connection and a Session  (0) 2011.10.06
ORACLE Overview of Primary Components  (1) 2011.09.30

DB 가 open 혹은 mount 상태일 때 Control file 백업 받기
SQL>alter database backup controlfile to '경로';

컨트롤 파일 재생성을 위한 trace 뜨는 방법
SQL>alter database backup controlfile to trace as '/경로/re.sql';
로 만들어 준 다음 DB shutdown 상태에서
SQL>@/경로/re.sql
 을 실행 시키면 mount 상태까지 올라간다.

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

Catalog Server 구성 테스트  (0) 2011.10.06
Recovery Catalog 구성  (0) 2011.10.06
Row Level Flashback  (0) 2011.10.04
백업파일이나 아카이브 로그에 문제 있을 때 복구하기  (1) 2011.10.04
SQL Loader  (0) 2011.10.04

우선 좀 읽어봐라!!!!!!!!!!!

Row Level Flashback

- 다음과 같이 kim 을 hong 으로 yeon 을 choi 로 update 를 수행 했습니다.

- 이제 hong 의 data 를 원래의 kim 으로 돌려 보겠습니다.

- 이 때 필요한 쿼리가 있는데 Flashback Version Query 입니다. 이 쿼리는 해당 데이터의 과거 변경 이력을 전부 찾아주는 쿼리 입니다. 9i 에서는 Flashback Query 가 지원되었는데 이는 특정 시점의 변경 내역만 알 수 있었습니다.

꼬한 Oracle 10g 부터 Version Query 가 추가 되면서 특정 시점만 조회하던 것보다 많은 구간을 검색할 수 있게 되었습니다.

Flashback Transaction Query 는 변경 사항을 취소시켜 이전 값으로 돌려주는 쿼리 입니다.

 

- 우선 데이터를 복구하기 위해 변경 이력을 확인해 보겠습니다.

- 위 내용은 kim 이 Insert(I) 되었다가 hong 으로 update(U) 되었다는 의미입니다. 이때 위와 같이 변경 건수가 적다면 찾기가 쉬울 수 있으나 여러 번의 변경이 이루어졌다면 시간으로 짐작을 해야 합니다. 이 때 변경 시간 확인은

Scn_to_timestamp() 라는 함수를 이용하여 추적 가능합니다.

 

SQL>select scn_to_timestamp(1156551) from dual;

- 위 내용을 보면 scn 번호 1156551 이 11년 10월 3일 8시 39분 00 초에 발생한 것을 확인할 수 있습니다.

- 이렇게 변경 사항을 찾은 뒤 transaction Query 를 수행하여 원래 데이터로 돌리면 됩니다.

- Flashback version Query (권한 필요 없음)

- Flashback transaction Query (Flashback_transaction_query 라는 뷰를 select 할 수 있는 권한이 필요)

- 권한이 없다면 다음과 같은 오류가 발생

SQL>grant select any transaction to scott;

- 가장 위의 쿼리가 변경해야하는 작업의 쿼리이므로 실행

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

Recovery Catalog 구성  (0) 2011.10.06
Control File Backup (DB Open or DB mount)  (0) 2011.10.05
백업파일이나 아카이브 로그에 문제 있을 때 복구하기  (1) 2011.10.04
SQL Loader  (0) 2011.10.04
DB Link 설정  (0) 2011.09.30

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

(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

SQL Loader

- SQL LOADER 는 다른 응용프로그램에 저장되어 있는 대량의 데이터를 오라클로 이전할 때 사용되는 유틸리티

 

- 확인사항

1) NLS_LANG 환경변수 확인

2) ORACLE_HOME 환경변수 확인

3) LD_LIBRARY_PATH 환경변수 확인

4) ORA_NLS33 혹은 ORA_NLS10 환경변수 확인

-> ORA_NLSxx 환경변수는 Character set 을 저장하고 있는 .nlb 파일의 위치를 지정하는 변수

- oracle 7 Ver

->ORA_NLS32=$ORACLE_HOME/ocommon/nls/admin/data

- Oracle 9 Ver

->ORA_NLS33 = $ORACLE_HOME/ocommon/nls/admin/data

->ORA_NLS10 = $ORACLE_HOME/nls/data

- Oracle 8,8i,9 Ver

->ORA_NLS33 = $ORACLE_HOME/ocommon/nls/admin/data

- Oracle 10g 이상

->ORA_NLS10=$ORACLE_HOME/nls/data

 

<SQL Loader>

 

- SQL Loader 의 특징

1. 입력 파일은 여러 개 가질 수 있다

2. 입력 파일의 여러 개의 레코드를 입력 시 하나의 논리적 레코드로 가공하여 한꺼번에 입력이 가능

3. 입력 필드가 고정길이나 가변길이로 가능

4. 입력 데이터가 문자, Binary, 날짜, packed 10진 데이터, zone 10진 데이터 등의 여러 가지 형태가 가능

5. 하나의 입력 데이터로 여러 테이블에 동시 입력이 가능

6. 테이블의 기존 데이터를 변경하거나 지우고 다시 입력하거나 추가 하는 등의 작업도 가능

7. SQL 함수를 사용하여 입력 가능

8. Sequence 를 사용하여 데이터를 순차적으로 입력 가능

 

 

 

$sqlldr (옵션 확인)

- 위 옵션에서 errors 옵션을 변경 후 작업

- Default 50 개에서 이상으로 변경 후 작업하는 것을 권장

- 만약 50개의 error 가 발생하면 더 이상 진행이 되지 않으므로 큰 용량의 데이터를 입력할 경우 충분하게 설정하는 것을 권장

EX 1> 입력할 데이터가 외부 프로그램 자료일 경우

- 위의 엑셀 파일을 csv(쉼표로 구분) 파일로 저장 (dept2.csv)

- dept2.csv 를 오라클 홈 으로 옮김.

- 입력할 테이블 dept2 를 생성

- SQL Loader 의 control file 을 생성

load data

infile "/home/oracle/dept2.csv"

into table dept2

fields terminated by ','

(deptno,dname,loc)

 

- 다음과 같이 실행

- 결과 확인

 

- 작업을 수행하면 Control file 과 같은 이름으로 확장자만 .log 로 작업 내용이 기록됨

 

EX 2> 입력 데이터가 control file 내부에 있을 경우

load data

infile *

replace

into table dept20

fields terminated by ',' optionally enclosed by '"'

(deptno,dname,loc)

begindata

12,"서울점","강남구"

22,"대전점","유성구"

33,"제주점","서귀포시"

41,"서울본사","서울"    

 

다음과 같이 dept2_02.ctl 파일을 생성 합니다.

load data

infile * ß 입력 데이터가 control file 내부에 있을 경우

Append ß 기존 내용 뒤에 신규 내용이 추가

into table dept20

fields terminated by ',' optionally enclosed by '"' ß 한글이"" 로 묶여 있다는 뜻

(deptno,dname,loc)

Begindata ß데이터 시작 부분

12,"서울점","강남구"

22,"대전점","유성구"

33,"제주점","서귀포시"

41,"서울본사","서울"

EX 3> 각종 파일 사용하기 (Bad file, discard file)

SQL>alter table dept2

2 modify deptno number(2);

- 오류 발생을 위해 다음과 같이 수정

- Data 확인

- 다음과 같이 수행

 

- 300,"제주점","서귀포시" 데이터가 누락됨

 

- dept2_02.log 파일 확인

- dept2_02.bad 파일을 수정하여 다시 입력

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

Row Level Flashback  (0) 2011.10.04
백업파일이나 아카이브 로그에 문제 있을 때 복구하기  (1) 2011.10.04
DB Link 설정  (0) 2011.09.30
Clone DB && DB Link (drop table 복구)  (0) 2011.09.29
Clone DB (drop table 복구)  (0) 2011.09.29

+ Recent posts