ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • RMAN 으로 Raw device 백업 복구하기
    ORACLE/Backup & Recovery 2018.10.15 23:34

    테스트 1 : Raw device 상태의 데이터파일을 RMAN 의 backupset 으로 백업 받은 후 정상적으로 복구 되는지 확인


    Step 1. 현재상태 확인


    [oracle@localhost ~]$ sqlplus / as sysdba


    SQL*Plus: Release 10.2.0.5.0 - Production on Wed Feb 1 11:05:19 2012

    Copyright (c) 1982, 2010, Oracle. All Rights Reserved.

    Connected to:

    Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - Production

    With the Partitioning, OLAP, Data Mining and Real Application Testing options


    SQL> !vi dd.sql


    set line 200

    col tablespace_name for a10

    col file_name for a45

    select tablespace_name,bytes/1024/1024 MB,file_name from dba_data_files

    /

    :wq!


    SQL> @dd <- Data file 상태 확인


    TABLESPACE MB FILE_NAME

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

    USERS 5 /dev/raw/raw4

    SYSAUX 250 /dev/raw/raw2

    UNDOTBS1 30 /dev/raw/raw3

    SYSTEM 440 /dev/raw/raw1

    EXAMPLE 100 /dev/raw/raw5


    SQL> !vi log.sql <- Redo log file 상태 확인


    set line 200

    col group# for 999

    col member for a20

    col mb for 999

    col seq# for 999

    col archived for a4

    col status for a8

    select a.group#,a.member,b.bytes/1024/1024 MB,b.sequence# "SEQ#" ,b.archived,b.status

    from v$logfile a, v$log b

    where a.group#=b.group#

    order by 1,2

    /

    :wq!


    SQL> @log


    GROUP# MEMBER MB SEQ# ARCH STATUS

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

    1 /dev/raw/raw10 50 4 NO CURRENT

    1 /dev/raw/raw9 50 4 NO CURRENT

    2 /dev/raw/raw11 50 2 YES INACTIVE

    2 /dev/raw/raw12 50 2 YES INACTIVE

    3 /dev/raw/raw13 50 3 YES INACTIVE

    3 /dev/raw/raw14 50 3 YES INACTIVE

    6 rows selected.


    SQL> select name from v$controlfile;


    NAME

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

    /dev/raw/raw6

    /dev/raw/raw7

    /dev/raw/raw8


    SQL> archive log list;

    Database log mode Archive Mode

    Automatic archival Enabled

    Archive destination /data/arc2

    Oldest online log sequence 2

    Next log sequence to archive 4

    Current log sequence 4


    Step 2. RMAN 을 사용하여 전체 백업(백업경로는 /data/backup/rman/ 으로 하겠습니다)


    [oracle@localhost ~]$ rman target /


    Recovery Manager: Release 10.2.0.5.0 - Production on Wed Feb 1 10:47:50 2012

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

    connected to target database: TESTDB (DBID=2557423915)


    RMAN> backup as compressed backupset

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

    3> database;

    Starting backup at 01-FEB-12

    using target database control file instead of recovery catalog

    allocated channel: ORA_DISK_1

    channel ORA_DISK_1: sid=144 devtype=DISK

    channel ORA_DISK_1: starting compressed full datafile backupset

    channel ORA_DISK_1: specifying datafile(s) in backupset

    input datafile fno=00001 name=/dev/raw/raw1

    input datafile fno=00003 name=/dev/raw/raw2

    input datafile fno=00005 name=/dev/raw/raw5

    input datafile fno=00002 name=/dev/raw/raw3

    input datafile fno=00004 name=/dev/raw/raw4

    channel ORA_DISK_1: starting piece 1 at 01-FEB-12

    channel ORA_DISK_1: finished piece 1 at 01-FEB-12

    piece handle=/data/backup/rman/01n27hl4_1_1_20120201 tag=TAG20120201T104907

    comment=NONE

    channel ORA_DISK_1: backup set complete, elapsed time: 00:00:36

    channel ORA_DISK_1: starting compressed full datafile backupset

    channel ORA_DISK_1: specifying datafile(s) in backupset

    including current control file in backupset

    including current SPFILE in backupset

    channel ORA_DISK_1: starting piece 1 at 01-FEB-12

    channel ORA_DISK_1: finished piece 1 at 01-FEB-12

    piece handle=/data/backup/rman/02n27hm8_1_1_20120201 tag=TAG20120201T104907

    comment=NONE

    channel ORA_DISK_1: backup set complete, elapsed time: 00:00:03

    Finished backup at 01-FEB-12


    [oracle@localhost ~]$ ls -lSh /data/backup/rman/

    합계 112M

    -rw-r----- 1 oracle dba 111M 2월 1 10:49 01n27hl4_1_1_20120201 <- 전체 backupset

    -rw-r----- 1 oracle dba 1.1M 2월 1 10:49 02n27hm8_1_1_20120201 <- controlfile backupset


    Step 3. 테스트용 테이블 scott.gogak 테이블 생성 후 장애 발생시킴


    [oracle@localhost ~]$ sqlplus scott/tiger


    SQL*Plus: Release 10.2.0.5.0 - Production on Wed Feb 1 11:14:21 2012

    Copyright (c) 1982, 2010, Oracle. All Rights Reserved.

    Connected to:

    Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - Production

    With the Partitioning, OLAP, Data Mining and Real Application Testing options


    SQL> create table gogak (no number, name varchar2(10)) tablespace users;

    Table created.


    SQL> insert into gogak values (1,'AAA');

    1 row created.


    SQL> insert into gogak values (2,'BBB');

    1 row created.


    SQL> commit;

    Commit complete.


    SQL> select * from gogak;


    NO NAME

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

    1 AAA

    2 BBB


    SQL> conn / as sysdba

    Connected.


    SQL> @dd


    TABLESPACE MB FILE_NAME

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

    USERS 5 /dev/raw/raw4 <- 이 파일에 장애 발생시킴

    SYSAUX 250 /dev/raw/raw2

    UNDOTBS1 30 /dev/raw/raw3

    SYSTEM 440 /dev/raw/raw1

    EXAMPLE 100 /dev/raw/raw5


    SQL> !dd if=/dev/zero of=/dev/raw/raw4 bs=8k

    dd: writing `/dev/raw/raw4': 장치에 남은 공간이 없음

    12801+0개의 레코드를 입력하였습니다

    12800+0개의 레코드를 출력하였습니다


    SQL> alter tablespace users offline immediate;

    Tablespace altered.


    SQL> alter tablespace users online;

    alter tablespace users online

    *

    ERROR at line 1:

    ORA-01122: database file 4 failed verification check

    ORA-01110: data file 4: '/dev/raw/raw4'

    ORA-01210: data file header is media corrupt


    SQL> select * from scott.gogak;

    select * from scott.gogak

    *

    ERROR at line 1:

    ORA-00376: file 4 cannot be read at this time

    ORA-01110: data file 4: '/dev/raw/raw4'


    Step 4. RMAN 으로 해당 장애 복구하기


    [oracle@localhost ~]$ rman target /


    Recovery Manager: Release 10.2.0.5.0 - Production on Wed Feb 1 11:19:20 2012

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

    connected to target database: TESTDB (DBID=2557423915)

    RMAN> run {

    2> sql "alter tablespace users offline immediate";

    3> restore tablespace users;

    4> recover tablespace users;

    5> sql "alter tablespace users online";

    6> }

    sql statement: alter tablespace users offline immediate

    Starting restore at 01-FEB-12

    using channel ORA_DISK_1

    channel ORA_DISK_1: starting datafile backupset restore

    channel ORA_DISK_1: specifying datafile(s) to restore from backup set

    restoring datafile 00004 to /dev/raw/raw4

    channel ORA_DISK_1: reading from backup piece /data/backup/rman/01n27hl4_1_1_20120201

    channel ORA_DISK_1: restored backup piece 1

    piece handle=/data/backup/rman/01n27hl4_1_1_20120201 tag=TAG20120201T104907

    channel ORA_DISK_1: restore complete, elapsed time: 00:00:02

    Finished restore at 01-FEB-12

    Starting recover at 01-FEB-12

    using channel ORA_DISK_1

    starting media recovery

    media recovery complete, elapsed time: 00:00:01

    Finished recover at 01-FEB-12

    sql statement: alter tablespace users online


    RMAN> exit

    Recovery Manager complete.


    [oracle@localhost ~]$ sqlplus scott/tiger


    SQL*Plus: Release 10.2.0.5.0 - Production on Wed Feb 1 11:21:53 2012

    Copyright (c) 1982, 2010, Oracle. All Rights Reserved.

    Connected to:

    Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - Production

    With the Partitioning, OLAP, Data Mining and Real Application Testing options


    SQL> select * from gogak;


    NO NAME

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

    1 AAA

    2 BBB


    위에서 테스트 해 본 바와 같이 Raw device 도 RMAN 으로 백업 및 복구가 가능합니다.



    테스트 2. Raw device 상태의 데이터 파일을 backupset 으로 증분 백업 가능한지와 복구 가능한지 테스트



    Step 1. 현재 상태 확인


    [oracle@localhost ~]$ sqlplus / as sysdba


    SQL*Plus: Release 10.2.0.5.0 - Production on Wed Feb 1 11:24:25 2012

    Copyright (c) 1982, 2010, Oracle. All Rights Reserved.

    Connected to:

    Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - Production

    With the Partitioning, OLAP, Data Mining and Real Application Testing options


    SQL> @dd


    TABLESPACE MB FILE_NAME

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

    USERS 5 /dev/raw/raw4

    SYSAUX 250 /dev/raw/raw2

    UNDOTBS1 30 /dev/raw/raw3

    SYSTEM 440 /dev/raw/raw1

    EXAMPLE 100 /dev/raw/raw5


    SQL> @log


    GROUP# MEMBER MB SEQ# ARCH STATUS

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

    1 /dev/raw/raw10 50 4 NO CURRENT

    1 /dev/raw/raw9 50 4 NO CURRENT

    2 /dev/raw/raw11 50 2 YES INACTIVE

    2 /dev/raw/raw12 50 2 YES INACTIVE

    3 /dev/raw/raw13 50 3 YES INACTIVE

    3 /dev/raw/raw14 50 3 YES INACTIVE


    SQL> select name from v$controlfile;


    NAME

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

    /dev/raw/raw6

    /dev/raw/raw7

    /dev/raw/raw8

    6 rows selected.



    Step 2. RMAN 을 사용하여 증분 백업을 여러 차례 수행합니다.


    [oracle@localhost ~]$ rman target /


    Recovery Manager: Release 10.2.0.5.0 - Production on Wed Feb 1 11:28:05 2012

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

    connected to target database: TESTDB (DBID=2557423915)


    RMAN> backup as compressed backupset

    2> incremental level 0

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

    4> database;

    Starting backup at 01-FEB-12

    using target database control file instead of recovery catalog

    allocated channel: ORA_DISK_1

    channel ORA_DISK_1: sid=145 devtype=DISK

    channel ORA_DISK_1: starting compressed full datafile backupset

    channel ORA_DISK_1: specifying datafile(s) in backupset

    input datafile fno=00001 name=/dev/raw/raw1

    input datafile fno=00003 name=/dev/raw/raw2

    input datafile fno=00005 name=/dev/raw/raw5

    input datafile fno=00002 name=/dev/raw/raw3

    input datafile fno=00004 name=/dev/raw/raw4

    channel ORA_DISK_1: starting piece 1 at 01-FEB-12

    channel ORA_DISK_1: finished piece 1 at 01-FEB-12

    piece handle=/data/backup/rman/03n27jur_1_1_20120201 tag=TAG20120201T112827

    comment=NONE

    channel ORA_DISK_1: backup set complete, elapsed time: 00:00:35

    channel ORA_DISK_1: starting compressed full datafile backupset

    channel ORA_DISK_1: specifying datafile(s) in backupset

    including current control file in backupset

    including current SPFILE in backupset

    channel ORA_DISK_1: starting piece 1 at 01-FEB-12

    channel ORA_DISK_1: finished piece 1 at 01-FEB-12

    piece handle=/data/backup/rman/04n27jvu_1_1_20120201 tag=TAG20120201T112827

    comment=NONE

    channel ORA_DISK_1: backup set complete, elapsed time: 00:00:03

    Finished backup at 01-FEB-12

    -- 다른 터미널에서 데이터 변경을 위해 테이블 생성하고 데이터 입력합니다.


    SQL> create table scott.gogak2 (no number,name varchar2(10)) tablespace users;

    Table created.


    SQL> insert into scott.gogak2 values (1,'CCC');

    1 row created.


    SQL> insert into scott.gogak2 values (2,'DDD');

    1 row created.


    SQL> commit;

    Commit complete.


    -- RMAN 터미널에서 증분 백업을 수행합니다.

    RMAN> backup as compressed backupset

    2> incremental level 2

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

    4> tablespace users;

    Starting backup at 01-FEB-12

    using channel ORA_DISK_1

    channel ORA_DISK_1: starting compressed incremental level 2 datafile backupset

    channel ORA_DISK_1: specifying datafile(s) in backupset

    input datafile fno=00004 name=/dev/raw/raw4

    channel ORA_DISK_1: starting piece 1 at 01-FEB-12

    channel ORA_DISK_1: finished piece 1 at 01-FEB-12

    piece handle=/data/backup/rman/05n27knu_1_1_20120201 tag=TAG20120201T114150

    comment=NONE

    channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01

    Finished backup at 01-FEB-12



    Step 3. 장애를 발생 시킵니다


    SQL> @dd


    TABLESPACE MB FILE_NAME

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

    USERS 5 /dev/raw/raw4

    SYSAUX 250 /dev/raw/raw2

    UNDOTBS1 30 /dev/raw/raw3

    SYSTEM 440 /dev/raw/raw1

    EXAMPLE 100 /dev/raw/raw5


    SQL> !dd if=/dev/zero of=/dev/raw/raw4 bs=8k <- 장애를 발생시킵니다

    dd: writing `/dev/raw/raw4': 장치에 남은 공간이 없음

    12801+0개의 레코드를 입력하였습니다

    12800+0개의 레코드를 출력하였습니다


    SQL> alter tablespace users offline immediate;

    Tablespace altered.


    SQL> alter tablespace users online;

    alter tablespace users online

    *

    ERROR at line 1:

    ORA-01122: database file 4 failed verification check

    ORA-01110: data file 4: '/dev/raw/raw4'

    ORA-01210: data file header is media corrupt


    SQL> select * from scott.gogak2;

    select * from scott.gogak2

    *

    ERROR at line 1:

    ORA-00376: file 4 cannot be read at this time

    ORA-01110: data file 4: '/dev/raw/raw4'



    Step 4. RMAN 으로 복구 후 확인합니다.


    RMAN> run {

    2> restore tablespace users;

    3> recover tablespace users;

    4> sql "alter tablespace users online" ;

    5> }

    Starting restore at 01-FEB-12

    using channel ORA_DISK_1

    channel ORA_DISK_1: starting datafile backupset restore

    channel ORA_DISK_1: specifying datafile(s) to restore from backup set

    restoring datafile 00004 to /dev/raw/raw4

    channel ORA_DISK_1: reading from backup piece /data/backup/rman/05n27knu_1_1_20120201

    channel ORA_DISK_1: restored backup piece 1

    piece handle=/data/backup/rman/05n27knu_1_1_20120201 tag=TAG20120201T114150

    channel ORA_DISK_1: restore complete, elapsed time: 00:00:01

    Finished restore at 01-FEB-12

    Starting recover at 01-FEB-12

    using channel ORA_DISK_1

    starting media recovery

    media recovery complete, elapsed time: 00:00:01

    Finished recover at 01-FEB-12

    sql statement: alter tablespace users online


    SQL> select * from scott.gogak2;


    NO NAME

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

    1 CCC

    2 DDD



    테스트 3. RMAN 으로 Raw device 상태의 데이터 파일을 Raw device 형태로 백업 받은 후 복구 가능한지 테스트



    Step 1. 현재 상태 확인


    RMAN> report schema;

    Report of database schema

    List of Permanent Datafiles

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

    File Size(MB) Tablespace RB segs Datafile Name

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

    1 440 SYSTEM *** /dev/raw/raw1

    2 30 UNDOTBS1 *** /dev/raw/raw3

    3 250 SYSAUX *** /dev/raw/raw2

    4 5 USERS *** /dev/raw/raw4

    5 100 EXAMPLE *** /dev/raw/raw5

    List of Temporary Files

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

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

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

    1 20 TEMP 100 /dev/raw/raw15


    Step 2. RMAN 으로 Raw device 파일 백업 수행


    RMAN> copy

    2> datafile 1 to '/data/backup/rman/system' ,

    3> datafile 2 to '/data/backup/rman/undotbs1' ,

    4> datafile 3 to '/data/backup/rman/sysaux' ,

    5> datafile 4 to '/data/backup/rman/users' ,

    6> datafile 5 to '/data/backup/rman/example' ;

    Starting backup at 01-FEB-12

    using channel ORA_DISK_1

    channel ORA_DISK_1: starting datafile copy

    input datafile fno=00001 name=/dev/raw/raw1

    output filename=/data/backup/rman/system tag=TAG20120201T115814 recid=9

    stamp=774100724

    channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:35

    channel ORA_DISK_1: starting datafile copy

    input datafile fno=00003 name=/dev/raw/raw2

    output filename=/data/backup/rman/sysaux tag=TAG20120201T115814 recid=10

    stamp=774100744

    channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:16

    channel ORA_DISK_1: starting datafile copy

    input datafile fno=00005 name=/dev/raw/raw5

    output filename=/data/backup/rman/example tag=TAG20120201T115814 recid=11

    stamp=774100749

    channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:07

    channel ORA_DISK_1: starting datafile copy

    input datafile fno=00002 name=/dev/raw/raw3

    output filename=/data/backup/rman/undotbs1 tag=TAG20120201T115814 recid=12

    stamp=774100754

    channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03

    channel ORA_DISK_1: starting datafile copy

    input datafile fno=00004 name=/dev/raw/raw4

    output filename=/data/backup/rman/users tag=TAG20120201T115814 recid=13

    stamp=774100756

    channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01

    Finished backup at 01-FEB-12

    -- 다른 창에서 백업 파일을 확인합니다


    [oracle@localhost rman]$ pwd

    /data/backup/rman


    [oracle@localhost rman]$ ls –lSh

    -rw-r----- 1 oracle dba 441M 2?? 1 11:58 system

    -rw-r----- 1 oracle dba 251M 2?? 1 11:59 sysaux

    -rw-r----- 1 oracle dba 101M 2?? 1 11:59 example

    -rw-r----- 1 oracle dba 31M 2?? 1 11:59 undotbs1

    -rw-r----- 1 oracle dba 5.1M 2?? 1 11:59 users


    Step 3. 테스트용 테이블 scott.gogak3 을 생성 후 장애를 발생시킵니다.


    SQL> create table scott.gogak3 (no number, name varchar2(10))

    2 tablespace users;

    Table created.


    SQL> insert into scott.gogak3 values (1,'EEE');

    1 row created.


    SQL> insert into scott.gogak3 values (2,'FFF');

    1 row created.


    SQL> commit;

    Commit complete.


    SQL> select * from scott.gogak3;


    NO NAME

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

    1 EEE

    2 FFF


    SQL> @dd


    TABLESPACE MB FILE_NAME

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

    USERS 5 /dev/raw/raw4

    SYSAUX 250 /dev/raw/raw2

    UNDOTBS1 30 /dev/raw/raw3

    SYSTEM 440 /dev/raw/raw1

    EXAMPLE 100 /dev/raw/raw5

    SQL> !dd if=/dev/zero of=/dev/raw/raw4 bs=8k

    dd: writing `/dev/raw/raw4': 장치에 남은 공간이 없음

    12801+0개의 레코드를 입력하였습니다

    12800+0개의 레코드를 출력하였습니다


    SQL> alter tablespace users offline immediate;

    Tablespace altered.


    SQL> alter tablespace users online;

    alter tablespace users online

    *

    ERROR at line 1:

    ORA-01122: database file 4 failed verification check

    ORA-01110: data file 4: '/dev/raw/raw4'

    ORA-01210: data file header is media corrupt


    SQL> select * from scott.gogak3;

    select * from scott.gogak3

    *

    ERROR at line 1:

    ORA-00376: file 4 cannot be read at this time

    ORA-01110: data file 4: '/dev/raw/raw4'


    Step 4. RMAN 으로 파일을 복원 한 후 복구합니다.


    RMAN> restore tablespace users;

    Starting restore at 01-FEB-12

    using channel ORA_DISK_1

    channel ORA_DISK_1: restoring datafile 00004

    input datafile copy recid=13 stamp=774100756 filename=/data/backup/rman/users

    destination for restore of datafile 00004: /dev/raw/raw4

    channel ORA_DISK_1: copied datafile copy of datafile 00004

    output filename=/dev/raw/raw4 recid=14 stamp=774101682

    Finished restore at 01-FEB-12

    위에서 진하게 표시된 부분을 보면 RMAN 에서 자동으로 copy 된 raw device 를 찾아서

    복원하는 것을 알 수 있습니다.


    RMAN> recover tablespace users;

    Starting recover at 01-FEB-12

    using channel ORA_DISK_1

    starting media recovery

    media recovery complete, elapsed time: 00:00:00

    Finished recover at 01-FEB-12


    -- sqlplus 창에서 데이터가 복구되었는지 확인합니다.


    SQL> alter tablespace users online;

    Tablespace altered.


    SQL> select * from scott.gogak3;

    NO NAME

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

    1 EEE

    2 FFF


    정상적으로 복구가 된 것을 알 수 있습니다.

    위에서 살펴본 바와 같이 Raw Device 로 구성된 database 도 RMAN 으로 동일하게 관리할 수 있습니다.

    댓글 0

Designed by black7375.

티스토리 툴바