[Oracle  TABLE SIZE 및 INDEX SIZE(크기) 계산]

 

1. TABLE SIZE 계산 공식(ORACLE BLOCK SIZE : 2K 로 가정)

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

   $ sqlplus scott/tiger

     SQL> SELECT   GREATEST(4, ceil(ROW_COUNT /

                 ((round(((1958 - (initrans * 23)) *

                 ((100 - PCTFREE) /100)) / ADJ_ROW_SIZE)))) * BLOCK_SIZE)

                 TableSize_Kbytes

        FROM dual;

 

   *. 한 개의 BLOCK에 Available 한 Bytes - 1958

   *. 각 initrans 는 23 Bytes

   *. PCT_FREE : Table 의 pctfree 값(default 10)

   *. ADJ_ROW_SIZE : 각 row 의 평균 SIZE 추정치

   *. ROW_COUNT : table 의 row 의 갯수

   *. BLOCK_SIZE : 1 block의 크기 (단위: K)

 

예) table 이름이 EMP 일 경우

 

ROW_COUNT : select count(*) from emp;

 

ADJ_ROW_SIZE :

 analyze table emp compute statistics;

 (또는 건수가 매우 많을 때에는 compute 대신 estimate 사용)

 select avg_row_len

 from user_tables

 where table_name='EMP';

 

 

 

2. INDEX SIZE 계산 공식

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

   SQL> SELECT   GREATEST(4, (1.01) * ((ROW_COUNT /

                 ((floor(((2048 - 113 - (initrans * 23)) *

                 (1 - (PCTFREE/100))) /

                 ((10 + uniqueness) + number_col_index +

                 (total_col_length)))))) * DB_BLOCK_SIZE))

                 IndexSize_Kbytes

        FROM dual;

 

   *. 한 개의 block에 available 한 bytes ( 1935 or 2048 - 113 )

   *. 각 initrans 는 23 Bytes

   *. ROW_COUNT : table 의 row 의 갯수

   *. PCTFREE : Index 의 pctfree 값(default 10)

   *. number_col_index : Index 에서 column 의 수

   *. total_col_length : Index 의 길이 추정치

   *. uniqueness : 만일 unique index 이면 1, non-unique index 이면 0.

   *. DB_BLOCK_SIZE : 1 block의 크기 (단위: K)

 

 

'(DB) Oracle > Table' 카테고리의 다른 글

Oracle - Table Foreign Key Stop/Start  (0) 2017.01.21
Oracle - Table foreign key  (0) 2017.01.21
Oracle - Tablespace  (0) 2017.01.21
Oracle - Table  (0) 2017.01.21
Posted by 농부지기
,

Oracle - Table

(DB) Oracle/Table 2017. 1. 21. 14:49

 

 [ 테이블 DROP시 휴지통 기능 ]

 

1. 정의 : 테이블을 삭제 하면 오라클도 휴지통을 만들어 놓았다.

2. oracle 10g부터 존재

3. table을 drop 하면 : [ BIN$H+0On1PSLBbgRACAFyioeA==$0 ] 와 같은 형식의 테이블이 생성된다.

4. 휴지통 비우기
     SQL> purge recyclebin;                        사용자의 휴지통 비우기
     SQL> purge dba_recyclebin;                 휴지통내의 모든 놈들 비우기
     SQL> purge tablespace users;              users테이블스페이스의 휴지통 비우기
     SQL> purge table "휴지통내의 이름" ;    휴지통의 하나의 객체만 제거시

6. 휴지통 기능을 enable/disable 상태 확인 및 처리 방법

    상태확인 : SQL>  SELECT a.ksppinm, b.ksppstvl, b.ksppstdf 
                    FROM x$ksppi a, x$ksppcv b WHERE a.indx = b.indx AND a.ksppinm like '%recycle%'
                    ORDER BY a.ksppinm;

     처리방법 : * 10g Release1 의 경우
                                  SQL> ALTER SYSTEM SET "_recyclebin"=FALSE SCOPE = BOTH;

                    * 10g Release2 의 경우 (R2는 default 값이 ON 이므로 OFF 로 만들어 버린다.)
                                  SQL> ALTER SESSION SET recyclebin = OFF;
                                  SQL> ALTER SYSTEM SET recyclebin = OFF;

 7. 휴지통: drop된 DB객체들을 아래의 상황이전까지 보유한다.
                - purge명령으로 영구히 삭제
                - undrop명령으로 drop된 객체를 복구
                - 테이블스페이스내 (휴지통의) 공간이 부족할때
                - 테이블스페이스가 extend될 때

8. 휴지통에 들어있는 객체들 보기
      user_recyclebin
      dba_recyclebin

9. 휴지통의 객체 복구
         SQL> flashback table "휴지통내의 이름" to before drop;
    예) SQL>flashback table "BIN$VPaE9OG4Qwa+KC0MesYKqw==$0" to before drop;

10. 휴지통에 넣지 않고 drop
      SQL> drop table 테이블명 purge;

11.

 

'(DB) Oracle > Table' 카테고리의 다른 글

Oracle - Table Foreign Key Stop/Start  (0) 2017.01.21
Oracle - Table foreign key  (0) 2017.01.21
Oracle - Tablespace  (0) 2017.01.21
Oracle - Table_및_Index_Size계산  (0) 2017.01.21
Posted by 농부지기
,

[ Oracle - Trigger 확장 ]

 

Posted by 농부지기
,