반응형

오늘은 오라클 DML을 병렬처리 하는 기술인 Parallel 힌트에 대해 알아보려고 합니다.

 

parallel 힌트란?

하나의 DML을 여러개의 쓰레드에 분산하여 병렬처리하는 기술이다.

하나의 코어로 처리하던 SQL을 여러개의 코어로 처리하기 때문에

시간은 훨씬 단축된다는 장점이 있어 대용량의 데이터 처리시 사용된다.

 

하지만, 그만큼 시스템 자원을 많이 쓰기 때문에 주의해서 사용해야 한다.

 

사용방법

1. 사용 전 해당 Session에 대해 Parallel DML을 Enable 시키는 명령어 수행

alter session enable parallel dml;

 

2. 다음과 같이 DML 수행

select /*+ parallel(A,4) */ from tmp A;

위의 쿼리처럼,

/*+ parallel(테이블, 코어수) */ 힌트를 쿼리문 사이에 넣어주면 된다.

이 때, 코어수를 생략하면 기본값으로 설정된다.

 

다음과 같이도 사용할 수 있다.

delete /*+ parallel(tmp) */ from tmp where v = 'abc';

디폴트 값은, 시스템마다 다르게 설정되어 있으므로 따로 확인을 해야한다.

 

insert와 update 문도 똑같이 수행할 수 있다.

insert /*+ parallel(tmp, 8) */ into tmp
select /*+ parallel(emp, 8) */ * from emp;

update /*+ parallel(tmp, 16) */ tmp set v = 'abc';

 

주의사항

update, delete, merge는 non-partitioned table에서는 parallel 로 수행되지 않는다.

 

 

지금까지, 오라클의 Parallel(병렬처리) 힌트에 대해 알아보았습니다.

 

긴 글 읽어주셔서 감사합니다!

반응형
반응형

오늘은 오라클 DB의 테이블 사이즈를 조회 하는 방법과

인덱스 사이즈 그리고 1Row 별 사이즈 까지 조회하는 방법에 대해 알아보겠습니다.

 

1. 테이블 사이즈 조회

아래 쿼리는 소유자 별로 소유한 테이블들의 사이즈를 조회하는 쿼리이다.

SELECT owner, segment_name, segment_type, sum(bytes)/1024/1024 as MB
FROM dba_segments
WHERE segment_type='TABLE'
AND owner = '소유자명'
GROUP BY owner, segment_name, segment_type
ORDER BY MB desc;

 

ex) 쿼리 조회 결과

OWNER SEGMENT_NAME SEGMENT_TYPE MB
HONGCODING MY_TABLE1 TABLE 43215
HONGCODING MY_TABLE2 TABLE 32541
HONGCODING MY_TABLE3 TABLE 1790
HONGCODING MY_TABLE4 TABLE 521

 

또는 아래와 같은 쿼리로도 조회가 가능하다.

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 = '소유자명'
GROUP BY A.SEGMENT_NAME, A.SEGMENT_TYPE
ORDER BY 2 DESC;

 

2. 인덱스 사이즈 조회

방법은 위의 2번 방법과 굉장히 유사하다.

쿼리의 TABLE을 넣는 자리에 INDEX를 넣으면 된다.

SELECT A.SEGMENT_NAME, ROUND(SUM(A.BYTES)/1024/1024) "SIZE_MB", A.SEGMENT_TYPE
FROM DBA_SEGMENTS A, DBA_INDEXES B
WHERE A.SEGMENT_NAME = B.INDEX_NAME
AND A.SEGMENT_TYPE IN ('INDEX', 'INDEX PARTITION')
AND A.OWNER = '소유자명'
GROUP BY A.SEGMENT_NAME, A.SEGMENT_TYPE
ORDER BY 2 DESC;

 

ex) 쿼리 조회 결과

SEGMENT_NAME SIZE_MB SEGMENT_TYPE
MY_INDEX1 3512 INDEX
MY_INDEX2 2140 INDEX
MY_INDEX3 520 INDEX

 

3. 테이블 1Row 사이즈 조회

아래 쿼리는 테이블 별로 각 1Row 의 사이즈를 조회하는 쿼리이다.

select table_name, sum(data_length) byte
from all_tab_columns
where owner = '소유자명'
group by table_name
order by byte desc;

해당 결과로

1 Row 사이즈 * Row 수 를 계산하여

새로 넣을 데이터의 총 크기도 알 수가 있겠죠?

 

이렇게 오늘은

테이블 사이즈를 조회하는 방법과

인덱스 사이즈를 조회하는 방법,

테이블 별 1Row 의 사이즈를 조회하는 방법에 대해 알아보았습니다.

 

긴 글 읽어주셔서 감사합니다!

반응형
반응형

오늘은 오라클 DB의 테이블을 변경하는 방법에 대해 알아보겠습니다.

 

테이블을 변경할 때는

ALTER TABLE 라는 명령어를 사용하게 됩니다.

 

ALTER TABLE [테이블명] 이 기본 구조이고

그 뒤에, 컬럼을 수정하거나 삭제하느냐에 따라 MODIFY 명령어를 붙이느냐, ADDDROP 등을 붙이느냐가 달라집니다.

 

그럼 하나씩 차례대로 알아봅시다!

 

테이블 컬럼 추가

먼저 테이블에 컬럼을 추가하는 방법입니다.

추가는 ADD 명령어를 이용하여 다음과 같이 작성하면 됩니다.

 

ALTER TABLE [테이블명] ADD 컬럼명 데이터타입(길이);

ALTER TABLE User ADD USER_ID VARCHAR2(15);

위 예시는 User라는 테이블에 USER_ID라는 컬럼을 VARCHAR2(15) 타입으로 설정하여 추가한 쿼리입니다.

 

테이블 컬럼 수정

테이블의 컬럼을 수정할 때에는

MODIFY 명령어를 이용하여 다음과 같이 작성합니다.

 

ALTER TABLE [테이블명] MODIFY [컬럼명] [데이터타입(길이)];

 

이 때, 컬럼의 데이터 타입을 변경할건지, 아니면 컬럼의 길이를 변경할건지에 따라

각각 상황에 맞게 입력해주면 됩니다.

 

ALTER TABLE User MODIFY User_NAME VARCHAR2(10);

위 예시는 User 테이블의 User_NAME 컬럼의 데이터타입을 VARCHAR2로 길이는 10으로 변경한 쿼리 입니다.

 

테이블 컬럼명 변경

테이블의 컬럼명을 변경할 때에는

RENAME COLUMN 명령어를 이용하여 다음과 같이 작성합니다.

 

ALTER TABLE [테이블명] RENAME COLUMN [변경전 컬럼명] TO [변경후 컬럼명];

ALTER TABLE User RENAME COLUMN User_Password TO User_Pw;

위 예시는 User 테이블의 User_Password 라는 컬럼의 이름을 User_Pw로 변경한 쿼리입니다.

 

테이블 컬럼 삭제

테이블의 특정 컬럼을 삭제하고 싶을 때에는

DROP COLUMN 명령어를 이용하여 다음과 같이 작성합니다.

 

ALTER TABLE [테이블명] DROP COLUMN [삭제할 컬럼명];

ALTER TABLE User DROP COLUMN User_Name;

위 예시는 User 테이블에 존재하는 User_Name이라는 컬럼을 삭제하는 쿼리입니다.

 

컬럼 기본값 및 NULL 설정 변경

컬럼의 기본값이나 Null 설정을 변경할 때에는

컬럼을 수정할 때와 마찬가지로 MODIFY 명령어를 사용하게 됩니다.

 

[테이블 기본값 설정]

ALTER TABLE User MODIFY User_NAME VARCHAR2(15) DAFAULT 'KIM';

 

[테이블 기본값 삭제]

ALTER TABLE User MODIFY User_NAME DEFAULT NULL;

 

 

[테이블 NOT NULL 설정]

ALTER TABLE User MODIFY User_id VARCHAR(10) NOT NULL;

 

[테이블 NOT NULL 제거]

ALTER TABLE User MODIFY User_id VARCHAR2(10) NULL;

 

[기본값 + NULL 설정]

ALTER TABLE USER MODIFY User_id VARCHAR2(10) DEFAULT 'kim' NOT NULL;

 

주의사항

위의 방법대로 컬럼의 길이(크기)를 변경한다거나, 데이터 타입을 변경할 때 오류가 발생할 수 있습니다.

 

① 컬럼의 크기를 변경하는 경우에는,

기존 데이터 중 바꿀 크기보다 큰 데이터가 있다면 오류가 발생할 수 있는데

이 때는 그러한 데이터가 있는지 확인을 하고 바꾸어야 합니다.

 

[바꿀 크기가 10인데 10보다 큰 데이터가 있는지 확인하는 쿼리]

SELECT * FROM User
WHERE length(User_Name) > 10;

 

 

② 데이터 타입을 변경하는 경우에는,

해당 컬럼의 데이터를 모두 비워야 변경이 가능합니다.

 

그러기 위해서는,

임시로 temp컬럼을 하나 생성해준 다음

temp컬럼에 잠시 데이터를 옮겨놓고

원래 컬럼의 데이터를 모두 비운 후에 데이터 타입을 변경하고

temp컬럼의 데이터들을 다시 원래 컬럼으로 옮겨주면 됩니다.

 

 

오늘은 이렇게 오라클 테이블을 수정하는 방법에 대해 알아보았습니다.

 

테이블을 생성하고 나면 중간에 테이블을 변경해야 할 일이 많을텐데,

이러한 방법을 잘 숙지하셨다가 수정하시면 좋을 것 같습니다.

 

오늘도 긴 글 읽어주셔서 감사합니다.

반응형
반응형

오늘은

SQL에서 테이블 생성과 생성후에 기본키를 지정하고, 코멘트를 붙이는 방법에 대해 알아보겠습니다.

 

먼저, 테이블을 생성하는 기본적인 구성과 방법에 대해 알아보겠습니다.

 

테이블 생성

먼저, 명령어와 구성은 다음과 같습니다.

Create TABLE 테이블명
(
	컬럼명1	데이터타입		기본값(생략O) 	NULL여부(생략O)
    	컬럼명2	데이터타입		기본값(생략O)	NULL여부(생략O)
        ...
 );

컬럼명에는 컬럼 이름을 입력하면 되고,

데이터타입에는 NUMBER(4), VARCHAR2(10), int, DATE 등의 데이터 타입을 입력합니다.

기본값에는 DEFAULT 100과 같이 기본값으로 지정해줄 값을 입력하면 되며(생략가능)

NULL여부에는 NOT NULL과 같이 NULL 허용 여부를 지정합니다(기본은 NULL허용이며 생략시 NULL 허용)

 

 

그럼 위의 방법을 이용해 테이블을 한번 생성해봅시다!

CREATE TABLE User
(
	id		int			not null,
        name	VARCHAR2(10),
        nickname	VARCHAR2(10),
        age		int,
        address 	char(25)
 );

위 코드는

User라는 이름의 테이블을 생성한 것이며

컬럼은 id, name, nickname, age, address로 구성되어 있습니다.

 

id의 자료형은 int형이고 null을 허용하지 않습니다. 기본값은 입력하지 않았으므로 기본값 입력은 되지 않습니다.

name의 자료형은 VARCHAR2(10)이고 기본값은 X, NULL은 허용 입니다.

아래 자료형들도 마찬가지로 구성되어 있습니다.

 

 


기본키 추가

이렇게 테이블을 생성하고 나면, PK(Primary Key 기본키) 구성을 해야합니다.

 

기본키를 구성하는 방법에는 두가지가 있습니다.

① 따로 제약조건으로 추가하는 방법(ALTER)

② 테이블 생성시 지정하는 방법(CREATE TABLE)

 

먼저, 따로 제약조건을 주어 지정하는 방법을 알아보겠습니다.

 

기본적인 명령어는 다음과 같습니다.

ALTER TABLE [테이블명] ADD CONSTRAINT [제약조건명] PRIMARY KEY ([컬럼명1,컬럼명2...])

 

이를 위의 테이블에 적용하면 다음과 같이 작성할 수 있습니다.

ALTER TABLE USER ADD CONSTRAINT pk_id PRIMARY KEY(id)

 

 

이번에는 테이블 생성시 지정하는 방법입니다.

 

다음과 같이 기본키로 지정하고자 하는 컬럼의 뒤에 primary key를 붙일 수도 있고

CREATE TABLE User
(
	id		int			not null	primary key,
        name	VARCHAR2(10),
        nickname	VARCHAR2(10),
        age		int,
        address 	char(25)
 );

 

다음과 같이 

CONSTRAINTS [제약조건명] PRIMARY KEY(컬럼명1, 컬럼명2...) 으로 설정하는 방법이 있습니다.

CREATE TABLE User
(
	id		int			not null,
        name	VARCHAR2(10),
        nickname	VARCHAR2(10),
        age		int,
        address 	char(25),
        CONSTRAINTS pk_id PRIMARY KEY(id)
 );

코멘트 생성

이번에는 코멘트를 지정하는 방법에 대해 알아보겠습니다.

코멘트는 말 그대로, 부가 설명에 해당합니다.

 

내가 만든 테이블이나 컬럼에 대해 부가설명을 붙이고 싶을 때 사용하며 필수는 아닙니다.

 

기본적인 명령어 구성은 다음과 같습니다.

COMMENT ON TABLE [테이블명] IS '코멘트';

COMMENT ON COLUMN [컬럼명] IS '코멘트';

 

이를 실제에 적용해보면,

COMMENT ON TABLE USER IS '회원정보';
COMMENT ON COLUMN User.id IS '회원아이디';

이렇게 각각 테이블과 컬럼에 적용할 수 있습니다.

 

오늘은 이렇게 테이블의 생성과 기본키 지정, 그리고 코멘트 작성방법 까지 알아보았습니다.

다음에는 테이블의 수정/삭제 및 인덱스에 대해 알아보겠습니다.

 

긴 글 읽어주셔서 감사합니다!

https://github.com/HongEunho

 

HongEunho - Overview

📖 Android, Java, Kotlin, Algorithm, Clean Architecture - HongEunho

github.com

 

반응형

+ Recent posts