๐Ÿšจ ๊ธด๊ธ‰์ •๋ฆฌ

jinsungยท2026๋…„ 3์›” 9์ผ

SQL

๋ชฉ๋ก ๋ณด๊ธฐ
46/46

๐Ÿšจ SQL ๊ธด๊ธ‰ ์ •๋ฆฌ

Undo Retention

ํŠธ๋žœ์žญ์…˜์ด ์™„๋ฃŒ๋œ ํ›„์— ๋ฐ”๋กœ Undo ๋ฐ์ดํ„ฐ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜์ง€ ๋ง์•„๋ผ๊ณ  ์˜ค๋ผํด์—๊ฒŒ ํžŒํŠธ๋ฅผ ์ฃผ๋Š” ๊ฒƒ

์Šฌ๋กฏ ITL -> ํŠธ๋žœ์žญ์…˜ ID, status, UBA(Undo Block Address), ์ปค๋ฐ‹ SCN(ํŠธ๋žœ์žญ์…˜ ์„ฑ๊ณต ์‹œ)
์Šฌ๋กฏ ๋ถ€์กฑ ํ•ด๊ฒฐ -> inittrans, maxtrans, pctfree

consistent ์ฝ๊ธฐ(select) = ๋…ผ๋ฆฌ์  ์ฝ๊ธฐ(cr) = query = consistent gets
current ์ฝ๊ธฐ(dml) = ๋ฌผ๋ฆฌ์  ์ฝ๊ธฐ(pr) = disk = db block gets
๋‹ค๋งŒ, ๊ฐฑ์‹ ํ•  ๋Œ€์ƒ ๋ ˆ์ฝ”๋“œ๋ฅผ ์‹๋ณ„ํ•˜๋Š” ์ž‘์—…๋งŒํผ์€ Consistent ๋ชจ๋“œ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค

autonomous ํŠธ๋žœ์žญ์…˜ - ๋ฉ”์ธ ํŠธ๋žœ์žญ์…˜๋ง๊ณ  ์„œ๋ธŒ ํŠธ๋žœ์žญ์…˜๋งŒ ๋”ฐ๋กœ ์ปค๋ฐ‹

ash = direct path i/o ๋ž‘ ํŠน์ง• ๊ฐ™์Œ (๋ž˜์น˜ ์ƒ๋žต, ๋„ˆ๋ฌด ๋น ๋ฆ„ ๋“ฑ)

result ์บ์‹œ์—์„œ ์ฟผ๋ฆฌ์ง‘ํ•ฉ์„ ์บ์‹ฑํ•˜์ง€ ๋ชป ํ•˜๋Š” ๊ฒฝ์šฐ

Dictionary ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ฐธ์กฐํ•  ๋•Œ
Temporary ํ…Œ์ด๋ธ”์„ ์ฐธ์กฐํ•  ๋•Œ
์‹œํ€€์Šค๋กœ๋ถ€ํ„ฐ CURRVAL, NEXTVAL Pseudo ์ปฌ๋Ÿผ์„ ์กฐํšŒํ•  ๋•Œ
์ฟผ๋ฆฌ์—์„œ SQL ์‹ค์‹œ๊ฐ„ ๋‚ ์งœ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ

result ์บ์‹ฑ ํžŒํŠธ - RESULT_CACHE

oracle 7i

rowid = ๋ธ”๋ก๋ฒˆํ˜ธ(8์ž๋ฆฌ) + ๋กœ์šฐ๋ฒˆํ˜ธ(4์ž๋ฆฌ) + ๋ฐ์ดํ„ฐํŒŒ์ผ๋ฒˆํ˜ธ(4์ž๋ฆฌ) => 6byte

oracle 8i

rowid = ๋ฐ์ดํ„ฐ์˜ค๋ธŒ์ ํŠธ๋ฒˆํ˜ธ(6์ž๋ฆฌ) + ๋ฐ์ดํ„ฐํŒŒ์ผ๋ฒˆํ˜ธ(3์ž๋ฆฌ) + ๋ธ”๋ก๋ฒˆํ˜ธ(6์ž๋ฆฌ) + ๋กœ์šฐ๋ฒˆํ˜ธ(3์ž๋ฆฌ) => 10byte

๋‘ ๊ฐœ ์ด์ƒ์˜ ์ธ๋ฑ์Šค๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉ

and-equal, index Combine, index join

์†์ต๋ถ„๊ธฐ์  ๊ทน๋ณต

IOT, ํด๋Ÿฌ์Šคํ„ฐ ํ…Œ์ด๋ธ”, ํŒŒํ‹ฐ์…”๋‹

Logical Rowid = PK + physical guess

์†ŒํŠธ๋จธ์ง€์กฐ์ธ

  • outer๋งŒ ๋ถ€๋ถ„๋ฒ”์œ„์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ (์ธ๋ฑ์Šค ์†ŒํŠธ์—ฐ์‚ฐ ์ƒ๋žต๊ฐ€๋Šฅ)

ํ•ด์‹œ์กฐ์ธ

  • probe inputs ๋งŒ ๋ถ€๋ถ„๋ฒ”์œ„์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

build inputs๊ฐ€ ์ปค์„œ ๋ฉ”๋ชจ๋ฆฌ ๋ฒ”์œ„ ์ดˆ๊ณผํ•  ๋•Œ

grace ํ•ด์‹œ์กฐ์ธ, hybrid ํ•ด์‹œ์กฐ์ธ, recursive ํ•ด์‹œ์กฐ์ธ, ๋น„ํŠธ ๋ฒกํ„ฐ ํ•„ํ„ฐ๋ง

์•„์šฐํ„ฐ ์กฐ์ธ์€ ํžŒํŠธ ์•ˆ ๋จนํž˜

ํ”„๋กœ์„ธ์Šค - PGA 1:1
์„ธ์…˜ - UGA 1:1

๋ณ‘๋ ฌ update ์‹œ qc ์œ„์— update ์˜คํผ๋ ˆ์ด์…˜ ์‹œ qc๊ฐ€ ์ฒ˜๋ฆฌ

์˜ตํ‹ฐ๋งˆ์ด์ € ํžŒํŠธ ์‹œ ์ฃผ์˜ ์‚ฌํ•ญ

  • ํžŒํŠธ ์‚ฌ์ด์— ์ฝค๋งˆ(,) ์‚ฌ์šฉ ๊ธˆ์ง€

  • ์Šคํ‚ค๋งˆ๋ช… ์‚ฌ์šฉ ๊ธˆ์ง€ (JI.EMP)

  • Alias ์ง€์ • ์‹œ ๋ฐ˜๋“œ์‹œ ์‚ฌ์šฉ

ํ•˜๋‚˜์˜ ๋ธ”๋ก์„ ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋ฌธ์ œ ๋ฐœ์ƒ
->๋ฒ„ํผ Lock์„ ํ†ตํ•ด ์ง๋ ฌํ™”, ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ฉด์„œ๋„ ์บ์‹œ ๊ฒฝํ•ฉ์„ ์ค„์ด๋ ค๋ฉด, SQL ํŠœ๋‹์„ ํ†ตํ•ด ์ฟผ๋ฆฌ ์ผ๋Ÿ‰ ์ž์ฒด๋ฅผ ์ค„์—ฌ์•ผํ•œ๋‹ค.

์„œ๋ธŒ์ฟผ๋ฆฌ ์กฐ์ธ (no_unnest = filter)

ํ•„ํ„ฐ ์˜คํผ๋ ˆ์ด์…˜ = Nested Loops ์™€ ๊ฐ™์€ ์›๋ฆฌ๋กœ ์ž‘๋™
๋ถ€๋ถ„๋ฒ”์œ„์ฒ˜๋ฆฌ๋„ ๊ฐ€๋Šฅ

-> ๋‹ค๋ฅธ์ ์€

  1. ํ•„ํ„ฐ ์˜คํผ๋ ˆ์ด์…˜์€ ๋ฉ”์ธ์ฟผ๋ฆฌ์˜ ํ•œ ๋กœ์šฐ๊ฐ€ ์„œ๋ธŒ์ฟผ๋ฆฌ์˜ ํ•œ ๋กœ์šฐ์™€ ์กฐ์ธ์— ์„ฑ๊ณตํ•˜๋Š” ์ˆœ๊ฐ„ ์ข…๋ฃŒ ํ›„, ๋‹ค์Œ ๋กœ์šฐ ์ฒ˜๋ฆฌ
  2. ํ•„ํ„ฐ ์˜คํผ๋ ˆ์ด์…˜์€ ์บ์‹ฑ๊ธฐ๋Šฅ์„ ๊ฐ€์ง
  3. ์กฐ์ธ ์ˆœ์„œ ๊ณ ์ • - ๋ฉ”์ธ ์ฟผ๋ฆฌ๊ฐ€ ํ•ญ์ƒ outer ์ง‘ํ•ฉ
    ์œ„์˜ ๋‹ค๋ฅธ์ ์€ nl_sj๋„ ์ด ๋‹ค๋ฅธ์ ์„ ๊ฐ€์ง.
  • ๊ทธ๋Ÿผ ์™œ unnest๋ฅผ ์“ฐ๋ƒ ?
    ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ outer์ง‘ํ•ฉ์œผ๋กœ ์“ธ ์ˆ˜๋„ ์žˆ๊ณ  ๋‹ค์–‘ํ•œ ์กฐ์ธ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์„œ.

์กฐ์ธ ์กฐ๊ฑด pushdown ๊ธฐ๋Šฅ์€ ๋ฉ”์ธ์ฟผ๋ฆฌ์˜ ์กฐ์ธ ์กฐ๊ฑด์„ from ์ ˆ ์ธ๋ผ์ธ ๋ทฐ์— ๋„ฃ์Œ
-> ๋ถ€๋ถ„๋ฒ”์œ„์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

Lateral, Outer/Cross Apply ์กฐ์ธ ์‚ฌ์šฉํ•˜๋ฉด from ์ ˆ์—์„œ ๋ฉ”์ธ์ฟผ๋ฆฌ ์ปฌ๋Ÿผ ์ฐธ์กฐ ๊ฐ€๋Šฅ
=> ์ด ๋ฐฉ์‹๋“ค์€ ์กฐ์ธ ์กฐ๊ฑด pushdown ๊ธฐ๋Šฅ์ด ์ž˜ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ๋•Œ๋งŒ ์‚ฌ์šฉ


order by ์—†์ด group by๋งŒ ์‚ฌ์šฉ ์‹œ sort group by ์˜คํผ๋ ˆ์ด์…˜ ๋ฐœ์ƒํ•˜์ง€๋งŒ ์ •๋ ฌ์€ ์•„๋‹˜
์†ŒํŒ… ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ด ๊ทธ๋ฃนํ•‘ ํ–ˆ๋‹ค!
์—ฌ๊ธฐ์„œ ์ •๋ ฌ๋œ ๊ฒฐ๊ณผ์ง‘ํ•ฉ์„ ์›ํ•˜๋ฉด order by ๋ช…์‹œํ•ด์ฃผ๋ฉด๋จ


unnesting๋œ ์„œ๋ธŒ์ฟผ๋ฆฌ๊ฐ€ m์ชฝ ์ง‘ํ•ฉ์ด๊ฑฐ๋‚˜ 1์ชฝ์ง‘ํ•ฉ์ด์—ฌ๋„ ์กฐ์ธ ์ปฌ๋Ÿผ์— unique ์ธ๋ฑ์Šค๊ฐ€ ์—†์„ ์‹œ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•ด ์ฃผ์–ด์•ผ ๋˜๋Š”๋ฐ ์ด ๋•Œ Sort Unique ์˜คํผ๋ ˆ์ด์…˜ ๋ฐœ์ƒ

์ค‘๋ณต ์—†์„ ์‹œ Sort Unique ์˜คํผ๋ ˆ์ด์…˜์€ ์ƒ๋žต๋จ


์ปค๋ฐ‹ ์˜ต์…˜

default : commiit write immediate wait; -> ์ปค๋ฐ‹ ๋ช…๋ น์„ ๋ฐ›์„ ๋•Œ ๋งˆ๋‹ค LGWR๊ฐ€ ๋กœ๊ทธ ๋ฒ„ํผ๋ฅผ ํŒŒ์ผ์— ์ฆ‰์‹œ ๊ธฐ๋ก / ๊ธฐ๋กํ•  ๋•Œ ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆผ
option : immediate -> batch / wait -> nowait

๋‹ค์ค‘ ํŠธ๋žœ์žญ์…˜์— ์˜ํ•œ ๋™์‹œ ์ฑ„๋ฒˆ์ด ๋งŽ์ง€ ์•Š์œผ๋ฉด ์•„๋ฌด๊ฑฐ๋‚˜ ์จ๋„ ๊ดœ์ฐฎ

  1. ์ฑ„๋ฒˆ ํ…Œ์ด๋ธ”์ด๋‚˜ ์˜ค๋ธŒ์ ํŠธ ๊ด€๋ฆฌ ๋ถ€๋‹ด -> max +1 ๋ฐฉ์‹ ์‚ฌ์šฉ

  2. ๋‹ค์ค‘ ํŠธ๋žœ์žญ์…˜์— ์˜ํ•œ ๋™์‹œ ์ฑ„๋ฒˆ์ด ๋งŽ๊ณ  pk๊ฐ€ ๋‹จ์ผ์ปฌ๋Ÿผ ์ผ๋ จ๋ฒˆํ˜ธ๋ฉด ์‹œํ€€์Šค ๋ฐฉ์‹ ์‚ฌ์šฉ

  3. ๋‹ค์ค‘ ํŠธ๋žœ์žญ์…˜์— ์˜ํ•ด ๋™์‹œ ์ฑ„๋ฒˆ์ด ๋งŽ๊ณ  pk ๊ตฌ๋ถ„ ์†์„ฑ์— ๊ฐ’ ์ข…๋ฅ˜ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์œผ๋ฉด ์‹œํ€€์Šค ๋ณด๋‹ค๋Š” max+1
    ๋‹จ, ์„ฑ๋Šฅ ๋ฌธ์ œ ์‹œ ์‹œํ€€์Šค ์˜ค๋ธŒ์ ํŠธ ํ™œ์šฉ


์ธ๋ฑ์Šค ๋ธ”๋ก ๊ฒฝํ•ฉ ํ•ด์†Œ -> ์ธ๋ฑ์Šค ํ•ด์‹œ ํŒŒํ‹ฐ์…”๋‹
๋ฆฌ๋ฒ„์Šค ํ‚ค ์ธ๋ฑ์Šค๋กœ ์ „ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ๊ณ ๋ ค


์˜จ๋ผ์ธ ํŠธ๋žœ์žญ์…˜์ด ์—†๋Š” ์•ผ๊ฐ„ ๋Œ€๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ผ๊ด„ insert ์ฒ˜๋ฆฌ ๋ฌธ๋ฒ•

  1. ์ธ๋ฑ์Šค ๋น„ํ™œ์„ฑํ™”
alter table ji_table modify constraint ji_table_index disable drop index;
  1. ๋ณ‘๋ ฌ DML ํ™œ์„ฑํ™”
alter session enable parallel dml;
  1. ํ…Œ์ด๋ธ” nologging ํ™œ์„ฑํ™”
alter table ji_table nologging;
  1. insert ์‹œ append ํžŒํŠธ + ๋ณ‘๋ ฌ์ฒ˜๋ฆฌ ํžŒํŠธ
insert /*+ append parallel(ji_table 4) */ into ji_table
select ~
  1. ์ธ๋ฑ์Šค ๋‹ค์‹œ ํ™œ์„ฑํ™”
alter table ji_table modify constraint ji_table_index enable novalidate;
  1. ํ…Œ์ด๋ธ” ๋‹ค์‹œ ๋กœ๊น…
alter table ji_table logging;
  1. ๋ณ‘๋ ฌ DML ๋น„ํ™œ์„ฑํ™”
alter table disable parallel dml;

ํŒŒํ‹ฐ์…˜ Exchange ๊ธฐ๋ฒ• / ๋Œ€๋Ÿ‰ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ

  1. ์ž„์‹œ(temp) ํ…Œ์ด๋ธ” ์ƒ์„ฑ (nologging ๋ชจ๋“œ๋ฉด ์ข‹์Œ)
create table emp_temp
nologging
as
select * from emp where 1 = 2;
  1. emp ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด ์ž„์‹œ ํ…Œ์ด๋ธ”์— ์ž…๋ ฅํ•˜๋ฉด์„œ ๋ณ€๊ฒฝ ๊ฐ’์„ ์ˆ˜์ •
insert /*+ append */ into emp_temp e
select empno, edate, ...
		, case when ์ƒํƒœ์ฝ”๋“œ <> 'AAA' then 'AAA' else ์ƒํƒœ์ฝ”๋“œ end) ์ƒํƒœ์ฝ”๋“œ
from emp
where edate < '20260101';
  1. ์ž„์‹œ ํ…Œ์ด๋ธ”์— ์›๋ณธ ํ…Œ์ด๋ธ”๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ์ธ๋ฑ์Šค ์ƒ์„ฑ (nologging๋ชจ๋“œ๋ฉด ์ข‹์Œ)
create unique index emp_temp_pk on emp_temp (empno) nologging;
create index emp_temp_x1 on emp_temp (edate) nologging;
  1. ๋ฐ”๊ฟ€ ํŒŒํ‹ฐ์…˜๊ณผ ์ž„์‹œ ํ…Œ์ด๋ธ”์„ exchange
alter table emp
exchange partition p202512 with table emp_temp
including indexes without validation;
  1. ํ…Œ์ด๋ธ”์„ Drop
drop table emp_temp;
  1. (nologging ๋ชจ๋“œ๋กœ ์ž‘์—…ํ–ˆ๋‹ค๋ฉด) ํŒŒํ‹ฐ์…˜์„ logging ๋ชจ๋“œ๋กœ ์ „ํ™˜
alter table emp modify partition p202512 logging;
alter table emp_pk modify parition p202512 logging;
alter table emp_x1 modify parition p202512 logging;

๋Œ€์šฉ๋Ÿ‰ ํŒŒํ‹ฐ์…˜ ๋ฐ์ดํ„ฐ ์‚ญ์ œ

  1. nologging ๋ชจ๋“œ๋กœ tmp ํ…Œ์ด๋ธ” ์ƒ์„ฑ
create table emp_temp
nologging
as
select * from emp where 1 = 2;
  1. ์กฐ๊ฑด์˜ ๋‚˜๋จธ์ง€ ๋ฐ์ดํ„ฐ๋งŒ tmp ํ…Œ์ด๋ธ”์— ์‚ฝ์ž…
insert /*+ append */ into emp_temp
select * from emp partition (202402) where c2 != 'Y';
  1. ์›๋ณธ ํ…Œ์ด๋ธ” ํŒŒํ‹ฐ์…˜ truncate ํ›„ nologging ๋ชจ๋“œ๋กœ ์ž„์‹œํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ๋ฅผ ์›๋ณธํ…Œ์ด๋ธ”์— ์‚ฝ์ž…
alter table emp truncate partition(202402); 

alter table emp nologging;
insert /*+ append */ into emp
select * from emp_temp;
  1. temp ํ…Œ์ด๋ธ” ์‚ญ์ œ,emp ํ…Œ์ด๋ธ” logging
drop table emp_temp;

alter table emp logging;

px_join_filter / no_px_join_filter (+ no_merge, where์ ˆ ํ•„ํ„ฐ ์กฐ๊ฑด)

SELECT /*+ LEADING(T1) NO_MERGE(V1) PX_JOIN_FILTER(V1) */ 
          T1.PRDT_ID
         ,V1.SALES_AMT
FROM TB_PRDT T1
       ,(
           SELECT PRDT_ID , SUM(TRD_AMT) AS SALES_AMT
           FROM TN_TRADE
           GROUP BY PRDT_ID --group by
        ) V1
WHERE T1.PRDT_ID IN (1000, 2000, 3000) -- ํ•„ํ„ฐ ์กฐ๊ฑด
   AND T1.PRDT_ID = V1.PRDT

index skew ํ•œ์ชฝ์œผ๋กœ ์น˜์šฐ์น˜๋Š” ํ˜„์ƒ
index sparse ๋ฐ€๋„๊ฐ€ ๋–จ์–ด์ง€๋Š” ํ˜„์ƒ

create index emp_x1 on emp(empno, job);


CTAS๋ฌธ ์‹œ nologging ๋ชจ๋“œ๋กœ ํ…Œ์ด๋ธ” ๋งŒ๋“ค๊ธฐ

create table ji_table
nologging
as
select ~

update ์ˆ˜์ • ์‚ฌํ•ญ table ๋งŒ๋“ค ๋•Œ ๊ทธ๋ƒฅ ๋„ฃ์–ด๋ฒ„๋ฆฌ๋Š” ๊ฑฐ ๊ณ ๋ ค
-> update ์•ˆ ํ•ด๋„๋จ.

PL/SQL for loop -> one sql๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ

merge into table_a
using (table_b)
on ( )
when matched then
~
when not matched then
~


update -> merge ๋ฌธ ๋ณ€๊ฒฝ ์‹œ ์œˆ๋„์šฐ ํ•จ์ˆ˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅ.


set transaction isolation level serializable; 
-- ํŠธ๋žœ์žญ์…˜ ๊ณ ๋ฆฝํ™” ์ˆ˜์ค€ serializable ๊นŒ์ง€ ์˜ฌ๋ฆฌ๊ธฐ

ํ•ด์‹œ์กฐ์ธ -> build input - ์ „์ฒด๋ฒ”์œ„์ฒ˜๋ฆฌ, probe input - ๋ถ€๋ถ„๋ฒ”์œ„์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
์†ŒํŠธ๋จธ์ง€์กฐ์ธ -> ์ „์ฒด ์ผ๋Ÿ‰์€ ๊ฒ€์ƒ‰์กฐ๊ฑด์— ์˜ํ•ด ๊ฒฐ์ •
exists ->semi join ๋ณ€ํ™˜
not exists -> anti join ๋ณ€ํ™˜


non-repeated read -> ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ ์ˆ˜์ •
phantom read -> ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ ์‚ฝ์ž…

sqlserver -> ๋ณ€๊ฒฝ์„ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ๋ณ€๊ฒฝ ํ›„ ๊ฐ’์„ ์ˆ˜์ •ํ•จ
oracle -> ๋ณ€๊ฒฝ์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ๋ณ€๊ฒฝ ์ „๊ฐ’์„ ์ˆ˜์ •ํ•จ


1. ๋ชจ๋ธ๋ง์˜ ํŠน์ง•

์ถ”์ƒํ™” : ํ˜„์‹ค์„ธ๊ณ„๋ฅผ ์ผ์ •ํ•œ ํ˜•์‹์— ๋งž์ถ”์–ด ํ‘œํ˜„์„ ํ•œ๋‹ค๋Š” ์˜๋ฏธ
๋‹จ์ˆœํ™” : ๋ณต์žกํ•œ ํ˜„์‹ค์„ธ๊ณ„๋ฅผ ์•ฝ์†๋œ ๊ทœ์•ฝ์— ์˜ํ•ด ์ œํ•œ๋œ ํ‘œ๊ธฐ๋ฒ•์ด๋‚˜ ์–ธ์–ด๋กœ ํ‘œํ˜„
๋ช…ํ™•ํ™” : ๋ˆ„๊ตฌ๋‚˜ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋Œ€์ƒ์— ๋Œ€ํ•œ ์• ๋งค๋ชจํ˜ธํ•จ์„ ์ œ๊ฑฐ

2. ๋ชจ๋ธ๋ง์˜ ์„ธ ๊ฐ€์ง€ ๊ด€์ 

๋ฐ์ดํ„ฐ๊ด€์  + ํ”„๋กœ์„ธ์Šค๊ณผ์  + ๋ฐ์ดํ„ฐํ”„๋กœ์„ธ์Šค ์ƒ๊ด€๊ด€์ 

3. ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง์˜ ์ •์˜

์ •๋ณด์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ๊ด€์ ์˜ ์—…๋ฌด ๋ถ„์„ ๊ธฐ๋ฒ•
ํ˜„์‹ค์„ธ๊ณ„์˜ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์•ฝ์†๋œ ํ‘œ๊ธฐ๋ฒ•์— ์˜ํ•ด ํ‘œํ˜„ํ•˜๋Š” ๊ณผ์ •
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ ๋ถ„์„, ์„ค๊ณ„์˜ ๊ณผ์ •

4. ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์˜ ๊ธฐ๋Šฅ

๋ช…์„ธํ™”, ๊ตฌ์กฐํ™”, ๋ฌธ์„œํ™”, ๋‹ค์–‘ํ•œ ๊ด€์ , ์ƒ์„ธ์ˆ˜์ค€์˜ ํ‘œํ˜„

5. ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง์˜ ์ค‘์š”์„ฑ

ํŒŒ๊ธ‰ํšจ๊ณผ(Leverage)
๋ณต์žกํ•œ ์š”๊ตฌ์‚ฌํ•ญ์˜ ๊ฐ„๊ฒฐํ•œ ํ‘œํ˜„(Conciseness)
๋ฐ์ดํ„ฐ ํ’ˆ์งˆ(Data Quailty)

6. ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง์˜ 3๋‹จ๊ณ„

๊ฐœ๋…์  ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง : ์ถ”์ƒํ™”, ์—…๋ฌด์ค‘์‹ฌ์ , ํฌ๊ด„์ , ์ „์‚ฌ์ , EA์ˆ˜๋ฆฝ์‹œ ์‚ฌ์šฉ
๋…ผ๋ฆฌ์  ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง : KEY, ์†์„ฑ, ๊ด€๊ณ„ ํ‘œํ˜„, ์žฌ์‚ฌ์šฉ์„ฑ ๋†’์Œ
๋ฌผ๋ฆฌ์  ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง : ์‹ค์ œ DBMS์— ์ด์‹, ๋ฌผ๋ฆฌ์ ์ธ ์„ฑ๊ฒฉ ๊ณ ๋ ค

7. ๋ฐ์ดํ„ฐ ๋…๋ฆฝ์„ฑ

๋…ผ๋ฆฌ์  ๋…๋ฆฝ์„ฑ : ๊ฐœ๋…์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ, ์™ธ๋ถ€์Šคํ‚ค๋งˆ ์˜ํ–ฅ ์—†์Œ, ๋…ผ๋ฆฌ์  ๊ตฌ์กฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด๋„ ์‘์šฉํ”„๋กœ๊ทธ๋žจ ์˜ํ–ฅ์—†์Œ

๋ฌผ๋ฆฌ์  ๋…๋ฆฝ์„ฑ : ๋‚ด๋ถ€์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ, ์™ธ๋ถ€/๊ฐœ๋…์Šคํ‚ค๋งˆ ์˜ํ–ฅ ์—†์Œ, ์ €์žฅ์žฅ์น˜์˜ ๊ตฌ์กฐ๋ณ€๊ฒฝ์€ ์‘์šฉํ”„๋กœ๊ทธ๋žจ๊ณผ ๊ฐœ๋…์Šคํ‚ค๋งˆ์— ์˜ํ–ฅ์—†์Œ

8. ์‚ฌ์ƒ

์™ธ๋ถ€/๊ฐœ๋…์  ์‚ฌ์ƒ(๋…ผ๋ฆฌ์  ์‚ฌ์ƒ) : ์™ธ๋ถ€์  ๋ทฐ์™€ ๊ฐœ๋…์  ๋ทฐ์˜ ์ƒํ˜ธ ๊ด€๋ จ์„ฑ ์ •์˜(๊ฐœ๋…์  ๋ทฐ์˜ ํ•„๋“œ ํƒ€์ž…์€ ๋ณ€ํ™” ์—†์Œ)

๊ฐœ๋…/๋‚ด๋ถ€์  ์‚ฌ์ƒ(๋ฌผ๋ฆฌ์  ์‚ฌ์ƒ) : ๊ฐœ๋…์  ๋ทฐ์™€ DBMS๊ฐ„์˜ ์ƒํ˜ธ ๊ด€๋ จ์„ฑ ์ •์˜(DB๊ตฌ์กฐ ๋ณ€๊ฒฝ์‹œ ๊ฐœ๋…์ /๋‚ด๋ถ€์  ์‚ฌ์ƒ์ด ๋ฐ”๋€Œ์–ด์•ผ ๊ฐœ๋…์  ์Šคํ‚ค๋งˆ๊ฐ€ ๊ทธ๋Œ€๋กœ ๋‚จ์Œ)

9. ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง์˜ ์„ธ๊ฐ€์ง€ ์š”์†Œ

์–ด๋–ค๊ฒƒ(Things), ์„ฑ๊ฒฉ(Attributes), ๊ด€๊ณ„(Relationships)

10. ๋ฐ์ดํ„ฐ ๋ชจ๋ธ ์ดํ•ด ๊ด€๊ณ„์ž

DBA, ๊ฐœ๋ฐœ์ž(๊ฐ€์žฅ์ค‘์š”), ํ˜„์—…์—…๋ฌด์ „๋ฌธ๊ฐ€, ์ „๋ฌธ ๋ชจ๋ธ๋Ÿฌ

11. ์ข‹์€ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ ์š”์†Œ

์™„์ „์„ฑ(Completeness)
์ค‘๋ณต๋ฐฐ์ œ(Non-Redundancy)
์—…๋ฌด๊ทœ์น™(Business Rules)
๋ฐ์ดํ„ฐ์žฌ์‚ฌ์šฉ(Data Reusuability)
์˜์‚ฌ์†Œํ†ต(Communication)
ํ†ตํ•ฉ์„ฑ(Integration)

12. ์—”ํ„ฐํ‹ฐ์˜ ํŠน์ง•

๋ฐ˜๋“œ์‹œ ํ•„์š”, ์‹๋ณ„๊ฐ€๋Šฅ, ์˜์†์ ์œผ๋กœ ์กด์žฌ(๋‘๊ฐœ์ด์ƒ), ์—…๋ฌดํ”„๋กœ์„ธ์Šค ์ด์šฉ, ์†์„ฑํ•„์ˆ˜, ๊ด€๊ณ„ํ•„์ˆ˜

13. ์—”ํ„ฐํ‹ฐ ๋ถ„๋ฅ˜

์œ ๋ฌดํ˜• : ์œ ํ˜•์—”ํ„ฐํ‹ฐ, ๊ฐœ๋…์—”ํ„ฐํ‹ฐ, ์‚ฌ๊ฑด์—”ํ„ฐํ‹ฐ
๋ฐœ์ƒ์‹œ์  : ๊ธฐ๋ณธ์—”ํ„ฐํ‹ฐ, ์ค‘์‹ฌ์—”ํ„ฐํ‹ฐ, ํ–‰์œ„์—”ํ„ฐํ‹ฐ

14. ์†์„ฑ์˜ ๋ถ„๋ฅ˜

๊ธฐ๋ณธ์†์„ฑ(์ด๋ฆ„), ์„ค๊ณ„์†์„ฑ(์ฝ”๋“œ), ํŒŒ์ƒ์†์„ฑ(ํ•ฉ๊ณ„)

15. ์ฃผ์‹๋ณ„์ž์˜ ํŠน์ง•

์œ ์ผ์„ฑ, ์ตœ์†Œ์„ฑ, ๋ถˆ๋ณ€์„ฑ, ์กด์žฌ์„ฑ

16. ์‹๋ณ„์ž ๋ถ„๋ฅ˜

๋Œ€ํ‘œ์„ฑ ์—ฌ๋ถ€ (์ฃผ์‹๋ณ„์ž, ๋ณด์กฐ์‹๋ณ„์ž)
์Šค์Šค๋กœ์ƒ์„ฑ ์—ฌ๋ถ€ (๋‚ด๋ถ€์‹๋ณ„์ž, ์™ธ๋ถ€์‹๋ณ„์ž)
๋‹จ์ผ์†์„ฑ ์—ฌ๋ถ€(๋‹จ์ผ ์‹๋ณ„์ž, ๋ณตํ•ฉ์‹๋ณ„์ž)
๋Œ€์ฒด ์—ฌ๋ถ€(๋ณธ์งˆ์‹๋ณ„์ž, ์ธ์กฐ์‹๋ณ„์ž)

17. ์‹๋ณ„์ž/๋น„์‹๋ณ„์ž ๊ด€๊ณ„

์‹๋ณ„์ž ๊ด€๊ณ„ : ๋ถ€๋ชจ๋กœ ๋ฐ›์€ ์‹๋ณ„์ž๋ฅผ ์ž์‹ ์—”ํ„ฐํ‹ฐ์˜ ์ฃผ์‹๋ณ„์ž๋กœ ์ด์šฉ
๋น„์‹๋ณ„์ž ๊ด€๊ณ„ : ๋ถ€๋ชจ๋กœ ๋ถ€ํ„ฐ ์†์„ฑ์„ ๋ฐ›์•˜์ง€๋งŒ ์ฃผ์‹๋ณ„์ž๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ผ๋ฐ˜ ์†์„ฑ์œผ๋กœ ์‚ฌ์šฉ

18. ๋น„์‹๋ณ„์ž ๊ด€๊ณ„ ์„ค์ • ๊ณ ๋ ค์‚ฌํ•ญ

์•ฝํ•œ ๊ด€๊ณ„, ๋…๋ฆฝ PK๊ตฌ์„ฑ, PK์†์„ฑ ๋‹จ์ˆœํ™”๋ฅผ ์œ„ํ•ด์„œ ๊ณ ๋ ค

19. ์‹๋ณ„์ž ๊ด€๊ณ„ ์„ค์ • ๊ณ ๋ ค์‚ฌํ•ญ

๊ฐ•ํ•œ ๊ด€๊ณ„, ์ฃผ์‹๋ณ„์ž PK์‚ฌ์šฉ

20. ํ•จ์ˆ˜ ์ข…์†์„ฑ ์ด๋ž€?

๋ฐ์ดํ„ฐ๋“ค์ด ์–ด๋–ค ๊ธฐ์ค€๊ฐ’์— ์˜ํ•ด ์ข…์†๋˜๋Š” ํ˜„์ƒ์„ ์ง€์นญํ•œ๋‹ค.
๊ธฐ์ค€๊ฐ’์„ ๊ฒฐ์ •์ž, ์ข…์†๋˜๋Š” ๊ฐ’์„ ์ข…์†์ž ๋ผ๊ณ  ํ•œ๋‹ค.

ex) ์ฃผ๋ฏผ๋“ฑ๋ก๋ฒˆํ˜ธ -> (์ด๋ฆ„,์ถœ์ƒ์ง€,์ฃผ์†Œ)

21. ๋ฐ˜์ •๊ทœํ™” ๊ธฐ๋ฒ•

1) ํ…Œ์ด๋ธ” ๋ฐ˜์ •๊ทœํ™”
ํ…Œ์ด๋ธ” ๋ณ‘ํ•ฉ(1:1, 1:M, ์Šˆํผ/์„œ๋ธŒํƒ€์ž…), ํ…Œ์ด๋ธ” ๋ถ„ํ• (์ˆ˜์ง,์ˆ˜ํ‰), ํ…Œ์ด๋ธ” ์ถ”๊ฐ€(์ค‘๋ณต, ํ†ต๊ณ„, ์ด๋ ฅ, ๋ถ€๋ถ„)

2) ์นผ๋Ÿผ ๋ฐ˜์ •๊ทœํ™”
์ค‘๋ณต์นผ๋Ÿผ ์ถ”๊ฐ€, ํŒŒ์ƒ์นผ๋Ÿผ ์ถ”๊ฐ€, ์ด๋ ฅํ…Œ์ด๋ธ” ์นผ๋Ÿผ ์ถ”๊ฐ€, PK์— ์˜ํ•œ ์นผ๋Ÿผ ์ถ”๊ฐ€, ์‘์šฉ์‹œ์Šคํ…œ ์˜ค์ž‘๋™์„ ์œ„ํ•œ ์นผ๋Ÿผ ์ถ”๊ฐ€

3) ๊ด€๊ณ„ ๋ฐ˜์ •๊ทœํ™”
์ค‘๋ณต๊ด€๊ณ„ ์ถ”๊ฐ€

22. ์Šˆํผ์„œ๋ธŒํƒ€์ž… ๋ชจ๋ธ

๊ณตํ†ต์˜ ๋ถ€๋ถ„์„ ์Šˆํผํƒ€์ž…์œผ๋กœ ๋ชจ๋ธ๋ง, ๋‹ค๋ฅธ ์—”ํ„ฐํ‹ฐ์™€ ์ฐจ์ด๊ฐ€ ์žˆ๋Š” ์†์„ฑ์— ๋Œ€ํ•ด์„œ ๋ณ„๋„์˜ ์„œ๋ธŒ ์—”ํ„ฐํ‹ฐ๋กœ ๊ตฌ๋ถ„

1) OneToOne Type
๊ฐœ๋ณ„ํ…Œ์ด๋ธ”, ํ™•์ •์„ฑ ์šฐ์ˆ˜, ์กฐ์ธ์„ฑ๋Šฅ ๋‚˜์จ, I/O ์ข‹์Œ, ๊ด€๋ฆฌ์•ˆ์ข‹์Œ

2) Plus Type
์Šˆํผ์„œ๋ธŒํƒ€์ž…ํ…Œ์ด๋ธ”, ํ™•์ •์„ฑ ๋ณดํ†ต, ์กฐ์ธ์„ฑ๋Šฅ ๋‚˜์จ, I/O์ข‹์Œ, ๊ด€๋ฆฌ์•ˆ์ข‹์Œ

3) Single Type
ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”, ํ™•์ •์„ฑ ๋‚˜์จ, ์กฐ์ธ์„ฑ๋Šฅ ์šฐ์ˆ˜, I/O๋‚˜์จ, ๊ด€๋ฆฌ์ข‹์Œ

23. ๋ถ„์‚ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํˆฌ๋ช…์„ฑ

๋ถ„ํ• ํˆฌ๋ช…์„ฑ, ์œ„์น˜ํˆฌ๋ช…์„ฑ, ์ง€์—ญ์‚ฌ์ƒ ํˆฌ๋ช…์„ฑ, ์ค‘๋ณตํˆฌ๋ช…์„ฑ, ์žฅ์• ํˆฌ๋ช…์„ฑ, ๋ณ‘ํ–‰ํˆฌ๋ช…์„ฑ

24. ๋ถ„์‚ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์žฅ๋‹จ์ 

์žฅ์  : ์ง€์—ญ์ž์น˜์„ฑ, ์ ์ฆ์ ์‹œ์Šคํ…œ ์šฉ๋Ÿ‰ํ™•์žฅ, ์‹ ๋ขฐ์„ฑ,๊ฐ€์šฉ์„ฑ, ํšจ์šฉ์„ฑ, ์œตํ†ต์„ฑ, ๋น ๋ฅธ ์‘๋‹ต, ํ†ต์‹ ๋น„์šฉ์ ˆ๊ฐ, ๋ฐ์ดํ„ฐ๊ฐ€์šฉ์„ฑ, ์‹ ๋ขฐ์„ฑ, ์‹œ์Šคํ…œ๊ทœ๋ชจ์กฐ์ ˆ, ์š”๊ตฌ์ˆ˜์šฉ ์ฆ๋Œ€

๋‹จ์  : ๋น„์šฉ, ์˜ค๋ฅ˜์ž ์žฌ์„ฑ์ฆ๋Œ€,์ฒ˜๋ฆฌ๋น„์šฉ,์„ค๊ณ„๊ด€๋ฆฌ๋ณต์žก์„ฑ,๋ถˆ๊ทœ์น™ํ•œ์‘๋‹ต์†๋„,ํ†ต์ œ์–ด๋ ค์›€,๋ฐ์ดํ„ฐ๋ฌด๊ฒฐ์„ฑ์œ„ํ˜‘

25. ๋ถ„์‚ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ์šฉ ๊ธฐ๋ฒ•

1) ์œ„์น˜๋ถ„์‚ฐ

2) ๋ถ„ํ• ๋ถ„์‚ฐ : ์ˆ˜ํ‰๋ถ„ํ• , ์ˆ˜์ง๋ถ„ํ• 

3) ๋ณต์ œ๋ถ„์‚ฐ : ๋ถ€๋ถ„๋ณต์ œ(ํ†ตํ•ฉ๋œ๊ฑด ๋ณธ์‚ฌ, ๊ฐ์ง€์‚ฌ๋ณ„๋กœ ํ•ด๋‹น๋กœ์šฐ), ๊ด‘์—ญ๋ณต์ œ(๋ณธ์‚ฌ,์ง€์‚ฌ๋ชจ๋‘ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ ๊ฐ€์ง€๊ณ ์žˆ์Œ)

4) ์š”์•ฝ๋ถ„์‚ฐ : ๋ถ„์„์š”์•ฝ(๊ฐ์ง€์‚ฌ๋ณ„๋กœ ์š”์•ฝ, ๋ณธ์‚ฌ์— ํ†ตํ•ฉ), ํ†ตํ•ฉ์š”์•ฝ(๊ฐ์ง€์‚ฌ๋ณ„๋กœ ์กด์žฌํ•˜๋Š” ๋‹ค๋ฅธ ๋‚ด์šฉ์ด ์ •๋ณด์š”์•ฝ, ๋ณธ์‚ฌ์— ํ†ตํ•ฉ)

26. ์™ธ๋ž˜ํ‚ค ์ถ”๊ฐ€ SQL

ALTER TABLE PLAYER ADD CONSTRAINT PLAYER_FK FOREIGN KEY (TEAM_ID) REFERENCES TEAM(TEAM_ID);

27. ํŠธ๋žœ์žญ์…˜์˜ ํŠน์„ฑ

์›์ž์„ฑ(Atomicity), ์ผ๊ด€์„ฑ(Consistency), ๊ณ ๋ฆฝ์„ฑ(Isolation), ์ง€์†์„ฑ(Durability)

28. ๊ฐ์ข… ํ•จ์ˆ˜ ๊ฒฐ๊ณผ๊ฐ’

SELECT RTRIM('XXXYYY   ', ' ') FROM DUAL; -> "XXXYYY"

SELECT LTRIM('XXXYYY   ', 'X') FROM DUAL; -> ""YYY   "

SELECT SIGN(-00) FROM DUAL; -> 0

SELECT SIGN(-100) FROM DUAL; -> -1

SELECT SIGN(100) FROM DUAL; -> 1

SELECT CEIL(38.123) FROM DUAL; -> 39

SELECT CEIL(-38.123) FROM DUAL; -> -38

SELECT FLOOR(38.123) FROM DUAL; -> 38

SELECT FLOOR(-38.123) FROM DUAL; -> -39

SELECT ROUND(38.5235, 3) FROM DUAL; -> 38.524

SELECT ROUND(38.5235, 1) FROM DUAL; -> 38.5

SELECT ROUND(38.5235, 0) FROM DUAL; -> 39

SELECT ROUND(38.5235) FROM DUAL; -> 39

SELECT TRUNC(38.5235, 3) FROM DUAL; -> 38.523

SELECT TRUNC(38.5235, 1) FROM DUAL; -> 38.5

SELECT TRUNC(-38.5235, 1) FROM DUAL; -> -38.5

SELECT TRUNC(38.5235, 0) FROM DUAL; -> 38

SELECT TRUNC(38.5235) FROM DUAL; -> 38

SELECT NULLIF('1', '1') FROM DUAL; -> NULL

SELECT COALESCE(NULL, '2', '1') FROM DUAL; -> '2'

29. ๋ทฐ์˜ ์žฅ์ 

๋…๋ฆฝ์„ฑ, ํŽธ๋ฆฌ์„ฑ, ๋ณด์•ˆ์„ฑ

30. ์ผ๋ฐ˜ ์ง‘ํ•ฉ์—ฐ์‚ฐ์ž์™€ ํ˜„์žฌ์˜ SQL ๋น„๊ต

UNION ์—ฐ์‚ฐ์€ UNION ๊ธฐ๋Šฅ์œผ๋กœ

INTERSECTION ์—ฐ์‚ฐ์€ INTERSECT ๊ธฐ๋Šฅ์œผ๋กœ

DIFFERENCE ์—ฐ์‚ฐ์€ EXCEPT, MINUS ๊ธฐ๋Šฅ์œผ๋กœ

PRODUCT ์—ฐ์‚ฐ์€ CROSS JOIN ๊ธฐ๋Šฅ์œผ๋กœ

31. ์ˆœ์ˆ˜๊ด€๊ณ„ ์—ฐ์‚ฐ์ž์™€ ํ˜„์žฌ์˜ SQL ๋น„๊ต

SELECT์—ฐ์‚ฐ์€ WHERE์ ˆ๋กœ ๊ตฌํ˜„

PROJECT์—ฐ์‚ฐ์€ SELECT ์ ˆ๋กœ ๊ตฌํ˜„

NATURAL JOIN์—ฐ์‚ฐ์€ ๋‹ค์–‘ํ•œ JOIN๊ธฐ๋Šฅ์œผ๋กœ ๊ตฌํ˜„

DIVIDE์—ฐ์‚ฐ์€ ํ˜„์žฌ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.

32. ๊ณ„์ธตํ˜• ์ฟผ๋ฆฌ

์ˆœ๋ฐฉํ–ฅ

SELECT
LEVEL, LPAD(' ', 4*(LEVEL-1)) || EMPNO, MGR, CONNECT_BY_ISLEAF
FROM EMP
START WITH MGR IS NULL
CONNECT BY PRIOR EMPNO = MGR;

์—ญ๋ฐฉํ–ฅ

SELECT
LEVEL,
LPAD(' ', 4*(LEVEL-1))||EMPNO,
MGR, CONNECT_BY_ISLEAF
FROM EMP
START WITH EMPNO = 7876
CONNECT BY PRIOR MGR = EMPNO;

ํŒจ์Šคํ•จ์ˆ˜

SELECT
CONNECT_BY_ROOT EMPNO,
SYS_CONNECT_BY_PATH(EMPNO, '/') ,
EMPNO, MGR
FROM EMP
START WITH MGR IS NULL
CONNECT BY PRIOR EMPNO = MGR;

33. ROLL UP, CUBE, GROUPING SETS, GROUPING

SELECT
CASE GROUPING(DNAME) WHEN 1 THEN '๋ชจ๋“ ๋ถ€์„œ' ELSE DNAME END AS DNAME,
CASE GROUPING(JOB  ) WHEN 1 THEN '๋ถ€์„œ๋ณ„' ELSE JOB   END AS JOB,
--,
COUNT(*),
SUM(SAL)
FROM EMP, DEPT
WHERE EMP.DEPTNO =  DEPT.DEPTNO
--GROUP BY ROLLUP(DNAME, JOB)
--GROUP BY DNAME, ROLLUP(JOB)
--GROUP BY ROLLUP(DNAME, (JOB,MGR))
--GROUP BY CUBE(DNAME, JOB)
GROUP BY GROUPING SETS(DNAME, JOB)
ORDER BY DNAME, JOB;

34. RAC(Real Application Cluster)

์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค๊ฐ€ ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์•ก์„ธ์Šค ํ• ์ˆ˜ ์žˆ๋‹ค.
ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์•ก์„ธ์Šค ํ• ์ˆ˜ ์—†๋‹ค.

35. Fast Commit ๋งค์ปค๋‹ˆ์ฆ˜

์‚ฌ์šฉ์ž์˜ ๊ฐฑ์‹ ๋‚ด์šฉ์ด ๋ฉ”๋ชจ๋ฆฌ์ƒ์˜ ๋ฒ„ํผ ๋ธ”๋ก์—๋งŒ ๊ธฐ๋ก๋œ ์ฑ„ ์•„์ง ๋””์Šคํฌ์— ๊ธฐ๋ก๋˜์ง€ ์•Š์•˜๋”๋ผ๋„ Redo๋กœ๊ทธ๋ฅผ ๋ฏฟ๊ณ  ๋น ๋ฅด๊ฒŒ ์ปค๋ฐ‹์„ ์™„๋ฃŒ, ์ธ์Šคํ„ด์Šค ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ๋กœ๊ทธํŒŒ์ผ์„ ์ด์šฉํ•ด ์–ธ์ œ๋“  ๋ณต๊ตฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ์•ˆ์‹ฌํ•˜๊ณ  ์ปค๋ฐ‹์„ ์™„๋ฃŒ

36. Write Ahead Logging

๋ฒ„ํผ ์บ์‹œ ๋ธ”๋ก์„ ๊ฐฑ์‹ ํ•˜๊ธฐ ์ „์— ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋จผ์ € ๋กœ๊ทธ ๋ฒ„ํผ์— ๊ธฐ๋ก, Dirty ๋ฒ„ํผ๋ฅผ ๋””์Šคํฌ์— ๊ธฐ๋กํ•˜๊ธฐ ์ „์— ํ•ด๋‹น ๋กœ๊ทธ ์—”ํŠธ๋ฆฌ๋ฅผ ๋จผ์ € ๋กœ๊ทธ ํŒŒ์ผ์— ๊ธฐ๋ก

37. Recursive Call

DBMS๋‚ด๋ถ€์—์„œ ๋ฐœ์ƒํ•˜๋Š” Call, SQLํŒŒ์„œ์™€ ์ตœ์ ํ™” ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฐ์ดํ„ฐ ์‚ฌ์ „ ์กฐํšŒ, ์‚ฌ์šฉ์ž ์ •์˜ํ•จ์ˆ˜/ํ”„๋กœ์‹œ์ € ๋‚ด์—์„œ SQL์ˆ˜ํ–‰, ํ•ด๋‹น ์ฝœ์„ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฐ”์ธ๋“œ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•˜๋“œํŒŒ์‹ฑ ์ค„์ด๊ณ , ์‚ฌ์šฉ์ž์ •์˜ํ•จ์ˆ˜ ๋ฐ ํ”„๋กœ์‹œ์ €์˜ ๋ฌด๋ถ„๋ณ„ํ•œ ์‚ฌ์šฉ ๊ธˆ์ง€

38. ์‚ฌ์šฉ์ž์ •์˜ํ•จ์ˆ˜/ํ”„๋กœ์‹œ์ € ํŠน์ง•

์‚ฌ์šฉ์ž์ •์˜ํ•จ์ˆ˜/ํ”„๋กœ์‹œ์ €๋Š” ๋‚ด์žฅํ•จ์ˆ˜์ฒ˜๋Ÿผ native์ฝ”๋“œ๋กœ ์™„์ „ ์ปดํŒŒ์ผ๋œ ํ˜•ํƒœ๊ฐ€ ์•„๋‹ˆ์–ด์„œ ๊ฐ€์ƒ๋จธ์‹ ๊ฐ™์€ ๋ณ„๋„์˜ ์‹คํ–‰์—”์ง„ ์‚ฌ์šฉ, ์‹คํ–‰๋  ๋•Œ๋งˆ๋‹ค ๋ฌธ๋งฅ์ „ํ™˜์ด ์ผ์–ด๋‚˜๋ฉฐ, ๋‚ด์žฅํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ• ๋•Œ์™€ ๋น„๊ตํ•ด ์„ฑ๋Šฅ์„ ๋–จ์–ด๋œจ๋ฆฐ๋‹ค.
๊ทธ๋Ÿฌ๋ฏ€๋กœ ์†Œ๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ ์ผ๋•Œ ํ˜น์€ ๋ถ€๋ถ„๋ฒ”์œ„์ฒ˜๋ฆฌ ์ƒํ™ฉ์—์„œ ์ œํ•œ์ ์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

39. ํŠธ๋žœ์žญ์…˜์˜ ํŠน์ง•

์›์ž์„ฑ, ์ผ๊ด€์„ฑ, ๊ฒฉ๋ฆฌ์„ฑ, ์˜์†์„ฑ

40. ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ์„ฑ ์ˆ˜์ค€ ์ƒํ–ฅ

set transaction isolation level read serializable;

41. snap shot too old ๋ฐฉ์ง€

udno ์˜์—ญ ํฌ๊ธฐ ์ฆ๊ฐ€, ์ปค๋ฐ‹ ์ž์ฃผ X, fetch across commit X, ํŠธ๋žœ์žญ์…˜ ์‹œ๊ฐ„ ์กฐ์ •, ํ…Œ์ด๋ธ” ๋‚˜๋ˆ„์–ด ๋‹จ๊ณ„์ ์œผ๋กœ ์ฝ”๋”ฉ, NL์กฐ์ธํ˜•ํƒœ ์ง€์–‘, ์†ŒํŠธ์—ฐ์‚ฐ ๋ฐœ์ƒ, ๋Œ€๋Ÿ‰์—…๋ฐ์ดํŠธํ›„ full์Šค์บ”

42. Secondary ์ธ๋ฑ์Šค๋กœ๋ถ€ํ„ฐ IOT๋ ˆ์ฝ”๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ๋•Œ

์˜ค๋ผํด์€ Logical Rowid = PK + Physical Guess ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

Physical Guess = Secondary index๋ฅผ ์ตœ์ดˆ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์žฌ์ƒ์„ฑํ•œ ์‹œ์ ์˜ DBA

Physical Guess๋ฅผ ์ฐพ์•„๊ฐ”๋‹ค๊ฐ€ ์—†์œผ๋ฉด PK๋กœ ํƒ์ƒ‰

43. ํ˜•๋ณ€ํ™˜

์ˆซ์žํ˜•๊ณผ ๋ฌธ์žํ˜•์ด ๋งŒ๋‚˜๋ฉด -> ๋ฌธ์žํ˜•์„ ์ˆซ์žํ˜•์œผ๋กœ ํ˜•๋ณ€ํ™˜

44. Direct Path Insert

insert select ๋ฌธ์žฅ์— /+ append / ํžŒํŠธ ์‚ฌ์šฉ
๋ณ‘๋ ฌ๋ชจ๋“œ insert
CTAS ๋ฌธ์žฅ์„ ์ˆ˜ํ–‰

  • nologging ๋ชจ๋“œ Insert (Direct Path Insert๋ชจ๋“œ์ผ๋•Œ๋งŒ ์‚ฌ์šฉ๊ฐ€๋Šฅ)
    alter table t nologging; -> redo ๋กœ๊ทธ๊นŒ์ง€ ์ตœ์†Œํ™”

์ฃผ์˜์‚ฌํ•ญ : Direct Path Insert์‹œ ํ…Œ์ด๋ธ” Lock๊ฑธ๋ฆผ


1. REDO ๋กœ๊ทธ์˜ ๋ชฉ์ 

A. Database Recovery

Media Fail ๋ฐœ์ƒ์‹œ DBMS ๋ณต๊ตฌ
Archived Redo Log ์ด์šฉ

B. Cache Recovery

Instance Recovery ๋ผ๊ณ ๋„ ํ•œ๋‹ค
๋ฒ„ํผ์บ์‹œ์— ์ €์žฅ๋œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ๋””์Šคํฌ์— ์ €์žฅ ๋˜์ง€ ์•Š์€์ฑ„ ์ •์ „์ด ๋ฐœ์ƒํ•˜๋ฉด Online Redo Log๋ฅผ ์ฝ์–ด๋“ค์—ฌ
๋งˆ์ง€๋ง‰ ์ฒดํฌํฌ์ธํŠธ์ดํ›„๋ถ€ํ„ฐ ์‚ฌ๊ณ  ๋ฐœ์ƒ ์ง์ „ ๊นŒ์ง€ ์ˆ˜ํ–‰๋˜์—ˆ๋˜ ํŠธ๋žœ์žญ์…˜ ์žฌํ˜„ํ•œ๋‹ค.
๋‹ค๋ฅธ๋ง๋กœ Roll Forward ๋‹จ๊ณ„๋ผ๊ณ  ํ•œ๋‹ค.

C. Fast Commit

์‚ฌ์šฉ์ž์˜ ๊ฐฑ์‹ ๋‚ด์šฉ์ด ๋ฉ”๋ชจ๋ฆฌ์ƒ์˜ ๋ฒ„ํผ ๋ธ”๋ก์—๋งŒ ๊ธฐ๋ก๋œ์ฑ„ ์•„์ง ๋””์Šคํฌ์— ๊ธฐ๋ก๋˜์ง€ ์•Š์•˜์ง€๋งŒ Redo Log๋ฅผ ๋ฏฟ๊ณ  ๋น ๋ฅด๊ฒŒ ์ปค๋ฐ‹์„ ์™„๋ฃŒ

2. Write Ahead Logging

๋ฒ„ํผ ์บ์‹œ์— ์žˆ๋Š” ๋ธ”๋ก ๋ฒ„ํผ๋ฅผ ๊ฐฑ์‹ ํ•˜๊ธฐ ์ „์— Redo ์—”ํŠธ๋ฆฌ ๋กœ๊ทธ๋ฒ„ํผ์— ๊ธฐ๋กํ•ด์•ผ ํ•˜๋ฉฐ, DBWR์ด ๋ฒ„ํผ์บ์‹œ๋กœ ๋ถ€ํ„ฐ Dirty ๋ธ”๋ก๋“ค์„ ๋””์Šคํฌ์— ๊ธฐ๋กํ•˜๊ธฐ ์ „์— ๋จผ์ € LGWR์ด ํ•ด๋‹น Redo ์—”ํŠธ๋ฆฌ๋ฅผ ๋ชจ๋‘ Redo๋กœ๊ทธ ํŒŒ์ผ์— ๊ธฐ๋กํ–ˆ์Œ์ด ๋ณด์žฅ๋˜์–ด์•ผ ํ•œ๋‹ค.

3. Undo ๋กœ๊ทธ์˜ ๋ชฉ์ 

A. Transaction Rollback

ํŠธ๋žœ์žญ์…˜์— ์˜ํ•œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ตœ์ข… ์ปค๋ฐ‹ํ•˜์ง€ ์•Š๊ณ  ๋กค๋ฐฑํ•˜๊ณ ์ž ํ• ๋•Œ Undo ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉ

B. Transaction Recovery

Instance Crash ๋ฐœ์ƒํ›„ Redo๋ฅผ ์ด์šฉํ•ด Roll Forward ๋‹จ๊ณ„์™„๋ฃŒํ›„ ์‹œ์Šคํ…œ์ด ์…ง๋‹ค์šด ์‹œ์ ์— ์•„์ง ์ปค๋ฐ‹๋˜์ง€ ์•Š์•˜๋˜ ํŠธ๋žœ์žญ์…˜๋“ค์„ ๋ชจ๋‘ ๋กค๋ฐฑํ• ๋•Œ Undo ์„ธ๊ทธ๋จผํŠธ์— ์ €์žฅ๋œ Undo๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

C. Read Consistency
์ฝ๊ธฐ ์ผ๊ด€์„ฑ์„ ์œ„ํ•ด์„œ ์‚ฌ์šฉ๋œ๋‹ค.

4. ๋ฌธ์žฅ ์ˆ˜์ค€ ์ฝ๊ธฐ ์ผ๊ด€์„ฑ

๋‹จ์ผ SQL๋ฌธ์ด ์ˆ˜ํ–‰๋˜๋Š” ๋„์ค‘์— ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์— ์˜ํ•ด ๋ฐ์ดํ„ฐ์˜ ์ถ”๊ฐ€, ๋ณ€๊ฒฝ, ์‚ญ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ์ผ๊ด€์„ฑ์žˆ๋Š” ๊ฒฐ๊ณผ ์ง‘ํ•ฉ์„ ๋ฆฌํ„ดํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

5. Consistent, Current ๋ชจ๋“œ ์ฝ๊ธฐ

SELECT๋Š” Consistent ๋ชจ๋“œ๋กœ ์ฝ๋Š”๋‹ค.

INSERT, UPDATE, DELETE, MERGE ๋Š” Current ๋ชจ๋“œ๋กœ ์ฝ๊ณ  ์“ด๋‹ค. ๋‹ค๋งŒ, ๊ฐฑ์‹ ํ•  ๋Œ€์ƒ ๋ ˆ์ฝ”๋“œ๋ฅผ ์‹๋ณ„ํ•˜๋Š” ์ž‘์—…์€ Consistent ๋ชจ๋“œ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.

6. ๋ธ”๋ก ํด๋ฆฐ์•„์›ƒ

ํŠธ๋žœ์žญ์…˜์— ์˜ํ•ด ์„ค์ •๋œ Row Lock์„ ํ•ด์ œํ•˜๊ณ  ๋ธ”๋กํ—ค๋”์— ์ปค๋ฐ‹ ์ •๋ณด๋ฅผ ๊ธฐ๋กํ•˜๋Š” ์˜คํผ๋ ˆ์ด์…˜

A. Delayed ๋ธ”๋ก ํด๋ฆฐ ์•„์›ƒ

ํŠธ๋žœ์žญ์…˜์ด ๊ฐฑ์‹ ํ•œ ๋ธ”๋ก ๊ฐœ์ˆ˜๊ฐ€ ์ด ๋ฒ„ํผ ๋ธ”๋ก๊ฐœ์ˆ˜์˜ 10%๋ฅผ ์ดˆ๊ณผ์‹œ ITL์Šฌ๋ก์— ์ปค๋ฐ‹ ์ •๋ณด์ €์žฅํ•˜๊ณ  ๋ ˆ์ฝ”๋“œ์— ๊ธฐ๋ก๋œ Lock Byte ํ•ด์ œํ•˜๊ณ  Online Redo์— Logging

B. ์ปค๋ฐ‹ ํด๋ฆฐ์•„์›ƒ

Online Redo๋กœ๊ทธ๋ฅผ ๋‚จ๊ธฐ์ง€ ์•Š๊ณ  ๋กœ๊น…์‹œ์ ์„ ๋’ค๋กœ ๋ฏธ๋ฃฌํ›„ ํ•ด๋‹น ๋ธ”๋ก์„ ๊ฐฑ์‹ ํ•˜๋ ค๊ณ  Current๋ชจ๋“œ๋กœ ์ฝ๋Š” ์‹œ์ ์— Lock Byte๋ฅผ ํ•ด์ œํ•˜๊ณ  ์™„์ „ํ•œ ํด๋ฆฐ์•„์›ƒ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

7. SnapShot too old ๋ฐœ์ƒ์›์ธ

A. ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด ๋‚ด๋ ค๊ฐ€๋‹ค๊ฐ€ ์ฟผ๋ฆฌ SCN์ดํ›„์— ๋ณ€๊ฒฝ๋œ ๋ธ”๋ก์„ ๋งŒ๋‚˜ ๊ณผ๊ฑฐ์‹œ์ ์œผ๋กœ ๋กค๋ฐฑํ•œ Read Consistent ์ด๋ฏธ์ง€๋ฅผ ์–ป์œผ๋ ค๊ณ  ํ•˜๋Š”๋ฐ Undo๋ธ”๋ก์ด ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์— ์˜ํ•ด ์žฌ์‚ฌ์šฉ๋ผ ํ•„์š”ํ•œ Undo์ •๋ณด๋ฅผ ์–ป์„์ˆ˜ ์—†๋Š”๊ฒฝ์šฐ ๋ฐœ์ƒํ•œ๋‹ค.

B. ์ปค๋ฐ‹๋œ ํŠธ๋žœ์žญ์…˜ ํ…Œ์ด๋ธ” ์Šฌ๋กฏ์ด ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์— ์˜ํ•ด ์žฌ์‚ฌ์šฉ๋ผ ์ปค๋ฐ‹์ •๋ณด๋ฅผ ํ™•์ธํ• ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒํ•œ๋‹ค. (Undo ์„ธ๊ทธ๋จผํŠธ ๊ฐœ์ˆ˜๊ฐ€ ์ ์Œ)

8. Snap Shot too old ํšŒํ”ผ ๋ฐฉ๋ฒ•

์ปค๋ฐ‹ ์ž์ฃผ ํ•˜์ง€ ๋ง๊ฒƒ, ํŠธ๋žœ์žญ์…˜ ๋ชฐ๋ฆฌ๋Š” ์‹œ๊ฐ„๋Œ€๋ฅผ ํ”ผํ•ด์„œ ๋Œ๋ฆฐ๋‹ค, ํฐ ํ…Œ์ด๋ธ”์„ ์ผ์ •์œ„๋กœ ๋‚˜๋ˆ ์„œ ์ž‘์—…

์˜ค๋žœ์‹œ๊ฐ„์— ๊ฑธ์ณ ๊ฐ™์€ ๋ธ”๋ก์„ ์—ฌ๋Ÿฌ๋ฒˆ ๋ฐฉ๋ฌธํ•˜๋Š” NL ์กฐ์ธ ํ˜•ํƒœ์—์„œ ์ธ๋ฑ์Šค๋ฅผ ๊ฒฝ์œ ํ•œ ํ…Œ์ด๋ธ” ์•ก์„ธ์Šค๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์—ฌ ํ’€ ํ…Œ์ด๋ธ” ์Šค์บ” ํ˜น์€ ์กฐ์ธ๋ฐฉ์‹ ๋ณ€๊ฒฝ์œผ๋กœ ์œ ๋„ํ•œ๋‹ค.

Order by๋ฅผ ๊ฐ•์ œ๋กœ ์‚ฝ์ž…ํ•ด ์†ŒํŠธ์—ฐ์‚ฐ์ด ์ผ์–ด๋‚˜๋„๋ก ํ•œ๋‹ค. Temp ์„ธ๊ทธ๋จผํŠธ์— ์ €์žฅํ•œํ›„์—๋Š” ์•„๋ฌด๋ฆฌ ๊ฐ™์€ ๋ธ”๋ก์„ ์žฌ๋ฐฉ๋ฌธํ•˜๋”๋ผ๋„ ์ƒ๊ด€์—†๋‹ค

๋Œ€๋Ÿ‰์˜ ์—…๋ฐ์ดํŠธํ›„ ๊ณง๋ฐ”๋กœ ํ•ด๋‹น ํ…Œ์ด๋ธ”์— ๋Œ€ํ•ด Full Scan์„ ํ•œ๋ฒˆ ๋‚ ๋ ค์ค€๋‹ค.

9. ํŠธ๋žœ์žญ์…˜์˜ ํŠน์ง•

์›์ž์„ฑ(Automicity), ์ผ๊ด€์„ฑ(Consistency), ๊ฒฉ๋ฆฌ์„ฑ(Isolation), ์˜์†์„ฑ(Durability)

10. ํŠธ๋žœ์žญ์…˜ ์ˆ˜์ค€ ์ฝ๊ธฐ ์ผ๊ด€์„ฑ

ํŠธ๋žœ์žญ์…˜์ด ์‹œ์ž‘๋œ ์‹œ์ ์„ ๊ธฐ์ค€์œผ๋กœ ์ผ๊ด€์„ฑ์žˆ๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด๋“ค์ด๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

11. Autonomous Transaction

๋ฉ”์ธ ํŠธ๋žœ์žญ์…˜์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ณ  ์„œ๋ธŒ ํŠธ๋žœ์žญ์…˜๋งŒ ๋”ฐ๋กœ ์ปค๋ฐ‹ํ•˜๋Š” ๊ธฐ๋Šฅ

12. Latch

SGA์— ๊ณต์œ ๋˜์–ด ์žˆ๋Š” ๊ฐ–๊ฐ€์ง€ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๋ณดํ˜ธํ•  ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ€๋ฒผ์šด Lock

13. Buffer Lock

๋ฒ„ํผ ๋ธ”๋ก์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ง๋ ฌํ™”

14. ๊ต์ฐฉ์ƒํƒœ

๋‘์„ธ์…˜์ด ๊ฐ๊ฐ Lock์„ ์„ค์ •ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์„œ๋กœ ์•ก์„ธ์Šค ํ•˜๋ ค๊ณ  ๋งˆ์ฃผ๋ณด๊ณ  ์ง„ํ–‰ํ•˜๋Š” ์ƒํ™ฉ

15. Soft Parsing

๋ฉ”๋ชจ๋ฆฌ์— Caching ๋ผ ์žˆ๋Š” SQL์„ ์ฐพ์•„์„œ ๋ฐ”๋กœ ์‹คํ–‰

16. Hard Parsing

๋ฉ”๋ชจ๋ฆฌ์—์„œ SQL์„ ์ฐพ๋Š”๋ฐ ์‹คํŒจํ•ด ์ตœ์ ํ™” ๋ฐ Row-Source์ƒ์„ฑ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์น˜๋Š” ๊ฒƒ

17. ์ปค์„œ์˜ ์ข…๋ฅ˜ ์ •๋ฆฌ

๊ณต์œ ์ปค์„œ(Shared Cusor) : SGA๋‚ด์— Shared Pool์— ์กด์žฌํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์บ์‹œ์— ๊ณต์œ ๋˜์žˆ๋Š” Shared SQL Area

์„ธ์…˜์ปค์„œ(Session Cursor) : PGA๋‚ด์— Private SQL Area์— ์ €์žฅ๋œ ์ปค์„œ

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปค์„œ(Application Cursor) : ์„ธ์…˜ ์ปค์„œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํ•ธ๋“ค

18. ๋ฐ”์ธ๋“œ๋ณ€์ˆ˜ ์‚ฌ์šฉ์‹œ ๋ถ€์ž‘์šฉ

๋ฐ”์ธ๋“œ ๋ณ€์ˆ˜ ์‚ฌ์šฉ์‹œ ํ†ต๊ณ„์ •๋ณด๋Š” ํ™œ์šฉ, ์ปฌ๋Ÿผ ํžˆ์Šคํ† ๊ทธ๋žจ ์ •๋ณด๋Š” ์‚ฌ์šฉ๋ชปํ•จ

19. ์„ธ์…˜์ปค์„œ ์บ์‹ฑ

SQL๊ตฌ๋ฌธ ๋ถ„์„ ํ›„ ํ•ด์‹œ๊ฐ’ ๊ณ„์‚ฐ, Library Lacth ํš๋“ํ•œ ํ›„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํƒ์ƒ‰ ๊ณผ์ •์„ ์—†์• ๋ฒ„๋ฆฐ๋‹ค.

20. ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปค์„œ ์บ์‹ฑ

์„ธ์„ ์ปค์„œ ์บ์‹ฑํ•œ ์ƒํƒœ์—์„œ ๊ณต์œ ์ปค์„œ ํž™์„ Pinํ•˜๊ณ  ์‹คํ–‰์— ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ PGA์— ํ• ๋‹นํ•˜๋Š” ์ž‘์—…๊นŒ์ง€ ์—†์• ๋ฒ„๋ฆฐ๋‹ค

21. ROWID์˜ ๊ตฌ์„ฑ

๋ฐ์ดํ„ฐ ์˜ค๋ธŒ์ ํŠธ ๋ฒˆํ˜ธ(6์ž๋ฆฌ) + ๋ฐ์ดํ„ฐํŒŒ์ผ ๋ฒˆํ˜ธ(3์ž๋ฆฌ) + ๋ธ”๋ก๋ฒˆํ˜ธ(6์ž๋ฆฌ) + ๋กœ์šฐ๋ฒˆํ˜ธ(3์ž๋ฆฌ)

22. y.๋Œ€์ƒ๋…„์›”(+) = substr(x.ํŒŒํŠธ๋„ˆ์ง€์›์š”์ฒญ์ผ์ž, 1,6) -1

x.ํŒŒํŠธ๋„ˆ์ง€์›์š”์ฒญ์ผ์ž๋Š” varchar2 ํ˜•์ด๋‹ค.
varchar2 ์ปฌ๋Ÿผ์— ์ˆซ์ž ๊ฐ’์„ ๋”ํ•˜๊ฑฐ๋‚˜ ๋นผ๋Š” ์—ฐ์‚ฐ์„ ๊ฐ€ํ•˜๋ฉด ๋‚ด๋ถ€์ ์œผ๋กœ ์ˆซ์žํ˜•์œผ๋กœ ํ˜•๋ณ€ํ™˜์ด ์ผ์–ด๋‚œ๋‹ค.
์ด๋Ÿด ๊ฒฝ์šฐ y.๋Œ€์ƒ๋…„์›” ๊นŒ์ง€๋„ ์ž๋™์œผ๋กœ ํ˜•๋ณ€ํ™˜์ด ๋˜๋ฏ€๋กœ ์ธ๋ฑ์Šค ์Šค์บ”์ด ๋ถˆ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

์•„๋ž˜์ฒ˜๋Ÿผ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

to_number(y.๋Œ€์ƒ๋…„์›”(+)) = to_number(substr(x.ํŒŒํŠธ๋„ˆ์ง€์›์š”์ฒญ์ผ์ž,1, 6)) -1

์ด๋ ‡๊ฒŒ ๋˜๋ฏ€๋กœ y.๋Œ€์ƒ๋…„์›” ์ปฌ๋Ÿผ์˜ ์ธ๋ฑ์Šค๊ฐ€ ๋จนํžˆ์ง€ ์•Š๋Š”๋‹ค.

์•„๋ž˜์™€ ๊ฐ™์ด ํŠœ๋‹ํ•œ๋‹ค.

y.๋Œ€์ƒ๋…„์›”(+) = to_char(add_months(to_date(x.ํŒŒํŠธ๋„ˆ์ง€์›์š”์ฒญ์ผ์ž, 'yyyymmdd') -1), 'yyyymm')

23. decodeํ•จ์ˆ˜ ์‚ฌ์šฉ์‹œ ์ฃผ์˜์ 

decode(a, b, c, d) : a์™€ b๊ฐ€ ๊ฐ™์œผ๋ฉด c๋ฅผ ๋ฐ˜ํ™˜ ์•„๋‹ˆ๋ฉด d๋ฐ˜ํ™˜

์—ฌ๊ธฐ์„œ c์ธ์ž๊ฐ€ null๊ฐ’์ด๋ฉด varchar2๋กœ ์ทจ๊ธ‰ํ•œ๋‹ค.

๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด d์˜ ์ธ์ž๊ฐ’์„ varchar2๋กœ ํ˜•๋ณ€ํ™˜ ์‹œํ‚จ๋‹ค.

max(decode(job, 'presidendt', null, sal)) max_sal2 -> ์—ฌ๊ธฐ์„œ 4๋ฒˆ์งธ ์ธ์ž์ธ sal์˜ max๊ฐ’์„ ๊ตฌํ• ๋•Œ varchar2๋กœ ํ˜•๋ณ€ํ™˜ ์ƒํƒœ์—์„œ max๊ฐ’์„ ๊ตฌํ•˜๋ฏ€๋กœ 950์ด 3000๋ณด๋‹ค ๋” ํฐ๊ฐ’์ด๋ผ๊ณ  ์ž˜๋ชป ๋‚˜์™€ ๋ฒ„๋ฆฐ๋‹ค.

์•„๋ž˜์™€ ๊ฐ™์ด ์ˆ˜์ •ํ•œ๋‹ค.

max(decode(job, 'president', to_number(null), sal)) max_sal2 -> ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ œ๋Œ€๋กœ sal๊ฐ’์˜ max๊ฐ’์ด ๋‚˜์˜จ๋‹ค.

24. ๋น„์šฉ ๊ตฌํ•˜๋Š” ๊ณต์‹

๋น„์šฉ = blevel + (๋ฆฌํ”„๋ธ”๋ก์ˆ˜ * ์œ ํšจ์ธ๋ฑ์Šค ์„ ํƒ๋„) + (ํด๋Ÿฌ์Šคํ„ฐ๋งํŒฉํ„ฐ * ์œ ํšจํ…Œ์ด๋ธ” ์„ ํƒ๋„)

25. IOT ์ ์šฉํ•  ํ…Œ์ด๋ธ” ์œ ํ˜•

ํฌ๊ธฐ๊ฐ€ ์ž‘๊ณ  NL์กฐ์ธ์œผ๋กœ ๋ฐ˜๋ณต ๋ฃฉ์—…ํ•˜๋Š” ํ…Œ์ด๋ธ”

ํญ์ด ์ข๊ณ  ๋กœ์šฐ์ˆ˜๊ฐ€ ๋งŽ์€ ํ…Œ์ด๋ธ”

๋„“์€ ๋ฒ”์œ„๋ฅผ ์ฃผ๋กœ ๊ฒ€์ƒ‰ํ•˜๋Š” ํ…Œ์ด๋ธ”

๋ฐ์ดํ„ฐ ์ž…๋ ฅ๊ณผ ์กฐํšŒํŒจํ„ด์ด ์„œ๋กœ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”

26. Physical guess

secondary index๋ฅผ ์ตœ์ดˆ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์žฌ์ƒ์„ฑํ•œ ์‹œ์ ์— IOT๋ ˆ์ฝ”๋“œ๊ฐ€ ์œ„์น˜ํ–ˆ๋˜ ๋ฐ์ดํ„ฐ ๋ธ”๋ก ์ฃผ์†Œ

27. Logical ROWID

Logical Rowid = PK + Physical guess

28. ๋น„ํŠธ๋งต ์ธ๋ฑ์Šค๋ฅผ ์Šค์บ”ํ•˜๋ฉด์„œ ํ…Œ์ด๋ธ” ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐพ์•„๊ฐ€๋Š” ๋ฐฉ๋ฒ•

์˜ค๋ผํด์€ ํ•œ ๋ธ”๋ก์— ์ €์žฅํ• ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๋ ˆ์ฝ”๋“œ์ˆ˜๋ฅผ ์ œํ•œํ•œ๋‹ค.

๋น„ํŠธ๋งต ์ธ๋ฑ์Šค 9500๋ฒˆ์งธ ๋น„ํŠธ๊ฐ€ 1์ธ ๊ฐ’์˜ ๋ ˆ์ฝ”๋“œ๋Š”?

์ตœ๋Œ€๋ ˆ์ฝ”๋“œ ๊ฐœ์ˆ˜๋Š” : 730
9500/730 = 13 -> 14๋ฒˆ์งธ ๋ธ”๋ก
9500%730 = 10 -> 10๋ฒˆ์งธ ๋ ˆ์ฝ”๋“œ

29. ํ…Œ์ด๋ธ” Prefetch

ํ•œ๋ฒˆ์˜ Disk I/O๋ฅผ ํ†ตํ•ด์„œ ๊ณง์ด์–ด ์ฝ์„ ๊ฐ€๋Šฅ์„ฑ์ด ํฐ ๋ธ”๋ก๋“ค์„ ์บ์‹œ์— ๋ฏธ๋ฆฌ ์ ์žฌ ํ•˜๋Š” ๊ธฐ๋Šฅ

30. ํ…Œ์ด๋ธ” Prefetch ๊ฐ€ ์ผ์–ด๋‚˜๋Š” ์ƒํ™ฉ

Inner์ชฝ Non-Unique ์ธ๋ฑ์Šค๋ฅผ Range Scanํ•  ๋•Œ

Inner์ชฝ Unique ์ธ๋ฑ์Šค๋ฅผ Non-Unique ์กฐ๊ฑด์œผ๋กœ Range Scan ํ• ๋•Œ

Inner์ชฝ Unique ์ธ๋ฑ์Šค๋ฅผ Unique์กฐ๊ฑด์œผ๋กœ ์‹คํ–‰ํ• ๋•Œ ๋‚˜ํƒ€๋‚ ์ˆ˜์žˆ๋Š”๋ฐ ์ด๋•Œ๋Š” Range Scan์œผ๋กœ ์•ก์„ธ์Šค

31. Buffer Pinning์ผ์–ด๋‚˜๋Š” ์ƒํ™ฉ

ํ…Œ์ด๋ธ” ๋ธ”๋ก์— ๋Œ€ํ•œ Buffer Pinning

Inner์ชฝ ์ธ๋ฑ์Šค ๋ฃจํŠธ ๋ธ”๋ก์—๋Œ€ํ•œ Buffer Pinning

ํ•˜๋‚˜์˜ Outer๋ ˆ์ฝ”๋“œ์— ๋Œ€ํ•œ Inner์ชฝ๊ณผ์˜ ์กฐ์ธ์„ ๋งˆ์น˜๊ณ  Outer์ชฝ์œผ๋กœ ๋Œ์•„์˜ค๋”๋ผ๋„ ํ…Œ์ด๋ธ” ๋ธ”๋ก์— ๋Œ€ํ•œ Buffer Pinning

User Rowid๋กœ ํ…Œ์ด๋ธ” ์•ก์„ธ์Šค์‹œ Buffer Pinning

Inner์ชฝ ๋ฃจํŠธ์•„๋ž˜ ์ธ๋ฑ์Šค ๋ธ”๋ก๋“ค๋„ Buffer Pinng

32. ํ™•์žฅ๋œ ROWID ํฌ๋งท

๋ฐ์ดํ„ฐ์˜ค๋ธŒ์ ํŠธ๋ฒˆํ˜ธ(6)+๋ฐ์ดํ„ฐํŒŒ์ผ๋ฒˆํ˜ธ(3)+๋ธ”๋ก๋ฒˆํ˜ธ(6)+๋กœ์šฐ๋ฒˆํ˜ธ(3)

33. ์ธ๋ฑ์Šค ์„ค๊ณ„

์กฐ๊ฑด์ ˆ์— ์‚ฌ์šฉ, '='์กฐ๊ฑด์œผ๋กœ ์กฐํšŒ

34. QBNAME ํžŒํŠธ์˜ ์‚ฌ์šฉ

SELECT /*+ LEADING(DEPT@QB1) */ *
FROM EMP
WHERE DEPTNO IN
(
SELECT /*+ UNNEST QB_NAME(QB1) */ DEPTNO
FROM DEPT
);

35. NL_SJ ์˜ ์‚ฌ์šฉ

SELECT /*+ LEADING(EMP) */ *
FROM EMP
WHERE DEPTNO IN
(
SELECT /*+ UNNEST NL_SJ */ DEPTNO
FROM DEPT
);

36. NL_AJ ์˜ ์‚ฌ์šฉ

SELECT *
FROM DEPT D
WHERE NOT EXSITS
( SELECT /*+ UNNEST NL_AJ */ 'X'
FROM EMP
WHERE DEPTNO = D.DEPTNO
);   

37. NO_UNNEST์™€ PUSH_SUBQ์˜ ์‚ฌ์šฉ

SELECT /*+ LEADING(E1) USE_NL(E2) */ SUM(E1.SAL), SUM(E2.SAL)
FROM EMP1 E1, EMP2 E2
WHERE E1.NO = E2.NO
AND EXISTS
( 
SELECT /*+ NO_UNNSET PUSH_SUBQ */ 'X' FROM DEPT
WHERE DEPTNO = E1.DEPTNO
AND LOC = 'NEW YORK'
);

38. ๋ทฐ๋จธ์ง•์ด ๋˜์ง€ ์•Š๋Š” ์ƒํ™ฉ

์ง‘ํ•ฉ์—ฐ์‚ฐ์ž, CONNECT BY ์ ˆ, ROWNUM ์‚ฌ์šฉ, GROUP BY ์—†์ด ์ง‘๊ณ„ํ•จ์ˆ˜ ์‚ฌ์šฉ, ๋ถ„์„ํ•จ์ˆ˜

39. ๋ณ‘๋ ฌ DML ์ฒ˜๋ฆฌ

ALTER SESSION ENABLE PARALLEL DML;

EXPLAIN PLAN FOR
UPDATE /*+ PRRALLEL(T 4)*/ T SET NO2 = LPAD(NO, 5, '0');

ALTER SESSION ENABLE PARALLEL DML;

INSERT /*+ APPEND PARALLEL(T1 4) */INTO T1
SELECT /*+ FULL(T2) PARALLEL(T2 4) */ * FROM T2;

40. Granule

๋ธ”๋ก๊ธฐ๋ฐ˜ Granule : PX BLOCK ITERATOR

ํŒŒํ‹ฐ์…˜๊ธฐ๋ฐ˜ Granule : PX PARTITION RANGE ALL(ํŒŒํ‹ฐ์…˜ ์ „์ฒด), PX PARTITION RANGE ITERATOR(๋ถ€๋ถ„ ํŒŒํ‹ฐ์…˜)

41. ํŒŒํ‹ฐ์…˜ ์กฐ์ธ

  • FULL PARTITION WISE ์กฐ์ธ : ๋‘๊ฐœ์˜ ํ…Œ์ด๋ธ”์ด ๊ฐ™์€ ๊ธฐ์ค€์œผ๋กœ ํŒŒํ‹ฐ์…”๋‹ ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ

  • PARTIAL PARTITION WISE ์กฐ์ธ : ๋‘˜์ค‘ ํ•˜๋‚˜๋งŒ ํŒŒํ‹ฐ์…˜ ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ

  • ๋™์  ํŒŒํ‹ฐ์…”๋‹ : ์–‘์ชฝ ํ…Œ์ด๋ธ”์„ ๋™์ ์œผ๋กœ ํŒŒํ‹ฐ์…”๋‹ํ•˜๊ณ ์„œ FULL PARTITION WISE ์กฐ์ธ, ํ•œ์ชฝํ…Œ์ด๋ธ”์„ BROADCAST ํ•˜๊ณ  ๋‚˜์„œ ์กฐ์ธ

  • BROADECAST ๋ฐฉ์‹

42. ์นด๋””๋„๋ฆฌํ‹ฐ ๊ตฌํ•˜๋Š” ๊ณต์‹

์นด๋””๋„๋ฆฌํ‹ฐ = ์„ ํƒ๋„ * ์ „์ฒด๋ ˆ์ฝ”๋“œ ์ˆ˜

43. ์„ธ์…˜ ์ปค์„œ ์บ์‹ฑ

sql๊ตฌ๋ฌธ๋ถ„์„,ํ•ด์‹œ๊ฐ’๊ณ„์‚ฐ,๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์บ์‹œ ๋ž˜์น˜ ํš๋“,๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ปค์„œ ํƒ์ƒ‰ ๋“ค์„ ์ƒ๋žต

44. ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปค์„œ ์บ์‹ฑ

์„ธ์…˜์ปค์„œ์บ์‹ฑ์—๋‹ค๊ฐ€ ๊ณต์œ ์ปค์„œ ํž™์„ pinํ•˜๊ณ  ์‹คํ–‰์— ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ pgaํ• ๋‹นํ•˜๋Š” ๊ณผ์ •์„ ์ƒ๋žต

profile
Data Engineer

0๊ฐœ์˜ ๋Œ“๊ธ€