Oracle DBMS

Oracle DBMS_데이터파일 유실상황 TEST

3학년 1반 민군 2021. 2. 24. 14:06

안녕하세요 오늘은 dbf파일의 백업본이 없는상황에서의 복구TEST를 포스팅하도록 하겠습니다.

 

모든 데이터의 백업이 가장 중요합니다.

 

중요하지만, dbf파일의 백업이 없는 경우도 복구가 가능합니다.

먼저 현재 데이터파일에 대해 조회하겠습니다.

 

1. tablespace 조회

oracle@ORACLE11 ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Tue Feb 23 20:03:17 2021

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


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select file#, status, name from v$datafile;

     FILE# STATUS  NAME
---------- ------- ------------------------------------------------------------
	 1 SYSTEM  /*****/oracle/app/oracle/oradata/ORCL11/system01.dbf
	 2 ONLINE  /*****/oracle/app/oracle/oradata/ORCL11/sysaux01.dbf
	 3 ONLINE  /*****/oracle/app/oracle/oradata/ORCL11/undotbs01.dbf
	 4 ONLINE  /*****/oracle/app/oracle/oradata/ORCL11/users01.dbf

2. test tablespace 생성

SQL> create tablespace testtablespace datafile '/*****/oracle/app/oracle/oradata/ORCL11/testtablespace.dbf' size 10m;

Tablespace created.

3. test tablespace 확인

     FILE# STATUS  NAME
---------- ------- ------------------------------------------------------------
	 1 SYSTEM  /*****/oracle/app/oracle/oradata/ORCL11/system01.dbf
	 2 ONLINE  /*****/oracle/app/oracle/oradata/ORCL11/sysaux01.dbf
	 3 ONLINE  /*****/oracle/app/oracle/oradata/ORCL11/undotbs01.dbf
	 4 ONLINE  /*****/oracle/app/oracle/oradata/ORCL11/users01.dbf
	 5 ONLINE  /*****/oracle/app/oracle/oradata/ORCL11/testtablespace.dbf

3. dbf파일 유실상황 만들기

 

백업본이 없는 상황으로 해당 dbf파일의 삭제를 통해 장애상황을 만들어줍니다.

[oracle@ORACLE11 ORCL11]$ pwd
/*****/oracle/app/oracle/oradata/ORCL11

[oracle@ORACLE11 ORCL11]$ rm -rf testtablespace.dbf 

4. 장애 발생 확인 및 DB재기동

SQL> startup
ORACLE instance started.

Total System Global Area 2137886720 bytes
Fixed Size		    2254952 bytes
Variable Size		 1442842520 bytes
Database Buffers	  687865856 bytes
Redo Buffers		    4923392 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 5 - see DBWR trace file
ORA-01110: data file 5: '/*****/oracle/app/oracle/oradata/ORCL11/testtablespace.dbf'

해당 dbf파일이 유실되어 open되지 않고 mount 단계임.

SQL> select status from v$instance;

STATUS
------------
MOUNTED

5. 복구_1

마운트 단계에서 해당 데이터파일을 offline으로 변경 후 DB기동을 시도합니다.

 

이후 손상된 파일을 새로 생성해줍니다.

 

새로 생성한 dbf파일의 상태를 조회하면 recover가 필요한 상황임을 알 수 있습니다.

마운트 단계에서 해당 데이터파일을 offline으로 변경 후 DB기동

SQL> alter database datafile '/*****/oracle/app/oracle/oradata/ORCL11/testtablespace.dbf' offline;

Database altered.

SQL> alter database open;

Database altered.

SQL> alter database create datafile '/*****/oracle/app/oracle/oradata/ORCL11/testtablespace.dbf';

Database altered

SQL> select file#, status, name from v$datafile;

     FILE# STATUS  NAME
---------- ------- ------------------------------------------------------------
	 1 SYSTEM  /*****/oracle/app/oracle/oradata/ORCL11/system01.dbf
	 2 ONLINE  /*****/oracle/app/oracle/oradata/ORCL11/sysaux01.dbf
	 3 ONLINE  /*****/oracle/app/oracle/oradata/ORCL11/undotbs01.dbf
	 4 ONLINE  /*****/oracle/app/oracle/oradata/ORCL11/users01.dbf
	 5 RECOVER /*****/oracle/app/oracle/oradata/ORCL11/testtablespace.dbf

6. 복구_2

 

아카이브 파일을 통해 복구해줍니다.

 

복구이후 해당 데이터파일이 비활성화 상태입니다.

SQL> recover datafile 5;
ORA-00279: change 2258659 generated at 02/24/2021 22:10:07 needed for thread 1
ORA-00289: suggestion : /home/oracle/fra/ORCL11/archivelog/2021_02_24/o1_mf_1_56_j3dnfsjn_.arc
ORA-00280: change 2258659 for thread 1 is in sequence #56


Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
auto
Log applied.
Media recovery complete.

SQL> select file#, status, name from v$datafile;

     FILE# STATUS  NAME
---------- ------- ------------------------------------------------------------
	 1 SYSTEM  /*****/oracle/app/oracle/oradata/ORCL11/system01.dbf
	 2 ONLINE  /*****/oracle/app/oracle/oradata/ORCL11/sysaux01.dbf
	 3 ONLINE  /*****/oracle/app/oracle/oradata/ORCL11/undotbs01.dbf
	 4 ONLINE  /*****/oracle/app/oracle/oradata/ORCL11/users01.dbf
	 5 OFFLINE /*****/oracle/app/oracle/oradata/ORCL11/testtablespace.dbf
SQL> alter database datafile 5 online;

Database altered.

SQL> select file#, status, name from v$datafile;

     FILE# STATUS  NAME
---------- ------- ------------------------------------------------------------
	 1 SYSTEM  /*****/oracle/app/oracle/oradata/ORCL11/system01.dbf
	 2 ONLINE  /*****/oracle/app/oracle/oradata/ORCL11/sysaux01.dbf
	 3 ONLINE  /*****/oracle/app/oracle/oradata/ORCL11/undotbs01.dbf
	 4 ONLINE  /*****/oracle/app/oracle/oradata/ORCL11/users01.dbf
	 5 ONLINE  /*****/oracle/app/oracle/oradata/ORCL11/testtablespace.dbf

해당 데이터파일의 삭제가 필요한 경우 아래 명령을 실행합니다.

##불필요한 테이블스페이스의 경우 삭제도 가능하다##

SQL> drop tablespace testtablespace including contents;

##물리적 데이터파일까지 삭제가능##

SQL> drop tablespace testtablespace including contents and datafiles cascade constraints;

Tablespace dropped.

7. TEST 종료 후 원복

7. DB 재기동

SQL> select file#, status, name from v$datafile;

     FILE# STATUS  NAME
---------- ------- ------------------------------------------------------------
	 1 SYSTEM  /*****/oracle/app/oracle/oradata/ORCL11/system01.dbf
	 2 ONLINE  /*****/oracle/app/oracle/oradata/ORCL11/sysaux01.dbf
	 3 ONLINE  /*****/oracle/app/oracle/oradata/ORCL11/undotbs01.dbf
	 4 ONLINE  /*****/oracle/app/oracle/oradata/ORCL11/users01.dbf


SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> startup
ORACLE instance started.

Total System Global Area 2137886720 bytes
Fixed Size		    2254952 bytes
Variable Size		 1442842520 bytes
Database Buffers	  687865856 bytes
Redo Buffers		    4923392 bytes
Database mounted.
Database opened.

이상으로 백업파일의 없는경우의 데이터파일 복구에 대해 알아보았습니다.