mingming

Oracle - 데이터파일 장애 복구 본문

Database

Oracle - 데이터파일 장애 복구

mingming_96 2023. 10. 27. 18:58

장애 상황1 - no archive log mode에서 장애 해결( 불완전 복구 )

1. Database Cold Backup 진행

SQL> shutdown immediate;

SQL> !cp /data01/ORCL/* /backup/close/

 

2. noarchive mode로 변경

SQL> startup mount

SQL> alter database noarchivelog;

SQL> alter database open;

Database altered.

SQL> archive log list;
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            /oracle/product/19.0.0/dbs/arch
Oldest online log sequence     9
Current log sequence           10

 

3. 기존 아카이브 로그 삭제

cd $ORACLE_HOME/dbs/arch

rm -rf *

 

4. 테이블 스페이스 조회 

col tablespace_name for a10
col file_name for a40
select tablespace_name, bytes/1024/1024 MB, file_name from dba_data_files;

 

5. 데이터 베이스 종료 후 데이터파일 삭제

SQL> shutdown immediate;

SQL> !rm -rf /data01/ORCL/users01.dbf

 

6. 장애상황 발생

SQL> startup
ORACLE instance started.

Total System Global Area  788525944 bytes
Fixed Size		    8901496 bytes
Variable Size		  339738624 bytes
Database Buffers	  432013312 bytes
Redo Buffers		    7872512 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 4 - see DBWR trace file
ORA-01110: data file 4: '/oracle/oradata/ORA19C/users01.dbf'

 

7. 장애 상황 복구

!cp /backup/close/users01.dbf /data01/ORCL/

SQL> set lineszie 200
SQL> select * from v$recover_file;

     FILE# ONLINE  ONLINE_ ERROR                                                                CHANGE# TIME             CON_ID
---------- ------- ------- ----------------------------------------------------------------- ---------- ------------ ----------
         5 OFFLINE OFFLINE OFFLINE NORMAL                                                             0                       0
         6 OFFLINE OFFLINE OFFLINE NORMAL                                                             0                       0

SQL> alter database open;

 

장애 상황2 - 완전 복구 (archive mode) - 물리적 장애 복구

Oracle 에서 절대적으로 지켜야 하는 원칙 중 하나는 디스크 I/O가 발생하고 있을 경우 절대 이동하거나 복사 또는 복구 작업을 해서는 안된다는 것 입니다. 장애가 발생할 경우 복구 하기 위해서는 해당 파일에 I/O가 발생하지 않도록 만들고 복구작업을 진행해야 합니다. 

 

1. archive mode 변경

SQL> shutdown immediate;

SQL> startup mount;

SQL> alter database archivelog;

SQL> archive log list;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /oracle/product/19.0.0/dbs/arch
Oldest online log sequence     9
Next log sequence to archive   10
Current log sequence           10

 

2. Tablespace 생성 및 유저 생성

SQL> create tablespace ming datafile '/data01/ORCL/ming.dbf' size 100M autoextend on;

SQL> create user ming identified by ming default tablespace ming quota unlimited on ming;

SQL> grant connect, resource to ming;

 

3. 온라인 백업 ( hot backup )

SQL> alter tablespace ming begin backup;

SQL> !cp /data01/ORCL/*.dbf /backup/open/

SQL> alter tablespace ming end backup;

 

4. 장애 발생

SQL> !rm -rf /data01/ORCL/ming.dbf

SQL> conn ming/ming;

SQL> create table abc(no number) tablespace ming;

SQL> insert into abc values(1);

insert into abc values(1)
            *
ERROR at line 1:
ORA-01116: error in opening database file 5
ORA-01110: data file 5: '/data01/ORCL/ming.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3

SQL> select * from tab;

TNAME                          TABTYPE        CLUSTERID
------------------------------ ------------- ----------
ABC                            TABLE

 

5. 장애 복구 - Datafile offline 후 restore 및 recover 

SQL> conn / as sysdba

## Datafile Offline
SQL> alter database datafile '/data01/ORCL/ming.dbf' offline;

## restore
SQL> !cp /backup/open/ming.dbf /data01/ORCL/ming.dbf

## recover
SQL> recover datafile '/data01/ORCL/ming.dbf'
Media recovery complete.

## Datafile online 
SQL> alter database datafile '/data01/ORCL/ming.dbf' online;

## 장애 복구
SQL> insert into ming.abc values(1);

1 row created.

SQL> select * from ming.abc;

        NO
----------
         1

 

장애 상황 2-1 테이블에 데이터가 있는 상태에서의 데이터파일 유실 복구 

 

1. 테이블에 데이터 삽입 및 로그 스위치 

insert into ming.abc values(2);

SQL> alter system switch logfile;

System altered.

SQL> /

System altered.

 

2. 온라인 백업 및 데이터 파일 삭제 

SQL> alter tablespace ming begin backup;

SQL> !cp /data01/ORCL/ming.dbf /backup/open/

SQL> alter tablespace ming end backup;

SQL> !rm -rf /data01/ORCL/ming.dbf

 

3. 테이블에 데이터 추가 삽입

SQL> insert into ming.abc values(3);

SQL> insert into ming.abc values(4);

SQL> insert into ming.abc values(5);

SQL> select * from ming.abc;

 

4. 데이터 파일 복구

## Datafile Offline
SQL> alter database datafile '/data01/ORCL/ming.dba' offline;

## restore
SQL> !cp /backup/open/ming.dbf /data01/ORCL/ming.dbf

## recover 
SQL> recover datafile '/data01/ORCL/ming.dbf'

## Datafile Online
SQL> alter database datafile '/data01/ORCL/ming.dbf' online;

## 데이터 확인 
SQL> select * from ming.abc;

        NO
----------
         5
         1
         2
         3
         4

 

장애 상황 3 -  Offline 안되는 Tablespace 장애 복구 

Offline이 불가능한 테이블 스페이스(undo , system) 의 복구시에는 데이터베이스 종료 후 복구해야 합니다.

 

1. System 테이블 스페이스에 테이블 및 데이터 생성 

SQL> alter tablespace system offline;
alter tablespace system offline
*
ERROR at line 1:
ORA-01541: system tablespace cannot be brought offline; shut down if necessary

## system tablespace에 테이블 생성 
SQL> create table test(no number) tablespace system;

SQL> insert inot test values(1);

SQL> commit;

SQL> col tablespace_name for a10
col file_name for a40
select tablespace_name, bytes/1024/1024 MB, file_name from dba_data_files;
 SQL> SQL>
TABLESPACE         MB FILE_NAME
---------- ---------- ----------------------------------------
SYSTEM            700 /data02/ORCL/system01.dbf
SYSAUX            550 /data01/ORCL/sysaux01.dbf
UNDOTBS1          355 /data01/ORCL/undotbs01.dbf
USERS               5 /data01/ORCL/users01.dbf
HR_USER          1024 /data01/ORCL/hr.dbf
MING              200 /data01/ORCL/ming.dbf

 

 

2. 온라인 백업

SQL> alter database begin backup;
SQL> !cp /data01/ORCL/* /backup/open/
SQL> alter database end backup;

 

3. 장애 발생

SQL> !rm -rf /data01/ORCL/system01.dbf

SQL> alter tablespace system offline;
alter tablespace system offline
*
ERROR at line 1:
ORA-01541: system tablespace cannot be brought offline; shut down if necessary


SQL> alter database datafile '/oracle/oradata/ORA19C/system01.dbf' offline;
alter database datafile '/oracle/oradata/ORA19C/system01.dbf' offline
*
ERROR at line 1:
ORA-01541: system tablespace cannot be brought offline; shut down if necessary

 

4. 장애 복구

SQL> shutdown abort;

## restore
SQL> !cp /backup/open/system01.dbf /data01/ORCL/system01.dbf

SQL> startup mount

## recover
SQL> recover database;

SQL> alter database open;

SQL> select * from test

        NO
----------
         1