ORACLE/ADMIN2009. 9. 15. 14:13
반응형
------------------------------------------------------------------------
ㅁ초기 size는 400k 공간, 필요시 다음번 400kb 증가하고 그 다음에는
size가 자동으로 증가하여 최대 10m 까지 사용할 수 있는 데이블스페이스 생성
------------------------------------------------------------------------
create tablespace tbs_02
datafile 'tbs_02.dat' size 400k
Autoextend on next 400k maxsize 10m;

select tablespace_name, file_name , bytes, blocks, status, autoextensible
from dba_data_files
where tablespace_name='TBS_02';

------------------------------------------------------------------------
ㅁ 전체 size 는 10mb 이고 공간이 더 필요할 경우 모든 extent 는 128kb로 증가
------------------------------------------------------------------------
create tablespace tbs_03
datafile 'c:\oradata\tbs_03.dbf' size 10m
extent management local
uniform size 128k;

------------------------------------------------------------------------
ㅁ 자동으로 segment 공간을 관리해주는 테이블 스페이스 생성 ==> 사용권장
------------------------------------------------------------------------
CREATE TABLESPACE auto_seg_ts
DATAFILE 'C:\ORADATA\auto_seg_ts.dbf' SIZE 1M
EXTENT MANAGEMENT LOCAL ----------> coalesce 작업필요없다.
SEGMENT SPACE MANAGEMENT AUTO ; ----------> latch 획득 필요 없다.

------------------------------------------------------------------------
ㅁ OMF 테이블 스페이스 생성
------------------------------------------------------------------------
select value from v$parameter where name='db_create_file_dest';
===> Data file 이 생성되는 목적지

alter system set db_create_file_dest='c:\oradata' scope=spfile;
===> Data file 이 생성되어지는 목적지 변경

SQL> shutdown immediate
SQL> startup

SQL> create tablespace omf_ts1;
===>'db_create_file_dest' 에 설정한 경로에 size가 무제한 자동으로 증가하는
100MB의 Data File이 랜덤한 이름으로 생성되어짐.

SQL> select file_name, tablespace_name, bytes, autoextensible
from dba_data_files
where tablespace_name='OMF_TS1';

SQL> create tablespace omf_ts2 datafile autoextend off; (100m차면 끝.. 자동증가 없음)
SQL> drop tablespace omf_ts1 including contents and datafiles;
====> 테이블스페이스 와 포함된 object그리고 os상 파일까지 모두 삭제


=================================
테이블스페이스 공간조회 스크립트
=================================

-------------------------------------------------------------------
accept v_tbsname prompt '테이블스페이스명: '
set verify off

select A.totbytes, A.totblocks, B.freebytes, B.freeblocks,
A.totbytes - B.freebytes "Usedbytes",
A.totblocks - B.freeblocks "Usedblocks"
from
(select tablespace_name,
sum(bytes) totbytes, sum(blocks) totblocks
from dba_data_files
where tablespace_name=upper('&v_tbsname')
group by tablespace_name
) A,
(select tablespace_name,
sum(bytes) freebytes, sum(blocks) freeblocks
from dba_free_space
where tablespace_name=upper('&v_tbsname')
group by tablespace_name
) B
where A.tablespace_name = B.tablespace_name
/

set verify on

------------------------------------------------------------------


=====================================
Tablespace 에 Datafile 추가
=====================================

=== 테이블 스페이스 생성 ===
SQL> create tablespace test1
datafile 'C:\oracle\oradata\ddba120\test1.dbf' size 1m
extent management local
segment space management auto;


=== 테이블 스페이스 남은 공간 보기 ===
select * from dba_free_space
where tablespace_name = 'TEST1';

==== 어느 블럭에 테이블이 쓰이나? ====

SELECT segment_name , extent_id, block_id, bytes, blocks
from dba_extents
where owner='SCOTT'
AND segment_name in ('EMP2','EMP3','EMP4','EMP5','EMP6','EMP7','EMP8');

[테이블스페이스 공간이 없을때 할 수 있는 작업]---------------------

[1방법] 데이타 파일을 추가 (권장)
alter tablespace test1
add datafile 'C:\oracle\oradata\ddba120\test11.dbf' size 1M;

[2방법] 용량을 늘린다.
alter database datafile
'C:\oracle\oradata\ddba120\test11.dbf' resize 2m;
--------------------------------------------------------------------------

===== 현재 segments를 사용중인 tablespace 검색해보자 =====

SELECT distinct tablespace_name from dba_segments;

--> 방금 생성한 test1 테이블 스페이스는 없다
--> 왜? 테이블이나 인덱스 같은 segments를 생성하지 않아서


select * from dba_tablespaces;

--> 테이블 스페이스가 모두 보여진다.

--------------------------------------------------------------
그럼~ 테이블 스페이스중에 object가 한개도 없는 것을 찾으려면
--------------------------------------------------------------

select tablespace_name
from dba_tablespaces
minus ================> 차집합
select distinct tablespace_name
from dba_segments;


=================================
Tablespace의 Online/Offline 설정
=================================


SQL> SELECT tablespace_name, status from dba_tablespaces;
TABLESPACE_NAME STATUS
------------------------------ ---------
SYSTEM ONLINE ---> 읽고 쓰기 가능 DML가능!
UNDOTBS1 ONLINE


==== 해당 테이블이 저장되는 테이블 스페이스 ====

SQL> select tablespace_name from dba_tables
where table_name ='DEPT' AND OWNER='SCOTT';

TABLESPACE_NAME
------------------------------
SYSTEM


===== 테이블스페이스 offline만들기 ======
SQL> create table scott.dept2
tablespace users
as
select * from scott.dept;

SQL> alter tablespace users offline;

SQL> select tablespace_name, status from dba_tablespaces; --> 상태조회
SQL> select * from scott.dept;
==> 실행 가능

SQL> select * from scott.dept2;
==> 실행 거부 왜? offline이니까


===== 테이블스페이스 read only 만들기 ======
SQL> alter tablespace users online;
SQL> alter tablespace users read only;
==> select만 되어진다.


===== 테이블스페이스 read write만들기 ======
SQL> alter tablespace users read write;
==> 다시 online으로 복귀

---> 해당 유저의 기본테이블 스페이스 보기

select default_tablespace
from dba_users
where username = 'SCOTT';

---> 기본 테이블스페이스 변경

alter user scott
default tablespace system;
(변경되어질 테이블스페이스)

=========================
데이타 파일 이동
=========================

Users Tablespace의 C:\oracle\oradata\ddba120\users01.dbf를
D:\로 이동시키고자 한다.


SQL> create table scott.kh
(name varchar2(20));
SQL> insert into scott.kh values('송파교육원');
SQL> alter tablespace users offline; --> offline으로 우선 만든다

SQL> alter tablespace users
rename datafile 'C:\oracle\oradata\ddba120\USERS01.DBF'
to 'D:\ORADATA2\USERS01.DBF';
---> 변경할 위치를 적어주죠~~!!!

SQL> alter tablespace users online;
SQL> select tablespace_name, status from dba_tablespaces;
--> online/offline 상태조회

SQL> select tablespace_name, file_name, status from dba_data_files
where tablespace_name='USERS' ;
--> 데이타파일 상태조회

------------------
USERS
D:\ORADATA2\USERS01.DBF
AVAILABLE


---------------------------------------------------
---- 다시 원상복귀 그러나 다른 밥법!!! 기대하시랏!!!----
---------------------------------------------------

SQL> SHUTDOWN IMMEDIATE
'D:\ORADATA2\USERS01.DBF' 있는 것을 잘라내서
'C:\oracle\oradata\ddba120\USERS01.DBF' 로 붙여넣기

SQL> startup mount

SQL> alter database
rename file 'D:\ORADATA2\USERS01.DBF'
to 'C:\oracle\oradata\ddba120\USERS01.DBF' ;

SQL> alter database open;

SQL> select tablespace_name, file_name, status from dba_data_files
where tablespace_name='USERS' ;

------------------
USERS
C:\ORACLE\ORADATA\DDBA120\USERS01.DBF
AVAILABLE

datafile 관리하기

1. Logical Database Structure
 

-Segement :  data, index, rollback, temporary
-보통 Oracle block=db_block 는 OS block 의 2배가 적당

2. SYSTEM and Non-SYSTEM Tablespace
   - SYSTEM Tablespace : data dictionary 정보, SYSTEM rollback segment
   - Non-SYSTEM Tablespace : Rollback segments, Temporary segments, App' data, App' index

3. CREATE TABLESPACE

   CREATE TABLESPACE tablespace
      DATAFILE filespec [autoextend_clause]
      [,       filespec [autoextend_clause]]...
      [MINIMUM EXTENT integer [K|M]]
      [DEFAULT storage_clause]
      [PERMANENT|TEMPOARY]    -- default PERMANENT
      [ONLINE|OFFLINE]        -- default ONLINE

   예) CREATE TABLESPACE app_data
       DATAFILE '/DISK4/app01.dbf' SIZE 100M,
                '/DISK5/app02.dbf' SIZE 100M
       MINIMUM EXTENT 500K
       DEFAULT STORAGE (INITIAL 500K NEXT 500K
                        MAXEXTENTS 500 PCTINCREASE 0) ;

   * Storage Parameters
     - INITIAL : first extent의 size를 정한다. 최소 size는 2blocks이다. (2 * DB_BLOCK_SIZE)
           default는 5 bolcks (5 * DB_BLOCK_SIZE)
     - NEXT : 다음 extent의 size를 정한다. 최소 size는 1block 이다.
           default는 5 bolcks (5 * DB_BLOCK_SIZE)
     - MINEXTENTS : segment가 생성되었을 때 할당된 extent의 갯수.
           default는 1
     - PCTINCREASE n : 다음에 extent가 생성될 때 이전 extent보다 n% 증가된 size (PCT: percent)
           default는 50
     - MAXEXTENTS : segment가 갖을 수 있는 extent의 최대 수

4. Temporary Tablespace
  
   CREATE TABLESPACE sort
   DATAFILE '/DISK2/sort01.dbf' SIZE 50M
   MINIMUM EXTENT 1M
   DEFAULT STORAGE (INITIAL 2M NEXT 2M
                    MAXEXTENTS 500 PCTINCREASE 0)
   TEMPORARY ;

5. Tablespace의 size 설정 (data file을 추가하면서...)

   ALTER TABLESPACE app_data
   ADD DATAFILE
       '/DISK5/app03.dbf' SIZE 200M ;

6. Data File이 꽉차면 자동으로 datafile을 증가하게 만드는 방법.

   ALTER TABLESPACE app_data
   ADD DATAFILE
       '/DISK6/app04.dbf' SIZE 200M
   AUTOEXTEND ON NEXT 10M
   MAXSIZE 500M ;

   * 3가지 방법이 있다.
     1) CREATE DATABASE
     2) CREATE TABLESPACE DATAFILE
     3) ALTER TABLESPACE ADD DATAFILE

7. 기존에 존재하는 datafile의 size를 resize하는 방법

   ALTER DATABASE DATAFILE
         '/DISK5/app02.dbf' RESIZE 200M ;

8. Changing the Storage Settings

   ALTER TABLESPACE app_data
   MINIMUM EXTENT 2M ;

   ALTER TABLESPACE app_data
   DEFAULT STORAGE
      (INITIAL 2M NEXT 2M
       MAXEXTENTS 999) ;

9. Tablespace OFFLINE/ONLINE
   - tablespace가 만들어지면 default가 ONLINE이다.
   - OFFLINE이 되면 다른 user의 access가 불가능하다.
   - SYSTEM tablespace는 OFFLINE이 불가!
   - transaction이 끝나지 않은 tablespace는 OFFLINE 불가!

   ALTER TABLESPACE tablespace
     { ONLINE | OFFLINE [NORMAL|TEMPORARY|IMMEDIATE] }
   - Normal : checkpoint를 적용시키고 offline한다.
   - Temporary : datafile 중에서 online datafile에만 checkpoint를 적용시키고 offline한다.
   - Immediate : checkpoint 없이 offline한다.

   예) ALTER TABLESPACE app_data OFFLINE ;

10. Moving Data File : ALTER TABLESPACE
   - 반드시 offline 한 상태에서 한다.
   - target data file이 반드시 존재해야 한다.

   ALTER TABLESPACE app_data
   RENAME DATAFILE '/DISK4/app01.dbf'
   TO              '/DISK5/app01.dbf' ;

11. Moving Data File : ALTER DATABASE
   - 반드시 database가 mount 상태여야 한다.
   - target data file이 반드시 존재해야 한다.
   - shutdown하고 host상태에서 datafile을 제거해야 한다.

   ALTER DATABASE RENAME FILE
         '/DISK1/system01.dbf' TO '/DISK2/system01.dbf' ;

12. READ-ONLY Tablespace 상태
   - 오직 select만 할 수 있다.
   - CREATE는 안되고... DROP은 할 수 있다.
   - user들이 data변경을 못하고, backup과 recovery가 쉽다.

   ALTER TABLESPACE app_data
   READ ONLY

   ALTER TABLESPACE app_data
   READ WRITE   -- read only 상태를 다시 read write상태로 바꿔준다.

   * 주의점!
     - tablespace가 반드시 online상태여야 한다.
     - active transaction이 허용되지 않아야 한다.
     - tablespace가 active rollback segment를 갖고 있으면 안된다.
     - online backup중엔 못한다.

13. DROP TABLESPACE
   - file 삭제는 host에 나가서 삭제를 해야 한다.

   DROP TABLESPACE app_data
   INCLUDING CONTENTS AND DATAFILES;
  
   * including contents를 안썼을 때, tablespace가 비워져 있어야만 drop이 된다.
     including contents는 데이터가 들어 있어도 tablespace를 삭제하겠다는 뜻이다.

14. DBA_TABLESPACES : tablespace 정보를 갖고 있다.
   - TABLESPACE_NAME, NEXT_EXTENT, MAX_EXTENTS, PCT_INCREASE, MIN_EXTLEN, STATUS, CONTENTS

   SVRMGR> SELECT tablespace_name, initial_extent, next_extent,
        2         max_extents, pct_increase, min_extlen
        3    FROM dba_tablespaces ;

15. DBA_DATA_FILES : file에 관한 정보를 갖고 있다.
   - FILE_NAME, TABLESPACE_NAME, BYTES, AUTOEXTENSIBLE, MAXBYTES, INCREMENT_BY

select file_name, tablespace_name, bytes,
autextensible, maxbytes, increment_by
FROM dba_data_files ;

16. Contol File 정보
   - V$DATAFILE : ts#, name, file#, rfile#, status, enabled, bytes, create_bytes
   - V$TABLESPACE : ts#, name

   SVRMGR> SELECT d.file#, d.name, d.status, d.enabled,
        2  d.bytes, d.create_bytes, t.name
        3  FROM v$datafile d, v$tablespace t
        4  WHERE t.ts#=d.ts# ;

17. Temp File Autoextend ON

- autoextend 설정 상태 확인

  SQL > select * from dba_temp_files;  -- temp tablespace


- autoextend on

  SQL > alter database tempfile 'D:\ORACLE\ORADATA\URISVC\LBS_TEMP.ORA' autoextend on next 100M;


데이터파일을 이용해 핫스팟 찾아내기

select name, phyrds, phywrts  from v$datafile a, v$filestat b   where a.file#=b.file#

데이블스페이스에 공간할당해도 extent가 안될 때

select tablespace_name, sum(bytes), max(bytes) from dba_free_space  group by tablespace_name;

데이터 파일 확인하는 법

테이블스페이스 정보

-          dba_tablespaces

-          v$tablespace

테이터 파일 정보

-          dba_data_files

-          v$datafile

임시 파일 정보

-          dba_temp_files

-          v$tempfile

-          

select file_name, tablespace_name, bytes from dba_data_files;


테이블스페이스에 데이터파일 크기 키우기

alter database

datafile ‘/oradata2/RMTESTDB/tools/tools01.dbf’ resize 500M;



--------------------------------------------------------------------------------

[ Lab ]


--------------------------------------------------------------------------------

1. 현재의 Tablespace와 Data file들을 확인하십시오.
$ sqlplus system/manager
SQL> select * from dba_tablespaces ;
SQL> select file_name, tablespace_name, bytes
  2  from dba_data_files ;
 
2. DATA01 tablespace의 size를 늘이기 위하여, datafile을 하나 더 추가하십시오.
SQL> alter tablespace data01
  2  add datafile '$ORACLE_HOME/DATA/DISK6/data01b.dbf' size 500k ;
SQL> select file_name, tablespace_nmae, bytes
  2  from dba_data_files ;
 
3. 문제2 에서 추가한 datafil의 size를 1M 로 resize 하십시오.
SQL> alter database datafile
  2  '$ORACLE_HOME/DATA/DISK6/data01b.dbf'
  3  resize 1M ;
SQL> select file_name, tablespace_name, bytes
  2  from dba_data_files ;
 
4. 문제2 에서 추가한 datafile의 size가 자동적으로 extend 될 수 있도록 하십시오.
SQL> alter database datafile
  2  '$ORACLE_HOME/DATA/DISK6/data01b.dbf'
  3  autoextend on next 100k maxsize 2m ;
SQL> select file_name, tablespace_name, bytes, autoextensible
  2  from dba_data_files ;
 
5. INDX01 tablespace의 datafile을 DISK6으로 옮기시오.
SQL> alter tablespace indx01 offline ;
SQL> select name, status from v$datafile ;
SQL> host
$ mv $ORACLE_HOME/DATA/DISK3/indx01.dbf $ORACLE_HOME/DATA/DISK6/indx01.dbf
$ exit
SQL> alter tablespace indx01 rename datafile
  2  '$ORACLE_HOME/DATA/DISK3/indc01.dbf'
  3  to
  4  '$ORACLE_HOME/DATA/DISK6/indx01.dbf' ;
SQL> alter tablespace indx01 online ;
SQL> select name, status from v$datafile ;

6. RONLY Tablespace를 read only로 바꾸고, 추가적인 테이블을 생성해 보십시오. 무슨 일이 발생하며 이유는 무엇입니까?
SQL> create table t1(t1 number) tablespace ronly ;
SQL> alter tablespace ronly read only ;
SQL> select name, enabled, status from v$datafile ;
SQL> create table t2(t2 number) tablespace ronly ;    ==> error 발생 확인!

7. RONLY Tablespace를 삭제하십시오.
SQL> drop tablespace ronly including contents ;
SQL> select * from v$tablespace ;
SQL> host

$ rm $ORACLE_HOME/DATA/DISK1/ronly.dbf

EX>
 

데이터 파일 추가

alter tablespace INDX1

add datafile '/oradata10/indx02.dbf'

size 2000M,

'/oradata10/indx03.dbf'

size 2000M,

'/oradata10/indx04.dbf'

size 2000M,

'/oradata10/indx05.dbf'

size 2000M;

alter tablespace H

add datafile ‘/oradata2/H2.dbf’

size 200M

alter tablespace I

add datafile ‘/oradata3/I2.dbf’

size 200M

alter tablespace J

add datafile ‘/oradata4/J2.dbf’

size 200M

alter tablespace K

add datafile ‘/oradata5/K2.dbf’

size 200M

alter tablespace L

add datafile ‘/oradata6/L2.dbf’

size 200M

alter tablespace M

add datafile ‘/oradata2/M2.dbf’

size 200M

alter tablespace N

add datafile ‘/oradata3/N2.dbf’

size 200M

alter tablespace O

add datafile ‘/oradata4/O2.dbf’

size 200M

alter tablespace P

add datafile ‘/oradata5/P2.dbf’

size 200M

alter tablespace Q

add datafile ‘/oradata6/Q2.dbf’

size 200M



TEMP TABLESPACE가 꽉 찾을 경우

/* 임시 테이블스페이스 TEMP9를 새로 만든다.  */

CREATE TEMPORARY TABLESPACE TEMP9 TEMPFILE
  'C:\ORACLE\ORADATA\JJUDB\TEMP09.DBF' SIZE 846M AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;

EX)

alter user JJU_POS temporary tablespace TEMP9;


select 'alter user '|| username||' temporary tablespace temp9;' from all_users;

/* 다음으로 기본 임시 테이블스페이스를 새로 만든걸로 바꿉니다.  */
alter database default temporary tablespace temp9;


drop tablespace temp including contents ;

--Oracle 9i 이상부터는 기본적으로 System tablespace는 LOCAL이다
--9i 이전은 DICTIONARY 이었다.

만일 기존 temp가 돌고 있는 경우...

오라클 내렸다 MOUNT 상태에서 DROP 하고 데이타베이스 OPEN한다.

SQL> startup mount
ORACLE 인스턴스가 시작되었습니다.

Total System Global Area  135338868 bytes
Fixed Size                   453492 bytes
Variable Size             109051904 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
데이터베이스가 마운트되었습니다.
SQL> alter database datafile 'C:\ORACLE\ORADATA\JJUDB\DATA\BSC_D.DBF' offline d
op ;

데이타베이스가 변경되었습니다.

SQL> drop tablespace bsc_i_ts ;
drop tablespace bsc_i_ts
*
1행에 오류:
ORA-01109: 데이터베이스가 개방되지 않습니다


SQL> alter database open ;

데이타베이스가 변경되었습니다.


default temporary tablespace 변경하기

No. 12096

(9I) DEFAULT TEMPORARY TABLESPACE의 개념과 사용 예제
===================================================

PURPOSE
-------

   Space Management와 관련된 Oracle 9i의 새로운 기능 중 Default
   Temporary Tablespace에 대하여 알아보기로 한다.


Explanation
-----------

데이터베이스 user를 생성할 때, 명시적으로 Temporary Tablespace를 지정하
지 않으면 기본적으로 SYSTEM 테이블스페이스가 할당되고, 모든 temporary
data는 이 SYSTEM 테이블스페이스에 저장된다. 9i에서는 데이터베이스 전체
에 걸쳐 사용될 Default Temporary Tablespace로 임의의 Temporary
Tablespace를 정의할 수 있다.

만일 별도의 Temporary Tablespace를 생성하고, 이를 Default Temporary
Tablespace로 지정하면 Temporary data를 저장할 공간으로 불필요하게
SYSTEM 테이블스페이스를 사용할 이유가 없게 된다. (데이터베이스 생성 시
정의할 수 있다.)
데이터베이스 운영 중 아래와 같이 동적으로 변경할 수 있으며, 이 경우 기
존 사용자의 Default Temporary Tablespace도 함께 변경이 된다.

SQL> ALTER DATABASE ora9i DEFAULT TEMPORARY TABLESPACE dts2;

Temporary type으로 만든 datafile은 dba_temp_files view를 보면 된다.


Restrictions on Default Temporary Tablespace
--------------------------------------------

­새로운 Default Temporary Tablespace가 가용하기 전에 기존 Default
Temporary Tablespace를 drop할 수 없다.

­Default Temporary Tablespace를 Permanent Tablespace로 변경할 수 없다.
Default Temporary Tablespace는 SYSTEM Tablespace이거나 Temporary Type
Tablespace이어야만 한다.

­Default Temporary Tablespace는 OFFLINE으로 변경될 수 없다.


Example
-------

As SYSTEM
- 원래대로 Default Temporary Tablespace를 SYSTEM으로 복원

SQL> alter database ora9i default temporary tablespace system;


- 데이터베이스 user 생성 시 Temporary Tablespace 확인:SYSTEM tablespace
  사용

SQL> create user omf_test identified by omf_test;

SQL> select username, temporary_tablespace from dba_users where
     username = 'OMF_TEST'

USERNAME                       TEMPORARY_TABLESPACE
------------------------------ ----------------------------------------
OMF_TEST                       SYSTEM


- Default Temporary Tablespace를 TEMP tablespace(temporary type)로
  변경 :
  기존 사용자(OMF_TEST)의 Temporary Tablespace가 SYSTEM에서 TEMP로 변경
  됨을 알 수 있다.

SQL> alter database ora9i default temporary tablespace temp;

SQL> select username, temporary_tablespace from dba_users where
     username = 'OMF_TEST'

USERNAME                       TEMPORARY_TABLESPACE
------------------------------ ----------------------------------------
OMF_TEST                       TEMP


- 이제는 데이터베이스 user를 생성할 때, Temporary Tablespace가 SYSTEM이
  아닌 TEMP가 됨을 확인

SQL> drop user omf_test;

SQL> create user omf_test identified by omf_test;

SQL> select username, temporary_tablespace from dba_users where
     username = 'OMF_TEST'

USERNAME                       TEMPORARY_TABLESPACE
------------------------------ ----------------------------------------
OMF_TEST                       TEMP

SQL> drop user omf_test;


Reference Documents
-------------------
<Note:138212.1>

<데이타 파일별 용량 확인 쿼리>

SELECT  SYSDATE "Check Time",
                  b.file_name "FILE_NAME",
                  b.tablespace_name "TABLESPACE_NAME",
                  TO_CHAR((b.bytes / 1024),'999,990,999') "TOTAL SIZE(KB)", -- 총 Bytes
                  TO_CHAR((((b.bytes - sum(nvl(a.bytes,0)))) / 1024),'999,990,999') "USED(KB)",
                  TO_CHAR(((sum(nvl(a.bytes,0))) / 1024),'999,990,999') "FREE SIZE(KB)",
                  TRUNC(((sum(nvl(a.bytes,0)) / (b.bytes)) * 100),2) "FREE %"
                  FROM DBA_FREE_SPACE a, DBA_DATA_FILES b
WHERE a.file_id(+) = b.file_id
GROUP BY b.tablespace_name, b.file_name, b.bytes
ORDER BY b.tablespace_name;

 
[출처 Bywoong Blog]
반응형
Posted by [PineTree]