반응형

binutils

compat-libstdc++-33

compat-libstdc++-33.i686

gcc

gcc-c++

glibc

glibc.i686

glibc-devel

glibc-devel.i686

ksh

libgcc

libgcc.i686 

libstdc++

libstdc++.i686 

libstdc++-devel 

libstdc++-devel.i686 

libaio 

libaio.i686 

libaio-devel 

libaio-devel.i686 

libXext 

libXext.i686 

libXtst 

libXtst.i686 

libX11 

libX11.i686 

libXau 

libXau.i686 

libxcb 

libxcb.i686 

libXi 

libXi.i686 

make 

sysstat 

unixODBC 

unixODBC-devel

zlib-devel                           

zlib-devel.i686

반응형
반응형

Window 서버에서 오라클 삭제하기

1. oracle service 중지

2. oracle deinstall

3. 레지스트리 정리

4. oracle 설치된 directory 삭제

5. reboot

 

 

1. 서비스 중지

시작 - 실행 - services.msc      서비스창 실행

Oracle 관련 서비스 중지하기 ( oracle 로 시작하는 서비스 중지하면 됨 )

 

2. oracle deinstall

오라클 설치 폴더 들어가서 -> \11.2.0\home_1\deinstall\deinstall.bat 실행       경로는 알아서 잘 찾자

나오는 거 그냥 쭉쭉 enter 치고 마지막에 y눌러서 deinstall 하면 끝

 

3. 레지스트리 정리

시작 - 실행 - regedit

 

아래 경로 오라클 관련 레지스트리 삭제

 

HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Oracle~               HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\Oracle~
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Oracle~
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\Oracle~

 

4. 오라클 설치된 directory 삭제

5. reboot

시작 - 실행 -services.msc 실행해서 oracle 서비스 삭제된거 확인 해보면 제거 완료

반응형
반응형

TTS Migration

 

서로 다른 DB간 Tablespace단위로 Datafile을 migration 할 수 있는 기능

 

TTS 제약사항

 - 10g 이전 버전에서는 원본과 대상이 동일 platform일 경우 migration 가능

 - 동일 블록 사이즈 사용

 - system, undo, sysaux, temp tablespace 는 지원 불가능

 - asm 사용시 rman을 사용해 변환 작업을 거쳐야 함

 - standard edition 에서는 지원안됨

 

 

 

Oracle 8i 

Oracle 9i 

Oracle 10g 

blcok size 

동일 

달라도 됨 

달라도 됨 

platform (os) 

동일 

동일 

달라도 됨 

character set 

동일 

동일 

동일 

 

- character set, block size, platform 정보 확인 후 migration

 

character set 확인

select * from nls_database_parameters where parameter='NLS_CHARACTERSET';

 

-character set 다를 경우 변경 방법-      ex) KO16KSC601 로 변경

sql> shutdown immediate;

sql> startup mount;

sql> alter system enable restricted session;

sql> alter system set job_queue_processes=0;

sql> alter system set aq_tm_processes=0;

sql> alter database open;

sql> alter database character set internal_use KO16KSC5601;

sql> shutdown immediate

sql> startup

 

block size 확인

sql> show parameter block_size;

 

원본과 대상의 초기 parameter COMPATIBLE_VERSION 이 10.0 이상이어야 함.

(compatible_version 과 oracle version은 다른 것임)

sql> show parameter compatible

 

platform 확인

sql> select d.dbid,d.name,tp.platform_id, tp.platform_name,tp.endian_format

from v$transportable_platform tp, v$database d where tp.platform_name = d.platform_name;

 

platform 의 endian_format(os 속성) 이 동일해야 함. 다를 경우 rman 의 convert 명령어 이용

sql> select PLATFROM_ID, PLATFORM_NAME, ENDIAN_FORMAT from v$transportable_platform ;    

 

ex) HP UX ENDIAN_FORMAT=big => Microsoft Windows ENDIAN_FORMAT=little

$rman target=/

RMAN> convert tablespace 'TEST' to platform='Microsoft Windows IA (32-bit)' db_file_name_convert='/home/oracle/oradat/testdb/test01.dbf', '/home/oracle/test01_win.dbf';

 

-------------------------------------------------------------------------------------------준비 단계

 

 

실습.

 

Windows 7 oracle 11g -> RHEL 5.3 oracle 11g

 

Windows = source

RHEL = target

 

 

SOURCE

sql> conn / as sysdba

 

Test 용 tablespace, table 생성

sql> create tablespace test datafile 'c:\app\vmware\oradata\orcl\test_01.dbf' size 30m;

 

sql> create user test

default tablespace test

quota unlimited on test

identified by test;

 

sql> grant connect, resource to test;

 

sql> conn test/test

 

sql> create table test100(no number, name varchar2(10));

sql> create table test101(no number, name varchar2(10));

 

sql> insert into test100 values(1,'apple');

sql> insert into test100 values(2,'orange');

 

sql> insert into test101 values(1,'car');

sql> insert into test101 values(2,'ship');

 

sql> select segment_name, tablespace_name from user_segments;

 

SEGMENT_NAME      TABLESPACE_NAME

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

TEST100                    TEST

TEST101                    TEST

 

sql> select * from test.test100;           <--  insert 한 결과 잘 나오나 확인

sql> select * from test.test101;           <--  insert 한 결과 잘 나오나 확인

 

이동하려는 tablespace test 가 이동 가능한지 확인

sql> conn / as sysdba

 

sql> exec DBMS_TTS.transport_set_check('TEST',true) ;

pl/sql 처리가 정상적으로 완료되었습니다.

 

sql> select * from transport_set_violations ;

선택된 레코드가 없습니다.

 

test tablespace 를 read only 모드로 변경 (exp, imp하기위해서)

sql> alter tablespace test read only ; 

 

datapump 하기 위해 directory 생성, 권한부여

sql> create or replace directory dump as 'c:\app\vmware\dump' ;

sql> grant read, write on directory dump to system ;

 

$ expdp system/oracle dumpfile=dump:test.dmp transport_tablespaces=test

 

ftp 이용해서 test.dmp , test_01.dbf 파일을 target db 로 이동

-binary 모드로 변경 후 파일 이동-

 

 

TARGET

datapump 경로 설정

 

sql> create or replace directory dump as '/app/datapump';

sql> grant read, write on directory dump to system;

 

user 생성 (source db 에서 test user로 했기 때문에 target 도 test의 user가 있어야 함)

sql> create user test identified by test

* Source DB 에서 Target DB 로 옮기려고 하는 tablespace 중 target db에 동일한 이름의 tablespace 가 있으면 안됨.

 

impdp system/oracle dumpfile=test.dmp directory=dump transport_datafiles=/app/oracle/oradata/testdb/test_01/dbf

 

 

반응형

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

RMAN+Clone DB 사용해서 복구  (0) 2014.11.17
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
반응형

쿼리조회 결과가 너무 많아서 확인이 안될때 파일로 저장 해서 확인!

 

"SPOOL Command" 사용

 

spool 저장할파일명

sql문

spool off

 

간단하게 sql스크립트 만들어서 사용하면 편함

 

ex) vi a.sql

 

spool $PWD/a.out

select * from all_tab_columns;

spool off

 

현재 디렉토리에 a.out 파일로 저장하는 a.sql 스크립트

반응형

'오라클 > SQL' 카테고리의 다른 글

DML  (0) 2014.10.12
DDL  (0) 2014.10.12
JOIN 함수  (0) 2014.10.10
그룹함수 (연습문제)  (1) 2014.10.08
복수행 함수 (그룹 함수)  (1) 2014.10.08
sql 단일행 함수 - 정규식  (2) 2014.10.01
sql 단일행 함수 - 일반 함수  (0) 2014.09.30
반응형

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

+ Recent posts