데이터베이스

[ORACLE] MOUNT 상태에서 data file 이동하기

화이트해커 Luna 🌙 2022. 11. 18. 07:34
728x90
반응형

데이터 파일(Data Files)

데이터 파일은 실제 데이터가 저장되는 하드디스크상의 물리적인 파일이다. 물리적이란 말은 데이터베이스를 위해 할당된 공간을 의미하는데, 오라클은 생성과 동시에 크기를 할당받게된다. 테이블이나 인덱스같은 데이터베이스의 논리적인 구조들은 이 공간에 저장된다. 오라클 시스템이 관리하기때문에 운영체제레벨로 생성이나 삭제할 수 없지만, 읽기전용 테이블스페이스의 테이블은 삭제할 수 있다.

-목차-
1. 계획
2. 실습
3. 확인

1. 계획

MOUNT 상태에서 data file을 disk3으로 옮긴다.

실습 목표
SYSAUX /app/ora19c/oradata/disk3/sysaux01.dbf
SYSTEM /app/ora19c/oradata/disk3/system01.dbf
UNDOTBS1 /app/ora19c/oradata/disk3/undotbs01.dbf
USERS /app/ora19c/oradata/disk3/users01.dbf
TEMP /app/ora19c/oradata/disk3/temp01.dbf

실습 순서
1. DB SHUTDOWN
2. DATA FILE 이동
3. DB MOUNT
4. RENAME
5. DB OPEN


2. 실습

DB SHUTDOWN
SQL> SHUTDOWN IMMEDIATE
Database closed.
Database dismounted.
ORACLE instance shut down.

system이나 undo용 테이블스페이스는 OPEN상태에서 offline되지 않기에 CLOSE상태에서 테이블스페이스를 이동해야 한다.


DATA FILE 이동
SQL> !mv /app/ora19c/oradata/DB19/sysaux01.dbf /app/ora19c/oradata/disk3/
SQL> !mv /app/ora19c/oradata/DB19/system01.dbf /app/ora19c/oradata/disk3/
SQL> !mv /app/ora19c/oradata/DB19/undotbs01.dbf /app/ora19c/oradata/disk3/
SQL> !mv /app/ora19c/oradata/DB19/temp01.dbf /app/ora19c/oradata/disk3/

데이터파일을 !mv명령어로 옮긴다.


DB MOUNT
SQL> STARTUP MOUNT
ORACLE instance started.

Total System Global Area  763359832 bytes
Fixed Size                  8901208 bytes
Variable Size             532676608 bytes
Database Buffers          218103808 bytes
Redo Buffers                3678208 bytes
Database mounted.

데이터베이스를 마운트까지만 STARTUP 한다.


RENAME
SQL> SELECT t.name tablespace_name, d.bytes, d.name file_name
  2  FROM v$tablespace t, v$datafile d
  3  WHERE t.ts#=d.ts#
  4  ORDER BY 1;

TABLESPACE_NAME                     BYTES          FILE_NAME
--------------------------------------------------------------------------------
SYSAUX                                  0  /app/ora19c/oradata/DB19/sysaux01.dbf

SYSTEM                                  0  /app/ora19c/oradata/DB19/system01.dbf

UNDOTBS1                                0  /app/ora19c/oradata/DB19/undotbs01.dbf


USERS                             5242880  /app/ora19c/oradata/disk3/users01.dbf

데이터파일은 이동했지만 오라클은 모르고있는 상태다. 이럴 땐 파일에 리네임을 해주어야 한다.

SQL> ALTER DATABASE RENAME file
  2  '/app/ora19c/oradata/DB19/sysaux01.dbf'
  3  TO '/app/ora19c/oradata/disk3/sysaux01.dbf';

Database altered.

SQL> ALTER DATABASE RENAME file
  2  '/app/ora19c/oradata/DB19/system01.dbf'
  3  TO '/app/ora19c/oradata/disk3/system01.dbf';

Database altered.

SQL> ALTER DATABASE RENAME file
  2  '/app/ora19c/oradata/DB19/undotbs01.dbf'
  3  TO '/app/ora19c/oradata/disk3/undotbs01.dbf';

Database altered.

SQL> ALTER DATABASE RENAME file
  2  '/app/ora19c/oradata/DB19/temp01.dbf'
  3  TO '/app/ora19c/oradata/disk3/temp01.dbf';

Database altered.

ALTER DATABASE RENAME으로 /app/ora19c/oradata/DB19/ *.dbf파일경로를 /app/ora19c/oradata/disk3/*.dbf로 수정해준다.

SQL> SELECT t.name tablespace_name, d.bytes, d.name file_name
  2  FROM v$tablespace t, v$datafile d
  3  WHERE t.ts#=d.ts#
  4  ORDER BY 1;

TABLESPACE_NAME                     BYTES          FILE_NAME
--------------------------------------------------------------------------------
SYSAUX                          608174080  /app/ora19c/oradata/disk3/sysaux01.dbf
SYSTEM                          943718400  /app/ora19c/oradata/disk3/system01.dbf
UNDOTBS1                        361758720  /app/ora19c/oradata/disk3/undotbs01.dbf
USERS                             5242880  /app/ora19c/oradata/disk3/users01.dbf

잘 수정되었다. 1장에서 계획한대로 결과물이 나왔다.


SQL> SELECT t.name tablespace_name, d.bytes,d.name file_name
  2  FROM v$tablespace t, v$tempfile d
  3  WHERE t.ts#=d.ts#
  4  ORDER BY 1;

TABLESPACE_NAME                     BYTES          FILE_NAME
--------------------------------------------------------------------------------
TEMP                            136314880  /app/ora19c/oradata/disk3/temp01.dbf

9i버전부터는 temporary tablespace의 파일은 data file이 아니라 temp file로 관리하게 되었다.


DB OPEN
SQL> SELECT name FROM v$controlfile;

NAME
--------------------------------------------------------------------------------
/app/ora19c/oradata/disk4/control.ctl
/app/ora19c/oradata/disk5/control.ctl

SQL> SELECT member FROM v$logfile;

MEMBER
--------------------------------------------------------------------------------
/app/ora19c/oradata/disk4/redo01.log
/app/ora19c/oradata/disk5/redo01.log
/app/ora19c/oradata/disk4/redo02.log
/app/ora19c/oradata/disk5/redo02.log
/app/ora19c/oradata/disk4/redo03.log
/app/ora19c/oradata/disk5/redo03.log

6 rows selected.

SQL> !rm -rf /app/ora19c/oradata/DB19

SQL>  !ls /app/ora19c/oradata/
disk1  disk2  disk3  disk4  disk5

SQL> ALTER DATABASE OPEN;

Database altered.

datafile이외의 컨트롤 파일이나 리두 로그 파일이 어디에 위치하는지 확인하고 불필요한 DB19디렉토리를 삭제한다.


3. 확인


SQL> SELECT t.name tablespace_name, d.bytes, d.name file_name
  2  FROM v$tablespace t, v$datafile d
  3  WHERE t.ts#=d.ts#
  4  ORDER BY 1;

TABLESPACE_NAME                     BYTES          FILE_NAME
--------------------------------------------------------------------------------
SYSAUX                          608174080  /app/ora19c/oradata/disk3/sysaux01.dbf

SYSTEM                          943718400  /app/ora19c/oradata/disk3/system01.dbf

UNDOTBS1                        361758720  /app/ora19c/oradata/disk3/undotbs01.dbf

USERS                             5242880  /app/ora19c/oradata/disk3/users01.dbf


728x90
반응형