IT기술/Oracle

05 RAC 백업 복구 (RAW DEVICE 기반) 1 물리적 장애

dobbby 2014. 1. 8. 11:18
반응형

이번  장에서는  Raw device  기반의  Oracle Real Application Cluster (이하  RAC)환경에서  

어떻게  백업을  하고 장애가  발생했을  경우  어떻게  복구를  하는지  살펴  보도록  하겠습니다.

( RAC  의  Storage를  구현하는  방법이  앞에서  살펴본  바와  같이  Automatic Storage Management (이하  ASM) 방식과  

Raw Device (로우  디바이스)  방식이  있는데  ASM  기반의  백업  및  복구는  저자의  다른  저서인  

오라클 관리  실무  와  오라클  백업과  복구의  정석의  ASM  과  RMAN  부분을  참고  하시면  됩니다.)

그리고  RAC  구성에서의  장애  중에서  물리적인  하드웨어나  네트워크  관련  장애는  거의  발생하는  경우가 드물고  

주로  사용자의  실수  등의  논리적  장애가  많이  발생하므로  이  책에서도  물리적  장애  유형은  간단히 살펴보고 

논리적인  장애를  복구하는  방법에  대해  자세하게  설명하겠습니다.


이  장에서  살펴  볼  주요  내용들입니다.


1.  OCR  개념  및  관리  와  백업  /  복구  하기

2.  Vote Disk  개념  및  관리와  백업  /  복구  하기

3.  RAC  환경에서의  Archive log mode  로  변경하기

4.    Raw device Backup  수행  하기

4-1. Hot Backup (Begin Backup)  하기

4-2. Cold Backup (Close Backup)  하기

5.   Raw Device  를  RMAN  으로  백업  수행하기

6. Archive log mode  에서의  장애복구

Case 1. Offline  되는  테이블  스페이스  장애  발생함  –  아카이브  로그  파일  필요  없을  경우

Case 2. Offline  되는  테이블  스페이스  장애  발생함  –  아카이브  로그  파일  필요  할  경우

Case 3. Offline  안  되는  데이터  파일  장애  발생

Case 4.  일부  컨트롤  파일  장애

Case 5.  모든  컨트롤  파일  장애  –  삭제  또는  old control file  발생으로  재  생성해서  해결하는  방법

Case 6.  대기중인  리두  로그  파일  그룹  장애  –  아카이빙  완료된  상태

Case 7. Current Redo log file  장애  –  한쪽  노드만  장애  발생

7-1. hot backup  파일로  복구  하기

7-2. cold backup  파일로  복구  하기 

Case 8. Current Redo log  장애  –  양쪽  노드  모두  장애  발생

Case 9. Redo log file  전체  손상됨  –  한쪽  노드에서만  장애  발생

Case 10. Redo log file  전체  손상됨  –  양쪽  노드  모두에서  장애  발생함

10-1. Begin backup file  로  복구하기

10-2. Cold backup file  로  복구하기

10-3.  장애  발생  후  shutdown immediate  로  정상  종료  됨 

Case 11. Redo log file  삭제  장애  후  백업파일  없는  경우  복구

11-1. Redo log file  이  Active  상태일  때  장애  –변경내역이  데이터파일에  저장  안된  경우

11-2. Redo log file  이  Inactive  상태일  때  장애

Case 12. Drop table  삭제  복구하기  –  모든  노드  무  정지  상태에서  복구하기

Case 13.  잘못된  DML  장애  복구하기  –  잘못된  update  후  commit  수행  복구하기 



1. OCR  개념  및  관리

RAC  에서  RAC  자원의  상태와  각  노드들에  관한  중요  정보를  저장하고  있는  저장소는  OCR  이라는  곳과  Vote Disk  라는  두  가지  종류가  있습니다.

이  두  곳  중  한  곳이라도  장애가  발생하면  치명적  문제를  발생하게  되므로  RAC  를  설치  할  때  다중화를  하도록 권장합니다.  

그러나  RAC  설치  당시에  다중화를  한다고  해도  장애가  발생할  수  있으므로  관리자가  수시로  백업을 수행해야  합니다.

이  장에서는  먼저  OCR  에  대해서  자세히  살펴  본  후  Vote disk  에  대해서  살펴보겠습니다.


1) OCR Disk  란?

- OCR (Oracle Cluster Repository)  의  약자로  Cluster  전체의  정보를  저장하고  있는  저장소입니다.

윈도와  비교하면  레지스트리  같은  역할을  하며  RAC  상의  모든  노드들에  대한  정보와  모든  자원들에 대한  정보가  저장되어  있기  때문에  

이  곳이  장애가  나면  RAC  전체가  중단될  수  있습니다.

사람으로  비유하면  두뇌와  같은  역할을  하는  아주  중요한  곳입니다.


2) OCR Disk  주요  특징

- OCR  디스크의  소유자는  기본적으로  root  로  되어  있습니다. 

하지만  경우에  따라서는  oracle  사용자가  될  수도  있습니다.

-  아래의  조건으로  자동  백업을  수행합니다.

4시간마다  /  매일마다  /  매주마다


3) OCR  관련  사항  확인하기

- OCR file은  $ORA_CRS_HOME/bin/ocrcheck  명령어를  이용하여  상태를  확인합니다.

(  아래  화면은  10g  버전에서  조회한  화면입니다)

$ cd $ORA_CRS_HOME/bin

$ pwd

$ ocr check


4) OCR  의  자동  백업  경로  확인

$ ocrconfig -showbackup


위에서  확인한  디렉터리로  가서  실제  파일을  확인  해  보겠습니다.

$ cd /home/oracle/product/10g/crs/cdata/crs

$ ls -lSh


5) OCR file  장애  및  복구하기  - ocrconfig  명령  사용

(  자동  백업파일을  이용한  복원과  수동  백업파일을  이용한  복원으로  구분해서  살펴봅니다  )

5.1  자동  백업  파일로부터의  OCR  복원하기


Step 1.현재  ocr  디스크  확인합니다

[root@rac1 ~]# ocrcheck


Step 2.  자동  백업  내역  확인

[root@rac1 ~]# ocrconfig -showbackup

rac1      2013/10/30 15:43:39      /home/oracle/product/10g/crs/cdata/crs

rac1      2013/10/22 06:35:35      /home/oracle/product/10g/crs/cdata/crs

rac1      2013/10/22 02:35:35      /home/oracle/product/10g/crs/cdata/crs

rac1      2013/10/30 15:43:39      /home/oracle/product/10g/crs/cdata/crs

rac1      2013/10/19 23:53:15      /home/oracle/product/10g/crs/cdata/crs

[root@rac1 ~]# cd /home/oracle/product/10g/crs/cdata/crs/

[root@rac1 crs]# ls    -lSh

총용량  28M

-rw-r--r--  1 root root 4.6M 10??30 15:43 backup00.ocr

-rw-r--r--  1 root root 4.6M 10??22 06:35 backup01.ocr

-rw-r--r--  1 root root 4.6M 10??22 02:35 backup02.ocr

-rw-r--r--  1 root root 4.6M 10??30 15:43 day.ocr

-rw-r--r--  1 root root 4.6M 10??30 15:43 week_.ocr

-rw-r--r--  1 root root 4.1M 10??19 23:53 week.ocr

위  백업파일  중  가장  최신  파일인  backup00.ocr  을  복원에  사용할  예정입니다.


Step 3. dd  명령어로  ocr disk  를  초기화  시키는  장애를  발생시킵니다.

[root@rac1 ~]# dd    if=/dev/zero   of=/dev/raw/raw1    bs=8k   <--  장애를  발생시킵니다

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

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

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


[root@rac1 ~]# dd    if=/dev/zero   of=/dev/raw/raw2    bs=8k   <--  장애를  발생시킵니다.

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

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

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


[root@rac1 ~]# ocrcheck

PROT-602: Failed to retrieve data from the cluster registry  <-- ocr  에  접근  할  수  없습니다.


[root@rac1 ~]# crsctl stop crs

OCR initialization failed with invalid format: PROC-22: The OCR backend has an invalid format 

잠시  기다리면  OCR  디스크  장애로  RAC  전체가  중단됩니다


Step 4.  백업된  OCR  파일을  복원해서  해결하겠습니다.

[root@rac1 crs]# ocrconfig –restore    /home/oracle/product/10g/crs/cdata/crs/backup00.ocr

[root@rac1 crs]# crsctl start crs

Attempting to start CRS stack

The CRS stack will be started shortly


[root@rac1 crs]# su - oracle

[oracle@rac1 crs]$ cluvfy    comp    ocr    -n    all <--- cluvfy  명령어를  이용하여  복구  확인하기

OCR  무결성  확인  중

OCR  무결성을  검사하는  중...

클러스터화되지  않은  구성이  없는지  검사하는  중...

모든  노드에  클러스터화되지  않은  로컬  전용  구성이  없습니다.

OCR  장치에  대한  고유성  검사를  성공했습니다.

OCR  버전을  검사하는  중...

올바른  OCR  버전  "2"이(가)  존재합니다.

OCR에  대한  데이터  무결성을  검사하는  중...

OCR에  대한  데이터  무결성  검사를  성공했습니다.

OCR  무결성  검사를  성공했습니다.

OCR  무결성  확인  작업을  성공했습니다.


[oracle@rac1 crs]$ ocrcheck

Status of Oracle Cluster Registry is as follows :

Version                   :           2

Total space (kbytes)      :      307112

Used space (kbytes)       :        4552

Available space (kbytes) :      302560

ID                        : 1705186177

Device/File Name          : /dev/raw/raw1  <--  정상적으로  복구완료되었습니다.

Device/File integrity check succeeded

Device/File Name          : /dev/raw/raw2   <--  정상적으로  복구완료되었습니다.

Device/File integrity check succeeded

Cluster registry integrity check succeeded


Step 5.  오라클  클러스터웨어(Oracle Clusterware)를  start

[root@rac1]# crsctl    start    crs 




5.2    OCR file  수동  Backup  하기

자동  백업은  오라클이  정해  진  시간에  백업을  수행하는  것입니다.  그러나  RAC  의  OCR  디스크에  내용이 변경되었다면  

(예를  들어  신규  노드가  추가되는  경우)  지금  즉시  백업을  수행해야  합니다.

이  때  아래와  같은  방법으로  수동  백업을  하면  됩니다.


Step 1.  전체  노드의  오라클  클러스터웨어(Oracle Clusterware)를  stop

[root@rac1]# crsctl stop crs

(주의) crs  가  start  상태에서  백업을  수행해도  수행됩니다.  

그러나  백업  도중에  crs  정보가  변경될  수  있기  때문에 crs를  중지  시킨  후  백업을  수행하기를  권장합니다.


Step 2. ocrconfig –export  명령어를  이용하여  수동으로  OCR file을  해당  경로에  백업  수행

[root@rac1]# ocrconfig –export /home/oracle/ocrbackup


Step 3.  전체  노드의  오라클  클러스터웨어(Oracle Clusterware)를  start

[root@rac1]# crsctl start crs




5.3  수동  백업  파일을  사용하여  OCR file  복원하기

Step 1. dd  명령어로  ocr disk  장애  발생

[root@rac1]# crsctl stop crs


Step 2.  장애  발생  시킨  후  OCR file을  해당백업  경로에서  복원 

[root@rac1]# ocrconfig –import /home/oracle/ocrbackup


Step 3. cluvfy  명령어를  이용하여  복원이  잘  되었나  확인

[root@rac1]# cluvfy comp ocr –n all


Step 4.  전체  노드의  오라클  클러스터웨어(Oracle Clusterware)를  start

[root@rac1]# crsctl start crs 




6) vote disk  관리하기

6.1 Vote disk  조회하기

$ crsctl query css votedisk



6.2 Vote disk  백업  수행하기

[root@rac1 ~]# dd if=/dev/raw/raw3   of=/home/oracle/vote01_backup bs=8k

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

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


[root@rac1 ~]# dd if=/dev/raw/raw4   of=/home/oracle/vote02_backup bs=8k

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

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


[root@rac1 ~]# dd if=/dev/raw/raw5   of=/home/oracle/vote03_backup bs=8k

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

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



6.3 Vote disk  장애  복구하기

Step 1. dd  명령으로  모든  Vote Disk  를  초기화  합니다.

[root@rac1 ~]# dd    if=/dev/zero    of=/dev/raw/raw3    bs=8k

vote disk  에  장애가  발생하면  RAC  노드가  재부팅  됩니다.

재부팅  후  나머지  Vote disk  도  위와  같이  전부  초기화합니다.

모든  Vote disk  가  장애가  발생하면  crs  가  시작되지  않습니다.

[root@rac1 ~]# dd    if=/dev/zero    of=/dev/raw/raw4    bs=8k

[root@rac1 ~]# dd    if=/dev/zero    of=/dev/raw/raw5    bs=8k


Step 2. dd  명령으로  백업  받아  둔  파일을  모두  복원합니다.

[root@rac1 ~]# dd if=/home/oracle/vote01_backup of=/dev/raw/raw3 bs=8k

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

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


[root@rac1 ~]# dd if=/home/oracle/vote02_backup of=/dev/raw/raw4 bs=8k

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

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


[root@rac1 ~]# dd if=/home/oracle/vote03_backup of=/dev/raw/raw5 bs=8k

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

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


Step 3. crs  를  시작시켜서  확인합니다.

[root@rac1 ~]# crsctl    start    crs

Attempting to start CRS stack

The CRS stack will be started shortly


이상으로  RAC  에서  가장  중요한  부분  중  하나인  OCR disk  와  Vote disk  를  어떻게  백업하고  복구하는지  살펴보았습니다.

다음  장에서는  실제  데이터와  관련된  부분의  Backup  과  Recovery  를  알아보겠습니다.






2. RAC Backup and Recovery

이번  장에서는  RAC 2 node  환경에서  발생하는  다양한  장애를  대비하여  백업하는  방법과  각  장애  case별로 복구를  하는  방법을  알아보겠습니다. 

크게  물리적인  장애와  논리적인  장애로  나눌  수  있는데  물리적인  장애는  대부분  Hardware  쪽  장애입니다.

이  경우는  Hardware  벤더(제조사)에  의뢰를  해야  하며  경우의  수가  너무  많으므로  이  장의  뒷부분에서  주요 유형을  언급하기로  하고  

여기서는  논리적인 장애 (즉  사용자나  관리자의  실수로  명령어를  잘못  수행해서 발생하는  경우) 를  위주로  자세한  Case - by - Case  로  살펴보겠습니다.

기본  원리는  Single  에서  수행하는  원리와  동일하므로  이  장의  내용을  보다  잘  이해하려면  선수  학습으로  Single 에서 수행하는 

오라클  백업과  복구의  원리와  다양한  경우의  장애를  먼저  공부하시는  것이  아주  도움이  크게 됩니다.

(선수학습에  대해서는  이  책의  범위를  벗어나는  것이므로  저자의  다른  저서인  "정석-오라클백업과  복구  / 생능출판사  출간  "  을  참고하세요)

그리고  No archive log mode  에서는  장애가  발생해도  거의  복구를  할  수  없는  경우가  많기  때문에  

여기서는 간단한  몇  가지  경우만  살펴보고 Archive log mode  환경  위주로  복구  작업을  진행하겠습니다.

또한  앞에서  간단히  언급한  바와  같이  ASM  기반의  장애는  저자의  다른  저서인  '"오라클  관리실무"  책의  ASM 부분과  RMAN  부분에  

아주  자세히  언급이  되어  있으므로  분량이나  내용의  중복  때문에  해당  책을  참고하시고

여기서는  Raw Device  기반  환경에서  백업하고  복구하는  방법을  위주로  진행하도록  하겠습니다.


1) Archive log mode  로  변경하기

1.  양쪽  노드  전부  shutdown immediate  수행합니다.

2.  한쪽  노드만  마운트  단계로  시작합니다.

3.  Alter system set log_archive_dest_1=’location=/data/arc1’ ;

4.  Alter system set log_archive_dest_2=’location=/data/arc2’ ;

5.  Alter database archivelog;

6.  Alter database open;

7.  Archive log list  로  결과  확인  후  나머지  한쪽  노드에서도  위  단계  2,3,4  를  수행합니다


Step 1.  각  노드에  접속해서  shutdown immediate  로  종료합니다.

[oracle@rac1 ~]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Fri

Copyright (c) 1982, 2005, Oracle.   All rights res

Connected to:

Oracle Database 10g Enterprise Edition Release 10

With the Partitioning, Real Application Clusters,

SQL>select instance_name from v$instance;

INSTANCE_NAME

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

rac1 


SYS>shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.


Node 2  에서도  이와  같이  종료하세요.

위  화면처럼  양쪽  노드에서  모든  인스턴스와  서비스가  종료  된  것이  확인됩니다.


Step 2.  한쪽  노드만  마운트  단계로  시작합니다. ( rac1  부터  작업하겠습니다  )

SQL> startup mount;

ORACLE instance started.

Total System Global Area   285212672 bytes

Fixed Size                   1218968 bytes

Variable Size              218105448 bytes

Database Buffers            58720256 bytes

Redo Buffers                 7168000 bytes

Database mounted.


SQL> archive log list;

Database log mode                No Archive Mode

Automatic archival                 Disabled

Archive destination                /home/oracle/product/10g/db/dbs/arch

Oldest online log sequence         26

Current log sequence               28


SQL> show parameter spfile ;

NAME                            TYPE       VALUE

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

spfile                           string       /dev/raw/raw28


Step 4. Archive log file  을  저장할  경로를  지정한  후  archive log mode  로  변경합니다.

(아래의  아카이브  경로는  미리  만들어져  있다고  가정하고  진행합니다.

혹시  없으신  분들은  이  단계  진행  전에  미리  생성해도  되고  다른  경로  사용해도  됩니다)

SQL> alter system set log_archive_dest_1='location=/data/arc1'

System altered.

SQL> alter system set log_archive_dest_2='location=/data/arc2';

System altered.

SQL> alter database archivelog;

Database altered.

SQL> archive log list;

Database log mode               Archive Mode

Automatic archival                Enabled

Archive destination                /data/arc2

Oldest online log sequence        26

Next log sequence to archive       28

Current log sequence              28


Step 5.  한쪽  노드만  open  합니다.

SQL> alter database open;

Database altered.


Step 6.  나머지  한쪽  노드에서  위  단계  2,3,4  를  수행합니다.

(  단  alter database archivelog  명령은  하지  마세요.

archive log mode  여부는  control file  에  저장되는데  이미  rac1  에서  control file  에  archive log mode  라고  

설정을  했기  때문에  rac2  에서는  안  해도  됩니다.)

SQL> alter system set log_archive_dest_1='location=/data/arc1';

System altered. 

SQL> alter system set log_archive_dest_2='location=/data/arc2';

System altered.

SQL> alter database open;

Database altered.

SQL> archive log list;

Database log mode               Archive Mode

Automatic archival                 Enabled

Archive destination                /data/arc2

Oldest online log sequence        8

Next log sequence to archive       10

Current log sequence            10


Raw device  환경에서  archive log file  은  공유  스토리지에  저장하지  못하고  각  로컬  노드에  또로  따로  저장해야 합니다.  

왜냐면  raw device  란  하나의  파일은  하나의  디스크처럼  취급되는데

Log switch  가  생길  때마다  Archive redo log file  이  생기게  되면  그  파일들을  일일이  raw device  를  생성해  줄 수  없기  때문입니다. 

예를  들면  raw device 1  개가  USB 1  개라고  생각하면  됩니다.

그래서  Raw Device  환경의  RAC  의  최적의  구성은  아래와  같습니다.  archive log  저장  경로  잘  보세요. 




2) Raw device  백업하기

2.1 Hot backup  하기

1)해당  테이블스페이스를  begin backup  모드로  변경합니다.

2)dd  명령어로  복사합니다.

3)해당  테이블스페이스를  end backup  모드로  변경합니다. 


SQL> col tablespace_name for a10

SQL> col file_name for a45

SQL> select tablespace_name,bytes/1024/1024 MB,file_name

2   from dba_data_files;

TABLESPACE          MB    FILE_NAME

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

SYSTEM             590    /dev/raw/raw6

UNDOTBS1          295    /dev/raw/raw8

SYSAUX             290    /dev/raw/raw7

UNDOTBS2          290    /dev/raw/raw9

USERS              290    /dev/raw/raw10

SQL> save dd.sql

Created file dd.sql


SQL> alter tablespace system begin backup;

Tablespace altered.

SQL> !dd if=/dev/raw/raw6   of=/data/backup/open/system_raw6 bs=8k

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

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

SQL> alter tablespace system end backup;

Tablespace altered.


SQL> alter tablespace undotbs1 begin backup;

Tablespace altered.

SQL> !dd if=/dev/raw/raw8   of=/data/backup/open/undotbs1_raw8 bs=8k

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

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

SQL> alter tablespace undotbs1 end backup;

Tablespace altered. 


SQL> alter tablespace sysaux begin backup;

Tablespace altered.

SQL> !dd if=/dev/raw/raw7 of=/data/backup/open/sysaux_raw7 bs=8k

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

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

SQL> alter tablespace sysaux end backup;

Tablespace altered.


SQL> alter tablespace undotbs2 begin backup;

Tablespace altered.

SQL> !dd if=/dev/raw/raw9 of=/data/backup/open/undotbs2_raw9 bs=8k

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

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

SQL> alter tablespace undotbs2 end backup ;

Tablespace altered.


SQL> alter tablespace users begin backup;

Tablespace altered.

SQL> !dd if=/dev/raw/raw10 of=/data/backup/open/users_raw10   bs=8k

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

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

SQL> alter tablespace users end backup ;

Tablespace altered.


SQL> alter system checkpoint;  <-  체크포인트를  발생시켜  전체를  동기화  시켜줍니다

System altered

SQL> !ls -lSh /data/backup/open

합계  1.8G

-rw-r--r--  1 oracle oinstall 600M 11월  1 15:34 system_raw6

-rw-r--r--  1 oracle oinstall 300M 11월  1 15:37 sysaux_raw7

-rw-r--r--  1 oracle oinstall 300M 11월  1 15:35 undotbs1_raw8

-rw-r--r--  1 oracle oinstall 300M 11월  1 15:38 undotbs2_raw9

-rw-r--r--  1 oracle oinstall 300M 11월  1 15:40 users_raw10



2.2 Cold backup  하기

Step 1.  백업  대상  데이터  파일을  확인합니다.

SQL> @dd

TABLESPACE          MB    FILE_NAME

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

SYSTEM               590    /dev/raw/raw6

UNDOTBS1           295    /dev/raw/raw8

SYSAUX                290    /dev/raw/raw7

UNDOTBS2           290    /dev/raw/raw9

USERS               290    /dev/raw/raw10


Step 2.  양쪽  노드  모드  종료합니다

SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.


Step 3.  백업  대상  파일을  dd  로  복사합니다.

[[oracle@rac1 ~]$ dd if=/dev/raw/raw6   of=/data/backup/close/raw6_system bs=8k

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

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

[oracle@rac1 ~]$ dd if=/dev/raw/raw7   of=/data/backup/close/raw7_sysaux bs=8k

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

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

[oracle@rac1 ~]$ dd if=/dev/raw/raw8   of=/data/backup/close/raw8_undotbs1 bs=8k

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

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

[oracle@rac1 ~]$ dd if=/dev/raw/raw9   of=/data/backup/close/raw9_undotbs2 bs=8k

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

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

[oracle@rac1 ~]$ dd if=/dev/raw/raw10   of=/data/backup/close/raw10_users bs=8k

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

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

Step 4.  백업  파일을  확인합니다.

[oracle@rac1 ~]$ ls -lSh /data/backup/close/

합계  1.8G

-rw-r--r--  1 oracle oinstall 600M 11월  1 15:51 raw6_system

-rw-r--r--  1 oracle oinstall 300M 11월  1 15:56 raw10_users

-rw-r--r--  1 oracle oinstall 300M 11월  1 15:54 raw7_sysaux

-rw-r--r--  1 oracle oinstall 300M 11월  1 15:55 raw8_undotbs1

-rw-r--r--  1 oracle oinstall 300M 11월  1 15:55 raw9_undotbs2

이상으로  RAC  환경에서  Raw device  를  백업  받는  방법을  알아  보았습니다.

기존  파일시스템과  원리는  모두  동일하고  사용  명령어만  다를  뿐입니다.

즉  기존  파일  시스템에서의  주의  사항이  여기에서도  동일하게  적용된다는  뜻입니다.

항상  백업에  주의하시기  바랍니다




3)  아카이브  모드에서의  장애  복구

Case 1. Offline  되는  테이블  스페이스  장애  발생함  –    복구내용이  온라인  리두  로그파일에  모두  있는  경우

Step 1.  장애  상황  설정

SQL> set sqlprompt "_USER>"

SYS>@dd

TABLESPACE          MB    FILE_NAME

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

SYSTEM             590    /dev/raw/raw6

UNDOTBS1          295    /dev/raw/raw8

SYSAUX             290    /dev/raw/raw7

UNDOTBS2          290    /dev/raw/raw9

USERS                290    /dev/raw/raw10


테스트용으로  test  라는  이름의  테이블  스페이스를  새로  생성하겠습니다.

해당  로우  디바이스를  확인하기  위해  root  계정에서  lvscan  을  실행합니다.

[oracle@rac1 ~]$ su -Password:

[root@rac1 ~]# lvscan

ACTIVE             '/dev/rac/ocr1' [300.00 MB] inherit

ACTIVE             '/dev/rac/ocr2' [300.00 MB] inherit

ACTIVE             '/dev/rac/vote1' [300.00 MB] inherit

ACTIVE             '/dev/rac/vote2' [300.00 MB] inherit

ACTIVE             '/dev/rac/vote3' [300.00 MB] inherit

ACTIVE             '/dev/rac/system' [600.00 MB] inherit

ACTIVE             '/dev/rac/sysaux' [300.00 MB] inherit

ACTIVE             '/dev/rac/undotbs1' [300.00 MB] inherit

ACTIVE             '/dev/rac/undotbs2' [300.00 MB] inherit

ACTIVE             '/dev/rac/users' [300.00 MB] inherit

ACTIVE             '/dev/rac/example' [300.00 MB] inherit

ACTIVE             '/dev/rac/temp' [300.00 MB] inherit

ACTIVE             '/dev/rac/redo01_a' [100.00 MB] inherit

ACTIVE             '/dev/rac/redo01_b' [100.00 MB] inherit

ACTIVE             '/dev/rac/redo02_a' [100.00 MB] inherit

ACTIVE             '/dev/rac/redo02_b' [100.00 MB] inherit

ACTIVE             '/dev/rac/redo03_a' [100.00 MB] inherit

ACTIVE             '/dev/rac/redo03_b' [100.00 MB] inherit

ACTIVE             '/dev/rac/redo04_a' [100.00 MB] inherit

ACTIVE             '/dev/rac/redo04_b' [100.00 MB] inherit

ACTIVE             '/dev/rac/redo05_a' [100.00 MB] inherit 

ACTIVE             '/dev/rac/redo05_b' [100.00 MB] inherit

ACTIVE             '/dev/rac/redo06_a' [100.00 MB] inherit

ACTIVE             '/dev/rac/redo06_b' [100.00 MB] inherit

ACTIVE             '/dev/rac/control01' [100.00 MB] inherit

ACTIVE             '/dev/rac/control02' [100.00 MB] inherit

ACTIVE             '/dev/rac/control03' [100.00 MB] inherit

ACTIVE             '/dev/rac/spfile' [52.00 MB] inherit

ACTIVE             '/dev/rac/data1' [100.00 MB] inherit

ACTIVE             '/dev/rac/data2' [100.00 MB] inherit

ACTIVE             '/dev/rac/data3' [100.00 MB] inherit

ACTIVE             '/dev/rac/data4' [100.00 MB] inherit


가장  마지막에  있는  디바이스  4  개가  RAC  설치시에  여분으로  생성했던  장치입니다.

그  중에서  /dev/raw/data1  을  test tablespace  로  사용하겠습니다.

해당  디바이스를  확인하기  위해  /etc/sysconfig/rawdevices  파일을  확인합니다.


SYS>!

[oracle@rac1 ~]$ cat /etc/sysconfig/rawdevices

# This file and interface are deprecated.

# Applications needing raw device access should open regular

# block devices with O_DIRECT.

# raw device bindings

# format:   <rawdev> <major> <minor>

#           <rawdev> <blockdev>

# example: /dev/raw/raw1 /dev/sda1

#           /dev/raw/raw2 8 5

/dev/raw/raw1     /dev/rac/ocr1

/dev/raw/raw2     /dev/rac/ocr2

/dev/raw/raw3     /dev/rac/vote1

/dev/raw/raw4     /dev/rac/vote2

/dev/raw/raw5     /dev/rac/vote3

/dev/raw/raw6     /dev/rac/system

/dev/raw/raw7     /dev/rac/sysaux

/dev/raw/raw8     /dev/rac/undotbs1

/dev/raw/raw9     /dev/rac/undotbs2

/dev/raw/raw10    /dev/rac/users

/dev/raw/raw11    /dev/rac/example

/dev/raw/raw12    /dev/rac/temp

/dev/raw/raw13    /dev/rac/redo01_a

/dev/raw/raw14    /dev/rac/redo01_b

/dev/raw/raw15    /dev/rac/redo02_a

/dev/raw/raw16    /dev/rac/redo02_b

/dev/raw/raw17    /dev/rac/redo03_a 

/dev/raw/raw18    /dev/rac/redo03_b

/dev/raw/raw19    /dev/rac/redo04_a

/dev/raw/raw20    /dev/rac/redo04_b

/dev/raw/raw21    /dev/rac/redo05_a

/dev/raw/raw22    /dev/rac/redo05_b

/dev/raw/raw23    /dev/rac/redo06_a

/dev/raw/raw24    /dev/rac/redo06_b

/dev/raw/raw25    /dev/rac/control01

/dev/raw/raw26    /dev/rac/control02

/dev/raw/raw27    /dev/rac/control03

/dev/raw/raw28    /dev/rac/spfile

/dev/raw/raw29    /dev/rac/data1

/dev/raw/raw30    /dev/rac/data2

/dev/raw/raw31    /dev/rac/data3

/dev/raw/raw32    /dev/rac/data4

[oracle@rac1 ~]$ exit

exit

SYS>create tablespace test

2   datafile '/dev/raw/raw29' ;

Tablespace created.

SYS>@dd

TABLESPACE          MB    FILE_NAME

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

SYSTEM               590    /dev/raw/raw6

UNDOTBS1           295    /dev/raw/raw8

SYSAUX               290    /dev/raw/raw7

UNDOTBS2           290    /dev/raw/raw9

USERS                290    /dev/raw/raw10

TEST        99.9921875    /dev/raw/raw29

6 rows selected.

test tablespace  가  생성된  것을  확인  할  수  있습니다.

위  test tablespace  에  예제  데이터  저장용  테이블을  생성한  후  데이터를  입력합니다.

SYS>create table scott.tt100 (no number) tablespace test ;

Table created.

SYS>insert into scott.tt100 values (1);

1 row created.

SYS>commit;

Commit complete.

SYS>select * from scott.tt100 ;

NO

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

1

SQL> alter tablespace ts_new offline immediate;

Tablespace altered.

dd  명령으로  해당  로우  디바이스를  초기화  합니다.

SYS>!dd if=/dev/zero   of=/dev/raw/raw29 bs=8k

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

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

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

SYS>alter tablespace test offline immediate;

Tablespace altered.

SYS>alter tablespace test online;

alter tablespace test online

*

ERROR at line 1:

ORA-01122: database file 6 failed verification check

ORA-01110: data file 6: '/dev/raw/raw29'

ORA-01251: Unknown File Header Version read for file number 6

SYS>select * from scott.tt100 ;

select * from scott.tt100

*

ERROR at line 1:

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

ORA-01110: data file 6: '/dev/raw/raw29' 


Step 2.  복구

SQL> recover tablespace ts_new; <-  파일복원  없이  그냥  복구  시도함.  실패확인

ORA-00283: recovery session canceled due to errors

ORA-01110: data file 6: '/dev/raw/raw28'

ORA-01122: database file 6 failed verification check

ORA-01110: data file 6: '/dev/raw/raw28'

ORA-01251: Unknown File Header Version read for file number 6

SQL>   !dd if=/data/backup/close/raw28_ts_new of=/dev/raw/raw28 bs=8k

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

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

SQL> recover tablespace ts_new;

Media recovery complete.

SQL> alter tablespace ts_new online;

Tablespace altered.

SQL> select * from tt01;

NO

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

1  <-  복구  됨을  확인합니다.

위  장애는  장애를  복구할  수  있는  내역이  Online Redo log file  에  있었기  때문에  별도의  Archive Redo log file  이 필요  없었습니다.  




Case 2. Offline  되는  테이블  스페이스  장애  발생함  –  아카이브  파일  필요  할  경우

Step 1.  장애상황  발생

SQL> create table tt02 (no number) tablespace ts_new;

Table created.

SQL> insert into tt02 values (1);

1 row created.

SQL> commit;

Commit complete.


SQL> alter system switch logfile;

System altered. 

SQL> insert into tt02 values (2);

1 row created.

SQL> commit;

Commit complete.


SQL> alter system switch logfile;

System altered.

SQL> insert into tt02 values (3);

1 row created.

SQL> commit;

Commit complete.


SQL> alter system switch logfile;

System altered.

SQL> alter system switch logfile;

System altered.

SQL> /

System altered.

SQL> /

System altered.


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

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

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

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

SQL> alter tablespace ts_new offline immediate;

Tablespace altered.

SQL> select * from tt02;

select * from tt02

*

ERROR at line 1:

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

ORA-01110: data file 6: '/dev/raw/raw28'


Step 2.  파일  복원  후  복구

SQL> !dd if=/data/backup/close/raw28_ts_new   of=/dev/raw/raw28 bs=8k

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

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

SQL> recover tablespace ts_new;

ORA-00279: change 798466 generated at 10/06/2010 00:31:35 needed for thread 1

ORA-00289: suggestion : /data/arc2/1_23_730146831.dbf

ORA-00280: change 798466 for thread 1 is in sequence #23

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

ORA-00279: change 798466 generated at 10/06/2010 00:00:21 needed for thread 2

ORA-00289: suggestion : /data/arc2/2_12_730146831.dbf

ORA-00280: change 798466 for thread 2 is in sequence #12

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

ORA-00308: cannot open archived log '/data/arc2/2_12_730146831.dbf' <- node 2  파일  필요

ORA-27037: unable to obtain file status

Linux Error: 2: No such file or directory

Additional information: 3

SQL> !scp racdb2:/data/arc2/2_*   /data/arc2/  <- node 2  아카이브  파일  복사해  옴.

2_10_730146831.dbf                          100% 9082KB    4.4MB/s    00:02

2_11_730146831.dbf                          100%   199KB 199.0KB/s    00:00

2_12_730146831.dbf                          100% 1384KB    1.4MB/s    00:00

2_13_730146831.dbf                          100%   137KB 137.0KB/s    00:00

2_14_730146831.dbf                          100% 3584      3.5KB/s    00:00

2_2_730146831.dbf                           100%   239KB 238.5KB/s    00:00

2_3_730146831.dbf                           100% 1024      1.0KB/s    00:00

2_4_730146831.dbf                           100% 3072      3.0KB/s    00:00

2_5_730146831.dbf                           100% 1024      1.0KB/s    00:00

2_6_730146831.dbf                           100% 3584      3.5KB/s    00:00

2_7_730146831.dbf                           100%    19MB    3.9MB/s    00:05

2_8_730146831.dbf                           100%    78KB   77.5KB/s    00:00

2_9_730146831.dbf                           100%    96MB    4.4MB/s    00:22

SQL> recover tablespace ts_new;

ORA-00279: change 798466 generated at 10/06/2010 00:31:35 needed for thread 1

ORA-00289: suggestion : /data/arc2/1_23_730146831.dbf

ORA-00280: change 798466 for thread 1 is in sequence #23

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

auto

ORA-00279: change 798466 generated at 10/06/2010 00:00:21 needed for thread 2

ORA-00289: suggestion : /data/arc2/2_12_730146831.dbf <- node 2  파일  사용

ORA-00280: change 798466 for thread 2 is in sequence #12

………………….(중간  생략)………………

ORA-00279: change 864650 generated at 10/07/2010 00:09:29 needed for thread 1

ORA-00289: suggestion : /data/arc2/1_28_730146831.dbf

ORA-00280: change 864650 for thread 1 is in sequence #28

ORA-00278: log file '/data/arc2/1_27_730146831.dbf' no longer needed for this recovery

Log applied.

Media recovery complete.

SQL> alter tablespace ts_new online;

Tablespace altered.

SQL> select * from tt02;

NO

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

1

2

3

RAC  는  모든  노드가  SCN을  따로  발생시키는  게  아니기  때문에  순서대로  복구하기  위해서는  

다른  노드에  있는 아카이브  리두  로그  파일이  필요한  경우가  많이  있습니다.  

그래서  복구를  할  때  다른  노드에  있는  아카이브  리두 로그  파일을  복구하는  노드로  복사해  두고  작업하셔야  합니다.

아카이브  로그  파일이  너무  많이  필요할  경우는  복사하는  시간이  너무  걸리기  때문에  아카이브  파일  설정을 하실 때

dest_1  은  local node  로  하시고  desc_2  는  공유  노드를  활용하시는  것도  한가지  방법이  될  수  있을  것 같습니다.



Case 3. Offline  안  되는  데이터  파일장애  발생 

Step 1.  장애  상황  발생

SQL> create table tt03 (no number) tablespace    system;

Table created.

SQL> insert into tt03 values (10); 

1 row created.

SQL> insert into tt03 values (20);

1 row created.

SQL> insert into tt03 values (30);

1 row created.

SQL> commit;

Commit complete.

SQL> alter system switch logfile;

System altered.

SQL>/

System altered.

SQL> /

System altered.

SQL> @dd

TABLESPACE          MB    FILE_NAME

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

SYSTEM             599    /dev/raw/raw6

UNDOTBS1           99    /dev/raw/raw8

SYSAUX             299    /dev/raw/raw7

UNDOTBS2           99    /dev/raw/raw9

USERS               99    /dev/raw/raw10

TS_NEW             12    /dev/raw/raw28

SQL> !dd if=/dev/zero   of=/dev/raw/raw6 bs=8k  <- system tablespace  장애  발생  시킴

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

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

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

Alert log  를  확인하면  에러가  나면서  강제로  종료됨을  확인할  수  있습니다.

………………………………………

ORA-00600:  내부  오류  코드,  인수  : [4193], [0], [57], [], [], [], [], []

Fatal internal error happened while SMON was doing instance transaction recovery.

Thu Oct   7 00:21:06 2010

Errors in file /home/oracle/admin/racdb/bdump/racdb1_smon_5882.trc:

ORA-00600:  내부  오류  코드,  인수  : [kclbr_9], [], [], [], [], [], [], []

ORA-00607:  데이터  블록  변경  중  내부  오류가  발생했습니다

ORA-00600:  내부  오류  코드,  인수  : [4193], [0], [57], [], [], [], [], []  

SMON: terminating instance due to error 474

Thu Oct   7 00:21:06 2010

Errors in file /home/oracle/admin/racdb/bdump/racdb1_lms1_5865.trc:

ORA-00474: SMON  프로세스가  오류로  인해  종료되었습니다.

Thu Oct   7 00:21:06 2010

Errors in file /home/oracle/admin/racdb/bdump/racdb1_lmon_5857.trc:

ORA-00474: SMON  프로세스가  오류로  인해  종료되었습니다.

[oracle@racdb1 ~]$ crs_stat –t

Name            Type            Target     State         Host

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

ora.racdb.db    application     OFFLINE       OFFLINE

ora....b1.inst     application     ONLINE     OFFLINE

ora....b2.inst     application     ONLINE     OFFLINE

ora....B1.lsnr    application     ONLINE     ONLINE      racdb1

ora.racdb1.gsd    application     ONLINE     ONLINE     racdb1

ora.racdb1.ons    application     ONLINE     ONLINE     racdb1

ora.racdb1.vip    application     ONLINE     ONLINE     racdb1

ora....B2.lsnr    application     ONLINE     ONLINE     racdb2

ora.racdb2.gsd    application     ONLINE     ONLINE     racdb2

ora.racdb2.ons    application     ONLINE     ONLINE     racdb2

ora.racdb2.vip    application     ONLINE     ONLINE     racdb2


Step 2.  파일  복원  후  복구

SQL> shutdown immediate;

ORA-03135: connection lost contact

SQL> !scp racdb2:/data/arc2/2_*   /data/arc2/  <- node 2  아카이브  파일  복사해  옴.

SQL> exit

Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production

With the Partitioning, Real Application Clusters, OLAP, Data Mining

and Real Application Testing options

[oracle@racdb1 ~]$ sqlplus / as sysdba;

SQL*Plus: Release 10.2.0.4.0 - Production on Thu Oct 7 00:24:59 2010

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

Connected to an idle instance.

SQL>!dd if=/data/backup/open/raw6_system   of=/dev/raw/raw6 bs=8k

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

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

SQL> startup mount;

ORACLE instance started.

Total System Global Area   281018368 bytes

Fixed Size                   1267020 bytes

Variable Size               92277428 bytes

Database Buffers           180355072 bytes

Redo Buffers                 7118848 bytes

Database mounted.

SQL> recover database;

ORA-00279: change 798299 generated at 10/06/2010 00:27:21 needed for thread 1

ORA-00289: suggestion : /data/arc2/1_23_730146831.dbf

ORA-00280: change 798299 for thread 1 is in sequence #23

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

auto

ORA-00279: change 798299 generated at 10/06/2010 00:00:21 needed for thread 2

ORA-00289: suggestion : /data/arc2/2_12_730146831.dbf 

ORA-00280: change 798299 for thread 2 is in sequence #12

ORA-00279: change 840626 generated at 10/06/2010 12:18:19 needed for thread 2

ORA-00289: suggestion : /data/arc2/2_13_730146831.dbf

ORA-00280: change 840626 for thread 2 is in sequence #13

ORA-00278: log file '/data/arc2/2_12_730146831.dbf' no longer needed for this

recovery

-----(  중간  생략  ) -----Log applied.

Media recovery complete.


Step 3.  양쪽  노드  모두  startup  시킨  후  복구  확인

SQL> alter database open;

Database altered.

SQL> select * from tt03;

NO 

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

10

20

30



Case 4.  백업  없는  데이터  파일  새로  생성해서  복구하기

상황  1 :  여분의  raw devicce  가  있을  경우

SYS>create tablespace test

2   datafile '/dev/raw/raw29' ;

Tablespace created.

SYS>@dd

TABLESPACE         MB    FILE_NAME

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

SYSTEM             590    /dev/raw/raw6

UNDOTBS1          295    /dev/raw/raw8

SYSAUX             290    /dev/raw/raw7

UNDOTBS2          290    /dev/raw/raw9

USERS                290    /dev/raw/raw10

TEST          99.9921875    /dev/raw/raw29

6 rows selected.

--  테스트용  테이블을  생성합니다.

SYS>create table scott.tt100 (no number) tablespace test ;

Table created.

SYS>insert into scott.tt100 values (1);

1 row created.

SYS>commit;

Commit complete.

SYS>select * from scott.tt100 ;

NO

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

1


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

SYS>!dd if=/dev/zero   of=/dev/raw/raw29 bs=8k

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

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

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

SYS>alter tablespace test offline immediate;

Tablespace altered.

SYS>alter tablespace test online;

alter tablespace test online

*

ERROR at line 1:

ORA-01122: database file 6 failed verification check

ORA-01110: data file 6: '/dev/raw/raw29'

ORA-01251: Unknown File Header Version read for file number 6

SYS>select * from scott.tt100 ;

select * from scott.tt100

*

ERROR at line 1:

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

ORA-01110: data file 6: '/dev/raw/raw29'


복구해야  하는  데이터파일의  백업이  없으므로  싱글에서와  같이  신규로  생성합니다.

중요한  부분은  경로인데  파일  시스템에서와  raw device  에서  차이점이  있습니다.

바로  raw device  에서는  같은  경로를  쓰면  안  된다는  것입니다.

아래의  테스트로  확인  해  보겠습니다.


SYS>alter database create datafile '/dev/raw/raw29'

2   as '/dev/raw/raw29';

alter database create datafile '/dev/raw/raw29'

*

ERROR at line 1:

ORA-01119: error in creating database file '/dev/raw/raw29'

ORA-27086: unable to lock file - already in use

Linux Error: 11: Resource temporarily unavailable

Additional information: 8

Additional information: 29491

SYS>alter database create datafile '/dev/raw/raw29'

2   as '/dev/raw/raw30' ;  <---  다른  경로로  설정을  했습니다

Database altered.

SYS>recover tablespace test;

Media recovery complete.

SYS>alter tablespace test online;

Tablespace altered.

SYS>select * from scott.tt100 ;

NO

---------------1  <---  복구  완료되었습니다.

싱글에서와  복구  방법은  동일하지만  파일을  생성할  때  경로를  다른  곳으로  해야  한다는  것을  꼭 기억하시기  바랍니다. 




상황  2:  여분의  raw device  가  없을  경우  -  파일시스템  사용

만약  생성되어  있는  raw device  가  여분이  없을  경우에는  아래와  같이  우선  파일시스템에  생성해서 복구  한  후  추후  raw device  로  이전하면  됩니다.

아래  실습을  보세요.


Step 1.  장애  상황을  만듭니다.

SYS>create tablespace test2

2   datafile '/dev/raw/raw31' ;

Tablespace created.

SYS>@dd

TABLESPACE          MB    FILE_NAME

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

SYSTEM               590    /dev/raw/raw6

UNDOTBS1           295    /dev/raw/raw8

SYSAUX                290    /dev/raw/raw7

UNDOTBS2           290    /dev/raw/raw9

USERS                 290    /dev/raw/raw10

TEST           99.9921875    /dev/raw/raw30

TEST2          99.9921875    /dev/raw/raw31

7 rows selected.

SYS>create table scott.tt200 (no number) tablespace test2;

Table created.

SYS>insert into scott.tt200 values (2);

1 row created.

SYS>commit;

Commit complete.

SYS>select * from scott.tt200 ;

NO

---------------2

SYS>!dd if=/dev/zero   of=/dev/raw/raw31   bs=8k

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

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

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

SYS>alter tablespace test2 offline immediate;

Tablespace altered.

SYS>alter tablespace test2 online;

alter tablespace test2 online

*

ERROR at line 1:

ORA-01122: database file 7 failed verification check

ORA-01110: data file 7: '/dev/raw/raw31'

ORA-01251: Unknown File Header Version read for file number 7

SYS>select * from scott.tt200 ;

select * from scott.tt200

*

ERROR at line 1:

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

ORA-01110: data file 7: '/dev/raw/raw31'


Step 2.  복구를  합니다.

SYS>alter database create datafile '/dev/raw/raw31'

2   as '/data/backup/test01.dbf' ;  <---  파일  시스템에  응급  복구합니다.

Database altered.

SYS>recover tablespace test2; 

Media recovery complete.

SYS>alter tablespace test2 online;

Tablespace altered.

SYS>select * from scott.tt200 ;

NO

---------------2

SYS>@dd

TABLESPACE          MB FILE_NAME

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

SYSTEM             590 /dev/raw/raw6

UNDOTBS1           295 /dev/raw/raw8

SYSAUX             290 /dev/raw/raw7

UNDOTBS2           290 /dev/raw/raw9

USERS              290 /dev/raw/raw10

TEST        99.9921875 /dev/raw/raw30

TEST2       99.9921875 /data/backup/test01.dbf  <---  파일시스템에  생성되었습니다.

7 rows selected.

향후에  raw device  가  증설되었다고  가정하고  현재  파일시스템에  생성된  데이터  파일을  raw device  로 이전하겠습니다.

SYS>alter tablespace test2 offline;

Tablespace altered.

SYS>alter database create datafile '/data/backup/test01.dbf'

2   as '/dev/raw/raw32' ;  <--- raw device  이름을  지정합니다.

Database altered.

SYS>recover tablespace test2 ; 

Media recovery complete.

SYS>alter tablespace test2 online;

Tablespace altered.

SYS>@dd

TABLESPACE          MB    FILE_NAME

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

SYSTEM               590    /dev/raw/raw6

UNDOTBS1             295    /dev/raw/raw8

SYSAUX               290    /dev/raw/raw7

UNDOTBS2              290    /dev/raw/raw9

USERS                290    /dev/raw/raw10

TEST          99.9921875    /dev/raw/raw30

TEST2         99.9921875    /dev/raw/raw32

7 rows selected.

SYS>select * from scott.tt200;

NO

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

2  <---  이전  완료되고  데이터도  이상  없이  조회됩니다.

이상으로  데이터  파일  관련된  물리적인  장애들을  모두  살펴보았습니다.

다음으로  데이터  파일  관련된  논리적  장애들을  살펴보겠습니다.




반응형