Oracle 테이블스페이스 OFFLINE 또는 인스턴스 MOUNT상태에서 데이터 파일을 이동하기

Oracle DB

Oracle Database를 설치하고 기본 ORCL인스턴스를 생성하면 다음과 같이 C:드라이브의 C:\app\oracle\oradata\orcl 경로에 파일을 작성하기도 합니다.

그렇지만 C: 드라이브는 OS가 사용하는 영역입니다. Oracle 데이터의 용량 증가로 디스크의 여유공간이 줄어 OS기동에도 문제가 발생 할 수 있으므로 Oracle 데이터 파일을 같이 저장하는 것은 추천하지 않습니다.

Oracle 데이터 파일은 이동을 할 수 있습니다. 이 글에서는 Oracle 테이블스페이스 OFFLINE 또는 인스턴스 MOUNT상태에서 C: 드라이브에서 D: 드라이브로 Oracle 데이터 파일을 이동하는 방법을 소개합니다.

작업 환경

이동 대상파일 확인하기

  1. 다음 명령으로 이동하고 싶은 대상파일을 확인합니다.
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의 사용권한이 모든 권한 “허용” 으로 되어있음을 확인합니다.

  1. 데이터 파일을 관리하는 논리영역의 테이블스페이스를 확인합니다.
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
  1. 논리영역 테이블스페이스 상태를 확인합니다.
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 ~” 명령사용 이동

데이터파일 이동 절차는 다음과 같습니다.

  1. 이동 전 데이터파일을 관리하는 테이블스페이스를 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: 실행 취소 테이블스페이스를 오프라인으로 설정할 수 없음
  1. 명령 프롬프트창을 이용하여 파일을 이동합니다.

이동 전의 현재 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개 파일을 이동했습니다.
  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';
테이블스페이스가 변경되었습니다.
  1. 이동 후 데이터파일을 관리하는 테이블스페이스를 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;

시스템이 변경되었습니다.
  1. 다음과 같이 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 ~” 명령사용 이동

  1. 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 절을 지정하면 데이터베이스를 마운트하고 오픈하지 않은 상태에서 인스턴스를 시작할 수 있습니다. 오픈하지 않은 상태는 특정 유지 보수 작업을 수행 할 수 있다는것을 의미합니다.

  1. 다음 명령을 명령 프롬프트창에서 실행하여 파일을 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개 파일을 이동했습니다.
  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';
데이터베이스가 변경되었습니다.
  1. 다음 명령으로 데이터베이스를 OPEN상태로 변경합니다.
SQL> ALTER DATABASE OPEN;
데이타베이스가 변경되었습니다.
  1. 다음과 같이 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
  1. 다은 유저로 문제없이 접속되는지를 확인합니다.
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

인스턴스 MOUNT 상태에서 “ALTER TABLESPACE 이름 RENAME DATAFILE ~” 방법으로 모든 데이터 파일을 이동할 수 있습니다. 그렇지만 사용자가 작성한 데이터 파일만을 이동하려 한다면 테이블스페이스 OFFLINE상태에서 “ALTER DATABASE RENAME FILE ~”의 방법으로도 충분합니다.

제목과 URL을 복사했습니다