본문 바로가기

교육/Oracle

Day 49 (DB)

반응형

<목차>

1. LIST방식 파티션 구현

  1) 명령어

  2) 실습과정

 

2. 서브쿼리를 이용한 DML, DDL

  1) 테이블 생성

  2) 데이터 삽입


1. LIST방식 파티션 구현

 

  1) 명령어

SELECT owner, table_name, partitioned FROM dba_tables
WHERE OWNER = '<스키마명>';
// 해당 스키마의 테이블들의 파티션 여부를 출력한다.

SELECT owner, name, column_name
FROM dba_part_key_columns
WHERE owner = '<스키마명>' and name = '<스키마명>';
// 해당 스키마 파티션의 키가 되는 열을 출력한다.

SELECT table_owner, table_name, partition_name, high_value, tablespace_name
FROM dba_tab_partitions
WHERE table_owner = '<스키마명>' and table_name = '<테이블명>';
// 해당 스키마 파티션의 키 값을 출력한다.

SELECT owner, segment_name, partition_name, tablespace_name, extent_id, bytes, blocks
FROM dba_extents
WHERE OWNER = '<스키마명>' and segment_name = '<세그먼트명>';
// 해당 스키마 파티션이 저장된 세그먼트의 정보를 출력한다.

CREATE TABLE <스키마.테이블명>(
...
constraint 제약조건명 primary key(컬럼명) // primary key 제약조건을 설정한다.
using index tablespace <인덱스테이블명> // 인덱스로 사용할 테이블 스페이스를 설정한다.
)
partition by list (컬럼명)
(
partition <파티션명> VALUES ('<데이터값>') tablespace <테이블스페이스명>
...
); // LIST방식의 파티션을 생성한다.

INSERT INTO <스키마.테이블1명>
SELECT * FROM <스미카.테이블2명>;
// 테이블1에 테이블2의 데이터를 복사한다. 데이터 타입이 일치해야하며 복사할 열을 선택할 수 있다.

ALTER TABLE <스키마.테이블명>
ADD PARTITION <파티션명> VALUE ('<데이터값>') TABLESPACE <테이블스페이스명>;
// LIST방식의 파티션을 추가한다. 

ALTER TABLE <스키마.테이블명>
DROP PARTITION <파티션명>; // 파티션을 삭제한다.

ALTER INDEX <스키마.제약조건명> REBUILD; // 인덱스 정보를 갱신한다.

 

  2) 실습과정

    실습 : LIST방식의 파티션을 구성하라.

  ma_ch ma_ph ma_all ma_so
키값 화학 물리 생물, 식영, 유공 사회
테이블 st.st
테이블 스페이스 t1 t2 t3 t1

 

더보기
테이블 스페이스 정보를 확인하고 실습에서 사용할 테이블 스페이스를 생성한다.
생성된 테이블 스페이스 정보를 확인한다.
스키마가 테이블 스페이스에 대한
LIST방식의 파티션을 가지는 테이블을 생성한다. 
글자형식이 맞지 않아 맵핑이 되지 않는다.
스크립트를 작성하고 실행하면 적용된다.
st.st테이블에 st.student적용이 끝난 결과 출력화면이다.
테이블의 파티션여부를 확인한다.
파티션의 키 값과 소유 스키마를 확인하고 파티션의 정보와 파티션이 사용하는 테이블스페이스 정보를 출력한다.
파티션의 세그먼트 정보를 확인한다.
키값에 위배되는 파티션은 생성및 추가가 불가능하다.
처음 테이블이 잘못작성되어 삭제 했으나 PURGE RECYCLEBIN을 하지 않아 쓰레기 값이 출력된다.
테이블 소유 스키마는 st이기 때문에 st계정으로 접속후 PURGE RECYCLEBIN를 해주어야 쓰레기 값이 삭제된다.
쓰레기 값을 삭제 한 후 인덱스를 재정렬한다.

2. 서브쿼리를 이용한 DML, DDL

 

  1) 테이블 생성

CREATE TABLE <테이블명> [(컬럼, 컬럼, ...)]
AS ( SELECT 문장 : 서브쿼리); 

// 서브쿼리문의 결과를 테이블로 생성한다. 데이터 타입과 길이는 서브쿼리에 따라 결정된다. 컬럼리스트와 서브쿼리 컬럼은 반드시 1:1대응된다. 컬럼명이 없으면 서브쿼리에서 출력되는 헤더를 컬럼명으로 사용한다. 서브쿼리에 계산식이나 함수를 사용하는 경우에는 반드시 생성할 테이블에서 컬럼명을 정의 하거나 별병을 사용해야한다.

 

2) 데이터 삽입

INSERT INTO <테이블명> [(컬럼, 컬럼, ...)]
SELECT 문장;

// 서브쿼리에 검색된 행을 입력값으로 사용한다. 한번에 많은 행을 입력할 수 있다. 하지만 commit해야 하기 때문에 많은 트랜잭션이 발생해서 많이 사용하지는 않는다. 컬럼리스트와 selec문의 컬럼이 1:1대응이 되어야한다.
반응형

'교육 > Oracle' 카테고리의 다른 글

Day 51 (오라클 기초구성 3 & 4)  (0) 2020.01.31
Day 50 (DB 파티션)  (0) 2020.01.30
Day 48 (오라클 기초구성2)  (0) 2020.01.28
Day 48 (DB)  (0) 2020.01.28
Day 46 (DB_인덱스)  (0) 2020.01.22