실수로 데이터파일 삭제시 처리방안

실수로라도 oracleDB를 설치했는데 데이터 파일을 삭제했다면 정말 대참사이다. 하루만에 찾아서 다행이지 못 찾았다면 아예 삭제했다가 다시 설치도 생각했었다. 간혹가다가 컴퓨터를 초기화를 할 수도 있다는 말도 있어서 어이가 없었지만 해결하는데 성공했다.

.DBF 로 확장자가 있는 파일이 있다면 함부로 삭제하지 마라 진짜 끔찍하다. 내가 만약 다시는 Oracle을 사용하지 않을거다라면 해도된다.

일반적이라면 full backup을 restore하는 것인데 만약 업무 중에 이런 일이 일어났다면… 아실 거라 생각합니다.

차선의 방안은 해당 데이터파일이 속한 테이블스페이스를 Drop하는 것입니다. 해당 테이블스페이스내의 데이터는 어쩔 수 없습니다. 날라간 겁니다. 참고로 테이블스페이스내의 데이터파일만 삭제하는 것은 temporary tablespace가 아닌이상 안됩니다.

  1. alert.log, DBWR trace file파일을 보면 에러메시지가 있으므로 에러내용을 확인합니다. 파일삭제로 인한 문제라는 것은 알고 있으므로 그냥 확인만 합니다.
  2. svrmgrl를 실행해 connect internal로 로그인합니다.
  3. db를 shutdown합니다.
  4. db를 startup mount로 시동합니다.
  5. alter database datafile ‘데이터파일이름’ offline drop;을 수행합니다.
  6. database를 open합니다.
  7. 데이터파일이 속한 tablespace를 drop합니다.

다음은 실제 예제입니다.

삭제한 데이터파일: d:data_temp.dbf 해당 테이블스페이스: data_temp

오라클DB가 shutdown상태에서(온라인상태면 윈도의 경우 데이터파일을 OS에서 삭제할 수 없습니다. 유닉스계열은 삭제가능합니다.) 그리고 DB를 startup을 합니다. alert.log에는 에러내용이 기록되고, DBWR trace file파일에 좀더 세부적인 에러내용이 기록됩니다. SQL*PLUS연결시 다음과 같은 에러가 발생합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SQL*Plus: Release 8.1.6.0.0 - Production on 월 Sep 17 16:19:13 2001

(c) Copyright 1999 Oracle Corporation.  All rights reserved.


Connected to:
Oracle8i Release 8.1.5.0.2 - Production
With the Java option
PL/SQL Release 8.1.5.0.0 - Production

SQL> connect system/xxxxxx
ERROR:
ORA-01033: ORACLE initialization or shutdown in progress


경고: 이제는 ORACLE에 연결되어 있지 않습니다.
SQL>

해결방법 : oracle계정에서 다음과 같이 합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
C:Documents and SettingsAdministrator>svrmgrl

Oracle Server Manager Release 3.1.6.0.0 - Production

Copyright (c) 1997, 1999, Oracle Corporation.  All Rights Reserv

Oracle8i Enterprise Edition Release 8.1.6.0.0 - Production
With the Partitioning option
JServer Release 8.1.6.0.0 - Production

SVRMGR> connect internal
암    호:
접속되었습니다.
SVRMGR> shutdown
ORA-01109: 데이터베이스가 개방되지 않습니다
데이터베이스가 마운트 해제되었습니다.
ORACLE 인스턴스가 종료되었습니다.
SVRMGR> startup mount
ORACLE 인스턴스가 시작되었습니다.
시스템 글로벌 영역                            46298380 바이트 합계
Fixed Size                                          70924 바이트
Variable Size                                    20549632 바이트
Database Buffers                                 25600000 바이트
Redo Buffers                                        77824 바이트
데이터베이스가 마운트되었습니다.
SVRMGR> alter database datafile 'd:data_temp.dbf' offline drop;
명령문이 처리되었습니다.
SVRMGR> alter database open;
명령문이 처리되었습니다.
SVRMGR> drop tablespace data_temp including contents;
명령문이 처리되었습니다.
SVRMGR>

해당 부분은 실제 해결한 화면과 다릅니다.

추후에 실제 실행을 테스트를 해볼 예정입니다. (virtualBox, Linux)