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.
이상으로 백업파일의 없는경우의 데이터파일 복구에 대해 알아보았습니다.