본문으로 건너뛰기

단원 모의 문제

정보처리기사 목차물리 데이터베이스 설계문제 17개

17단원 '물리 데이터베이스 설계'의 열 레슨에서 10문제, 앞 단원(13·14·15)에서 4문제를 섞었고, 끝에 실기 꼴 3문제가 있습니다. 앞 단원 문제가 어느 레슨인지는 정답을 펼치면 보입니다. 실기 꼴은 종이에 답을 끝까지 쓴 뒤 펼치세요. 띄어쓰기만 다르면 같은 답입니다.

SQL 문제는 아래 네 표로 풉니다. 블록마다 처음 데이터에서 시작합니다. 학생의 학과코드는 학과를, 수강의 학번은 학생을, 수강의 과목코드와 과목의 선수과목은 과목을 가리킵니다. 학생의 학과코드는 비워 둘 수 있습니다.

학과

학과코드학과명건물
CS컴퓨터공학관
EE전자공학관
BA경영경영관

학생

학번이름학년학과코드
101김민수3CS
102이서준2CS
103김지민2CS
104박서연1EE
105최민준3EE
106정하윤3EE
107강도현1NULL

과목

과목코드과목명학점선수과목
DS자료구조3NULL
OS운영체제3DS
NW네트워크2OS

수강

학번과목코드점수
101DS85
101OS75
101NW80
102DS70
102OS60
103DS65
103NW55
104OS75
104NW95
105DS100
105NW90
107NW50

문제 1

주문 표에서 조회 조건으로 자주 쓰는 열에 인덱스를 하나 더 만들었습니다. 물리 설계에서 함께 보는 셋 가운데 응답 시간과 트랜잭션 처리량에 일어나는 일로 알맞은 것을 고르세요.

  • ① 응답 시간이 짧아지고 트랜잭션 처리량도 늘어난다
  • ② 응답 시간이 짧아지고 트랜잭션 처리량은 떨어진다
  • ③ 응답 시간이 길어지고 트랜잭션 처리량은 늘어난다
  • ④ 응답 시간이 길어지고 트랜잭션 처리량도 떨어진다
정답

② — 인덱스는 찾을 행을 적게 읽게 해 주어 조회의 응답 시간을 줄입니다. 그 대신 행을 넣고 고칠 때마다 인덱스까지 함께 고쳐야 해서, 정해진 시간에 처리하는 트랜잭션 수는 떨어집니다. 함께 보는 셋은 하나를 좋게 하면 다른 하나가 나빠지는 맞바꾸는 관계입니다.

  • ① 인덱스가 모든 일을 빠르게 한다고 봤습니다. 읽는 일은 빨라지지만 넣고 고치는 일에는 인덱스를 고치는 품이 더 붙습니다.
  • ③ 저장할 것이 늘면 조회까지 느려진다고 봤습니다. 조회는 인덱스를 따라 몇 칸만 읽어 되레 빨라집니다.
  • ④ 인덱스를 공간만 더 쓰는 것으로 봤습니다. 공간을 더 쓰는 대가로 줄이는 것이 응답 시간입니다.

다시 볼 레슨: 물리 설계와 칼럼 속성

문제 2

학생 표의 학과코드는 지금 비워 둘 수 있는 열입니다. 앞으로는 비울 수 없게 하려고 다음 문장을 처음 데이터에 돌렸습니다. 결과로 알맞은 것을 고르세요.

ALTER TABLE 학생
  MODIFY 학과코드 NOT NULL;
  • ① 문장이 돌고, 학과코드가 비어 있던 행은 지워진다
  • ② 문장이 돌고, 학과코드가 비어 있던 행에 값이 채워진다
  • ③ 오류가 나고 아무것도 바뀌지 않는다 — 학과코드가 비어 있는 행이 이미 있다
  • ④ 오류가 나고 아무것도 바뀌지 않는다 — NULL 허용은 표를 만들 때만 정할 수 있다
정답

③ — 열을 NOT NULL로 바꾸려면 그 열에 비어 있는 행이 하나도 없어야 합니다. 학생 표에는 학과코드가 비어 있는 강도현(107)이 있어, Oracle은 ORA-02296 오류를 내고 열을 그대로 둡니다. 그 행을 채우거나 지운 뒤에 다시 돌려야 합니다.

  • ① 어긋나는 행을 DBMS가 치워 준다고 봤습니다. 제약 조건을 거는 문장은 행을 지우지 않고, 어긋나는 행이 있으면 거는 일 자체가 막힙니다.
  • ② 비어 있던 칸이 어떤 값으로든 채워진다고 봤습니다. 칸을 채우는 것은 UPDATE 문이고, 제약 조건을 거는 문장은 값을 넣지 않습니다.
  • ④ 칼럼 속성을 표를 만들 때만 정한다고 봤습니다. 자료형·길이·NULL 허용·기본값은 ALTER TABLE … MODIFY로 뒤에 바꿀 수 있습니다. 여기서 막은 것은 문법이 아니라 이미 들어 있는 NULL입니다.

다시 볼 레슨: DDL: CREATE·ALTER·DROP · 물리 설계와 칼럼 속성

문제 3

수강 표의 행을 점수 구간으로 나눈 표를 만들어 모두 옮겨 담았습니다. NUM_ROWS는 파티션마다 든 행 수입니다. P1·P2·P3의 행 수로 알맞은 것을 고르세요.

CREATE TABLE 수강_점수 (
  학번 NUMBER,
  점수 NUMBER
) PARTITION BY RANGE (점수) (
  PARTITION P1
    VALUES LESS THAN (60),
  PARTITION P2
    VALUES LESS THAN (80),
  PARTITION P3
    VALUES LESS THAN
      (MAXVALUE)
);
INSERT INTO 수강_점수
SELECT 학번, 점수
FROM 수강;
ANALYZE TABLE 수강_점수
  COMPUTE STATISTICS;
SELECT PARTITION_NAME,
  NUM_ROWS
FROM USER_TAB_PARTITIONS
WHERE TABLE_NAME = '수강_점수'
ORDER BY PARTITION_POSITION;
  • ① 2·5·5
  • ② 2·6·4
  • ③ 3·4·5
  • ④ 3·5·4
정답

① — VALUES LESS THAN (60)⁠은 60보다 작은 값까지만 받습니다. 점수 55·50 두 행이 P1에 들고, 60부터 79까지인 75·70·60·65·75 다섯 행이 P2에 들고, 80 이상인 85·80·95·100·90 다섯 행이 P3에 듭니다.

  • ② 점수 80을 P2로 보냈습니다. P2가 받는 값은 80보다 작은 값까지라, 80은 다음 구간인 P3에 듭니다.
  • ③ 점수 60을 P1로 보냈습니다. '60 미만'과 '60 이하'는 다릅니다.
  • ④ 두 경곗값을 모두 앞 파티션으로 보냈습니다. 경계로 적은 값은 늘 뒤 파티션의 첫 값입니다.
PARTITION_NAMENUM_ROWS
P12
P25
P35

다시 볼 레슨: 파티셔닝

문제 4

두 표를 한 클러스터에 담아 함께 읽는 일을 빠르게 하려 합니다. 다음 가운데 클러스터링이 알맞지 않은 쓰임을 고르세요.

  • ① 주문과 주문상세를 주문번호로 함께 읽는 일이 잦고, 주문번호는 한번 정해지면 바뀌지 않는다
  • ② 사원과 부서를 부서코드로 함께 읽고, 부서 코드가 바뀌는 일은 몇 해에 한 번이다
  • ③ 회원과 회원등급을 등급코드로 함께 읽고, 등급 코드는 좀처럼 바뀌지 않는다
  • ④ 접속기록과 회원을 회원번호로 묶는다. 접속기록에는 초마다 수천 행이 들어오고, 월말 집계는 접속기록만 전부 훑는다
정답

④ — 클러스터링은 함께 읽는 일이 잦고 값이 잘 바뀌지 않는 짝에만 맞습니다. 넣기가 잦은 표는 키마다 잡아 둔 자리가 차서 넘친 행이 다른 블록으로 가고, 한 표만 전부 훑는 질의는 블록에 섞여 있는 다른 표의 행까지 읽습니다. 접속기록은 두 가지에 모두 걸립니다.

  • ① 맞습니다. 함께 읽는 일이 잦고 클러스터 키가 바뀌지 않아 모아 두기에 맞는 짝입니다.
  • ② 맞습니다. 키를 고치는 일이 아주 드물면 행이 다른 블록으로 옮겨 가는 품도 드물게 듭니다.
  • ③ 맞습니다. 두 표에 공통인 값이 있고 그 값이 잘 바뀌지 않아 한 블록에 모아 둘 수 있습니다.

다시 볼 레슨: 클러스터링과 데이터 지역화

문제 5

주문 표와 주문상세 표를 주문번호로 함께 읽는 일이 잦습니다. (가)·(나)에 맞는 이름으로 알맞은 것을 고르세요.

  • (가) 두 표의 행을 주문번호가 같은 것끼리 한 디스크 블록에 섞어 담았습니다.

  • (나) 주문 표의 행 자체를 주문번호 순서로 줄 세워 저장했습니다. 한 표에 이렇게 할 수 있는 것은 하나뿐입니다.

  • ① (가) 클러스터 · (나) 클러스터드 인덱스

  • ② (가) 클러스터 · (나) 넌클러스터드 인덱스

  • ③ (가) 클러스터드 인덱스 · (나) 클러스터

  • ④ (가) 클러스터드 인덱스 · (나) 넌클러스터드 인덱스

정답

① — 클러스터는 클러스터 키가 같은 행을 표가 달라도 한 블록에 섞어 담습니다. 클러스터드 인덱스는 한 표의 행을 키 순서로 줄 세워 저장하는 것이고, 행은 한 가지 순서로만 놓일 수 있어 표에 하나뿐입니다.

  • ② (나)를 넌클러스터드로 봤습니다. 넌클러스터드 인덱스는 행을 그대로 두고 키와 행 위치만 따로 정렬해 두는 것이라 여럿 만들 수 있습니다.
  • ③ 두 이름을 바꿔 봤습니다. 이름이 닮았지만 클러스터는 표가 다른 행까지 모으고, 클러스터드 인덱스는 한 표의 행만 줄 세웁니다.
  • ④ (가)까지 인덱스로 봤습니다. 클러스터드 인덱스는 한 표의 행을 줄 세우는 것이고, 표 둘의 행을 한 블록에 섞어 담지는 않습니다.

다시 볼 레슨: 인덱스 · 클러스터링과 데이터 지역화

문제 6

어느 회사가 사원 표를 두 서버에 나눠 둡니다. 사원번호·이름은 서울 서버에, 사원번호·급여는 부산 서버에 두고, 두 조각을 사원번호로 이어 원래 표를 되돌립니다. 이 나누기의 이름으로 알맞은 것을 고르세요.

  • ① 수평 단편화
  • ② 수직 단편화
  • ③ 할당
  • ④ 복제
정답

② — 열을 골라 가르는 것이 수직 단편화입니다. 조각마다 같은 키 열을 두고, 다시 모을 때는 그 키로 이어 붙입니다.

  • ① 행을 조건으로 가르는 쪽입니다. '서울 사원은 서울 서버, 부산 사원은 부산 서버'처럼 나누면 수평 단편화입니다.
  • ③ 쪼갠 조각을 어느 서버에 둘지 정하는 일의 이름입니다. 쪼개는 방향의 이름이 아닙니다.
  • ④ 같은 조각을 여러 서버에 두는 것입니다. 여기서는 서로 다른 열을 나눠 두었습니다.

다시 볼 레슨: 분산 데이터베이스

문제 7

병행 제어 기법 가운데 락을 쓰지 않아 교착 상태가 생기지 않는 것끼리 묶인 것을 고르세요.

  • ① 로킹과 2단계 로킹
  • ② 로킹과 타임스탬프 순서
  • ③ 2단계 로킹과 낙관적 검증
  • ④ 타임스탬프 순서와 낙관적 검증
정답

④ — 타임스탬프 순서는 트랜잭션에 붙인 시각의 앞뒤로 접근 순서를 따지고, 낙관적 검증은 끝낼 때가 되어서야 부딪혔는지 따집니다. 둘 다 락을 걸지 않아 서로의 락을 기다리는 교착 상태가 생기지 않습니다.

  • ① 둘 다 락을 거는 기법입니다. 2단계 로킹은 락을 얻는 단계와 푸는 단계를 나눈 규약이고, 교착 상태를 막지는 못합니다.
  • ② 타임스탬프 순서는 락을 쓰지 않지만, 로킹은 락을 거는 일 그 자체입니다.
  • ③ 낙관적 검증은 락을 쓰지 않지만, 2단계 로킹은 락을 거는 규약입니다.

다시 볼 레슨: 병행 제어

문제 8

어느 시스템이 Eager 방식(eager)으로 이중화되어 있습니다. 이 시스템을 운영하면서 겪는 일로 옳지 않은 것을 고르세요.

  • ① 주문을 고치는 데 걸리는 시간이 이중화하기 전보다 길어졌다
  • ② 복제 서버를 점검하려고 꺼 둔 동안에는 주문을 고칠 수 없었다
  • ③ 복제 서버를 읽는 통계 화면에 몇 분 전 값이 보이는 일이 가끔 있다
  • ④ 주 서버와 복제 서버의 주문 건수를 같은 순간에 세면 늘 같다
정답

③ — 커밋을 먼저 마치고 변경을 나중에 보내는 Lazy 방식에서 일어나는 일입니다. Eager 방식은 복제 서버에 반영한 뒤에 커밋을 마치므로, 커밋이 끝난 뒤 복제 서버를 읽으면 늘 새 값이 나옵니다.

  • ① 맞습니다. 커밋이 복제 서버의 반영을 기다리므로 고치는 데 걸리는 시간이 늘어납니다.
  • ② 맞습니다. 변경과 복제가 한 트랜잭션에 묶여 있어, 복제 서버에 반영할 수 없으면 변경 자체가 취소됩니다.
  • ④ 맞습니다. 어느 순간에 봐도 두 서버의 값이 같은 것이 이 방식을 고르는 까닭입니다.

다시 볼 레슨: 데이터베이스 이중화

문제 9

트랜잭션이 도는 중에 바꾼 값을 그때그때 데이터베이스에 써 넣는 시스템입니다. 장애가 난 뒤 로그를 보니 T의 COMMIT은 적혀 있고, S의 COMMIT은 적혀 있지 않았습니다. 회복할 때 두 트랜잭션에 하는 일로 알맞은 것을 고르세요.

  • ① T는 다시 반영하고(REDO), S는 되돌린다(UNDO)
  • ② T는 다시 반영하고(REDO), S에는 할 일이 없다
  • ③ T에는 할 일이 없고, S는 되돌린다(UNDO)
  • ④ 두 트랜잭션 모두 할 일이 없다
정답

① — 바꾼 값을 그때그때 써 넣는 방식이라, 끝내지 못한 S의 변경이 이미 데이터베이스에 들어가 있을 수 있습니다. 그래서 S는 로그의 바꾸기 전 값으로 되돌리고, COMMIT을 마친 T는 로그의 바꾼 뒤 값으로 다시 반영합니다. 이 방식은 두 연산을 모두 씁니다.

  • ② 끝내지 못한 트랜잭션의 흔적이 데이터베이스에 없다고 봤습니다. 그것은 끝낼 때까지 데이터베이스를 건드리지 않는 지연 갱신입니다.
  • ③ 바로 써 넣었으니 다시 반영할 것이 없다고 봤습니다. 이 방식은 COMMIT한 트랜잭션에 REDO를, 끝내지 못한 트랜잭션에 UNDO를 모두 씁니다.
  • ④ 로그를 보고 할 일이 없다고 봤습니다. 회복은 로그에 COMMIT이 적혔는지로 두 트랜잭션을 가릅니다.

다시 볼 레슨: 회복

문제 10

수요일 밤에 데이터베이스를 한 벌 통째로 뜨고, 목·금·토 밤마다 증분 백업을 뜨며, 낮에는 로그 백업을 몇 분마다 뜨는 운영입니다. 일요일 새벽에 디스크가 망가졌습니다. 되살리는 차례로 알맞은 것을 고르세요.

  • ① 전체 백업 → 목·금·토 증분을 뜬 순서대로 → 로그 백업
  • ② 전체 백업 → 가장 최근 증분인 토요일 것 하나 → 로그 백업
  • ③ 목·금·토 증분을 뜬 순서대로 → 전체 백업 → 로그 백업
  • ④ 로그 백업 → 전체 백업 → 목·금·토 증분을 뜬 순서대로
정답

① — 증분 백업은 마지막 백업 뒤에 바뀐 것만 담아 날마다 담은 것이 서로 다릅니다. 밑바탕인 전체 백업을 되살린 뒤 그 뒤의 증분을 뜬 순서대로 모두 되돌리고, 마지막으로 로그 백업을 시간 순서대로 반영해 장애 직전으로 맞춥니다.

  • ② 가장 최근 하나로 끝난다고 봤습니다. 그것은 뒤의 것이 앞의 변경까지 품는 차등 백업입니다. 증분은 하나라도 빠지면 그 뒤를 되돌릴 수 없습니다.
  • ③ 증분을 먼저 되돌렸습니다. 되살릴 밑바탕이 아직 없어 되돌릴 자리가 없습니다.
  • ④ 로그 백업을 먼저 반영했습니다. 로그 백업은 데이터 백업 뒤에 쌓인 변경이라 맨 마지막에 반영합니다.

다시 볼 레슨: 데이터베이스 백업

문제 11

DAS로 쓰던 데이터베이스 저장 장치를 바꾸려 합니다. 서버 넷이 같은 데이터를 함께, 업무 트래픽에 밀리지 않고 빠르게 읽어야 하고, 저장 전용 망 장비를 갖출 예산도 있습니다. 알맞은 방식과 그 까닭을 고르세요.

  • ① NAS — 깔려 있는 업무용 네트워크에 올리면 장비를 더하지 않아도 된다
  • ② NAS — 서버마다 블록 단위로 받아 자기 디스크처럼 쓴다
  • ③ SAN — 저장 전용 망으로 묶어 업무 트래픽에 밀리지 않는다
  • ④ SAN — 서버에 케이블로 바로 꽂아 거치는 것이 없다
정답

③ — 서버 여럿이 함께 쓰면서 업무 트래픽에 밀리지 않아야 하니, 저장 장치만을 위한 전용 망으로 묶는 방식이 맞습니다. 서버는 블록 단위로 받아 자기 디스크처럼 씁니다.

  • ① 장비를 더하지 않는 쪽만 보고 골랐습니다. NAS는 업무용 네트워크를 함께 써서, 그 네트워크가 붐비면 데이터를 읽는 속도도 함께 떨어집니다.
  • ② 블록 단위로 주는 쪽을 NAS로 봤습니다. NAS는 파일 단위로 주고, 블록 단위로 주는 쪽은 DAS와 SAN입니다.
  • ④ DAS의 모습을 SAN에 붙였습니다. 케이블로 바로 꽂는 쪽이 DAS이고, 그러면 붙은 서버 한 대에 매여 넷이 함께 쓸 수 없습니다.

다시 볼 레슨: 스토리지: DAS·NAS·SAN

문제 12

회원 표의 전화번호 열을 암호화했습니다. 그 뒤로 전화번호가 '010'으로 시작하는 회원을 찾는 질의만 전보다 훨씬 느려졌습니다. 가장 알맞은 설명을 고르세요.

  • ① 암호문이 원래 값보다 길어져 읽어 오는 바이트가 늘었다
  • ② 암호문은 원래 값의 순서를 지키지 않아, 그 열의 인덱스로 범위를 좁힐 수 없다
  • ③ 암호화한 열은 읽을 때 되돌리지 않아, 맞는 행을 두 번 찾아야 한다
  • ④ 암호화는 넣을 때만 일이 늘고, 읽기는 암호화하지 않은 열과 같다
정답

② — 암호화한 열은 값의 순서가 뒤섞여 범위 검색이나 정렬이 그대로 되지 않고, 그 열의 인덱스 범위 스캔도 쓸 수 없습니다. 그래서 범위로 좁히던 질의가 모든 행을 되돌려 견주는 일이 됩니다.

  • ① 암호문이 길어지는 것은 맞습니다. 다만 그것만으로는 범위로 찾는 질의만 유난히 느려지는 까닭이 되지 않습니다. 길어지는 것은 열 길이를 늘려야 할 수 있다는 이야기입니다.
  • ③ 읽을 때 되돌리지 않는다고 봤습니다. 암호화한 열은 읽을 때 되돌려 보여 주고, 그 되돌리는 일에도 시간이 듭니다.
  • ④ 읽기는 그대로라고 봤습니다. 암호화와 복호화 모두 시간이 들어 넣기와 읽기가 함께 느려집니다.

다시 볼 레슨: 데이터베이스 암호화

문제 13

논리 데이터 모델을 물리 데이터 모델로 옮깁니다. 논리 모델의 (가) 개체와 (나) 관계가 각각 무엇이 되는지 알맞은 것을 고르세요.

  • ① (가) 열 · (나) 기본키 제약 조건
  • ② (가) 열 · (나) 외래키 제약 조건
  • ③ (가) 표 · (나) 기본키 제약 조건
  • ④ (가) 표 · (나) 외래키 제약 조건
정답

④ — 개체는 실제로 만들 표가 되고, 두 개체를 잇던 관계는 한쪽 표의 열에 거는 외래키 제약 조건이 됩니다. 속성이 열과 그 타입·길이가 되고, 키 속성이 기본키 제약 조건이 됩니다.

  • ① 개체를 열로, 관계를 기본키로 봤습니다. 열이 되는 것은 속성이고, 기본키가 되는 것은 키 속성입니다.
  • ② 관계는 맞게 봤지만 개체를 열로 봤습니다. 개체 하나가 표 하나가 됩니다.
  • ③ 개체는 맞게 봤지만 관계를 기본키로 봤습니다. 기본키는 한 표 안에서 행을 가리키는 키이고, 두 표를 잇는 것은 외래키입니다.

다시 볼 레슨: 물리 E-R 다이어그램과 CRUD 분석

문제 14

어느 DBMS의 옵티마이저는 표의 행 수와 값의 분포를 보지 않고, 미리 정해 둔 규칙의 순위만 따라 길을 고릅니다. 행이 백 개뿐인 작은 표의 한 열에 인덱스가 걸려 있고, 그 열을 조건으로 쓰는 질의가 왔습니다. 이 옵티마이저가 고르는 길과 그 방식의 이름으로 알맞은 것을 고르세요.

  • ① 전체를 읽는 편이 싸므로 전체 스캔 — 규칙 기반 옵티마이저
  • ② 표가 작아도 인덱스가 있으므로 인덱스 — 규칙 기반 옵티마이저
  • ③ 전체를 읽는 편이 싸므로 전체 스캔 — 비용 기반 옵티마이저
  • ④ 표가 작아도 인덱스가 있으므로 인덱스 — 비용 기반 옵티마이저
정답

② — 데이터를 보지 않고 정해 둔 순위만 따르는 것이 규칙 기반 옵티마이저입니다. '인덱스가 있으면 인덱스를 쓴다'는 순위를 따르므로, 표가 작아 전체를 읽는 편이 싼 경우에도 인덱스를 거칩니다.

  • ① 방식의 이름은 맞게 봤지만 고르는 길을 거꾸로 봤습니다. 어느 쪽이 싼지 따지려면 행 수와 분포를 담은 통계 정보가 있어야 합니다.
  • ③ 통계 정보를 보고 싼 쪽을 고르는 쪽은 비용 기반이 맞습니다. 다만 문제의 옵티마이저는 통계를 보지 않습니다.
  • ④ 비용 기반이 인덱스를 늘 쓴다고 봤습니다. 비용 기반은 걸리는 행이 많거나 표가 작으면 전체 스캔을 고릅니다.

다시 볼 레슨: SQL 성능 튜닝과 옵티마이저

문제 15 (실기)

어느 회사의 백업 운영입니다. 월요일 밤에 데이터베이스를 한 벌 통째로 뜨고, 화요일부터 금요일까지는 밤마다 (가)를 뜨며, 낮에는 (나)를 몇 분마다 뜹니다. 금요일 낮에 디스크가 망가졌을 때, 통째로 뜬 것과 목요일 밤 (가) 하나만 되돌린 뒤 (나)를 시간 순서대로 반영해 장애 직전으로 맞췄습니다. (가)·(나)에 맞는 백업의 이름을 한글로 쓰세요. 답을 끝까지 쓴 뒤 정답을 펼치세요.

정답

받는 답: (가) 차등 백업 · (나) 로그 백업

(가)의 실마리는 '밤마다 떴는데 되돌린 것은 가장 최근 하나뿐'입니다. 마지막 전체 백업 뒤에 바뀐 것을 모두 담기 때문에, 뒤에 뜬 하나에 앞의 변경이 다 들어 있습니다. (나)는 '데이터 백업 사이에 쌓인 것을 떠서 장애 직전까지 맞춘다'가 실마리입니다.

  • 같은 이름의 다른 꼴: (가) Differential Backup · (나) Log Backup — 영문 이름입니다. 문제가 한글로 물었습니다.
  • 틀리는 꼴 증분 백업 — (가)에: 마지막 백업 뒤에 바뀐 것만 담습니다. 그렇게 운영했다면 화·수·목에 뜬 것을 뜬 순서대로 모두 되돌려야 합니다.
  • 틀리는 꼴 전체 백업 — (가)에: 데이터베이스를 한 벌 통째로 뜨는 백업이고, 문제에서 월요일 밤에 뜬 것이 그것입니다.
  • 틀리는 꼴 로그 — (나)에: 데이터베이스가 쌓아 두는 변경 기록 자체의 이름입니다. (나)는 그 기록을 따로 떠 두는 백업의 이름입니다.

다시 볼 레슨: 데이터베이스 백업

문제 16 (실기)

데이터베이스에서 사용자마다 어느 표에 무엇을 할 수 있는지 미리 정해 두고, 정해 두지 않은 요청은 DBMS가 막습니다. GRANT로 주고 REVOKE로 거두는 권한이 그 수단입니다. 이 일의 이름을 영문으로 쓰세요. 답을 끝까지 쓴 뒤 정답을 펼치세요.

정답

받는 답: Access Control

실마리는 '누가 어느 표에 무엇을 할 수 있는지 미리 정해 두고 그 밖의 요청을 막는다'입니다. 권한을 주고 거두는 일이 그 수단이고, 그 일 전체를 가리키는 이름입니다.

  • 같은 이름의 다른 꼴: 접근 제어 — 한글 이름입니다. 문제가 영문으로 물었습니다.
  • 틀리는 꼴 ROLE: 권한 여러 개를 묶어 이름을 붙인 것입니다. 묶음의 이름이고, 요청을 막는 일의 이름이 아닙니다.
  • 틀리는 꼴 TDE(Transparent Data Encryption): 저장하는 값을 열쇠 없이 읽지 못하게 바꿔 두는 방식입니다. 권한은 질의하는 길을 막고, 암호화는 데이터 파일을 들고 가도 읽지 못하게 합니다.

다시 볼 레슨: DCL: GRANT·REVOKE · 데이터베이스 암호화

문제 17 (실기)

다음을 처음 데이터에 돌렸습니다. EXPLAIN PLAN은 쿼리를 돌리지 않고 계획만 만들어 PLAN_TABLE에 넣고, STATEMENT_ID는 그 계획에 붙인 이름입니다. 마지막 조회가 몇 줄로 나오는지, 계획 A와 계획 B의 비용(ID가 0인 줄의 COST)이 각각 얼마인지, 계획 B에 표를 찾아가는 줄(TABLE ACCESS)이 있는지를 쓰세요. 답을 끝까지 쓴 뒤 정답을 펼치세요.

EXPLAIN PLAN
  SET STATEMENT_ID = 'A' FOR
SELECT 학년
FROM 학생
WHERE 학과코드 = 'CS';
CREATE INDEX 학생_학과_IX
  ON 학생 (학과코드);
EXPLAIN PLAN
  SET STATEMENT_ID = 'B' FOR
SELECT 학년
FROM 학생
WHERE 학과코드 = 'CS';
SELECT STATEMENT_ID, ID,
  OPERATION, OPTIONS, COST
FROM PLAN_TABLE
ORDER BY STATEMENT_ID, ID;
정답

받는 답: 다섯 줄 · 계획 A의 비용 3 · 계획 B의 비용 2 · 계획 B에도 TABLE ACCESS 줄이 있다

계획 A는 인덱스가 없어 학생 표를 처음부터 끝까지 읽는 전체 스캔이라 두 줄입니다. 인덱스를 만든 뒤인 계획 B는 인덱스에서 CS인 행의 위치를 찾고(ID 2), 고르는 열인 학년이 인덱스에 없어 그 위치로 표를 찾아갑니다(ID 1). 그래서 B는 세 줄이고, 둘을 합해 다섯 줄입니다. 비용은 3에서 2로 줄었습니다.

  • 틀리는 꼴 네 줄 · B의 비용 1 · TABLE ACCESS 줄 없음: 인덱스만 읽고 끝난다고 봤습니다. 고르는 열이 조건 열과 같으면 그렇지만, 여기서는 학년을 고르므로 표를 찾아가야 합니다.
  • 틀리는 꼴 네 줄 · B의 비용 3 · 전체 스캔 그대로: 인덱스를 만들어도 계획이 바뀌지 않는다고 봤습니다. 비용 기반 옵티마이저는 인덱스를 거치는 쪽이 싸면 그쪽으로 바꿉니다.
  • 틀리는 꼴 다섯 줄 · B의 비용 3: 계획은 바뀌지만 비용은 그대로라고 봤습니다. 계획이 바뀐 까닭이 어림한 비용이 더 작기 때문입니다.
STATEMENT_IDIDOPERATIONOPTIONSCOST
A0SELECT STATEMENTNULL3
A1TABLE ACCESSFULL3
B0SELECT STATEMENTNULL2
B1TABLE ACCESSBY INDEX ROWID BATCHED2
B2INDEXRANGE SCAN1

다시 볼 레슨: SQL 성능 튜닝과 옵티마이저 · 인덱스

끝까지 내려오면 저절로 표시됩니다. 이 기기에만 저장합니다.

정보처리기사 목차로