데이터베이스 70

트랜잭션_교착상태(deadlock), 상호배제 (mutual exclusion), 점유 대기 (hold and wait), 비선점 (non preemption), 순환대기 (circular wait)

▣ 트랜잭션_교착상태(deadlock), 상호배제 (mutual exclusion), 점유 대기 (hold and wait), 비선점 (non preemption), 순환대기 (circular wait) 교착상태 발생 조건 상호배제 (mutual exclusion), 점유 대기 (hold and wait), 비선점 (non preemption), 순환대기 (circular wait) 2017년 64번 시간 1 시점에 T1 에서 x 에 대해 락 Lock) 을 걸고, 시간 7 시점에서 y 에 대해 락을 걸려고 시도하고 있으나 이미 시간 2 시점에 T2 에서 y 에 락을 걸어둔 상태임 마찬가지로 T2 도 시간 8 시점에 x 에 대해 락을 걸려고 시도하고 있으나 이미 T1 이 락을 걸어둔 상태 특정 자원에 대해..

데이터베이스 2021.09.10

함수 기반 인덱스(Function-based indexing) 오라클

▣ 함수 기반 인덱스(Function-based indexing) 오라클 ● 함수 기반 인덱스의 장점 - 계산 값에 대한 인덱스 스캔 가능 - 인덱스 컬럼이 Where 절에서 가공 또는 변경돼도 인덱스 이용 가능 함수 기반 인덱스를 이용하면 계산 값을 도출하는 SQL도 인덱스를 이용할 수 있음 SQL의 계산 값이 중요한 업무라면 함수 기반 인덱스를 통해 성능을 향상시킬 수 있음 ● 함수 기반 인덱스의 단점 - DML시 부하 발생 - 인덱스의 유연성 저하 함수 기반 인덱스는 Where 조건에 해당하는 연산자를 그대로 사용할 경우에만 가능하므로 다른 일반 엑세스 유형을 수용하기에 적합하지 않아 유연성이 많이 떨어짐 CREATE [UNIQUE] INDEX 인덱스 명 ON 테이블 명(컬럼 명, 컬럼 명 | 함수..

데이터베이스 2021.09.10

오라클 SQL_ ANY, SOME, ALL, NOT EXISTS, NOT IN 연산, 부양가족, 사원, 평균 봉급,

▣ 오라클 SQL_ ANY, SOME, ALL, NOT EXISTS, NOT IN 연산 ANY(SOME), ALL은 주로 서브쿼리와 함께 사용하는 다중 행 연산자 ANY는 조건을 만족하는 값이 하나라도 있으면 결과를 리턴하고, ALL은 모든 값이 조건을 만족해야 결과를 리턴 SOME은 ANY와 이름만 다를뿐 동일한 기능의 연산자 GROUP BY 절이 사용되었으므로 ㉠에는 WHERE절이 아닌 HAVING 절을 사용하여 조건을 명시 평균 봉급을 비교하므로 AVG( ) 함수를 이용 “가장 높은 부서명(DeptName)”을 검색하므로 서브쿼리 모든 평균값보다 큰 값을 찾아야 하므로 some(혹은 ANY)가 아닌 all 을 ㉡ 에 위치해야 함 서브쿼리도 부서별 평균 봉급을 조회해야 하므로 GROUP BY Dept..

데이터베이스 2021.09.10

오라클 COUNT, 널(NULL), 공백 SQL 질의

▣ 오라클 COUNT, 널(NULL), 공백 SQL 질의 집계함수 설명 COUNT(*) NULL 값을 포함한 행의 수 COUNT(표현식) 표현식의 NULL 값을 제외한 행의 수 SUM( [DISTINCT | ALL] 표현식) 표현식의 NULL 값을 제외한 합계 AVG( [DISTINCT | ALL] 표현식} 표현식의 NULL 값을 제외한 평균 MAX( DISTINCT | ALL] 표현식) 표현식의 최대값 MIN( DISTINCT | ALL] 표현식) 표현식의 최소값 * DISTINCT : 같은 값을 하나의 데이터로 간주할 때 사용하는 옵션(중복제거) 2013년 54번 정답 : 4번 1) 해당되지 않는 값 2) 의도적으로 유보한 값 3) 알 수 없는 값 4) 모르는 값이 아닌 0 0은 널이 아님 2021년..

데이터베이스 2021.09.09

조인, 서브쿼리, 집합 연산 SQL 질의 문제(오라클)

▣ 조인, 서브쿼리, 집합 연산 SQL 질의 문제(오라클) 1. 오라클 집합 연산자의 종류 집합 연산자는 4가지 종류가 있다. - UNION: 두 집합을 더해서 결과를 출력. 중복 값 제거하고 정렬함 - UNION ALL: 두 집합을 더해서 결과를 출력. 중복 값 제거 안하고 정렬 안함 - INTERSECT: 두 집합의 교집합 결과를 출력. 정렬함. - MINUS: 두 집합의 차집합 결과를 출력. 쿼리의 순서 중요함 2. 오라클 연산자 사용 조건 - 두 집합의 SELECT 절에 오는 칼럼의 개수가 동일해야 한다. - 두 집합의 SELECT 절에 오는 칼럼의 데이터형이 동일해야 한다. - 두 집합의 칼럼명은 달라도 상관없다. 2017년 57번 정답 : 4번 100, 101 동시에 만족하는 튜플이 없음 --..

데이터베이스 2021.09.09

SQL 인젝션(Injection) 보안 상의 허점

▣ SQL 인젝션(Injection) 보안 상의 허점 SQL 인젝션 (Injection) 잘못 만들어진 웹어플리케이션에서 사용자로부터 입력받은 데이터를 SQL문에 붙여서 처리할 때 해커는 임의로 SQL문을 변경하여 사용자 인증을 우회하거나 데이터베이스 정보를 취득하는 공격 Blind SQL Injection, Mass SQL Injection, CSRF(Cros-site request forgery) 대응 방법 : 사용자 입력의 필터링 SQL 에러메시지를 사용자에게 보여주지 않도록 설정 웹어플리케이션 사용하는 DB유저의 권한을 제한 - 사용자 인증을 비정상적으로 통과할 수 있다. - 데이터베이스에 저장된 데이터를 임의로 열람할 수 있다. - 데이터베이스의 시스템 명령을 이용하여 시스템 조작이 가능하다. ..

데이터베이스 2021.09.09

관계 데이터 모델의 키(Key) 후보키, 수퍼키, 기본키, 대체키, 외래키

▣ 관계 데이터 모델의 키(Key) 종류 종류 내용 후보키 (Candidate Key) 유일성과 최소성을 만족하는 키 예) , 수퍼키 (Super Key) 유일성은 있으나 최소성은 없는 키 예) 기본키 (Primary Key) 후보키 중에서 하나를 선정하여 사용하는 것 예) , 중 선정된 하나 대체키 (Alternate Key) 후보키 중 기본키로 선정된 나머지 키 기본키를 대체할 수 있는 키라는 의미 외래키 (Foreign Key) 한 릴레이션에 속한 어떤 속성 집합(FK)의 값이 반드시 다른 릴레이션의 기본키 값이어야 할 때 이 FK를 외래 키라고 함 2018년 54번 정답 : 3번 → 수퍼키 ⊃ 후보키 ⊃ 기본키 수퍼 키는 후보 키도 된다. (X) 후보 키는 수퍼 키도 된다. (O) 기본 키는 후보..

데이터베이스 2021.09.09

뷰(VIEW) 갱신 제약사항_함수가 사용된 산술식, 집계함수, 집합연산, DISTINCT, GROUP BY, HAVING, 조인 등 / 뷰 장점, 단점, WITH CHECK OPTION

▣ 뷰 갱신 제약사항_함수가 사용된 산술식, 집계함수, 집합연산, DISTINCT, GROUP BY, HAVING, 조인 등 / 뷰 장점, 단점 - 뷰의 열이 상수나 산술 연산자 또는 함수가 사용된 산술 식으로 정의된 경우 - 집계 함수(COUNT, SUM, AVG, MAX, MIN 등)가 사용된 경우 - 집합 연산(UNION, UNION ALL, INTERSECT, EXCEPT/MINUS 등)이 사용된 경우 - DISTINCT, GROUP BY, HAVING이 사용된 경우 - 두 개 이상의 테이블이 연관되어 정의된 경우 - 변경할 수 없는 뷰를 기초로 정의된 경우 - 기타 순환관계 전개처리(CONNECT BY … START WITH), ROWNUM 등이 사용된 경우 ▣ 뷰 장점, 단점 구분 설명 장점 ..

데이터베이스 2021.09.03

타임스탬프 순서 기법, 토마스 기록규칙

▣ 타임스탬프 순서 기법 타임스탬프(TS)란 시스템이 트랜잭션을 유일하게 식별하기 위해 부여한 식별자임 통상적으로 타임스탬프는 트랜잭션이 시스템에 들어오는 순서대로 부여되기 때문에 트랜잭션의 실행 시작 시간으로 생각함 1. 타임스탬프 순서 규약 1) 트랜잭션 Ti가 read(x)를 수행하려 할 때 : - TS(Ti) ≥ write_TS(x)이면, read(x)를 허용하고, read_TS(x) ← max{ read_TS(x), TS(Ti) } - 아니면, read(x)를 거부하고, Ti를 취소시켜 복귀시킴 2) 트랜잭션 Ti가 write(x)를 수행하려 할 때 : - TS(Ti) ≥ read_TS(x)이고, TS(Ti) ≥ write_TS(x)이면, write(x)를 허용하고 write_TS(x) ← TS..

데이터베이스 2021.09.03