티스토리 뷰

남겨야 할 데이터가 지워야 할 데이터보다 훨씬(?) 작은 경우에 사용하는 방법으로~~ ^^;;;

임시테이블을 만들어서 남겨야 할 데이터를 복사하고,

이전테이블은 삭제하고, 임시테이블을 원래 테이블 이름으로 바꿔놓는 방법입니다.

<1. 오라클 테이블별 용량 조회하기>
SELECT A.SEGMENT_NAME,
              ROUND(SUM(A.BYTES)/1024/1024) "SIZE_MB",
              A.SEGMENT_TYPE
FROM DBA_SEGMENTS A, 
            DBA_TABLES B
WHERE A.SEGMENT_NAME = B.TABLE_NAME
      AND A.SEGMENT_TYPE IN ('TABLE','TABLE PARTITION')
      AND A.OWNER = 'dbName'
GROUP BY A.SEGMENT_NAME, A.SEGMENT_TYPE
ORDER BY 2 DESC;

<2. 테이블 일부 데이터 복사하면서 임시 테이블 만들기>
CREATE TABLE 새로만들테이블명 AS
SELECT * FROM 복사할테이블명 [WHERE 절]

<3. 테이블명 변경하기>
ALTER TABLE 구테이블명 RENAME TO 신테이블명

<참고>
--전체 건수 확인
select count(*) from OrgTableName;
--> 4156건

--남길 데이터 건수 확인
select count(*) from OrgTableName where WRITE_DATE > TO_DATE('150521','YYMMDD');
--> 681건

--일부데이터를 복사하면서 임시테이블 생성
create table OrgTableName2 AS 
select * from OrgTableName where WRITE_DATE > TO_DATE('150521','YYMMDD');

--임시테이블의 건수 확인
select count(*) from OrgTableName2 where WRITE_DATE > TO_DATE('150521','YYMMDD');
--> 681건

--기존테이블의 이름변경
ALTER TABLE OrgTableName RENAME TO OrgTableName_BAK;
ALTER TABLE OrgTableName2 RENAME TO OrgTableName;

--새로운 테이블의 전체 건수 확인
select count(*) from OrgTableName;
--> 681건

--primary key 연결 끊기
alter table OrgTableName_BAK 
drop constraint OrgTableName_PK;

--새로 만든 테이블에 primary key 연결해주기
ALTER TABLE OrgTableName ADD (
  CONSTRAINT OrgTableName_PK
 PRIMARY KEY
 ([primary key 필드들...])
    USING INDEX 
    TABLESPACE [tablespace name]
    PCTFREE    10
    INITRANS   2
    MAXTRANS   255
    STORAGE    (
                INITIAL          64K
                MINEXTENTS       1
                MAXEXTENTS       2147483645
                PCTINCREASE      0
               ));


댓글