본문으로 건너뛰기

단원 모의 문제

정보처리기사 목차권한과 트랜잭션문제 11개

15단원 '권한과 트랜잭션'의 네 레슨에서 6문제, 앞 단원(12·13)에서 2문제를 섞었고, 끝에 실기 꼴 3문제가 있습니다. 앞 단원 문제가 어느 레슨인지는 정답을 펼치면 보입니다. 문제의 SQL은 아래 네 표로 Oracle에서 돌린다고 보고 풀어 보세요. 실기 꼴은 종이에 답을 끝까지 쓴 뒤 펼치세요. 띄어쓰기만 다르면 같은 답입니다.

학과

학과코드학과명건물
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

과목 표의 주인이 LEE에게 SELECT 권한을 다시 줄 권리까지 함께 줬습니다. LEE는 그 권한을 SONG에게 다시 줬습니다. 이제 주인이 다음 문장을 시험 꼴로 실행하면 어떻게 되는지 고르세요.

REVOKE SELECT ON 과목
  FROM LEE RESTRICT;
  • ① 회수가 거부되고 두 사람의 권한이 그대로 남는다
  • ② LEE의 권한만 사라지고 SONG의 권한은 남는다
  • ③ LEE의 권한과 SONG의 권한이 함께 사라진다
  • ④ LEE의 권한은 남고 다시 줄 권리만 사라진다
정답

① — RESTRICT는 딸린 것이 있으면 하지 않습니다. LEE가 SONG에게 다시 준 권한이 있어 회수 자체가 거부되고, 두 사람의 권한은 그대로 남습니다.

  • ② 받은 사람의 권한만 따로 거둔다고 봤습니다. 다시 준 권한이 있으면 RESTRICT는 회수를 거부하고, 아무것도 거두지 않습니다.
  • ③ CASCADE의 동작으로 봤습니다. 다시 준 권한까지 연쇄로 거두는 쪽이 CASCADE입니다.
  • ④ GRANT OPTION FOR의 동작으로 봤습니다. 그 말은 REVOKE 바로 뒤에 붙고, 권한은 남기고 다시 줄 권리만 거둡니다.

다시 볼 레슨: DCL: GRANT·REVOKE

문제 2

다음 두 문장을 시험 꼴로 적었습니다. 학생 표의 학과코드는 학과 표의 학과코드를 가리키고, YANG은 받은 SELECT 권한을 BAEK에게 다시 줬습니다. 두 CASCADE가 함께 없애는 것으로 알맞은 것을 고르세요.

DROP TABLE 학과 CASCADE;
REVOKE SELECT ON 학생
  FROM YANG CASCADE;
  • ① 학과 표를 가리키는 학생 표까지 지운다 · YANG이 받은 권한만 거둔다
  • ② 학과 표를 가리키는 학생 표까지 지운다 · YANG이 BAEK에게 준 권한까지 거둔다
  • ③ 학과 표를 가리키는 제약 조건과 뷰까지 지운다 · YANG이 BAEK에게 준 권한까지 거둔다
  • ④ 학과 표를 가리키는 제약 조건과 뷰까지 지운다 · YANG이 받은 권한만 거둔다
정답

③ — DROP의 CASCADE는 지우는 표를 가리키던 제약 조건과 뷰를 없앱니다. 학생 표는 행 그대로 남고 학과코드를 검사하던 외래키 제약 조건만 사라집니다. REVOKE의 CASCADE는 받은 사람이 다시 준 권한까지 따라가 거두어, YANG과 BAEK의 권한이 함께 사라집니다.

  • ① 두 자리를 모두 좁게 봤습니다. DROP은 가리키는 표가 아니라 그 제약 조건을 없애고, REVOKE는 다시 준 권한까지 거둡니다.
  • ② DROP이 가리키는 표까지 통째로 없앤다고 봤습니다. 가리키는 표의 행은 남고, 그 표에 걸려 있던 제약 조건만 없어집니다.
  • ④ REVOKE의 CASCADE를 받은 사람의 권한만 거두는 것으로 봤습니다. CASCADE는 그 사람이 다시 준 권한까지 따라갑니다.

다시 볼 레슨: DDL: CREATE·ALTER·DROP · DCL: GRANT·REVOKE

문제 3

다음 문장을 차례로 실행했습니다. 끝난 뒤 107번 강도현의 수강 행이 어떻게 되는지 고르세요.

DELETE FROM 수강
WHERE 학번 = 107;
COMMIT;
ROLLBACK;
SELECT COUNT(*) AS 행수
FROM 수강
WHERE 학번 = 107;
  • ① ROLLBACK이 되돌려 행이 그대로 있다
  • ② 지워진 채로 남아 행이 없다
  • ③ ROLLBACK이 수강 표를 처음 상태로 되돌려 12행이 된다
  • ④ COMMIT한 뒤의 ROLLBACK은 오류로 막힌다
정답

② — COMMIT이 끝난 트랜잭션은 완료 상태입니다. 완료한 변경은 ROLLBACK으로 되돌릴 수 없어, 107번 행은 지워진 채로 남습니다.

  • ① ROLLBACK이 언제든 앞의 변경을 되돌린다고 봤습니다. 되돌릴 수 있는 것은 아직 확정하지 않은 변경뿐입니다.
  • ③ ROLLBACK이 표 전체를 처음으로 돌려놓는다고 봤습니다. 되돌아가는 범위는 그 트랜잭션이 바꾼 것뿐이고, 확정한 뒤에는 그조차 남지 않습니다.
  • ④ 되돌릴 것이 없는 ROLLBACK이 오류라고 봤습니다. 오류 없이 지나가고, 데이터베이스는 그대로입니다.
행수
0

다시 볼 레슨: 트랜잭션과 ACID

문제 4

학생 표를 고치는 트랜잭션이 마지막 문장까지 실행을 끝냈지만 아직 COMMIT을 하지 않았습니다. 이때의 상태가 (가)입니다. 그 뒤 더 진행할 수 없게 되어 바꾼 것을 모두 되돌리고 끝냈다면, 끝난 뒤의 상태가 (나)입니다. 알맞은 것을 고르세요.

  • ① (가) 활동 · (나) 실패
  • ② (가) 활동 · (나) 철회
  • ③ (가) 부분 완료 · (나) 실패
  • ④ (가) 부분 완료 · (나) 철회
정답

④ — 마지막 문장까지 끝났지만 확정하지 않은 상태가 부분 완료입니다. 바꾼 것을 모두 되돌려 시작 전으로 돌아가면 철회입니다.

  • ① 두 자리를 모두 한 단계 앞으로 봤습니다. 활동은 문장이 도는 중이고, 실패는 멈추기만 하고 아직 되돌리지 않은 상태입니다.
  • ② (나)는 맞게 봤지만 (가)를 활동으로 봤습니다. 마지막 문장까지 끝냈으면 활동을 지나 부분 완료입니다.
  • ③ (가)는 맞게 봤지만 (나)를 실패로 봤습니다. 되돌리기를 마친 뒤의 이름이 철회입니다.

다시 볼 레슨: 트랜잭션과 ACID

문제 5

두 트랜잭션이 아래 차례로 돌았습니다. 시각 4 뒤에 벌어지는 일로 알맞은 것을 고르세요.

시각T1T2
1수강 표 101번 OS 행에 배타 락을 걸고 점수를 고친다
2과목 표 OS 행에 배타 락을 걸고 학점을 고친다
3과목 표 OS 행을 고치려고 기다린다
4수강 표 101번 OS 행을 고치려고 기다린다
  • ① 서로가 쥔 락을 기다려 멈추고, DBMS가 한쪽을 철회한다
  • ② 먼저 락을 잡은 T1이 끝까지 돌고 T2가 철회된다
  • ③ 배타 락은 쓰기만 막으므로 둘 다 기다리지 않고 끝난다
  • ④ 2단계 로킹을 지켰으므로 이런 멈춤은 생기지 않는다
정답

① — T1이 기다리는 과목 표 OS 행의 락은 T2가 쥐고 있고, T2가 기다리는 수강 표 101번 OS 행의 락은 T1이 쥐고 있습니다. 둘 다 상대가 놓기를 기다려 영원히 멈추는 교착 상태입니다. DBMS가 이것을 찾아내 한쪽을 철회해 풀어 줍니다.

  • ② 먼저 잡은 쪽이 끝까지 간다고 봤습니다. T1도 T2가 쥔 락을 기다려 끝낼 수 없어, 저절로 풀리지 않습니다.
  • ③ 락이 걸린 행을 다른 트랜잭션이 고칠 수 있다고 봤습니다. 배타 락이 걸린 행은 읽지도 쓰지도 못하고, 둘은 모두 고치려고 기다립니다.
  • ④ 2단계 로킹이 교착 상태까지 막는다고 봤습니다. 2단계 로킹은 차례로 실행한 것과 같은 결과를 보장하지만 교착 상태는 막지 못합니다.

다시 볼 레슨: 병행 제어

문제 6

격리 수준을 REPEATABLE READ로 둔 트랜잭션이 3학년 학생 수를 같은 조건으로 두 번 셌습니다. 두 번 사이에 다른 트랜잭션이 3학년 학생 한 명을 넣고 COMMIT했습니다. 두 번째 셈에 그 학생이 들어오는 현상의 이름이 (가), 이것을 막으려면 올려야 하는 격리 수준이 (나)입니다. 알맞은 것을 고르세요.

  • ① (가) 반복 불가능 읽기 · (나) READ COMMITTED
  • ② (가) 반복 불가능 읽기 · (나) SERIALIZABLE
  • ③ (가) 유령 읽기 · (나) READ COMMITTED
  • ④ (가) 유령 읽기 · (나) SERIALIZABLE
정답

④ — 같은 조건으로 다시 읽었는데 없던 행이 나타나는 것이 유령 읽기입니다. 네 격리 수준 가운데 유령 읽기를 막는 것은 SERIALIZABLE뿐입니다.

  • ① 두 자리를 모두 낮춰 봤습니다. 같은 행의 값이 달라지는 것이 반복 불가능 읽기이고, READ COMMITTED는 REPEATABLE READ보다 낮아 더 막아 주지 않습니다.
  • ② 행이 늘어난 것을 같은 행의 값이 달라진 것으로 봤습니다. 지금 수준이 이미 반복 불가능 읽기를 막고 있어, 남은 것은 유령 읽기입니다.
  • ③ 현상은 맞게 봤지만 수준을 내려 봤습니다. 수준을 내리면 막던 이상까지 다시 생깁니다.

다시 볼 레슨: 병행 제어

문제 7

(가)와 (나)는 둘 다 고친 값이 어긋나거나 사라진 일입니다. 각각을 없애는 방법으로 알맞은 것을 고르세요.

  • (가) 동아리원 표(학번, 이름, 동아리명, 지도교수)에 학생마다 지도교수를 적어 두었습니다. 사진 동아리의 지도교수가 바뀌어 네 행을 고치다 한 행을 놓쳐, 같은 동아리의 지도교수가 둘이 되었습니다.

  • (나) 조교 둘이 같은 때 같은 점수 75를 읽어 각자 올려 썼습니다. 나중에 쓴 값만 남아 먼저 올린 몫이 사라졌습니다.

  • ① 둘 다 표를 정규화해 나누면 사라진다

  • ② (가)는 표를 정규화해 나누면, (나)는 락으로 차례를 만들면 사라진다

  • ③ (가)는 락으로 차례를 만들면, (나)는 표를 정규화해 나누면 사라진다

  • ④ 둘 다 락으로 차례를 만들면 사라진다

정답

② — (가)는 동아리에 딸린 사실인 지도교수가 학생 행마다 겹쳐 적혀서 생기는 갱신 이상입니다. 동아리원 표와 동아리 표로 나누면 지도교수가 한 곳에만 남아 어긋날 자리가 없어집니다. (나)는 같은 값을 둘이 함께 읽어서 생기는 갱신 분실입니다. 점수는 한 곳에만 적혀 있어 나눌 것이 없고, 읽는 순간부터 락을 걸어 차례를 만들면 막습니다.

  • ① (나)도 표 설계 문제로 봤습니다. (나)의 점수는 겹쳐 적혀 있지 않고, 같은 때 둘이 고쳐서 생긴 일입니다.
  • ③ 둘을 거꾸로 봤습니다. 겹쳐 적힌 값이 어긋나는 쪽이 설계 문제이고, 동시에 쓴 값이 덮이는 쪽이 병행 제어 문제입니다.
  • ④ (가)도 동시 실행 문제로 봤습니다. (가)는 한 사람이 혼자 고쳐도, 겹쳐 적힌 네 행을 다 고치지 않으면 생깁니다.

다시 볼 레슨: 이상 현상 · 병행 제어

문제 8

지연 갱신을 쓰는 시스템에서 트랜잭션 T가 값 둘을 고치던 중, COMMIT을 적지 못하고 장애가 났습니다. 회복할 때 T에 하는 일로 알맞은 것을 고르세요.

  • ① 로그의 바꾸기 전 값을 꺼내 데이터베이스를 그 값으로 되돌린다
  • ② 로그의 바꾼 뒤 값을 꺼내 데이터베이스에 다시 반영한다
  • ③ 되돌릴 것이 없어 아무것도 하지 않는다
  • ④ 백업으로 데이터베이스를 되살린 뒤 로그로 다시 반영한다
정답

③ — 지연 갱신은 COMMIT할 때까지 데이터베이스를 건드리지 않고 로그에만 적습니다. COMMIT을 적지 못한 T의 변경은 데이터베이스에 들어간 적이 없어 되돌릴 것이 없습니다. 그래서 지연 갱신의 회복에는 REDO만 씁니다.

  • ① 즉시 갱신의 회복으로 봤습니다. 도는 중에 바로 반영하는 즉시 갱신에서는 끝내지 못한 변경이 들어가 있을 수 있어 UNDO가 필요합니다.
  • ② COMMIT이 적힌 트랜잭션에 하는 일입니다. T는 COMMIT을 적지 못했습니다.
  • ④ 미디어 장애의 회복으로 봤습니다. 백업으로 되살리는 것은 디스크가 망가져 데이터를 읽을 수 없을 때입니다.

다시 볼 레슨: 회복

문제 9 (실기)

트랜잭션의 네 특성 가운데 (가)·(나)에 맞는 이름을 한글로 쓰세요. 답을 끝까지 쓴 뒤 정답을 펼치세요.

  • (가) 학과 사무실에서 수강 정정을 확정했다는 응답을 받았습니다. 그날 밤 서버의 전원이 나갔는데도, 다시 올린 뒤 정정 내용이 그대로 있습니다.
  • (나) 조교가 점수를 고치는 중입니다. 아직 확정하지 않은 사이에 다른 조교가 그 행을 읽으면 고치기 전 점수가 보입니다.
정답

받는 답: (가) 영속성 또는 지속성 · (나) 독립성 또는 격리성 또는 고립성

(가)의 실마리는 '확정한 뒤 장애가 나도 남는다', (나)는 '확정하지 않은 값이 남에게 보이지 않는다'입니다. 지속성·격리성·고립성은 자료에 따라 부르는 이름이라 함께 받습니다.

  • 같은 이름의 다른 꼴: (가) Durability · (나) Isolation — 영문 원어입니다. 문제가 한글로 물었습니다.
  • 틀리는 꼴 원자성 — (가)에: 묶음이 모두 반영되거나 하나도 반영되지 않는 성질입니다. 확정한 결과가 장애 뒤에도 남는 것은 영속성입니다.
  • 틀리는 꼴 일관성 — (나)에: 트랜잭션 앞뒤로 정해 둔 규칙을 지키는 성질입니다. 중간 값이 남에게 보이지 않는 것은 독립성입니다.

다시 볼 레슨: 트랜잭션과 ACID

문제 10 (실기)

장애가 난 뒤 로그를 보니, 마지막 검사점 뒤에 T1의 COMMIT은 적혀 있고 T2의 COMMIT은 없습니다. 회복할 때 T1의 변경에 하는 연산의 이름을 영문으로 쓰세요. 답을 끝까지 쓴 뒤 정답을 펼치세요.

정답

받는 답: REDO

실마리는 'T1의 COMMIT이 로그에 있다'입니다. 끝까지 마친 트랜잭션의 변경은 로그의 바꾼 뒤 값을 꺼내 다시 반영해 살립니다.

  • 같은 이름의 다른 꼴: 재실행 — 한글 이름입니다. 문제가 영문으로 물었습니다.
  • 틀리는 꼴 UNDO: 바꾸기 전 값으로 되돌리는 연산이고, COMMIT이 적히지 않은 T2가 그 대상입니다.
  • 틀리는 꼴 ROLLBACK: 트랜잭션을 취소하는 SQL 명령입니다. 회복할 때 데이터베이스가 하는 연산의 이름이 아닙니다.

다시 볼 레슨: 회복

문제 11 (실기)

수강 표의 기본키는 (학번, 과목코드)입니다. 이미 있는 101번의 DS 행을 한 번 더 넣으려 하자 DBMS가 거절했습니다. 이때 지켜진 무결성의 이름을 한글로 쓰세요. 답을 끝까지 쓴 뒤 정답을 펼치세요.

정답

받는 답: 개체 무결성

실마리는 '기본키 값이 이미 있는 행과 겹친다'입니다. 기본키는 비어서도, 겹쳐서도 안 됩니다.

  • 같은 이름의 다른 꼴: Entity Integrity — 영문 원어입니다. 문제가 한글로 물었습니다.
  • 틀리는 꼴 일관성: 트랜잭션 앞뒤로 데이터베이스가 정해 둔 규칙을 지키는 ACID의 특성 이름입니다. 묻는 것은 그 규칙, 곧 무결성의 이름입니다.
  • 틀리는 꼴 참조 무결성: 외래키 값이 가리키는 표에 있어야 한다는 제약입니다. 101과 DS는 둘 다 가리키는 표에 있는 값입니다.

다시 볼 레슨: 무결성 제약 조건

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

정보처리기사 목차로