테이블스페이스에 할당되어있는 datafile 제거 시 가능한 경우와 불가능한 경우 테스트입니다
Oracle Datafile drop 가능
- 데이터가 비어 있어야 합니다.
Oracle Datafile drop 불가능
- 테이블스페이스의 첫 번째 또는 유일한 데이터 파일
- SYSTEM 테이블스페이스의 데이터 파일은 삭제할 수 없습니다
USERS 테이블스페이스 datafile 제거
-- 데이터파일 조회
> SELECT
file_id, file_name, bytes/1024/1024 AS MB
FROM dba_data_files
WHERE tablespace_name = 'USERS'
ORDER BY file_name
FILE_ID|FILE_NAME |MB|
-------+----------------------------+--+
7|/data01/ora19ent/users01.dbf|10|
5|/data01/ora19ent/users02.dbf|10|
2|/data01/ora19ent/users03.dbf|10|
3 row(s) fetched.
-- 데이터 파일에 세그먼트 존재하는 경우 drop 에러 발생
> ALTER TABLESPACE users DROP DATAFILE '/data01/ora19ent/users02.dbf'
SQL Error [3262] [99999]: ORA-03262: 파일이 비어 있지 않습니다.
-- 데이터파일 사용중인 세그먼트 조회
> select file_id, owner
, segment_name, partition_name, segment_type, round((block_id*8192+blocks*8192)/1024/1024) loc_mb, round(bytes/1024/1024,2) size_mb
from dba_extents
where 1=1
AND tablespace_name = 'USERS'
order by file_id
FILE_ID|OWNER |SEGMENT_NAME |PARTITION_NAME|SEGMENT_TYPE|LOC_MB|SIZE_MB|
-------+-------+-----------------------------+--------------+------------+------+-------+
5|SK |TAB1 | |TABLE | 7| 1|
5|SK |TAB1 | |TABLE | 1| 0.06|
5|SK |TAB1 | |TABLE | 6| 1|
5|SK |TAB1 | |TABLE | 1| 0.06|
5|SK |TAB1 | |TABLE | 5| 1|
5|SK |TAB1 | |TABLE | 1| 0.06|
5|SK |TAB1 | |TABLE | 4| 1|
5|SK |TAB1 | |TABLE | 1| 0.06|
5|SK |TAB1 | |TABLE | 3| 1|
5|SK |TAB1 | |TABLE | 1| 0.06|
5|SK |TAB1 | |TABLE | 2| 0.06|
5|SK |TAB1 | |TABLE | 2| 0.06|
5|SK |TAB1 | |TABLE | 2| 0.06|
5|SK |TAB1 | |TABLE | 2| 0.06|
5|SK |TAB1 | |TABLE | 1| 0.06|
5|SK |TAB1 | |TABLE | 1| 0.06|
7|SK |TAB1 | |TABLE | 3| 0.06|
7|SK |TAB1 | |TABLE | 3| 0.06|
7|SK |TAB1 | |TABLE | 3| 0.06|
7|SK |TAB1 | |TABLE | 3| 0.06|
7|SK |TAB1 | |TABLE | 3| 0.06|
7|SK |TAB1 | |TABLE | 4| 1|
7|SK |TAB1 | |TABLE | 5| 1|
7|SK |TAB1 | |TABLE | 6| 1|
7|SK |TAB1 | |TABLE | 7| 1|
7|SK |TAB1 | |TABLE | 8| 1|
7|SK |TAB1 | |TABLE | 9| 1|
54 row(s) fetched.
-- 데이터 파일이 비어있는경우 drop 가능
> ALTER TABLESPACE users DROP DATAFILE '/data01/ora19ent/users03.dbf'
0 row(s) modified.
SYSTEM 테이블스페이스 datafile 제거
> SELECT
file_id, file_name, bytes/1024/1024 mb
FROM dba_data_files
WHERE tablespace_name = 'USERS'
ORDER BY file_name
FILE_ID|FILE_NAME |MB|
-------+----------------------------+--+
7|/data01/ora19ent/users01.dbf|10|
5|/data01/ora19ent/users02.dbf|10|
2 row(s) fetched.
-- system 테이블스페이스 datafile 조회
> SELECT
file_id, file_name, bytes/1024/1024 AS MB
FROM dba_data_files
WHERE tablespace_name = 'SYSTEM'
ORDER BY file_name
FILE_ID|FILE_NAME |MB |
-------+------------------------------------+----+
1|/ora19ent/oradata/ENT19/system01.dbf|1029|
2|/ora19ent/oradata/ENT19/system02.dbf| 10|
2 row(s) fetched.
-- 2번 datafile 사용 세그먼트 조회(없음)
select file_id, owner
, segment_name, partition_name, segment_type, round((block_id*8192+blocks*8192)/1024/1024) loc_mb, round(bytes/1024/1024,2) size_mb
from dba_extents
where 1=1
AND tablespace_name = 'SYSTEM'
AND FILE_id = 2
order by file_id
FILE_ID|OWNER|SEGMENT_NAME|PARTITION_NAME|SEGMENT_TYPE|LOC_MB|SIZE_MB|
-------+-----+------------+--------------+------------+------+-------+
0 row(s) fetched.
> ALTER TABLESPACE system DROP DATAFILE '/ora19ent/oradata/ENT19/system02.dbf'
SQL Error [1541] [72000]: ORA-01541: SYSTEM 테이블스페이스는 오프라인될 수 없습니다. 필요하면 종료하십시오.
댓글 쓰기