2014. 3. 4. 18:56

[Oracle] 테이블 스페이스 용량/사용량 산출

// TABLESPACE_NAME 별로 합처리

 

SELECT  SUBSTR(A.TABLESPACE_NAME,1,30) TABLESPACE,
              ROUND(SUM(A.TOTAL1)/1024/1024,1) "TOTALMB",
              ROUND(SUM(A.TOTAL1)/1024/1024,1)-ROUND(SUM(A.SUM1)/1024/1024,1) "USEDMB",
              ROUND(SUM(A.SUM1)/1024/1024,1) "FREEMB",
              ROUND((ROUND(SUM(A.TOTAL1)/1024/1024,1)-ROUND(SUM(A.SUM1)/1024/1024,1))

              /ROUND(SUM(A.TOTAL1)/1024/1024,1)*100,2) "USED%"
  FROM
             (SELECT  TABLESPACE_NAME,0 TOTAL1,SUM(BYTES) SUM1,MAX(BYTES) MAXB,

                            COUNT(BYTES) CNT
                 FROM  DBA_FREE_SPACE
               GROUP  BY TABLESPACE_NAME
              UNION
              SELECT  TABLESPACE_NAME,SUM(BYTES) TOTAL1,0,0,0
                 FROM  DBA_DATA_FILES
               GROUP  BY TABLESPACE_NAME) A
GROUP BY A.TABLESPACE_NAME
ORDER BY TABLESPACE;

 

 

// 전체 합처리

 

SELECT  ROUND(SUM(A.TOTAL1)/1024/1024/1024,1) "TOTALGB",
              ROUND(SUM(A.TOTAL1)/1024/1024/1024,1)-ROUND(SUM(A.SUM1)/1024/1024/1024,1) "USEDGB",
              ROUND(SUM(A.SUM1)/1024/1024/1024,1) "FREEGB",
              ROUND((ROUND(SUM(A.TOTAL1)/1024/1024,1)-ROUND(SUM(A.SUM1)/1024/1024,1))

              /ROUND(SUM(A.TOTAL1)/1024/1024,1)*100,2) "USED%"
  FROM
             (SELECT  TABLESPACE_NAME,0 TOTAL1,SUM(BYTES) SUM1,MAX(BYTES) MAXB,

                            COUNT(BYTES) CNT
                 FROM  DBA_FREE_SPACE
               GROUP BY TABLESPACE_NAME
              UNION
              SELECT  TABLESPACE_NAME,SUM(BYTES) TOTAL1,0,0,0
                 FROM  DBA_DATA_FILES
               GROUP BY TABLESPACE_NAME) A

 

 

2013. 2. 7. 11:35

[Oracle] 테이블 하나만 복원하기

imp userid/userpass file = data_bak.dmp fromuser = kice tables = (PRGVER)

=> imp 유저아이디/패스워드 file = 덤프파일이름 fromuser = 덤프테이블유저이름 tables = ( 필요한테이블 여러개일때에는 , 로 )

 

복원할 테이블은 삭제해두어야 한다. 그렇지 않으면 이미 있는 객체라고 해서 오류 발생.

 

임시테이블 하나 만들어 놓고 복원할 테이블 DROP.

 

CREATE TABLE PRGVER_T AS ( SELECT * FROM PRGVER );

 

DROP TABLE PRGVER;

 

 

'Database / Sql' 카테고리의 다른 글

[Oracle] ROLLUP, GROUPING SETS  (0) 2013.02.13
[Oracle] Session Timeout  (0) 2013.02.08
[Oracle] SID와 Service Name의 차이  (0) 2013.01.25
[Oracle] ROWID 구성  (0) 2013.01.03
클러스터인덱스와 비클러스터인덱스 차이  (0) 2013.01.03
2012. 12. 3. 15:36

[Oracle] 10g 공간 줄일수 있는 테이블 찾기와 Shrink 실행하기

 기존에는 테이블을 새로 작성(reorg)  작업을 통해 커진 테이블 스페이스 크기를 복구 가능하였으나 10g 부터는 Shrink 기능을 이용하여 손쉽게 테이블을 줄일수 있게 되었다.

Shrink 기능은 HWM(High Water Mark)를 줄일수 있는 기능이다.


- 사전 확인 사항

init.ora 파일내에 compatible = 10.2 이상인것을 확인

ASSM (Automatic Segment Space Management) 테이블 스페이스여만 가능

각 테이블 조회 방법은

 

SELECT OBJ.OWNER
           , OBJ.TABLE_NAME, OBJ.TABLESPACE_NAME
           , (CASE WHEN NVL(IDX.CNT, 0) < 1 THEN 'YES' ELSE 'NO' END) SHRINKABLE
   FROM DBA_TABLES OBJ,
             (SELECT TABLE_NAME, COUNT(ROWNUM) CNT
                 FROM DBA_INDEXES
               WHERE INDEX_TYPE LIKE 'FUN%'
               GROUP BY TABLE_NAME) IDX
 WHERE OBJ.TABLE_NAME = IDX.TABLE_NAME(+)
     AND OBJ.TABLESPACE_NAME = :TABLESPACE_NAME;

 

쿼리를 통해 (테이블 스페이스 명을 인자값으로) 확인 가능하다.

 

 

1. 테이블 검색 방법

SELECT * FROM TABLE(DBMS_SPACE.ASA_RECOMMENDATIONS());

아래와 같이 테이블의 DBA_SEGMENTS에서 볼수 있는 크기와 축소 가능 크기가 조회된다.

 

SEGMENT_OWNER | SEGMENT_NAME | SEGMENT_TYPE | PARTITION_NAME |

ALLOCATED_SPACE | USED_SPACE | RECLAIMABLE_SPACE
MAX_TI | SMR_IF_LOG       | TABLE  | | 6761793074 | 5910149080 | 851643994
MAX_TI | SMR_IF_LOG_I01 | INDEX  | |   478455081 |   420139142 | 58315939
MAX_TI | SMR_IF_LOG_I02 | INDEX  | |   411921243 |   398204079 | 13717164

 


2. 축소하기

가장 먼저 행들을 이동 가능하도록 변경한다.

위의 SMR_IF_LOG 테이블을 기준으로 설명하겠다.

ALTER TABLE SMR_IF_LOG ENABLE ROW MOVEMENT;

--> 반대로는 ALTER TABLE SMR_IF_LOG DISABLE ROW MOVEMENT; 이다..

이제 SHRINK 기능을 수행할수 있으며, 다음 3가지 형태로 가능하다

 

① ALTER TABLE SMR_IF_LOG SHRINK SPACE
    -- SMR_IF_LOG 테이블의 공간만 TABLESPACE로 환원

 

② ALTER TABLE SMR_IF_LOG SHRINK SPACE CASCADE;
    -- 모든 관련 OBJECT까지 TABLESPACE으로 공간 환원

 

③ ALTER TABLE SMR_IF_LOG SHRINK SPACE COMPACT;
   -- 행들만 이동시킴.

 

 

※ SHRINK 를 적용 시킬  없는 테이블
UNDO segments
temporary segments
clustered tables
tables with a column of datatype LONG
LOB indexes
IOT mapping tables and IOT overflow segmnets
tables with MVIEWS with ON COMMIT
tables with MVIEWS which are based on ROWIDs.

 

 

[출처] 웹 개발과 관련된 모든 것들 (http://web-dev.tistory.com/116)

 

 

2010. 10. 20. 18:31

[MSSQL] 테이블 복사

select * into [생성될 테이블명] from [원본테이블명]


select * into [생성될 테이블명] from [원본테이블명] where'1'='2' ;
(데이터 없이 테이블 구조만 복사)

select * into [생성될 테이블명] from [원본테이블명] where'1'='1 ;
(데이터까지 복사)

단, 제약조건이나 Identity 정보는 복사되지 않는다.

'Database / Sql' 카테고리의 다른 글

[MSSQL] 날짜 함수  (0) 2010.11.30
[Oracle] 9i 이상에서 컬럼명 변경  (0) 2010.11.11
[Oracle] 다른 테이블 조인해서 UPDATE 하기  (0) 2010.09.05
[Oracle] TOAD 기본 단축키  (0) 2010.08.05
[Oracle] PL/SQL  (0) 2010.06.29