프린트 하기

OS환경 : Oracle Linux 6.8 (64bit)

 

DB 환경 : Oracle Database 11.2.0.4

 

에러 : 잘못 추가한 Datafile 삭제(alter tablespace drop datafile)

기존 datafile 조회

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SYS@orcl> select * from dba_data_files;
FILE_NAME
-----------------------------------------------------------------------------------------------------------------------------------------------------------
   FILE_ID TABLESPACE_NAME               BYTES     BLOCKS STATUS      RELATIVE_FNO AUT   MAXBYTES  MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS ONLINE_
---------- ------------------------------ ---------- ---------- --------- ------------ --- ---------- ---------- ------------ ---------- ----------- -------
/oracle/app/oracle/oradata/orcl/users01.dbf
4 USERS     5242880        640 AVAILABLE         4 YES 3.4360E+10     4194302      160     5177344     632 ONLINE
/oracle/app/oracle/oradata/orcl/sysaux01.dbf
3 SYSAUX    293601280      35840 AVAILABLE    3 YES 3.4360E+10     4194302     1280  293535744       35832 ONLINE
/oracle/app/oracle/oradata/orcl/undotbs01.dbf
2 UNDOTBS  73400320       8960 AVAILABLE         2 YES 3.4360E+10     4194302      64073334784    8952 ONLINE
/oracle/app/oracle/oradata/orcl/system01.dbf
1 SYSTEM      482344960      58880 AVAILABLE  1 YES 3.4360E+10     4194302     1280  482279424   58872 SYSTEM
/oracle/app/oracle/oradata/orcl/perfstat01.bdf
5 PERFSTAT   524288000      64000 AVAILABLE         5 NO        0           0        0  524222464       63992 ONLINE
/oracle/app/oracle/oradata/orcl/mints01.dbf
6 mints       524288000      64000 AVAILABLE         6 NO        0           0        0  524222464       63992 ONLINE
 
6 rows selected.

 

 

새로운 datafile 추가(mints02.dbf)

1
2
3
SYS@orcl> alter tablespace mints add datafile '/oracle/app/oracle/oradata/orcl/mints02.dbf' size 5m;
 
Tablespace altered.

 

 

해결 방법 : offline drop 명령어를 이용해 datafile에 data가 쌓이지 않게 한후 조치

*참고. 12c 이상 버전의 경우 onlie move datafile 명령으로 데이터파일을 옮길 수 있음

오라클 19c 온라인 데이터파일 move 테스트 ( https://positivemh.tistory.com/856 )

 

오라클 19c 온라인 데이터파일 move 테스트

OS환경 : Oracle Linux 7.6 (64bit) DB 환경 : Oracle Database 19.10.0.0 방법 : 오라클 19c 온라인 데이터파일 MOVE 테스트(online datafile move) 운영 환경에서 datafile이 저장된 디렉토리의 용량이 모자라거나 asm 디스

positivemh.tistory.com

 

 

먼저 잘못 추가한 데이터파일에 데이터가 쌓이지 않게 하기위해 offline, offline drop 명령어를 수행해야함

(데이터파일 삭제시 다시 online으로 변경해야하지만 당장 데이터가 쌓이기 않게 하기위함임)

 

 

아카이브 모드 인경우 offline 사용

1
2
3
SYS@orcl> alter database datafile '/oracle/app/oracle/oradata/orcl/mints02.dbf' offline;
 
Database altered.

 

 

아카이브 모드가 아닌경우 offline drop사용

1
2
3
SYS@orcl> alter database datafile '/oracle/app/oracle/oradata/orcl/mints02.dbf' offline drop;
 
Database altered.

*아카이브 모드가 아닌상태에서 offline drop 명령을 사용하고, 이후 log switch가 일어나게되면 다시 online 상태로 변경시키지 못하니 유의해야함

*이 경우 alter tablespace mints drop datafile '경로'; 를 사용해 바로 삭제해주는것도 방법임

 

 

datafile을 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
SYS@orcl> select * from dba_data_files;
FILE_NAME
-------------------------------------------------------------------------------------------------------------------------------------------------------------
   FILE_ID TABLESPACE_NAME               BYTES     BLOCKS STATUS      RELATIVE_FNO AUT   MAXBYTES  MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS ONLINE_
---------- ------------------------------ ---------- ---------- --------- ------------ --- ---------- ---------- ------------ ---------- ----------- -------
/oracle/app/oracle/oradata/orcl/users01.dbf
4 USERS     5242880        640 AVAILABLE         4 YES 3.4360E+10     4194302      160     5177344     632 ONLINE
/oracle/app/oracle/oradata/orcl/sysaux01.dbf
3 SYSAUX    293601280      35840 AVAILABLE    3 YES 3.4360E+10     4194302     1280  293535744       35832 ONLINE
/oracle/app/oracle/oradata/orcl/undotbs01.dbf
2 UNDOTBS  73400320       8960 AVAILABLE         2 YES 3.4360E+10     4194302      64073334784    8952 ONLINE
/oracle/app/oracle/oradata/orcl/system01.dbf
1 SYSTEM      482344960      58880 AVAILABLE  1 YES 3.4360E+10     4194302     1280  482279424   58872 SYSTEM
/oracle/app/oracle/oradata/orcl/perfstat01.bdf
5 PERFSTAT   524288000      64000 AVAILABLE         5 NO        0           0        0  524222464       63992 ONLINE
/oracle/app/oracle/oradata/orcl/mints01.dbf
6 mints       524288000      64000 AVAILABLE         6 NO        0           0        0  524222464       63992 ONLINE
/oracle/app/oracle/oradata/orcl/mints02.dbf
7 mints       (null)         (null)    AVAILABLE         7 (nu (null)     (null)     (null)       (null)     (null)      RECOVER
 
7 rows selected.

offline drop 명령어 사용시 ONLINE_STATUS가 RECOVER상태로 변하고 data가 쌓이지 않음

 

 

현재 상태에서 datafile을 제거하기 위해서는 

alter tablespace mints drop datafile '~~'; 명령어를 사용해야함

이 때 조건으로는 

 

1. 데이터베이스가 OPEN상태어야합니다.

 

2. 데이터 파일이 비어 있지 않으면 삭제할 수 없습니다.

비어 있지 않고 스키마 객체를 삭제하여 비워 둘 수없는 데이터 파일을 제거해야하는 경우 

데이터 파일이 포함 된 TABLESPACE를 삭제해야합니다.

 

3. TABLESPACE의 첫 번째 또는 유일한 데이터 파일은 삭제할 수 없습니다.

즉 DROP DATAFILE 명령어는 BIG TABLESPACE에서는 사용할 수 없습니다.

 

4. 읽기 전용 TABLESPACE에서는 데이터 파일을 삭제할 수 없습니다.

 

5. SYSTEM TABLESPACE의 데이터 파일을 삭제할 수 없습니다 .

 

6. 로컬 관리 TABLESPACE의 데이터 파일이 오프라인 상태인 경우 삭제할 수 없습니다.

 

 

위와 같은 조건이 있기 때문에 datafile을 먼저 online 시켜준다.

1
2
3
4
5
6
SYS@orcl> alter database datafile '/oracle/app/oracle/oradata/orcl/mints02.dbf' online;
alter database datafile '/oracle/app/oracle/oradata/orcl/mints02.dbf' online
*
ERROR at line 1:
ORA-01113: file 7 needs media recovery if it was restored from backup, or END BACKUP if it was not
ORA-01110: data file 7'/oracle/app/oracle/oradata/orcl/mints02.dbf'

 

 

이때 에러가 발생하는데 recover 명령어를 이용해서 datafile을 사용가능한 상태로 만들어준다.

1
2
3
SYS@orcl> recover datafile '/oracle/app/oracle/oradata/orcl/mints02.dbf';
 
Media recovery complete.

offline 시점의 아카이브로그 파일이 존재해야 복구가 가능

 

 

그 후 datafile을 다시 online 시킨다.

1
2
3
SYS@orcl> alter database datafile '/oracle/app/oracle/oradata/orcl/mints02.dbf' online;
 
Database altered.

 

 

datafile을 확인한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
SYS@orcl> select * from dba_data_files;
FILE_NAME
------------------------------------------------------------------------------------------------------------------------------------------------------------
   FILE_ID TABLESPACE_NAME               BYTES     BLOCKS STATUS      RELATIVE_FNO AUT   MAXBYTES  MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS ONLINE_
---------- ------------------------------ ---------- ---------- --------- ------------ --- ---------- ---------- ------------ ---------- ----------- -------
/oracle/app/oracle/oradata/orcl/users01.dbf
4 USERS     5242880        640 AVAILABLE         4 YES 3.4360E+10     4194302      160     5177344     632 ONLINE
/oracle/app/oracle/oradata/orcl/sysaux01.dbf
3 SYSAUX    293601280      35840 AVAILABLE    3 YES 3.4360E+10     4194302     1280  293535744       35832 ONLINE
/oracle/app/oracle/oradata/orcl/undotbs01.dbf
2 UNDOTBS  73400320       8960 AVAILABLE         2 YES 3.4360E+10     4194302      64073334784    8952 ONLINE
/oracle/app/oracle/oradata/orcl/system01.dbf
1 SYSTEM      482344960      58880 AVAILABLE  1 YES 3.4360E+10     4194302     1280  482279424   58872 SYSTEM
/oracle/app/oracle/oradata/orcl/perfstat01.bdf
5 PERFSTAT   524288000      64000 AVAILABLE         5 NO        0           0        0  524222464       63992 ONLINE
/oracle/app/oracle/oradata/orcl/mints01.dbf
6 mints       524288000      64000 AVAILABLE         6 NO        0           0        0  524222464       63992 ONLINE
/oracle/app/oracle/oradata/orcl/mints02.dbf
7 mints         5242880        640 AVAILABLE         7 NO        0           0        0     5177344     632 ONLINE
ONLINE 상태가 된것을 확인한다.
 
7 rows selected.

 

 

drop datafile 명령어로 datafile을 지워준다.

1
2
3
SYS@orcl> alter tablespace mints drop datafile '/oracle/app/oracle/oradata/orcl/mints02.dbf';
 
Tablespace altered.

 

 

datafile을 확인한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SYS@orcl> select * from dba_data_files;
FILE_NAME
------------------------------------------------------------------------------------------------------------------------------------------------------------
   FILE_ID TABLESPACE_NAME               BYTES     BLOCKS STATUS      RELATIVE_FNO AUT   MAXBYTES  MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS ONLINE_
---------- ------------------------------ ---------- ---------- --------- ------------ --- ---------- ---------- ------------ ---------- ----------- -------
/oracle/app/oracle/oradata/orcl/users01.dbf
4 USERS     5242880        640 AVAILABLE         4 YES 3.4360E+10     4194302      160     5177344     632 ONLINE
/oracle/app/oracle/oradata/orcl/sysaux01.dbf
3 SYSAUX    293601280      35840 AVAILABLE    3 YES 3.4360E+10     4194302     1280  293535744       35832 ONLINE
/oracle/app/oracle/oradata/orcl/undotbs01.dbf
2 UNDOTBS  73400320       8960 AVAILABLE         2 YES 3.4360E+10     4194302      64073334784    8952 ONLINE
/oracle/app/oracle/oradata/orcl/system01.dbf
1 SYSTEM      482344960      58880 AVAILABLE  1 YES 3.4360E+10     4194302     1280  482279424   58872 SYSTEM
/oracle/app/oracle/oradata/orcl/perfstat01.bdf
5 PERFSTAT   524288000      64000 AVAILABLE         5 NO        0           0        0  524222464       63992 ONLINE
/oracle/app/oracle/oradata/orcl/mints01.dbf
6 mints       524288000      64000 AVAILABLE         6 NO        0           0        0  524222464       63992 ONLINE
 
6 rows selected.

 

정상적으로 제거 된것을 확인할 수 있다.

 

 

아카이브 모드가 아닌 상태에서 log switch 가 일어났다면 

위 recover 명령어가 적용되지 않기 때문엔 위 방법을 사용할 수 없다.

 

 

+ 12c 이상 버전의 경우 onlie move datafile 명령으로 데이터파일을 옮길 수 있음

오라클 19c 온라인 데이터파일 move 테스트 ( https://positivemh.tistory.com/856 )

 

오라클 19c 온라인 데이터파일 move 테스트

OS환경 : Oracle Linux 7.6 (64bit) DB 환경 : Oracle Database 19.10.0.0 방법 : 오라클 19c 온라인 데이터파일 MOVE 테스트(online datafile move) 운영 환경에서 datafile이 저장된 디렉토리의 용량이 모자라거나 asm 디스

positivemh.tistory.com

 

 

참조 : https://docs.oracle.com/cd/B28359_01/server.111/b28310/dfiles006.htm#ADMIN11435

https://docs.oracle.com/html/E25494_01/dfiles004.htm