테이블스페이스 이름 , 용량 , 데이터파일 위치 조회
(기본 테이블 스페이스 조회 명령어)

select tablespace_name , bytes/1024/1024 MB , file_name

from dba_data_files ;



◆각 datafile 실제사용량 조회 쿼리

select distinct d.file_id   file#,
     d.tablespace_name          ts_name,
     d.bytes /1024 /1024        MB,
     d.bytes / 8192             total_blocks,
     sum(e.blocks)              used_blocks,
to_char( nvl( round( sum(e.blocks)/(d.bytes/8192), 4),0) *100,'09.99') || ' %' pct_used
     from dba_extents e , dba_data_files d
     where d.file_id = e.file_id(+)
     group by d.file_id , d.tablespace_name , d.bytes
     order by 1,2 ;

◆ 수동으로 Tablespace 에 Data File 추가하는 명령어

alter tablespace 이름
add datafile '/app/oracle/oradata/testdb/name.dbf' size 20M ;

◆크기 수동 증가

alter database datafile '/app/oracle/oradata/testdb/name.dbf' resize 20M ;

◆ 크기 자동 증가

alter database datafile '/app/oracle/oradata/testdb/name.dbf' autoextend on ;

◆ 체크포인트SCN 조회쿼리

select a.file# , a.ts# , b.name , a.status , a.checkpoint_change#
from v$datafile a , v$tablespace b
where a.ts# = b.ts# ;

◆ Tablespace 이름 , 용량 , Datafile 위치 , 크기자동증가 , 온라인

select tablespace_name , bytes/1024/1024 MB , file_name , autoextensible "Auto" , online_status
from dba_data_files;


Check Point

1. 테이블 스페이스 offline 에서 online 변경 시에는 

   alter system checkpoint; 를 통해 SCN 을 맞춰야한다. 

2. 현재 쓰고있는 파일의 경로를 옮기면 안된다.(startup 단계별 쓰이는 파일 확인 점검)

◆ 데이터파일 경로와 온/오프라인 상태 확인 명령어

select file# , name , status from v$datafile;

Tablespace offline

1. alter tablespace haksa offline;


2. alter tablespace haksa offline temporary;
-> dbf 한놈 고장났을때, rm으로 지우면 안된다.


3. alter database datafile '/app/oracle/oradata/testdb/haksa01.dbf' offline (archive log mode)


alter database datafile '/app/oracle/oradata/testdb/haksa01.dbf'
offline drop; (no archive log mode)

 

※ immediate; 옵션 -> 작업 대기하지않고 오프라인.

※ recover tablespace haksa;

Date File 이동


1. 해당 Tablespace Offline ! 사용하지 않게

2. Data file 을 대상 위치로 복사

3. 컨트롤 파일 내의 해당 Datafile 경로변경

4. 해당 테이블스페이스 온라인 상태로 변경

offline 안되는 데이터파일 옮기기 

◆ 오프라인 불가능한 3가지

1. system tablespace
2. 사용중인 undo tablespace
3. default temporary tablespace

◆순서

1. DB종료 shutdown immediate;

2. 마운트 상태로 시작 startup mount;

3. Datafile 복사

4. 컨트롤파일 경로수정

5. DB 오픈

Redo log file 이동하기!

현재상태 먼저 확인

col member for a50

select a.group# , a.member , b.bytes/1024/1024 MB , b.archived , b.status
from v$logfile a , v$log b
where a.group#=b.group#
order by 1,2;

마운트 상태로 스타트업

!mkdir /app/oracle/disk4
!mkdir /app/oracle/disk5


select member from v$logfile;


!cp /app/oracle/oradata/testdb/redo01.log /app/oracle/disk4/redo01_a.log


!cp /app/oracle/oradata/testdb/redo02.log /app/oracle/disk4/redo02_a.log


!cp /app/oracle/oradata/testdb/redo03.log /app/oracle/disk4/redo03_a.log


alter database rename
file '/app/oracle/oradata/testdb/redo01.log'
to '/app/oracle/disk4/redo01_a.log';

alter database rename
file '/app/oracle/oradata/testdb/redo02.log'
to '/app/oracle/disk4/redo02_a.log';

alter database rename
file '/app/oracle/oradata/testdb/redo03.log'
to '/app/oracle/disk4/redo03_a.log';

select member from v$logfile;

alter database add logfile member
'/app/oracle/disk5/redo01_b.log' to group 1,
'/app/oracle/disk5/redo02_b.log' to group 2,
'/app/oracle/disk5/redo03_b.log' to group 3;

select member from v$logfile;

Tablespace 삭제


drop tablespace haksa;


★table 이 하나라도 있으면 삭제 안됨.

drop tablespace haksa including contents and datafiles;

select tablespace_name , bytes/1024/1024 MB , file_name
from dba_data_files;

연습문제) pfile 을 이용하여 다음과같이 이동시키세요

/app/oracle/disk1/control01.ctl , redo01_a.log , redo02_a.log , redo03_a.log

/app/oracle/disk2/control02.ctl , redo01_b.log , redo02_b.log , redo03_b.log

/app/oracle/disk3/control03.ctl , undo01.dbf

/app/oracle/disk4/system01.dbf , sysaux01.dbf

/app/oracle/disk5/users01.dbf , example01.dbf

현재 상태확인 (spfile, pfile)

show parameter pfile;
show parameter spfile;

* VALUE 에 값이 나오면 spfile 사용중인것이다.

create pfile from spfile;

spfile 을 삭제하고 DB를 껐다가 켜서 pfile 을 사용하여 오픈되는지 확인한다.

shutdown immediate;

startup

show parameter pfile;

*VALUE 값이 없으면 pfile 사용중인것.


오픈이 잘 된다면 정상적으로 적용된 것이다.

현재 사용중인 컨트롤파일을 조회한다.

select name from v$controlfile;

현재위치는 다음과 같이 확인된다.

NAME

/home/oracle/data/disk1/control01.ctl
/home/oracle/data/disk2/control02.ctl
/home/oracle/data/disk3/control03.ctl

컨트롤파일을 이동을위해 DB를 꺼준다.

shutdown immediate;

vi 에디터로 pfile 을 열어 controlfile 경로를 수정한다.

!vi $ORACLE_HOME/dbs/inittestdb.ora

원하는 경로로 수정 후 현재 사용중인 컨트롤파일을 이동할 경로로 복사해준다.

경로에 폴더가 존재해야한다. (먼저만들기)

cp /home/oracle/data/disk1/control01.ctl /app/oracle/disk1/control01.ctl

cp /home/oracle/data/disk1/control01.ctl /app/oracle/disk2/control02.ctl

cp /home/oracle/data/disk1/control01.ctl /app/oracle/disk3/control03.ctl

startup 후, 정상 오픈되는지 확인한다.

오픈 후 바뀐 경로로 정상 적용되었는지 확인.

select name from v$controlfile;


NAME

/app/oracle/disk1/control01.ctl
/app/oracle/disk2/control02.ctl
/app/oracle/disk3/control03.ctl

여기까지 컨트롤 파일 이동 완료.

다음으로 데이터파일 , 리두로그파일을 이동시키기 위해 마운트상태로 다시 startup 한다.

shutdown immediate;

startup mount;


SYS>select status from v$instance;

STATUS

MOUNTED

1. 데이터파일 옮기기

2. 데이터파일의 현재경로 확인

select name from v$datafile;

NAME

/app/oracle/disk3/system01.dbf
/app/oracle/oradata/testdb/sysaux01.dbf
/app/oracle/oradata/testdb/undotbs01.dbf
/app/oracle/oradata/testdb/users01.dbf
/app/oracle/oradata/testdb/example01.dbf
/app/oracle/oradata/testdb/hakjum01.dbf

이동시킬 디렉토리로 카피 

!cp /app/oracle/disk3/system01.dbf /app/oracle/disk4/

!cp /app/oracle/oradata/testdb/sysaux01.dbf /app/oracle/disk4/

!cp /app/oracle/oradata/testdb/undotbs01.dbf /app/oracle/disk3/undo01.dbf

!cp /app/oracle/oradata/testdb/users01.dbf /app/oracle/disk5/

!cp /app/oracle/oradata/testdb/example01.dbf /app/oracle/disk5/

경로수정

alter database rename
file '/app/oracle/disk3/system01.dbf'
to '/app/oracle/disk4/system01.dbf' ;

alter database rename
file '/app/oracle/oradata/testdb/sysaux01.dbf'
to '/app/oracle/disk4/sysaux01.dbf' ;

alter database rename
file '/app/oracle/oradata/testdb/undotbs01.dbf'
to '/app/oracle/disk3/undo01.dbf' ;

alter database rename
file '/app/oracle/oradata/testdb/users01.dbf'
to '/app/oracle/disk5/users01.dbf' ;

alter database rename
file '/app/oracle/oradata/testdb/example01.dbf'
to '/app/oracle/disk5/example01.dbf' ;

바뀐 경로 확인

select name from v$datafile;

NAME

/app/oracle/disk4/system01.dbf
/app/oracle/disk4/sysaux01.dbf
/app/oracle/disk3/undo01.dbf
/app/oracle/disk5/users01.dbf
/app/oracle/disk5/example01.dbf
/app/oracle/oradata/testdb/hakjum01.dbf

리두로그파일 이동시키기

현재위치 : select member from v$logfile;

MEMBER

/app/oracle/disk4/redo03_a.log
/app/oracle/disk4/redo02_a.log
/app/oracle/disk4/redo01_a.log
/app/oracle/disk5/redo01_b.log
/app/oracle/disk5/redo02_b.log
/app/oracle/disk5/redo03_b.log

 이동시킬 위치

/app/oracle/disk1 redo01_a.log , redo02_a.log , redo03_a.log
/app/oracle/disk2 redo01_b.log , redo02_b.log , redo03_b.log

파일복사

!cp /app/oracle/disk4/redo01_a.log /app/oracle/disk1/redo01_a.log

!cp /app/oracle/disk4/redo02_a.log /app/oracle/disk1/redo02_a.log

!cp /app/oracle/disk4/redo03_a.log /app/oracle/disk1/redo03_a.log

!cp /app/oracle/disk5/redo01_b.log /app/oracle/disk2/redo01_b.log

!cp /app/oracle/disk5/redo02_b.log /app/oracle/disk2/redo02_b.log

!cp /app/oracle/disk5/redo03_b.log /app/oracle/disk2/redo03_b.log

경로변경

alter database rename
file '/app/oracle/disk4/redo01_a.log'
to '/app/oracle/disk1/redo01_a.log' ;

alter database rename
file '/app/oracle/disk4/redo02_a.log'
to '/app/oracle/disk1/redo02_a.log' ;

alter database rename
file '/app/oracle/disk4/redo03_a.log'
to '/app/oracle/disk1/redo03_a.log' ;

alter database rename
file '/app/oracle/disk5/redo01_b.log'
to '/app/oracle/disk2/redo01_b.log' ;

alter database rename
file '/app/oracle/disk5/redo02_b.log'
to '/app/oracle/disk2/redo02_b.log' ;

alter database rename
file '/app/oracle/disk5/redo03_b.log'
to '/app/oracle/disk2/redo03_b.log' ;

select member from v$logfile;

MEMBER

/app/oracle/disk1/redo03_a.log
/app/oracle/disk1/redo02_a.log
/app/oracle/disk1/redo01_a.log
/app/oracle/disk2/redo01_b.log
/app/oracle/disk2/redo02_b.log
/app/oracle/disk2/redo03_b.log

변경완료!

DB 오픈시켜 확인

SYS>alter database open;

Database altered.

SYS>select name from v$controlfile;

NAME

/app/oracle/disk1/control01.ctl
/app/oracle/disk2/control02.ctl
/app/oracle/disk3/control03.ctl

SYS>select name from v$datafile;

NAME

/app/oracle/disk4/system01.dbf
/app/oracle/disk4/sysaux01.dbf
/app/oracle/disk3/undo01.dbf
/app/oracle/disk5/users01.dbf
/app/oracle/disk5/example01.dbf
/app/oracle/oradata/testdb/hakjum01.dbf

6 rows selected.


SYS>select member from v$logfile;

MEMBER

/app/oracle/disk1/redo03_a.log
/app/oracle/disk1/redo02_a.log
/app/oracle/disk1/redo01_a.log
/app/oracle/disk2/redo01_b.log
/app/oracle/disk2/redo02_b.log
/app/oracle/disk2/redo03_b.log

6 rows selected.

끝!


 

'Oracle Admin' 카테고리의 다른 글

Control File 관리  (0) 2015.04.02
data file , redo log file , control file 이동 간단정리  (0) 2015.04.02
pfile , spfile 생성 및 관리  (0) 2015.03.30
Oracle Background Process  (0) 2015.03.29
SQL 문장의 실행원리  (0) 2015.03.29

설정

트랙백

댓글