Oracle Database를 설치하고 기본 ORCL인스턴스를 생성하면 다음과 같이 C:드라이브의 C:\app\oracle\oradata\orcl 경로에 파일을 작성하기도 합니다.
그렇지만 C: 드라이브는 OS가 사용하는 영역입니다. Oracle 데이터의 용량 증가로 디스크의 여유공간이 줄어 OS기동에도 문제가 발생 할 수 있으므로 Oracle 데이터 파일을 같이 저장하는 것은 추천하지 않습니다.
Oracle 데이터 파일은 이동을 할 수 있습니다. 이 글에서는 Oracle 테이블스페이스 OFFLINE 또는 인스턴스 MOUNT상태에서 C: 드라이브에서 D: 드라이브로 Oracle 데이터 파일을 이동하는 방법을 소개합니다.
작업 환경
- DB서버 Windows컴퓨터
- OS : Widows Server 2012 R2
- IP Address(예) : 192.168.220.132
이동 대상파일 확인하기
- 다음 명령으로 이동하고 싶은 대상파일을 확인합니다.
C:\>sqlplus / as sysdba
SQL*Plus: Release 12.2.0.1.0 Production on 토 10월 16 00:52:20 2021
Copyright (c) 1982, 2016, Oracle. All rights reserved.
다음에 접속됨:
Oracle Database 12c Standard Edition Release 12.2.0.1.0 - 64bit Production
SQL> COLUMN file_id format 9999999;
COLUMN file_name format A40;
SELECT file_id, file_name FROM dba_data_files;
FILE_ID FILE_NAME
------- ----------------------------------------
1 C:\APP\ORACLE\ORADATA\ORCL\SYSTEM01.DBF
3 C:\APP\ORACLE\ORADATA\ORCL\SYSAUX01.DBF
5 C:\APP\ORACLE\ORADATA\ORCL\UNDOTBS01.DBF
7 C:\APP\ORACLE\ORADATA\ORCL\USERS01.DBF
c:\app\oracle 디렉토리의 속성(보안)을 확인하면 다음과 같습니다. 이동하려는 디렉토리를 작성 할때 이동 전과 같은 속성(보안) 으로 수정해야 하므로 속성(보안) 내용을 기록해 둡니다.
SYSTEM, ORA_OraDB12Home1_SVCACCTS, Administrator, Administrators의 사용권한이 모든 권한 “허용” 으로 되어있음을 확인합니다.
- 데이터 파일을 관리하는 논리영역의 테이블스페이스를 확인합니다.
SQL> COLUMN tablespace_name format A15;
COLUMN file_name format A40;
COLUMN status format A10;
select file_name, tablespace_name, status from dba_data_files;
FILE_NAME TABLESPACE_NAME STATUS
---------------------------------------- --------------- ----------
C:\APP\ORACLE\ORADATA\ORCL\SYSTEM01.DBF SYSTEM AVAILABLE
C:\APP\ORACLE\ORADATA\ORCL\SYSAUX01.DBF SYSAUX AVAILABLE
C:\APP\ORACLE\ORADATA\ORCL\UNDOTBS01.DBF UNDOTBS1 AVAILABLE
C:\APP\ORACLE\ORADATA\ORCL\USERS01.DBF USERS AVAILABLE
- 논리영역 테이블스페이스 상태를 확인합니다.
SQL> COLUMN tablespace_name format A15;
SQL> COLUMN status format A10;
SQL> select tablespace_name, status from dba_tablespaces;
TABLESPACE_NAME STATUS
--------------- ----------
SYSTEM ONLINE
SYSAUX ONLINE
UNDOTBS1 ONLINE
TEMP ONLINE
USERS ONLINE
데이터파일 이동에 사용되는 SQL명령
Oracle 데이터파일 이동에는 다음 두 종류 명령을 사용할 수 있습니다.
ALTER TABLESPACE USERS RENAME DATAFILE ‘이동 전 파일 경로’ TO ‘이동 후 파일 경로’;
이 명령으로는 Oracle 테이블스페이스를 OFFLINE으로 변경할 수 있는 테이블스페이스만 이동할 수 있습니다. SYSTEM 테이블스페이스, 활성화된 UNDO테이블스페이스는 이동할 수 없습니다.
ALTER DATABASE RENAME FILE ‘이동 전 파일 경로’ TO ‘이동 후 파일 경로’;
이 명령으로 모든 Oracle 테이블스페이스를 이동할 수 있습니다. 이 명령을 사용하기 위해서는 데이터베이스를 UNMOUNT로 기동해야합니다.
데이터파일 이동 따라하기
“ALTER TABLESPACE 이름 RENAME DATAFILE ~” 명령사용 이동
데이터파일 이동 절차는 다음과 같습니다.
- 이동 전 데이터파일을 관리하는 테이블스페이스를 Offline으로 변경합니다.
SQL>alter tablespace users offline;
테이블스페이스가 변경되었습니다.
SQL> alter tablespace sysaux offline;
테이블스페이스가 변경되었습니다.
SQL> select tablespace_name, status from dba_tablespaces;
TABLESPACE_NAME STATUS
--------------- ----------
SYSTEM ONLINE
SYSAUX OFFLINE
UNDOTBS1 ONLINE
TEMP ONLINE
USERS OFFLINE
주의) 다음과 같이 SYSTEM 테이블스페이스, 활성화된 UNDO테이블스페이스는 Offline으로 변경할 수 없습니다. 그러므로 ALTER TABLESPACE USERS RENAME DATAFILE 명령사용 이동할 수 없습니다.
SQL> alter tablespace system offline;
alter tablespace system offline
*
1행에 오류:
ORA-01541: SYSTEM 테이블스페이스는 오프라인될 수 없습니다. 필요하면
종료하십시오.
SQL> alter tablespace undotbs1 offline;
alter tablespace undotbs1 offline
*
1행에 오류:
ORA-30042: 실행 취소 테이블스페이스를 오프라인으로 설정할 수 없음
- 명령 프롬프트창을 이용하여 파일을 이동합니다.
이동 전의 현재 D:드라이브는 비어 있는 상태입니다.
다음 명령을 명령 프롬프트창에서 실행하여 데이터 파일을 이동 할 디렉토리를 작성합니다.
D:\>mkdir d:\app\oracle\oradata\orcl
작성된 디렉토리는 속성(보안) 설정이 이동 전의 c:\app\oracle의 속성(보안) 과 같아야 합니다. d:\app\oracle 디렉토리의 속성(보안)을 다음과 같이 [편집] 버튼을 눌러 수정합니다.
그리고 CREATOR OWNER그룹과 Users그룹을 삭제하려면 속성을 편집하기 전에 [고급(V)]버튼을 눌러 다음과 같이 [고급 보안 설정] 화면을 표시한 후 [상속 사용 안 함(I)]을 눌러야 합니다.
위의 속성(보안) 설정이 끝나면 다음 명령을 명령 프롬프트창에서 실행하여 파일을 D:드라이브로 이동합니다.
D:\>move c:\app\oracle\oradata\orcl\USERS01.DBF d:\app\oracle\oradata\orcl\USERS01.DBF
1개 파일을 이동했습니다.
D:\>move c:\app\oracle\oradata\orcl\SYSAUX01.DBF d:\app\oracle\oradata\orcl\SYSAUX01.DBF
1개 파일을 이동했습니다.
- 다음 명령으로 등록된 데이터파일의 이동 전의 파일 경로를 이동 후의 파일 경로로 변경합니다.
SQL> ALTER TABLESPACE USERS RENAME DATAFILE 'c:\app\oracle\oradata\orcl\USERS01.DBF' TO 'd:\app\oracle\oradata\orcl\USERS01.DBF';
테이블스페이스가 변경되었습니다.
SQL> ALTER TABLESPACE SYSAUX RENAME DATAFILE 'c:\app\oracle\oradata\orcl\SYSAUX01.DBF' TO 'd:\app\oracle\oradata\orcl\SYSAUX01.DBF';
테이블스페이스가 변경되었습니다.
- 이동 후 데이터파일을 관리하는 테이블스페이스를 Online으로 변경합니다.
SQL> alter tablespace users online;
테이블스페이스가 변경되었습니다.
SQL> alter tablespace sysaux online;
테이블스페이스가 변경되었습니다.
SQL> select tablespace_name, status from dba_tablespaces;
TABLESPACE_NAME STATUS
--------------- ----------
SYSTEM ONLINE
SYSAUX ONLINE
UNDOTBS1 ONLINE
TEMP ONLINE
USERS ONLINE
SQL> alter system checkpoint;
시스템이 변경되었습니다.
- 다음과 같이 D:드라이브로 이동되었음을 확인 할 수 있습니다.
SQL> COLUMN tablespace_name format A15;
COLUMN file_name format A40;
COLUMN status format A10;
select file_name, tablespace_name, status from dba_data_files;
FILE_NAME TABLESPACE_NAME STATUS
---------------------------------------- --------------- ----------
C:\APP\ORACLE\ORADATA\ORCL\SYSTEM01.DBF SYSTEM AVAILABLE
D:\APP\ORACLE\ORADATA\ORCL\SYSAUX01.DBF SYSAUX AVAILABLE
C:\APP\ORACLE\ORADATA\ORCL\UNDOTBS01.DBF UNDOTBS1 AVAILABLE
D:\APP\ORACLE\ORADATA\ORCL\USERS01.DBF USERS AVAILABLE
주의) 이동 후 디렉토리 d:\app\oracle 속성(보안) 설정이 이동 전의 c:\app\oracle의 속성(보안) 과 같지 않아 쓰기 권한이 없다면 다음과 같은 메시지가 표시될 수 있습니다.
SQL> alter tablespace users online;
alter tablespace users online
*
1행에 오류:
ORA-01114: 7 파일에 블록을 기록하는데 IO 오류입니다 (블록 번호 1)
ORA-01110: 7 데이터 파일: 'E:\APP\ORACLE\ORADATA\ORCL\USERS01.DBF'
ORA-27091: I/O를 대기열에 넣을 수 없습니다.
ORA-27041: 파일을 열 수 없습니다
OSD-04002: ???? ?? ?? ????
O/S-Error: (OS 5) ??????? ??ε???????
“ALTER DATABASE RENAME FILE ~” 명령사용 이동
- sysdba 시스템 권한으로 로그인해서 데이터베이스 종료후 MOUNT상태로 기동합니다.
D:\>sqlplus / as sysdba
SQL*Plus: Release 12.2.0.1.0 Production on 토 10월 16 23:01:54 2021
Copyright (c) 1982, 2016, Oracle. All rights reserved.
다음에 접속됨:
Oracle Database 12c Standard Edition Release 12.2.0.1.0 - 64bit Production
SQL> shutdown immediate;
데이터베이스가 닫혔습니다.
데이터베이스가 마운트 해제되었습니다.
ORACLE 인스턴스가 종료되었습니다.
SQL> startup mount
ORACLE 인스턴스가 시작되었습니다.
Total System Global Area 1946157056 bytes
Fixed Size 8748328 bytes
Variable Size 570426072 bytes
Database Buffers 1358954496 bytes
Redo Buffers 8028160 bytes
데이터베이스가 마운트되었습니다.
SQL>
SHUTDOWN 명령의 IMMEDIATE 모드 실행 특징은 다음과 같습니다.
- 새로운 연결과 새로운 트랜잭션의 시작은 허용되지 않습니다.
- 또한 COMMIT되지 않은 트랜잭션은 ROLLBACK됩니다.
- 현재 데이터베이스에 연결된 사용자가 해제되는 것을 기다리지 않고 즉시 데이터베이스를 중지합니다.
- 실행중인 트랜잭션은 ROLLBACK이되고 연결된 사용자는 모두 해제됩니다.
- 그리고 다시 데이터베이스를 시작할 때 인스턴스 복구 절차가 필요 없습니다.
STARTUP 명령에 MOUNT 절을 지정하면 데이터베이스를 마운트하고 오픈하지 않은 상태에서 인스턴스를 시작할 수 있습니다. 오픈하지 않은 상태는 특정 유지 보수 작업을 수행 할 수 있다는것을 의미합니다.
- 다음 명령을 명령 프롬프트창에서 실행하여 파일을 D:드라이브로 이동합니다.
D:\> move c:\app\oracle\oradata\orcl\SYSTEM01.DBF d:\app\oracle\oradata\orcl\SYSTEM01.DBF
1개 파일을 이동했습니다.
D:\> move C:\app\oracle\oradata\orcl\UNDOTBS01.DBF d:\app\oracle\oradata\orcl\UNDOTBS01.DBF
1개 파일을 이동했습니다.
- 다음 명령으로 등록된 데이터파일의 이동 전의 파일 경로를 이동 후의 파일 경로로 변경합니다.
SQL> ALTER DATABASE RENAME FILE 'c:\app\oracle\oradata\orcl\SYSTEM01.DBF' TO 'd:\app\oracle\oradata\orcl\SYSTEM01.DBF';
데이터베이스가 변경되었습니다.
SQL> ALTER DATABASE RENAME FILE 'c:\app\oracle\oradata\orcl\UNDOTBS01.DBF' TO 'd:\app\oracle\oradata\orcl\UNDOTBS01.DBF';
데이터베이스가 변경되었습니다.
- 다음 명령으로 데이터베이스를 OPEN상태로 변경합니다.
SQL> ALTER DATABASE OPEN;
데이타베이스가 변경되었습니다.
- 다음과 같이 D:드라이브로 이동되었음을 확인 할 수 있습니다.
SQL> COLUMN tablespace_name format A15;
COLUMN file_name format A40;
COLUMN status format A10;
select file_name, tablespace_name, status from dba_data_files;
FILE_NAME TABLESPACE_NAME STATUS
---------------------------------------- --------------- ----------
D:\APP\ORACLE\ORADATA\ORCL\SYSTEM01.DBF SYSTEM AVAILABLE
D:\APP\ORACLE\ORADATA\ORCL\SYSAUX01.DBF SYSAUX AVAILABLE
D:\APP\ORACLE\ORADATA\ORCL\UNDOTBS01.DBF UNDOTBS1 AVAILABLE
D:\APP\ORACLE\ORADATA\ORCL\USERS01.DBF USERS AVAILABLE
- 다은 유저로 문제없이 접속되는지를 확인합니다.
D:\>sqlplus system/password
SQL*Plus: Release 12.2.0.1.0 Production on 토 10월 16 23:45:53 2021
Copyright (c) 1982, 2016, Oracle. All rights reserved.
마지막 성공한 로그인 시간: 월 7월 26 2021 02:42:26 +09:00
다음에 접속됨:
Oracle Database 12c Standard Edition Release 12.2.0.1.0 - 64bit Production
D:\>sqlplus scott/tiger
SQL*Plus: Release 12.2.0.1.0 Production on 토 10월 16 23:46:04 2021
Copyright (c) 1982, 2016, Oracle. All rights reserved.
마지막 성공한 로그인 시간: 토 10월 16 2021 23:44:07 +09:00
다음에 접속됨:
Oracle Database 12c Standard Edition Release 12.2.0.1.0 - 64bit Production