반응형

SAR = cpu 사용량

 -u : cpu 사용률 표시 

 

%usr : user mode 에서 작동한 CPU 가동률

%sys : kernel mode 에서 작동한 CPU 가동률

%wio : is wait 상태로 있었던 CPU 대기율

%idle : idle 상태로 있었던 CPU 대기율

physc : 현재사용중인 cpu 개수

 

#sar

AIX klisdb 3 5 00C4B3C74C00    12/17/14

System configuration: lcpu=8  mode=Capped

00:00:00    %usr    %sys    %wio   %idle   physc
01:00:00       2           0         0        98       4.00
02:00:00       2           0         0        98       4.00
03:00:00       2           0         1        97       4.00
04:00:00       4           2         1        93       4.00
05:00:00       2           0         0        97       4.00
06:00:00       6           1         1        92       4.00
07:00:00       2           0         0        98       4.00
08:00:00       2           0         0        98       4.00
08:20:00       2           0         0        98       4.00
08:40:00       2           0         0        97       4.00
09:00:00       2           0         0        97       4.00
09:20:00       4           0         1        95       4.00
09:40:00       3           0         1        96       4.00
10:00:00       4           0         0        95       4.00
10:20:00       4           0         2        94       4.00
10:40:00       5           1         3        92       4.00
11:00:00       4           0         0        96       4.00
11:20:00       3           0         0        96       4.00
11:40:00       3           0         0        96       4.00
12:00:00       3           0         1        96       4.00
12:20:00       3           0         0        97       4.00
12:40:00       2           0         0        97       4.00
13:00:00       2           0         0        97       4.00
13:20:00       3           0         0        96       4.00
13:40:00       4           0         0        96       4.00
14:00:00       3           0         0        96       4.00
14:20:00       4           0         0        96       4.00
14:40:00       3           0         0        96       4.00

Average       3          1         0        96       4.00

 

vmstat : 실제 자원과 논리적 자원의 활용도를 확인할 수 있다.

 

# vmstat 2 5 (2초씩 5번 나오게)

System configuration: lcpu=8 mem=32768MB

kthr    memory              page              faults        cpu
----- ----------- ------------------------ ------------ -----------
 r  b   avm         fre    re  pi  po  fr   sr cy  in   sy    cs    us sy  id wa
 1  1 3772315 3210933   0   4   0   0    0   0 256 7874 2386   4  1    95  0
 0  0 3772315 3210933   0   0   0   0    0   0  66  625 325     1   0    99  0
 0  0 3772315 3210933   0   0   0   0    0   0  95 1426 688     1  0    99  0
 2  0 3772315 3210892   0   0   0   0    0   0 732 17240 5887 11 1    88  0
 1  0 3775092 3208100   0   0   0   0    0   0 119 3406 1014   3   1   97  0

 

kthr (초당 변경되는 커널 스레드 상태)

 -r : 1초 간격으로 실행 큐에 놓여 있는 프로세스들의 수, 실행 가능한 프로세스들의 수

 -b : 1초 간격으로 대기 큐에 있는 프로세스들의 수

 

memory (가상 및 실제 메모리의 사용량 정보)

 -avm : Active Virtual Memory pages ( 페이징 공간에 할당된 평균 페이지 수(4K) )

 -fre : size of the free list ( 할당되지 않은 실제 메모리(4K) )

 

page (페이지 오류나 페이징 활성화 정보)

 -re : 재요청된 페이지들의 수, AIX 4 이후로 미 지원

 -pi : 페이징 공간에서 메모리로 들어온 페이지 수

 -po : 메모리에서 페이징 공간으로 나온 페이지 수

 -fr : 페이지 대체 알고리즘에 의해 자유롭게 된 페이지 수

 -sr : 페이지 대체 알고리즘에 의해 확인된 페이지 수

- cy : 페이지 테이블을 조회한 정도를 표시

 

faults

 -in : device interrupt의 수를 나타냄

 -sy : system call의 수를 나타냄

 -cs : context switching의 수를 나타냄

 

cpu

 -us : user mode 에서 소비된 cpu시간의 백분율을 나타냄

 -sy : system mode 에서 소비된 cpu 시간의 백분율을 나타냄

 -id : delay 된 disk I/O가 없는 상태에서 CPU가 idle 한 시간을 나타냄

 -wa : delay된 disk I/O가 있는 상태에서 CPU가 idle 한 시간을 나타냄

반응형

'System Engineer' 카테고리의 다른 글

AIX TCP_Wrapper 설치  (2) 2015.10.01
AIX / Solaris CPU 확인  (0) 2014.12.30
DB관리시 체크 항목  (0) 2014.12.18
AIX Device 확인  (0) 2014.12.18
RAID 구성  (0) 2014.12.18
주로 사용하는 Dictionary View  (0) 2014.12.18
반응형

반응형

'OWI' 카테고리의 다른 글

래치(Latch) 와 락(Lock)  (0) 2014.12.09
반응형

래치와 락의 차이점

 

 분류 

 래치 

 락 

 목적 

  하나의 목적을 수행 :

 메모리 구조에 대한 배타적인 접근을 위함

(오라클 9i 부터 cache buffers chains latch 들은 읽기 전용시 공유 가능)

  두 가지 목적을 수행 -

 락모드가 호환 가능 : 다수의 프로세스가 동일 리소스를 공유하는 것을 허용

 락모드가 호환 불가능 : 리소스에 대한 배터적인 접근만 허용

 사용범위

 SGA내부의 데이터 구조에만 적용.

 메모리 오브젝트를 임시적으로 보호.

 단일 오퍼레이션으로 메모리 구조에 대한 접근 제어

 트랜잭션 단위가 아님

 테이블, 데이터 블록 및 state object 와 같은 오브젝트를 보호함.

 데이터베이스의 데이터 또는 메타데이터 접근 제어

 트랜잭션 단위

 획득방식

 두가지 모드로 요청 가능 : willing-to-wait 또는 no-wait

 6가지 모드로 요청 가능 : null, row share, row exclusive,share, share row exclusive 또는 exclusive

 범위

 SGA내부에 정보가 존재하며, 로컬 인스턴스에서만 볼 수 있음 - 래치는 인스턴스 레벨로 작동

 데이터베이스 내부에 정보가 존재하며, 모든 인스턴스에서 볼 수 있음 - 락은 데이터베이스 레벨에서 작동

 복잡도

 단순한 명령어를 사용하여 구현

 일반적으로 test-and-set, compare-and-swap 또는 단순한 CPU명령어. 구현이 쉬움

 문맥 교환(context switch)을 포함한 일련의 명령어들을 사용하여 구현됨.

 구현이 복잡함

 지속기간

 아주 짧은 순간만 지속 ( microsecond단위 )

 일정 시간 동안 지속됨 (트랜잭션 동안)

 큐 (Queue)

 프로세스가 래치 획득을 실패한 후 슬립 상태로 들어갈 때, 해당 요청은 큐로 관리되지 않으며, 요청한 순서대로 서비스 되징 않음 (latch wait list를 이용하여 큐 방식으로 사용되는 래치들은 예외)

 프로세스가 락 획득을 실패한 후, 해당 요청은 큐로 관리

 요청한 순서대로 서비스됨 ( NOWAIT 모드는 예외 )

 데드락

 래치는 데드락이 발생되지 않도록 구현됨

 락은 큐 방식을 사용하며, 데드락이 발생될 가능성이 높음.

 데드락이 발생 될 때마다 트레이스 파일 생성

 

래치란?

 - 락 중에서 아주 빠른 속도로 작동하게끔 구현된 경량화된 락

 - Shared Pool 영역에 존재하는 일종의 메모리 구조체

 

래치가 보호하는 리소스

 - SGA에 접근하는 모든 프로세스는 반드시 해당 영역을 관장하는 래치를 획득한 후에만 접근이 허용됨.

 

래치를 획득하는데 실패한 프로세스는 래치를 획득할 수 있을 때까지 특정 대기 이벤트를 기다림

 

 

 

반응형

'OWI' 카테고리의 다른 글

redo log owi  (0) 2014.12.11
반응형

11g는 Targetless Duplicate 기능으로 target DB에 접속하지 않고 Backpset 과 Archive log 파일만을 이용해 CloneDB구성이 가능


1. RMAN 으로 전체 데이터베이스 백업

[oracle@localhost~] $ rman target /

RMAN> backup as compressed backupset format '/data/rman/%U_%T' database ;


2. test 테이블 생성 및 drop

[oracle@localhost~] $ sqlplus / as sysdba

SYS> create table scott.test

  2    (no number,

  3    name varchar2(10)) ;


SYS> insert into scott.test values(1, '김효섭') ;


SYS> insert into scott.test values(2, '홍길동') ;


SYS> commit ;


SYS> select * from scott.test ;


NO    NAME

---------

1       김효섭

2       홍길동


SYS> alter system switch logfile ;


SYS> /


SYS> /


SYS> /


SYS> select to_char(sysdate,'yyyy-mm-dd:hh24:mi:ss') from dual ;


TO_CHAR(SYSDATE,'Y

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

2014-11-17:04:00:00


SYS> drop table scott.test purge ;


3. Clone DB 용 Parameter File 생성 및 수정

--spfile 일 경우 : 

SYS> create pfile='/app/oracle/product/11g/dbs/initclone.ora' from spfile ;


--pfile 일 경우 : 

SYS> !cp /app/oracle/product/11g/dbs/inittestdb.ora /app/oracle/product/11g/dbs/initclone.ora


SYS> ! vi /app/oracle/product/11g/dbs/initclone.ora


수정

db_name='clone'

control_files='/data/db/clone/control01.ctl'

#memory_target=823132160  주석처리

추가

db_file_name_convert=('/data/temp4/','/data/db/clone')           /data/temp4 는 현재 운영중인 데이터파일 경로

log_file_name_convert=('/data/temp4/','/data/db/clone')          /data/temp4 는 현재 운영중인 로그 파일 경로


4. Clone DB 구성용 디렉토리 생성

[oracle@localhost~] $ mkdir -p /data/db/clone

[oracle@localhost~] $ mkdir -p /app/oracle/admin/clone

[oracle@localhost~] $ mkdir -p /app/oracle/admin/clone/adump

[oracle@localhost~] $ mkdir -p /app/oracle/admin/clone/dpdump


5. Archive log 파일을 backupset 이 있는 경로에 복사

[oracle@localhost~] $ cp /data/arc1/* /data/rman/


6. RMAN 의 Targetless DUPLICATE 를 이용하여 시간기반 무정지 복구

[oracle@localhost~] $ export ORACLE_SID=clone

[oracle@localhost~] $ export NLS_DATE_FORMAT='YYYY-MM-DD:HH24:MI:SS'

[oracle@localhost~] $ sqlplus / as sysdba

SYS> startup nomount       <-- 파라미터파일 밖에 없어서 노마운트까지만 오픈 

SYS> exit


[oracle@localhost~] $ rman auxiliary /

RMAN > duplicate database to 'clone'

   2     pfile='/app/oracle/product/11g/dbs/initclone.ora'

   3     nofilenamecheck

   4     backup location '/data/rman'

   5     until time '2014-11-17:04:00:00' ;


----------복구중----------


RMAN> exit


SYS> select * from scott.test ;


NO    NAME

---------

1       김효섭

2       홍길동


복구 끝!


7. exp/imp로 복구한 테이블을 운영 DB에 입력

[oracle@localhost~] $ exp scott/tiger file=/home/oracle/test.dmp tables=test


[oracle@localhost~] $ export ORACLE_SID=testdb


[oracle@localhost~] $ imp scott/tiger file=/home/oracle/test.dmp ignore=y


[oracle@localhost~] $ sqlplus / as sysdba


SYS> select * from scott.test ;


NO    NAME

---------

1       김효섭

2       홍길동


반응형

'오라클 > 백업/복구' 카테고리의 다른 글

TTS(Transportable Tablespace) Migration  (1) 2015.07.24
RMAN 복구하기  (0) 2014.11.14
RMAN  (0) 2014.11.13
Flashback  (0) 2014.11.12
Clone DB  (0) 2014.11.10
sql loader  (0) 2014.11.10
데이터 이동하기  (0) 2014.11.06
반응형

삭제된 파일 복구 방법. ( offline 되는 데이터 파일 삭제된 경우 ) - DB 종료없이 복구


1. 전체 full 백업

2. 파일 삭제

3. 복구

RMAN> sql 'alter tablespace test offline immediate' ;           <-- 해당 데이터파일이 속한 테이블 스페이스 offline 


RMAN> restore tablespace test ;         <-- 백업파일에서 복원 해옴


RMAN> recover tablespace test ;         <-- 복구


RMAN> sql 'alter tablespace test online' ;   <-- 복구완료후 다시 online


삭제된 파일 복구 방법. ( offline 안되는 데이터 파일 삭제된 경우 ) - DB 종료 후 복구


1. 전체 full 백업

2. 파일 삭제

3. 복구

RMAN> shutdown abort ;


RMAN> restore tablespace system ;


RMAN> recover tablespace database ;        <-- 비정상 종료했기때문에 전체 데이터베이스 복구


RMAN> alter database open ;


임시 경로에서 복구하기    - 기존 경로가 아닌 다른 위치로 복구


1. 전체 full 백업

2. 파일 삭제

3. 임시경로로 복원후 복구

RMAN> run {

2> sql 'alter tablespace test offline immediate' ;            

3> set newname for datafile '/app/oracle/oradata/testdb/test01.dbf'

4> to '/data/temp/test01.dbf' ;

5> restore tablespace test ;

6> switch datafile 6 ;           <-- 이 파일번호는 report schema 에서 확인 할 수 있음   ( 컨트롤파일의 내용변경 )

7> recover tablespace test ;

8> sql 'alter tablespace test online' ;

9> }


3,4 번 줄에서 복원하기전 미리 경로를 지정한 후 5번 줄에서 백업파일을 새로운 경로로 복원, 6번 줄에서 control file 에 있는 경로를 새로운 경로로 변경.


임시 경로에 필요한 데이터 파일만 복원 후 복구하기


1. 전체 full 백업

2. 파일 삭제

3. 임시경로로 복원 후 복구  ( 데이터파일=백업파일, 컨트롤,리두는 현재사용중인 파일 복사)


파라미터 파일의 컨트롤파일 경로 변경


RMAN> run{

startup mount;


sql "alter database rename file ''/data/temp7/redo01_a.log''          <-- 리두 경로 부터 변경

to ''/data/temp/redo01_a.log''";

sql "alter database rename file ''/data/temp7/redo01_b.log''

to ''/data/temp/redo01_b.log''";

sql "alter database rename file ''/data/temp7/redo02_a.log''

to ''/data/temp/redo02_a.log''";

sql "alter database rename file ''/data/temp7/redo02_b.log''

to ''/data/temp/redo02_b.log''";

sql "alter database rename file ''/data/temp7/redo03_a.log''

to ''/data/temp/redo03_a.log''";

sql "alter database rename file ''/data/temp7/redo03_b.log''

to ''/data/temp/redo03_b.log''";


set newname for datafile 1 to '/data/temp/system01.dbf';          <-- 데이터파일중 필요한 파일만 임시 경로로 변경

set newname for datafile 2 to '/data/temp/sysaux01.dbf';

set newname for datafile 3 to '/data/temp/undotbs01.dbf';


sql "alter database datafile ''/data/temp7/users01.dbf'' offline drop" ;        <-- 필요없는 파일은 offline drop

sql "alter database datafile ''/data/temp7/example01.dbf'' offline drop" ;


sql "alter database create datafile ''/data/temp7/test01.dbf''          <-- 백업이 없는 삭제된 파일을 신규로 생성

as ''/data/temp/test01.dbf''";


restore tablespace system;                         <-- 필요한 테이블 스페이스만 복원

restore tablespace sysaux;

restore tablespace undotbs1;


switch datafile all;                                 <-- 파일 위치 변경내용을 control file 에 반영


recover tablespace system;                    <-- 필요한 테이블스페이스만 복구

recover tablespace sysaux;

recover tablespace undotbs1;

recover tablespace test;


alter database open;


sql "alter database test online";

}


여기 까지 완전 복구 방법


다음부터 불완전 복구


Drop table 후 복구하기 - 임시경로 사용


1. 전체 full 백업

2. drop table 장애 발생

3. DB 종료 후 임시경로에서 복구

->

파라미터 파일의 컨트롤 파일 경로 변경


RMAN> run {

2> startup mount;


3> sql "alter database rename file ''/data/temp7/redo01_a.log''

4> to ''/data/temp/redo01_a.log''";

5> sql "alter database rename file ''/data/temp7/redo01_b.log''

6> to ''/data/temp/redo01_b.log''";

7> sql "alter database rename file ''/data/temp7/redo02_a.log''

8> to ''/data/temp/redo02_a.log''";

9> sql "alter database rename file ''/data/temp7/redo02_b.log''

10> to ''/data/temp/redo02_b.log''";

11> sql "alter database rename file ''/data/temp7/redo03_a.log''

12> to ''/data/temp/redo03_a.log''";

13> sql "alter database rename file ''/data/temp7/redo03_b.log''

14> to ''/data/temp/redo03_b.log''";


15> set newname for datafile 1 to '/data/temp/system01.dbf';

16> set newname for datafile 2 to '/data/temp/sysaux01.dbf';

17> set newname for datafile 3 to '/data/temp/undotbs01.dbf';

18> set newname for datafile 4 to '/data/temp/users01.dbf';

19> set newname for datafile 5 to '/data/temp/example01.dbf';


20> restore database;

21> switch datafile all;


22> sql 'alter session set nls_date_format="yyyy-mm-dd:hh24:mi:ss"';

23> set until time='2014-11-12:07:41:41';


24> recover database;


25> alter database open resetlogs;

26> }


Drop tablespace 복구하기 - 백업 파일이 있을 경우


테스트용 Tablespace 생성 -> 전체 Full backup -> 예제 데이터 입력후 Tablespace drop 장애 발생 -> 임시 경로로 복구에 필요한 파일 복원 후 복구


Full 백업중 알아둘것!

piece handle = /data/backup/rman/03pndnfs_1_1_full_20141112 tag=TAG20141112T115300  <- 복구에 사용될 백업셋이름


piece handle = /data/backup/rman/04pndnir_1_1_full_20141112 tag=TAG20141112T115300  <- 복구에 사용될 controlfile이름


임시경로로 복구에 필요한 파일 복원 후 복구 ( 파라미터 파일의 controlfile 위치 바꾸고, 현재 사용중인 로그파일만 이동 )


RMAN> run {

startup nomount;


restore controlfile from '/data/backup/rman/07pne4hj_1_1_20141112';


alter database mount;


sql "alter database rename file ''/data/temp3/redo01_a.log''

to ''/data/temp4/redo01_a.log''";

sql "alter database rename file ''/data/temp3/redo01_b.log''

to ''/data/temp4/redo01_b.log''";

sql "alter database rename file ''/data/temp3/redo02_a.log''

to ''/data/temp4/redo02_a.log''";

sql "alter database rename file ''/data/temp3/redo02_b.log''

to ''/data/temp4/redo02_b.log''";

sql "alter database rename file ''/data/temp3/redo03_a.log''

to ''/data/temp4/redo03_a.log''";

sql "alter database rename file ''/data/temp3/redo03_b.log''

to ''/data/temp4/redo03_b.log''";


set newname for datafile 1 to '/data/temp4/system01.dbf';

set newname for datafile 2 to '/data/temp4/sysaux01.dbf';

set newname for datafile 3 to '/data/temp4/undotbs01.dbf';

set newname for datafile 4 to '/data/temp4/users01.dbf';

set newname for datafile 5 to '/data/temp4/example01.dbf';

set newname for datafile 7 to '/data/temp4/rtest04.dbf';


sql 'alter session set nls_date_format="yyyy-mm-dd:hh24:mi:ss"';

set until time='2014-11-12:12:52:34';


restore database from tag 'TAG20141112T124903';

switch datafile all;


recover database ;

alter database open resetlogs;

}


Drop tablespace 복구하기 - 백업 파일이 없을 경우


DB 전체 Full backup -> 신규 Tablespace 생성후 데이터 생성 -> Drop Tablespace 삭제/ 백업파일 없음 -> Tablespace 복구


1. Full 백업중 

piece handle = /data/backup/rman/03pndnfs_1_1_full_20141112 tag=TAG20141112T115300  <- 복구에 사용될 백업셋이름


piece handle = /data/backup/rman/04pndnir_1_1_full_20141112 tag=TAG20141112T115300  <- 복구에 사용될 controlfile이름


2. 신규 테이블스페이스 생성 후 테스트용 테이블 생성하고 시간확인

3. Drop tablespace 수행해서 장애 발생

4. DB 종료 후 임시경로로 필요한 파일 이동 후 복구    ( 현재 사용중인 로그파일만 복사 )


파라미터 파일의 컨트롤 파일 경로 변경


RMAN 에 접속하여 Control File 복원한 후 MOUNT 상태로 변경하여 파일위치 변경 하고 복원


RMAN> run {

2> startup nomount;


3> restore controlfile from '/data/backup/rman/04pndnir_1_1_full_20141112';      <-- 컨트롤파일 복원


4> alter database mount;


5> sql "alter database rename file ''/data/temp/redo01_a.log''

6> to ''/data/temp3/redo01_a.log''";

7> sql "alter database rename file ''/data/temp/redo01_b.log''

8> to ''/data/temp3/redo01_b.log''";

9> sql "alter database rename file ''/data/temp/redo02_a.log''

10> to ''/data/temp3/redo02_a.log''";

11> sql "alter database rename file ''/data/temp/redo02_b.log''

12> to ''/data/temp3/redo02_b.log''";

13> sql "alter database rename file ''/data/temp/redo03_a.log''

14> to ''/data/temp3/redo03_a.log''";

15> sql "alter database rename file ''/data/temp/redo03_b.log''

16> to ''/data/temp3/redo03_b.log''";


17> set newname for datafile 1 to '/data/temp3/system01.dbf';

18> set newname for datafile 2 to '/data/temp3/sysaux01.dbf';

19> set newname for datafile 3 to '/data/temp3/undotbs01.dbf';

20> set newname for datafile 4 to '/data/temp3/users01.dbf';

21> set newname for datafile 5 to '/data/temp3/example01.dbf';


22> sql 'alter session set nls_date_format="yyyy-mm-dd:hh24:mi:ss"';

23> set until time='2014-11-12:09:12:19';


24> restore database from tag 'TAG20141112T090811';

25> switch datafile all;

26> }


복원 완료 -> 복구 시작


RMAN> run {

2> sql 'alter session set nls_date_format="yyyy-mm-dd:hh24:mi:ss"';

3> set until time='2014-11-12:09:12:19';

4> recover database;

5> }


관리자가 직접 복구할때는 삭제된 데이터파일을 수동으로 생성해 준 후 복구 시도 했지만 RMAN 으로 복구 할때는 자동으로 생성해서 복구 됨


반응형

'오라클 > 백업/복구' 카테고리의 다른 글

TTS(Transportable Tablespace) Migration  (1) 2015.07.24
RMAN+Clone DB 사용해서 복구  (0) 2014.11.17
RMAN  (0) 2014.11.13
Flashback  (0) 2014.11.12
Clone DB  (0) 2014.11.10
sql loader  (0) 2014.11.10
데이터 이동하기  (0) 2014.11.06
반응형

RMAN ( Recovery Manager ) : 백업과 복구를 위한 전용 유틸리티

- 관리자가 RMAN 에게 명령하면 RMAN 이 알아서 백업/복구 실행



RMAN 의 주요특징


- 자주 실행하는 작업을 스크립트로 저장 : RMAN Recover Catalog Server를 사용할 경우 자주 사용하는 백업 명령어들을 스크립트로 저장한 후 불러서 사용할 수 있음


- 증분 블록 레벨 백업 기능 지원 : 과거 백업 받은 내역을 조사해서 그 기준 백업 이후에 변경된 블록만 찾아서 백업 수행 가능

 예 ) 기존 100M 파일에서 10M 만 변경되도 100M 를 백업받아야 하지만 RMAN 은 변경된 10M 만 백업 가능


- 사용되지 않은 블록 건너뛰고 백업 수행 : 총 100M 을 백업 받는다고 사용안한 블록은 건너뛰고 현재 사용중인 블록만 찾아서 백업

 

- 백업 수행 중 훼손된 블록 감지 : 백업 수행중 훼손된 블록을 감지해서 마킹해두고 계속 백업 수행


- ASM 기반 유일한 백업 도구 : ASM 기반으로 Storage 를 관리하는 경우는 RMAN외 백업할수 있는 방법이 없음


- 백업 수행시 압축 지원 : RMAN으로 백업을 진행하면서 동시에 압축까지 가능, 이때 압축으로 인한 자원 손실등이 거의 없음


- RMAN 구성도 -


RMAN 이용 백업 / 복구 순서

1. 관리자가 RMAN 유틸리티에게 백업 / 복구 명령

2. RMAN 은 관리자를 대신해 대상 서버(target database) 에 접속하여 백업 / 복구를 수행

3. Recover Catalog Server 가 있으면 백업 관련 정보를 Catalog Database 에 기록, 없다면 Target Database 의 Controlfile 에기록


RMAN 은 기본적으로 PGA 사용, PGA 공간이 부족할 경우 SGA를 사용하여 백업을 수행


채널 설정하기

Channel = 백업/복구 하는 경로 백업시 반드시 channel 을 할당 해주어야 한다.


1. 자동 Channel 설정

[oracle@localhost~]$ rman target / catalog rcuser/rcuser@rcserver  ( 복구 카탈로그 서버 사용시 )

or

[oracle@localhost~]$ rman target sys/oracle ( 복구 카탈로그 서버 사용 안할 경우 )


RMAN> configure default device type to disk ;     <-- 자동 채널 설정 명령어

-> 이렇게 하면 default device 가 파라미터 파일의 db_recovery_file_dest 파라미터 경로로 설정 됨

or

RMAN> configure channel device type disk

   2    format '/data/backup/rman/%U_%T' ;                <-- /data/backup/rman 디렉토리에 백업파일이 생성됨



2. 수동 Channel 설정

백업을 수행할 때 백업 받을 경로를 직접 지정


RMAN> backup tablespace example format '/data/backup/open/%U_%T' ; 



RMAN 백업 종류


1. backupset 으로 백업 수행 ( default )

Backupset = RMAN이 백업파일을 만들 때 RMAN 만이 알 수 있는 형태로 백업파일을 생성하는데 이것을 backupset 이라함

Backuppiece = backupset 의 크기가 너무 클 경우 분할해서 여러 개의 파일로 나누어 백업 받는데 분할되는 하나의 백업파일을 backuppiece 라 한다.


2. Image copy로 백업 수행 ( begin backup 과 비슷한 개념, 백업보다 카피에 많이 사용 )

RMAN> copy

    2    datafile '/app/oracle/oradata/testdb/example01.dbf'

    3    to '/data/backup/rman/example01.dbf.bak' ;



RMAN 백업시 주의사항

- open 상태에서 백업을 받으려면 DB가 archive log mode 로 운영되어야 한다.

- DB가 마운트 또는 오픈상태여야 한다.

- 운영중인 온라인 리두로그 파일은 백업이 불가

- 노 아카이브모드에서는 Clean 백업만 사용가능

- Clean 백업이란 오프라인 테이블스페이스나 읽기전용 테이블스페이스 백업을 의미

- RMAN 으로 백업을 수행하는 것은 Begin backup시의 조건들과 동일해야 함


RMAN 명령어 종류

1. 독립형 명령 - RMAN> prompt 에 1개의 명령어만 들어가는 방식


RMAN> backup tablespace example ;  


2. 작업형 명령 - 프로그램의 스크립트처럼 여러 개의 명령어를 한꺼번에 사용할 수 있는 방법


RMAN> run {

   2    allocate channel ch1 type disk maxpiecesize 10m ;

   3    allocate channel ch2 type disk maxpiecesize 50m ;

   4    backup

   5    tablespace users channel ch1

   6    format '/data/backup/close/%T_users.bak' ;

   7    tablespace example channel ch2

   8    format '/data/backup/close/%T_example.bak' ;

   9    }


증분 백업 - 이전에 백업받았던 백업파일과 비교해서 변경된 부분만 골라서 백업을 수행

차등 증분 백업 : 백업 받을 때 설정했던 숫자가 자기보다 작거나 같으면 그시점부터 지금까지 모든 데이터를 백업

누적 증분 백업 : 백업 받을 때 설정했던 숫자가 자기보다 작을경우 그 시점부터 지금까지 모든 데이터를 백업


RMAN> run {

   2    allocate channel c1 type disk ;

   3    backup

   4    incremental level 0       <-- 차등 증분 백업을 의미

   5    database

   6    format '/data/backup/rman/%U_%T' ;

   7    }


RMAN> run {

   2    allocate channel c2 type disk ;

   3    backup

   4    incremental level 3 cumulative       <-- 누적 증분 백업을 의미

   5    tablespace example ;

   6    }


Block change tracking : 데이터 블록들의 변경된 블록만 추적하는 기능




압축하면서 백업 수행

RMAN> backup as compressed backupset database

   2    format '/data/backup/rman/%T_%U' ;


압축하면서 전체 archive log file 백업 

RMAN> backup s compressed backupset archivelog all

   2    format '/data/backup/rman/%U_%T' ;

RMAN-06059, ORA-19625 - RMAN 백업시 archivelog 경로가 변경 되었을 경우

오라클의 fast recovery area를 disable 하고 archive log 모드에서 기본 경로가 아닌 다른 directory에 archive log를 저장할 경우 RMAN을 이용한 백업 시 archive log 파일을 못찾는 에러가 발생함.

1. 에러 예제

RMAN> backup archivelog all ;

Starting backup at 14-OCT-14
current log archived
using channel ORA_DISK_1

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of backup command at 10/14/2014 01:12:43
RMAN-06059: expected archived log not found, loss of archived log compromises recoverability
ORA-19625: error identifying file /u01/oracle/product/flash_recovery_area/INNIDB/archivelog/2014_10_01/o1_mf_1_21_b2qyqgpg_.arc
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3


2. 해결 방법

RMAN> change archivelog all crosscheck ;


** 주의

위와 같은 방법으로 설정을 한다면 백업 시 backupset이 저장되는 디렉토리는 $ORACLE_HOME/dbs에 저장



MultiSection Backup

하나의 파일이 아주 클 경우 여러 개의 프로세스가 동시에 다른 백업 셋을 생성해서 백업을 받을 수 있음


RMAN> backup as compressed backupset

   2    section size 100m

   3    format '/data/backup/rman/%U_%T'

   4    datafile 1 ;


이외 옵션들


keep - backup 수행시 backupset 보존기간 설정

RMAN> backup as compressed backupset tablespace example

   2    format '/data/backup/rman/%U_%T'

   3    keep until time 'sysdate +90' ;         <-- 보존기간을 90일로


Not backed up - 백업 안 된 데이터파일만 골라서 백업하기 

- 기준일을 주고 싶으면 since time=sysdate -5  이런식으로 오늘 기준으로 최근 5일이내 추가된 파일을 백업




RMAN 백업 진행사항 확인하기


SYS> SELECT SID,SERIAL#,CONTEXT,SOFAR,TOTALWORK,

  2    ROUND(SOFAR/TOTALWORK*100,2)"%COMPLETE"

  3    FROM V$SESSION_LONGOPS 

  4    WHERE OPNAME LIKE 'RMAN%'

  5    AND OPNAME NOT LIKE '%aggregate%'

  6    AND TOTALWORK!=0

  7    AND SOFAR<>TOTALWORK ;



주요 백업 예제


예제 1. 전체 데이터 베이스를 백업

독립형

RMAN> backup as compressed backupset database

   2    format '/data/backup/rman/%U_%T' ;


작업형

RMAN> run {

   2    allocate channel ch1 device type disk 

   3    format '/data/backup/rman/%U_%T' ;

   4    backup as compressed backupset database ;

   5    }

예제 2. Channel 3개를 할당해서 example, users, system, control file 을 백업


RMAN> run {

   2    allocate channel ch1 device type disk ;

   3    allocate channel ch2 device type disk ;

   4    allocate channel ch3 device type disk ;

   5    backup as compressed backupset

   6    tablespace example, users, system ;

   7    include current controlfile ;

   8    }


예제 3. 전체 데이터 파일의 위치를 확인 한 후 파일 번호로 백업수행


RMAN> report schema ;


Report of database schema for database with db_unique_name TESTDB


List of Permanent Datafiles

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

File Size(MB) Tablespace           RB segs Datafile Name

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

1    760      SYSTEM               ***     /data/temp7/system01.dbf

2    560      SYSAUX               ***     /data/temp7/sysaux01.dbf

3    2865     UNDOTBS1             ***     /data/temp7/undotbs01.dbf

4    201      USERS                ***     /data/temp7/users01.dbf

5    345      EXAMPLE              ***     /data/temp7/example01.dbf

6    5        TS_FDA01             ***     /data/temp7/ts_fda01.dbf

7    0        UNDO_FDA             ***     /data/temp7/undo_fda01.dbf


List of Temporary Files

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

File Size(MB) Tablespace           Maxsize(MB) Tempfile Name

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

1    400      TEMP01               32767       /data/temp7/temp01.dbf


RMAN> run {

   2    allocate channel c1 type disk ;

   3    backup as compressed backupset datafile 1,2 ;         <-- SYSTEM, SYSAUX 가 백업됨

   4    }


예제 4. 현재 사용 중인 Control file 만 백업


RMAN> run {

   2    allocate channel c1 type disk ;

   3    backup current controlfile ; }


예제 5. 아래 조건으로 RMAN  백업


* RMAN 을 사용하여 sysaux, example, users 테이블 스페이스를 백업

* 백업경로 sysaux -> /data/backup/open/

                example -> /data/backup/rman/

                users -> /data/backup/close/

* 작업형 명령어 사용

* channel 은 3개로 병렬작업

* 각 channel 하나당 크기가 최대 10m 이넘지 않도록 설정


RMAN> run {

allocate channel ch1 type disk maxpicesize 10m;

allocate channel ch2 type disk maxpicesize 10m;

allocate channel ch3 type disk maxpicesize 10m;

backup compressed backupset 

tablespace sysaux channel ch1

format '/data/backup/open/%U_%T' ;

tablespace example channel ch2

format '/data/backup/rman/%U_%T' ;

tablespace users channel ch3

format '/data/backup/close/%U_%T' ;

}


예제 6. 차등 증분 백업 실습

level 0 으로 데이터베이스 전체 백업받기

RMAN> run {

   2    allocate channel c1 type disk ;

   3    backup

   4    incremental level 0       

   5    database

   6    format '/data/backup/rman/%U_%T' ;

   7    }


level 3 으로 users tablespace 만 차등 증분 백업 받기

RMAN> run {

   2    allocate channel c2 type disk ;

   3    backup as compressed backupset

   4    incremental level 3       

   5    tablespace users ;

   6    }


예제 7. 누적 증분 백업하기


RMAN> run {

   2    allocate channel c2 type disk ;

   3    backup as compressed backupset

   4    incremental level 3 cumulative    

   5    tablespace example ;

   6    }


예제 8. 전체 데이터베이스를 백업하면서 Archive log file 함께 백업하기


RMAN> backup as compressed backupset database plus archivelog 

   2    format '/data/backup/rman/%U_%T' ;


예제 9. Archive log file 만 백업하기

RMAN> backup as compressed backupset archivelog all ;



반응형

'오라클 > 백업/복구' 카테고리의 다른 글

TTS(Transportable Tablespace) Migration  (1) 2015.07.24
RMAN+Clone DB 사용해서 복구  (0) 2014.11.17
RMAN 복구하기  (0) 2014.11.14
Flashback  (0) 2014.11.12
Clone DB  (0) 2014.11.10
sql loader  (0) 2014.11.10
데이터 이동하기  (0) 2014.11.06
반응형

Flashback 기능은 사용자의 논리적인 오류를 아주 빠르게 복구할 수 있는 방법


Flashback 명령어 3가지 (LEVEL) 방법

1. Row Level Flashback

2. Table Level Flashback

3. Database Level Flashback


 오라클버젼 

 Flashback 종류 

 원리

 9i

 Flashback Query 

 Undo data 사용 

 10g

 Flashback Version Query

 Flashback Transanction Query

 Flashback Table

 Flashback Database 

 Undo data 사용

 Undo data 사용

 Undo data 사용 / recyclebin 사용

 Undo data 사용 / Redo log 사용

 11g

 10g 와 동일 

 10g와 동일 / Flashback Data Archive 추가됨 


1. Row Level Flashback

특정 테이블의 특정 Row 만 Flashback 해주는 기능 ( Flashback 기능은 commit 된 데이터만 복구 가능 )


실습 1. Row Level Flashback 을 사용하여 특정 행 복구


실습전에 DB의 Supplemental Logging 을 Enable 로 변경 후 작업

SYS> select supplemenatl_log_data_min from v$database ;


SUPPLEME

---------

NO


-> SYS> alter database add supplemental log data ;


SYS> select supplemenatl_log_data_min from v$database ;


SUPPLEME

---------

YES


SYS> create table scott.fmem

   2    ( name varchar2(10),

   3    addr varchar2(10),

   4    tel varchar2(10)) ;


SYS> insert into scott.fmem values ( '박동주','부천','111') ;

SYS> insert into scott.fmem values ( '서진수','강남','222') ;

SYS> insert into scott.fmem values ( '김효섭','구리','333') ;

SYS> commit ;


SYS> select * from scott.fmem ;


NAME    ADDR    TEL

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

박동주    부천        111  

서진수    강남        222

김효섭    구리        333


SYS> update scott.fmem

  2    set name='안지혜'

  3    where tel=111 ;


SYS> commit ;


SYS> update scott.fmem

  2    set name='김세실'

  3    where tel=222 ;

SYS> commit ;


SYS> select * from scott.fmem ;


NAME    ADDR    TEL

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

안지혜    부천        111  

김세실    강남        222

김효섭    구리        333


안지혜를 다시 박동주로 돌리자

- 해당 데이터의 과거 변경 이력을 전부 찾아 주는 쿼리 : Flashback Version Query 

9i 는 Flashback Query 가 지원되었는데 특정 시점의 변경 내역만 알수 있어서 좋지 않음.

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


변경 이력을 찾는 Flashback Version Query 수행


SYS> select versions_startscn st_scn,versions_endscn endscn,

  2    versions_xid txid,versions_operation opt,name

  3    from scott.fmem versions between scn minvalue and maxvalue

  4    where tel=111 ;


ST_SCN        ENDSCN        TXID                        O        NAME

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

2046479                        070004006904000         U       안지혜

2046412       2046479     010007004004000         I        박동주


scn_to_timestamp( ) 라는 함수를 사용하여 변경사항이 발생한 시간을 추적할 수 있음


SYS> select scn_to_timestamp(2046479) from dual ;


SCN_TO_TIMESTAMP(2046479)

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

12-NOV-14 12.12.12.0000000000AM


Flashback Transaction Query 사용 과정이 복잡해 일반적으로 DBA가 직접 update 작업을 수행함


SYS> update scott.fmem set name='박동주' where tel=111 ; 


SYS> commit ;


2. Table Level Flashback

특정 테이블 안에 있는 데이터를 전부 한 번에 특정 시점으로 복구 할 수 있는 방법

Table의 칼럼이 삭제된 후 undo segment 내역을 못찾는 경우 flashback으로 복구할 수 없다.

실습 2. SCN을 조회하여 DML 에러 복구하기 - Undo data 사용


SYS> create table scott.fruits (

  2    no number,

  3    name varchar2(10),

  4    price number) ;


SYS> insert into scott.fruits values (1,'apple',1000) ; 

SYS> insert into scott.fruits values (2,'grape',1500) ;

SYS> insert into scott.fruits values (3,'peach',800) ;

SYS> commit ;


SYS> select * from scott.fruits ;


NO    NAME    PRICE

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

1        apple    1000

2        grape    1500

3        peach    800


SYS> select current_scn from v$database ;


CURRENT_SCN

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

2058671


SYS> update scott.fruits

  2    set prifce = 2000

  3    where no=2 ;


SYS> commit ;


SYS> select * from scott.fruits ;


NO    NAME    PRICE

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

1        apple    1000

2        grape    2000

3        peach    800


SYS> select current_scn from v$database ;


CURRENT_SCN

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

2058724            <-- grape 가격이 2000으로 변경된 scn


grape 가격이 1500원인 때로 돌아가고 싶다는 요청이 들어오면 그 시점의 scn으로 flashback 하면 됨


SYS> flashback table scott.fruits to scn '2058724' ;


ERROR at line 1 :

ORA-08189 : cannot flashback the table because row movement is not enabled 

위와같이 row movement 속성이 not enable 되어서 에러 발생, 이 기능을 활성화 시킨 후 다시 실행


SYS> alter table scott.fruits enable row movement ;


SYS> flashback table scott.fruits to scn '2058724' ;


SYS> select * from scott.fruits ;

NO    NAME    PRICE

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

1        apple    1000

2        grape    1500             <-- 원래값으로 돌아옴

3        peach    800


실시간으로 장애를 복구 하려면 


SYS> flashback table scott.fruits

  2    to timestamp(systimestamp - interval '5' minute) ;                <--5분전 상황으로 flashback 하겠다는 의미


실습 3. Drop table 복구하기 - Recyclebin 이용

recyclebin - 윈도우의 휴지통과 같은 기능, drop table하면 recyclebin 으로 보관하다가 복구 가능


step1. 새로운 사용자 생성 및 테이블 생성


SYS> create user test identified by test

  2    default tablespace users

  3    temporary tablespace temp ;


SYS> grant connect, resource to test ;


SYS> conn test/test


TEST> create table test1(no number) ;


TEST> insert into test1 values(1) ;


TEST> commit ;


TEST> select * from tab ;


TNAME        TABTYPE CLUSTERID

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

TEST1            TABLE


stpe2. 테이블을 삭제 후 휴지통을 확인


TEST> drop table test1 ;


TEST> select * from tab ;


TNAME                                                TABTYPE    CLUSTERID

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

BIN$5AVBt_oQMSfgQAB/AQBnzQ==$0     TABLE        


TEST> show recyclebin ;


ORIGINALNAME    RECYCLEBINNAME                                OBJECTTYPE        DROPTIME

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

TEST1                 BIN$5AVBt_oQMSfgQAB/AQBnzQ==$0       TABLE                2014-11-12:15:15:15


TEST> select * from "BIN$5AVBt_oQMSfgQAB/AQBnzQ==$0" ;


NO

---

 1


원래 TEST 였던 TABLE 이 Drop 되면서 BIN$ 로 이름이 변경되었고, show parameter 로 조회하니 삭제 정보를 알 수 있음


복구 방법 -> 

TEST> flashback table test1 to before drop       <-- drop 전으로 flashback


TEST> select * from tab ; 


 TNAME        TABTYPE CLUSTERID

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

TEST1            TABLE                             <-- 쉽게 복구 완료


TEST> show recyclebin        <-- recyclebin 없어서 결과가 안나옴


실습4. Recyclebin 관리하기


Recyclebin 의 위치는 원래 테이블이 있던 Tablespace에 그대로 있고, drop 되면 이름을 Bin$... 로 변경하고 딕셔너리에서만 삭제

만약 다른테이블이 먼저 지워졌던 테이블이 있는 공간을 사용하려는 상황이 되면 그때 데이터를 지우고 신규테이블에게 공간을 할당

Recyclebin 에 넣지않고 완전 삭제하려면 purge 옵션 사용


Recyclebin 을 사용하지 않으려면 alter session set recyclebin=off 로 해당 세션에서 사용안하게 해주거나

parameter file 에 recyclebin=off 를 등록해주고 디비 재시작. 다시 on 으로 바꾸려면 parameter file 에서 지워주면 됨


recyclebin 상태 확인

select a.ksppinm, b.ksppstvl, b.ksppstdf

from x$ksppi a, x$ksppcv b

where a.indx = b.indx

and a.ksppinm like '%recyclebin%'

order by a.ksppinm ; 


KSPPINM    KSPPSTVL    KSPPSTDF

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

recyclebin    on                TRUE                


실습5. 테이블 관련 다른 object 확인하기


flashback 으로 테이블을 삭제하게 되면 해당 테이블과 관련된 모든 object ( index, constraint 등) 들도 함께 삭제됨

flashback 으로 테이블을 복구하면 다른 object 들도 테이블과 함께 복구 됨.


flashback 으로 복구하게 되면 view 의 상태는 INVALID 로 사용불가 상태가 되고 index BIN$ .. 로 이름이 변경되어 조회되지않음

@stats로 확인, index 의 이름을 alter index "BIN$...." rename to 원래인덱스명 ; 으로 바꿔주고 사용해야함

view 는 사용불가 상태라서 삭제 후 다시 생성해야 함.

@cons 제약조건 확인     제약조건 역시 BIN$... 로 제대로 이르 변경이 안됬지만 작동은 하므로 이름만 변경해주면 됨

alter table 테이블명 rename constraint "BIN$...." to "제약조건명" ;


table 이 flashback 으로 복구 되더라도 다른 object 는 관리자가 추가로 작업해줘야 함

만약 recyclebin 에 같은이름의 테이블이 여러개 삭제되어 있었을 경우 가장 최근에 지워진 것부터 복구 되며, flashback table 은 table 과 같이 지워진 index복구 되지만 index만 따로 지워진 경우는 복구 안됨


3. Database Level Flashback 

database 전체를 과거의 특정시점으로 돌리는 불완전복구와 비슷한 개념을 갖고있다. 그러나 불완전 복구보다 빠르고 간단함


- 불완전 복구 : 장애시 백업된 데이터파일을 복원해 리두로그와 아카이브 로그를 적용시켜 복구

- flashback database : 장애가 발생한 데이터파일에 flashback log 와 리두로그, 아카이브로그를 바로 적용시켜 복구


flashback database 명령어를 사용하기위해 준비할 것

- db 아카이브 모드 , flashback database mode


환경설정 : inittestdb.ora 파일 설정

db_recovery_file_dest : /app/oracle/fast_recovery_area   <--11g 일경우  

db_recovery_file_dest_size : 4196401152                       <--11g 일경우 4G 기본값

db_flashback_retention_target=30                                 <-- 별도로 추가해줘야함


MOUNT 모드로 STARTUP 해서 alter database archivelog ,  alter database flashback on  설정



fast_recovery_area 에 저장되는 파일들

1. flashback log file

2. archive redo log file

3. RMAN backup file 등


기본 크기가 부족할 수 있기 때문에 위에서 언급한 3종류의 파일을 다른 경로로 설정해서 관리해주는게 hang에 안걸리기 좋음


Flashback database 명령어로 복구해야만 하는 대표적인 장애 : drop user 와 truncate table 장애

실습6. Drop User 장애 복구 ( Flashback database 사용 )


step1. 테스트용 계정과 테스트용 테이블을 생성


SYS> create user tuser

  2    identified by abc123

  3    default tablespace users

  4    temporary tablespace temp ;


SYS> grant connect, resource to tuser ;


SYS> conn tuser/abc123


TUSER> create table test1 (no number) ;


TUSER> create table test2 (no number) ;


TUSER> insert into test1 values(1) ;


TUSER> insert into test1 values(2) ;


TUSER> insert into test2 values(3) ;


TUSER> insert into test2 values(4) ;


TUSER> commit ;


step2. 테스트용 계정 tuser 를 삭제한 후 데이터를 확인


TUSER> conn sys/oracle as sysdba ;


SYS> drop user tuser cascade ;


step3. Flashback 명령어로 복구


SYS> flashback database to timestamp (systimestamp - interval '5' minute) ;


ERROR at line 1:

ORA-38757 : Database must be mounted and not open to FLASHBACK      <-- MOUNT 단계에서 복구하라고 에러남


SYS> shut immediate ;


SYS> startup mount


SYS> flashback database to timestamp (systimestamp - interval '5' minute) ;


SYS> alter database open


ERROR at line 1:

ORA-01589 : must use RESETLOGS or NORESETLOGS option for database open <-- 과거로 돌아갔기때매 resetlogs로 open


SYS> alter database open resetlogs 


이러고 데이터 복구된지 확인, 만약 안되었으면 계속 shutdown 한후 mount에서 flashback 명령을 수행하면 됨.


Flashback Data Archive

Row Level Flashback 과 Table Level Flashback중 DML 장애를 처리하는것은 undo data를 활용하며 만약 다른 누군가가 undo segment 를 재활용하면 해당 flashback 기능을 사용할 수 없다.


11g 부터는 Online Redo log 를 Archive 하듯이 undo segment 에 있는 commit 된 내용을 특정 테이블 스페이스에 archive 하여 영구적으로 저장하는 기능을 제공, 그것을 Flashback Data Archive(FBDA)라고 한다.


Flashback Data Archive 원리

FBDA 백그라운드 프로세스가 비 정기적으로 undo segment 의 내용을 파일에 archive 해서 flashback data archive 기능을 구현


Flashback Data Archive 의 특징

1. FBDA 가 Undo segment 의 내용을 모두 기록하기 전에 해당 undo segment 는 재활용 되지 않음

2. 대량의 DML 이 발생할 경우 병목현상이 생길 우려가 있어 최대 10개 까지의 FBDA백그라운드 프로세스가 동시 작업가능

3. FBDA 프로세스는 평소 Sleep상태로 있다가 특정 시간이 되면 자동으로 활성화 되어 undo segment 내용을 저장

 ( undo 량이 많이 발생할 경우 자주 내려쓰며, 기본값은 5분으로 설정되어 있음)

4. 해당 데이터는 자동으로 파티셔닝 되어 저장되며 관리자라도 그 내요을 변경할 수 없음

5. Retention time 을 설정하여 데이터를 관리하며, retention time 이 지난 데이터는 자동삭제

6. insert 되는 데이터는 이기능을 사용하지 않음


Flashback Database Archive 활성화 하기

<작업순서>

1. Flashback history table 을 저장할 테이블 스페이스를 생성

2. Flashback data archive 를 관리할 관리자 계정을 생성

3. 관리자 계정에 권한을 할당

4. 관리자 계정으로 로그인한 후 flashback history table 을 생성


1.

SQL> create tablespace ts_fda01

  2    datafile '/app/oracle/oradata/testdb/ts_fda01.dbf' size 5m ;


2.

SQL> create user fbadmin identified by fbpwd

  2    default tablespace ts_fda01 ;


3.

SQL> grant resource, connect to fbadmin ;


SQL> grant flashback archive adminster to fbadmin ;  


flashback archive adminster 권한

- flashback data archive 를 관리하기 위한 특별한 시스템 권한

- flashback history table 을 생성하고 관리할 수 있음

- 테이블 스페이스를 추가하거나 삭제할 수 있음

- flashback history table retention time 을 관리할 수 있음


4.

SQL> create flashback archive fda01 tablespace ts_fda01         

  2    retention 30 day ;     -- history table에 저장되는 undo data의 보존기간을 의미, 30일 지나면 자동으로 삭제함


SQL> conn fbadmin/fbpwd ;


flashback history table 조회

select owner_name,flashback_archive_name,retention_in_days,status from dba_flashback_archive ;


OWNER_NAME    FLASHBACK_        RETENTION_IN_DAYS    STATUS

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

FBADMIN            FDA01                    30




Flashback Database Archive 실습

실습을 하기전 용량이 작은 undo tablespace 를 생성해서 기존에 사용하던 undo tablespace 를 변경하고 시작


SQL> show paramert undo ;

NAME                                 TYPE        VALUE

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

undo_management               string      AUTO

undo_retention                     integer     900

undo_tablespace                  string      UNDOTBS1


SQL> create undo tablespace undo_fda

  2    datafile '/app/oracle/oradata/testdb/undo_fda01.dbf' size 256k ;


SQL> alter system set undo_tablespace=undo_fda ;


SQL> alter system set undo_retention=3 ;


SQL> show parameter undo ;

NAME                                 TYPE        VALUE

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

undo_management               string      AUTO

undo_retention                     integer     3

undo_tablespace                  string      UNDO_FDA


SQL> conn scott/tiger


SCOTT> create table test01(no number, name varchar2(10) ;


SCOTT> insert into test01 values(1,'AAA') ;

SCOTT> insert into test01 values(2,'BBB') ;

SCOTT> insert into test01 values(3,'CCC) ;

SCOTT> commit ;


SQL> select * from test01 ;

NO    NAME

-----------

1        AAA

2        BBB    

3        CCC



SCOTT> update test01 set name='DDD' 


SCOTT> select * from test01 ;

NO    NAME

-----------

1        DDD

2        DDD   

3        DDD


다른 세션에서 로그인해 현재 잘못된 update 를 수행한 트랜잭션이 사용중인 undo segment 를 확인


SCOTT> conn sys/oracle as sysdba ;


SYS> select segment_name,owner,tablespace_name,status from dba_rollback_segs ;

SEGMENT_NAME                       OWNER    TABLESPACE_NAME          STATUS

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

SYSTEM                                     SYS         SYSTEM                           ONLINE

_SYSSMU10_2606106477$          PUBLIC     UNDOTBS1                       OFFLINE

_SYSSMU9_3975004876$           PUBLIC     UNDOTBS1                       OFFLINE

_SYSSMU8_286634474$            PUBLIC     UNDOTBS1                        OFFLINE

_SYSSMU7_574775315$            PUBLIC     UNDOTBS1                        OFFLINE

_SYSSMU6_3013749843$           PUBLIC     UNDOTBS1                       OFFLINE

_SYSSMU5_3147209834$           PUBLIC     UNDOTBS1                       OFFLINE

_SYSSMU4_562970181$            PUBLIC     UNDOTBS1                        OFFLINE

_SYSSMU3_1483640053$           PUBLIC     UNDOTBS1                       OFFLINE

_SYSSMU2_3037561007$           PUBLIC     UNDOTBS1                       OFFLINE

_SYSSMU1_2081786551$           PUBLIC     UNDOTBS1                       OFFLINE

_SYSSMU11_1522516751$          PUBLIC     UNDO_FDA                       ONLINE

                                                                     

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

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

  3    where s.taddr=t.addr and t.xidusn=r.usn ;


SID        SERIAL#        USERNAME        ROLLBACK SEG

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

 1            17                SCOTT             _SYSSMU11_1522516751$    <-- SCOTT 사용자가 사용하는 Undo segment


SCOTT> commit ; 


이제 다른 사용자 (userb) 를 생성한 후 로그인해서 대량의 DML 을 발생시켜 위 undo segment 를 재활용하도록 만듬


SYS> create user userb identified by userb

  2    default tablespace example ;

SYS> grant connect, resource to userb ;


SYS> conn userb/userb ;


USERB> create table test02 ( no number , name varchar2(20)) ;


USERB> begin

2    for i in 1..1000 loop

3    insert into test02 values(i,'overwrite!') ;

4    end loop ;

5    end ;

6    /


USERB> select count(*) from test02 ;


COUNT(*)

--------

   1000


다른 터미널에서 sys로 로그인해서 undo segment 의사용내역을 조회
























반응형

'오라클 > 백업/복구' 카테고리의 다른 글

RMAN+Clone DB 사용해서 복구  (0) 2014.11.17
RMAN 복구하기  (0) 2014.11.14
RMAN  (0) 2014.11.13
Clone DB  (0) 2014.11.10
sql loader  (0) 2014.11.10
데이터 이동하기  (0) 2014.11.06
Redo log flle 장애 처리방법  (0) 2014.11.05
반응형

운영중인 DB를 복사해서 복구용 DB를 추가 생성해 즉시 복구 하는 방법


전제조건을 아래와 같이 하고 실습 시작  ( 경로나 이름은 자기 마음대로 지정해줘도 됨 )

- 백업 파일 경로 : /data/backup/close

- 운영 DB SID : testdb

- clone DB SID : clonedb (복구용 db)

- clone DB 파일경로 : /data/clone


Clone DB 생성 개념

파라미터 파일 : 기존 파라미터 파일을 복사해서 내용 수정

컨트롤 파일 : 컨트롤파일 재생성 스크립트 만들어서 재생성

데이터 파일 : 백업파일 복사

리두 로그 파일 : 로그스위치 일으켜서 아카이브파일로 만들어서 데이터는 아카이브에서 가져옴, 리두파일은 리셋로그즈로 재생성



복구 순서 요약


운영중이던 DB에서 할일 : 컨트롤 파일 재생성 스크립트만 만들어주고 나머지는 cloneDB에서 실행, 리두 파일에 있던 데이터 로그 스위치 일으켜서 아카이브에 저장 시키기


1. clone DB 생성할 디렉토리 생성  -> mkdir -p /data/clone   

2. parameter file 복사     ->    cp $ORACLE_HOME/dbs/inittestdb.ora initclonedb.ora

3. parameter file 수정     ->    vi initclonedb.ora          -> 컨트롤파일경로 클론디비 경로로 변경, 디비명 clonedb명으로 변경

                                                                                    11g 부터는 memory_target 주석처리


4. data file 복사          -> cp /data/backup/close/*.dbf /data/clone

5. 운영중인 DB에서 컨트롤 파일 재생성 스크립트 실행    -> alter database backup controlfile to trace as '/app/oracle/re.sql' ;

6. 스크립트 수정      -> vi /app/oracle/re.sql        -> reset logs 모드, reuse 를 set 으로 변경, DB명 변경, 파일들 경로 변경 


7. Clone DB 로 시작하기위해 export ORACLE_SID=clonedb 로 변경

8. sqlplus / as sysdba 접속

9. 컨트롤파일 재생성 스크립트 실행      -> @/app/oracle/re.sql

10. mount 모드까지 올림        -> startup mount 

11-1.(백업파일 있을때) 파일 복구 : recover database until time '2014-11-10:12:00:00' using backup controlfile ;   

                                                                     컨트롤 파일을 재생성했기 때문에 using backup controlfile 해주는 것


11-2. (백업파일 없을때) 파일 복구 : recover database until time '2014-11-10:12:00:00' using backup controlfile ; 

-> 에러생기면서 복구안됨, 데이터파일내용 수정 select name from v$datafile ;    


NAME

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

/data/clone/system01.dbf

/data/clone/sysaux01.dbf

/data/clone/undotbs01.dbf

/data/clone/users01.dbf

/data/clone/example01.dbf

/app/oracle/product/11g/dbs/UNNAMED00006          <-- 요런게 생김


-> 데이터 파일 재생성 alter database create datafile '/app/oracle/product/11g/dbs/UNNAMED00006' as '/data/clone/test.dbf'

-> 다시 복구 recover database until time '2014-11-10:12:00:00' using backup controlfile ; 


12. resertlogs 모드로 open : alter database open resetlogs 

13. 데이터 복구 확인

14. clone DB 에서 운영 DB로 복구파일 복사 : export ORACLE_SID=clonedb       exp scott/tiger file='test.dmp' tables=test

export ORACLE_SID=testdb     imp scott/tiger file='test.dmp' ignore=y

15. 운영 DB에서 데이터 복구 확인 

16. Clonedb 종료 : export ORACLE_SID=clonedb       ->     shutdown immediate 





반응형

'오라클 > 백업/복구' 카테고리의 다른 글

RMAN 복구하기  (0) 2014.11.14
RMAN  (0) 2014.11.13
Flashback  (0) 2014.11.12
sql loader  (0) 2014.11.10
데이터 이동하기  (0) 2014.11.06
Redo log flle 장애 처리방법  (0) 2014.11.05
Log Miner 활용하기  (0) 2014.11.05
반응형

Sql * Loader 로 외부 데이터 입력하기 : Direct Path방법을 이용하여 대량의 데이터를 빠른속도로 입력할 수 있는 유틸리티

Direct path 를 다른말로 Bulk Load 방식이라고도 함


입력원리

Conventional Path 방법은 HWM ( High Water Mark ) 왼쪽에 있는 빈 Free block 에 데이터를 입력


데이터 입력시 HWM 왼쪽부터 입력하는데 만약 HWM 왼쪽 블록을 다 사용하게 되면 입력작업을 일시 중지하고 HWM를 오른쪽으로 

이동하여 빈 블록들을 확보 한 후 데이터를 입력, 이러한 과정을 HWM Bump Up 이라고 함


Direct Path 방법은 처음부터 HWM 오른쪽에 있는 비어 있는 블록에 한꺼번에 데이터를 입력하고 commit을 한번만 하는 방식

중간에 장애가 생길 경우 처음부터 다시 입력해야 하는 단점이 있음


Direct Path 방법

1. 정렬할 때 (Temp segment 에 읽고 쓰기 한다.)

2. 병렬 작업 떄 ( Parallel, Append 옵션을 사용할 때 )

3. Direct 옵션 사용시 (export, datapump 등 )


SQL * Loader 구조



SQL * Loader 구성하는 주요 파일


위 Control file 은 oracle 운영용 control file 이 아니라 SQL * Loader 를 사용하기 위한 정보를 가진 control file이므로 서로다름


Bad file = 입력 거부된 목록을 저장할 파일, 입력 형태가 틀리거나 제약조건 위배시 이 파일에 기록됨. 수정해서 다시 입력가능



반응형

'오라클 > 백업/복구' 카테고리의 다른 글

RMAN  (0) 2014.11.13
Flashback  (0) 2014.11.12
Clone DB  (0) 2014.11.10
데이터 이동하기  (0) 2014.11.06
Redo log flle 장애 처리방법  (0) 2014.11.05
Log Miner 활용하기  (0) 2014.11.05
control file, data file 연습문제  (0) 2014.11.04
반응형


데이터 이동 방법


옛날 DB 에서 Export 를 사용해 데이터를 복사해서 dmp file 로 저장 -> Import 유틸리티가 dmp file 을 읽어서 다시 최신 DB 에 저장 해 주는 과정을 데이터 이동이라고 함


데이터 이동시에 DB는 OPEN 상태여야 함.


Conventional Path export & Direct Path export


Conventional Path export : 명령어가 수행되면 export 프로그램이 메모리에 evaluation buffer 라는 곳을 만들어 db buffer cache 에 있는 데이터를 가져와서 이곳이 다 차면 다시 디스크에 파일을 저장.


Direct path export : db buffer cache 에서 바로 dmp file 로 저장


direct path export 는 export 작업중 사용자가 buffer cache 에서 작업을 하게되면 속도저하가 일어나고 hang 이걸려서 db 가 꺼질수 있음

conventional path export 는 evaluation buffer 로 데이터를 복사해서 dmp file 로 저장하기 때문에 direct path export 에서 일어나는 문제를 해결 할 수 있다.



Datapump

Oracle 10g 부터 등장한 export/import 의 향상된 유틸리티. export/import 의 여러 문제점을 해결


1. Datapump 의 장점

1) 작업 관리의 편의성 - exp/imp 의 방법은 작업이 시작되면 끝날 때 까지 제어를 할 수 없었지만 Datapump 는 job의 제어가 가능함.


2) 필요 디스크 공간의 예측 - exp/imp 작업은 작업중 디스크 공간의 부족으로 몇 시간동안 했던 작업을 취소하고 디스크를 추가 or 파일삭제의 방법으로 공간을 확보하고 다시 작업을 수행하던데 비해 datapump 는 ESTIMATE 파라미터를 사용해 해당 작업시 필요 디스크 공간을 미리 알 수 있음


3) 원격지 DB에 작업 수행 가능 - DB Link 라는 기능을 통해 원격지에 있는 db에 expdp / impdp 작업 가능


4) remapping 기능 지원 - 스키마 변경이나 테이블스페이스 변경, 데이터파일 변경이 가능


5) dump 작업을 하면서 압축을 동싱에 진행 - 용량이 큰 데이터의 경우 압축을 동시에 진행해 dump file의 용량을 획기적으로 줄일 수 있음


6) 향상된 작업 속도 - 서버 환경에 따라 다르지만 일반적으로 exp/imp 보다 평균 20배 이상 성능이 향상되었음



2. 사용 전 환경 설정

datapump 는 exp/imp 와 다르게 유틸리티가 직접 OS 파일에 I/O 할 수 없고 오라클에 directory 라는 객체를 통해 간접적으로 접근이 가능. 그래서 datapump 를 사용하려면 미리 directory 를 만들고 directory 접근권한이 있어야 함.


datapump 사용전 디렉토리 생성 후 권한설정하기

[oracle@localhost~]$ mkdir / data/dp

[oracle@localhost~]$ sqlplus / as sysdba


SQL> create or replace directory datapump as '/data/dp';

SQL> grant read, write on directory datapump to scott ;

SQL> grant create any directory to scott ;


3. expdp 실행 모드

1) full 모드 - full 파라미터를 사용해 DB 전체를 export 받을 수 있음. dba권한이나 export_full_database 권한 있어야함


2) schema 모드 - schemas 파라미터를 사용해 특정 스키마의 전체를 export 받을 수 있음


3) tablespace 모드 - tablespace 파라미터를 사용해 해당 테이블스페이스에 속한 모든 테이블을 받을 수 있음

만약 transport_tablespace 파라미터를 사용하면 테이블과 테이블스페이스의 메타 데이터까지 export받게 되어 다른 서버로 테이블스페이스 전체를 이동시킬 때 유용함. 단, 양쪽 db의 os가 같아야 하고 block size 와 characterset 도 같아야함


4) table 모드 - tables 파라미터를 사용, 여러 개의 테이블을 export받으려면 , (콤마) 로 구분


datapump 를 사용하려면 temporary tablespace 설정이 올바르게 되어 있어야 한다.

temporary tablespace 가 없거나 작으면 temporary tablespace is empty 라는 경고가 나옴.

경고가 나올 경우 즉시 temporary tablespace를 크게 만든후 해당 사용자가 사용하게 해주면 됨


SQL> create temporary tablespace temp100

  2    tempfile '/app/oracle/oradata/testdb/temp100.dbf' size 100m ;


SQL> alter user scott temporary tablespace temp100 ;          <-- 해당 사용자만 사용하게

or

SQL> alter database default temporary tablespace temp100 ;    <-- temp100 을 default 로


EXPORT 실습


실습 1. conventional path 로 full export 받기 ( 기본 모드 )


[oracle@localhost~]$ exp system/oracle full=y file=/data/exp/full01.dmp log=/data/exp/full_log01.log


실습 2. direct path 로 full export 받기


[oracle@localhost~]$ exp system/oracle full=y file=/data/exp/full02.dmp log=/data/exp/full_log02.log direct=y


실습 3. export를 저장하는 파일을 분할해서 받기


[oracle@localhost~]$ exp system/oracle full=y file=/data/exp/full03_1.dmp, \

      full03_2.dmp, \

      full03_3.dmp file size=100m


만약 용량 산정을 잘못하여 파일 개수를 부족하게 지정할 경우 파일을 추가하도록 프롬포트가 나옴, 그럼 그때 등록하면 됨


....

....

Export file : expdat.dmp > /data/exp/full04_4.dmp        <-- 이런식으로 추가해주면 됨


실습 4. 특정 tablespace 만 export 하기


[oracle@localhost~]$ exp system/oracle file=/data/exp/ex_user.dmp tablespaces=example,users


실습 5. 특정 table 만 exp 하기


[oracle@localhost~]$ exp scott/tiger tables=emp,dept file=emp_dept.dmp


실습 6. 여러 사용자를 동시에 exp 하기


[oracle@localhost~]$ exp system/oracle file=/data/exp/scott_hr.dmp owner=scott,hr


실습 7. evaluation buffer 값이 크면 대체로 export 값이 빠른데 크다고 무조건 빨라지는 것은 아님

temporary tablespace 의 크기 또한 exmp/imp 에 영향을 많이 주니 작업전에 큰 temporary tablespace를 확보


실습 8. parameter file을 이용한 export 수행


[oracle@localhost~]$ vi full.dat

file=/data/exp/full.dmp

full=y

direct=y

~

:wq!

[oracle@localhost~]$ exp system/oracle parfile=full.dat


실습 9. 특정 조건만 export 받기 - query 옵션 사용


step 1. emp 테이블에서 이름 첫 글자가 F 인 사람만 export 받기

( os 에서 사용하는 ' , " , < 등의 문자를 쓸 경우 \ 꼭 써야함 )


[oracle@localhost~]$ exp scott/tiger query= \ " where ename like \ ' F% ' \ ' \ " tables=emp \

> file=/data/exp/test06.dmp


step 2. emp 테이블에서 job 이 CLERK 이고 급여가 1000이상인 사람만 export 받기


[oracle@localhost~]$ exp scott/tiger query= \ "where job= \ 'CLERK\ ' and sal= \ >1000\ " \

> file=/data/exp/scott2.dmp tables=emp


step 3. parameter file 에서 query 옵션 사용하기 - escape 문자 안써도 됨


[oracle@localhost~]$ vi par2.dat

tables=emp query= "where job='CLERK' and sal > 1000 "

file = /data/exp/scott3.dmp

:wq!


[oracle@localhost~]$ exp scott/tiger parfile=par2.dat




IMPORT 실습


import 작업은 DDL과 DML 을 수행하는 것이므로 Redo log 와 Undo Segment 를 사용

대량의 데이터를 import 할 경우 충분한 용량의 Undo tablespace 를 준비해놓고 작업해야 함.

만약 import 중 Undo tablespace의 용량이 부족할 경우 마지막에 에러나면서 전부 rollback 될수도 있다.

이러한 위험을 줄이기 위해 import 할때 commit=y 옵션을 사용하면 array 단위로 commit 하기에 전체가 rollback 되는걸 방지한다.


실습 11. 전체 데이터 import 수행


[oracle@localhost~]$ imp system/oracle file=/data/exp/full01.dmp ignore=y full=y


전체 데이터를 import 할때 A 서버에서 B 서버로 이동시킬 때 B서버에 같은 테이블이나 데이터가 존재하면 추가해줌

만약 B서버에 제약조건이나 index 가 존재하면 unique index 나 primary key 등이 존재할 경우 데이터 추가 안되고 에러 발생


실습 12. 특정 사용자의 데이터만 import 하기


[oracle@localhost~]$ imp system/oracle file=/data/exp/full01.dmp ignore=y fromuser=scott tables=test01


실습 13. scott 사용자의 test02 테이블을 hr 사용자 소유로 변경


테스트 테이블 생성후 export

SCOTT> create table test02 (no numberm addr varchar2(10)) ;


SCOTT> begin

2    for i in 1..1000 loop

3      insert into test02 values (i,dbms_random.string('a',10)) ;

4    end loop ;

5    commit ;

6    end ;

7    /


SCOTT> select count(*) from test02 ;


COUNT(*)

--------

1000


[oracle@localhost~]$ exp scott/tiger file=/data/exp/test02.dmp tables=test02


import


[oracle@localhost~]$ imp system/oracle file=/data/exp/test02.dmp fromuser=scott touser=hr ignore=y


실습 14. 실제 데이터는 import 하지 않고 DDL 문장만 추출


두가지 방법이 있는데 한가지는 show=y 옵션, 다른 한가지는 indexfile 옵션 사용


show=y 옵션 : export 파일의 모든 내용들이 보여지는데 log 옵션을 주면 그 내용들이 전부 로그 파일에 저장됨, 그후 로그파일 편집


[oracle@localhost~]$ imp scott/tiger file=/data/exp/test02.dmp show=y log=test02.log


[oracle@localhost~]$ vi test02.log     <-- 로그파일 열어서 편집





반응형

'오라클 > 백업/복구' 카테고리의 다른 글

Flashback  (0) 2014.11.12
Clone DB  (0) 2014.11.10
sql loader  (0) 2014.11.10
Redo log flle 장애 처리방법  (0) 2014.11.05
Log Miner 활용하기  (0) 2014.11.05
control file, data file 연습문제  (0) 2014.11.04
Control file 복구  (0) 2014.11.04

+ Recent posts