Database초보우낙
면접질문 본문
DB 면접 예상 질문 — goodbyeanma (tistory.com)
캐시퓨전
RAC사용자가 어느 노드로 접속시 마지막 commit시점의 데이터를 일관성있게 보여준다
Rac장점
노드1이 다운되거나 리스너가 내려가더라도 다른 노드가 살아있다면 계속 DB를 이용할 수 있습니다
또한 노드는 계속 추가하여 확장할 수 있으며. 이론상 100개까지 확장할 수 있습니다.
GRD
GRD는 (Gloval Resource Directory)의 약자로 RAC 데터 베이스들의 최신 데이터가 어느 노드에 있는지에 대한 위치정보를 가지고 있는 메타 데이터 저장소입니다
RAC를 운영할때 필요한 IP 3가지
- public ip : 외부에서 접속할 때 사용하는 ip
- private ip : 노드들끼리 통신할 때 사용하는 ip
- virtual ip : 하나의 노드가 죽었을때 다른 노드로 failover를 하기 위해 필요한 ip
- scan ip : scan listener의 ip주소
(failover -> 내가 접속한 노드가 죽었을 때 살아있는 다른 노드로 자동으로 접속되는 기능 )
프라이머리키와 유니크키에 대한 설명
Pk(기본키)는 유일한 값이며, null을 입력할 수 없다
Fk(외래키)는 다른 테이블의 기본키나 후보키를 참조하며, 참조하는 테이블의 값은 항상 존재하고 일관된 값을 유지
Uk(고유) 중복된 값을 허용하지 않으며, 기본키와 유사하지만 기본 키가 테이블의 기본 식별자 역할을 하지만 Uk는 해당 열에 대한 중복을 방지한다
NotNull은 특정열에 null값이 들어올 수 없도록 설정
익스포트 종류 4가지
- SQL 익스포트: 데이터베이스에서 SQL 쿼리를 사용하여 데이터를 추출하는 방법. 텍스트 파일로 데이터를 저장할 수 있음.
- CSV 익스포트: 데이터를 쉼표로 구분하여 텍스트 파일에 저장하는 방법. 데이터 공유와 분석에 용이.
- XML 또는 JSON 익스포트: 데이터를 XML 또는 JSON 형식으로 내보내는 방법. 데이터의 구조를 표현하는 데 유용.
- 특정 데이터베이스의 내장 익스포트 기능: 데이터베이스 시스템에 내장된 익스포트 기능 활용. 데이터베이스 관리 도구나 명령행 인터페이스를 통해 사용.
1 당신의 블로그가 있으면 보여주세요
2 영어로 된 문서를 주고 '해석해 보세요'라고 합니다.
3 언두와 리두의 차이점은 무엇인가요?
언두는 취소를 위한 data
리두는 복구를 위한 data
4 인덱스가 필요한 칼럼은 어떤 컬럼입니까?
자주 검색되는 컬럼
조인이나 그룹화에 사용되는 컬럼
정렬이나 수누이 매기기 작업에 사용되는 컬럼
4-2 인덱스가 필요없는 컬럼은?
데이터 분포가 균일한 경우
자주 업데이트 되는 컬럼
작은 테이블
5 백업 & 복구 실습은 많이 했습니까?
6 캐쉬퓨전을 설명해보세요
RAC를 사용하는 사용자가 어느 노드로 접속하던지간에 마지막으로 commit된 일관된 데이터를 볼 수 있게 보장해주는 오라클의 메커니즘입니다
7 RAC 설치해 보셨습니까?
8 튜닝해 본 경험은 있나요?
9 OWI가 무엇인가요?
Oracle Wait Interface 는 용어다. 이책에서는 프로세스가 겪는 대기현상을기록하고 관찰하는일련의 기능과 인터페이스, 그리고 방법론을 통칭하여 OWI라고 부르고 있다.
10 락이랑 랙치를 비교 분석해서 말해 보세요.
LATCH 래치 | LOCK 락 | |
목적 | 메모리(SGA)를 동시에 쓸 때 Latch가 보호 | 공유 리소스와 사용자 데이터를 보호 |
사용범위 | SGA 내부 데이터 구조에만 적용 | 메모리(SGA)+데이터베이스를 보호 |
획득방식 | willing-to-wait, no-wait | null, row share, row exclusive, share, share row exclusive, exclusive |
범위 | shared pool에 정보가 존재, 자기 인스턴스(node)에서만 볼 수 있음 --> 인스턴스 레벨로 작동 |
데이터베이스에 정보가 존재, 모든 인스턴스(node)에 적용 (GCS같은것) --> 데이터베이스 레벨로 작동 |
복잡도 | 구현이 쉬움 | 구현이 어려움 |
지속기간 | 아주 짧은 시간만 지속, max=2sec | commit 하기 전까지는 계속 지속됨 (트랜잭션동안 지속) |
큐 (Queue) | 순서와 상관 없이 latch를 획득, 순서 보장 안함 | queue로 관리되기 때문에 순서대로 lock을 획득 |
데드락 | deadlock이 발생되지 않도록 구현 | deadlock이 발생될 가능성이 높음 |
11 설명할 수 있는 대기 이벤트가 있으면 해보세요.
구분이벤트설명
구분 | 이벤트명 | 설명 |
라이브러리 캐시 부하 | latch : shared pool | 라이브러리 캐시에서 SQL 커서를 찾고 최적화하는 과정에서 경합이 발생하여 대기 |
latch : library cache | 라이브러리 캐시에서 SQL 커서를 찾고 최적화하는 과정에서 경합이 발생하여 대기 | |
library cache lock | SGA 내의 library cache를 참조하기 위한 대기 | |
library cache pin | 수행 중인 SQL이 참조하는 오브젝트에 다른 사용자가 DDL 문장을 수행할 때 | |
데이터베이스 call과 네트워크 부하 ( 애플리케이션과 네트워크 구간에서 소모된 시간에 의해 나타난 이벤트) |
SQL*Net message from client | Client로부터 다음 명령이 올 때까지 idle 상태로 기다릴 때 발생 |
SQL*Net message to client | 메시지를 보냈는데 메시지를 받았다는 신호가 늦게 도착하는 경우, 혹은 클라이언트가 너무 바쁠 경우 | |
SQL*Net more data to client | 메시지를 보냈는데 메시지를 받았다는 신호가 늦게 도착하는 경우, 혹은 클라이언트가 너무 바쁠 경우 | |
SQL*Net more data from client | 클라이언트로부터 더 받을 데이터가 있는데 지연이 발생한 경우 | |
디스크 부하 ( 디스크 I/O 발생할 때 나타나는 대기 이벤트) |
db file sequential read | Single Block I/O. 한 번의 I/O call에 하나의 데이터 블록만 읽음. 인덱스 블록을 읽을 때 발생 |
db file scattered read | Multi Block I/O. Table Full Scan 또는 Index Fast Full Scan 시 나타남 | |
direct path read | direct path I/O를 수행하기 위해 대기 | |
direct path write | direct load 작업의 수행으로 인한 대기 | |
direct path write temp | 정렬 작업을 위해 임시 영역을 읽고 쓰는 경우 temp 이벤트를 대기한다. | |
direct path read temp | 정렬 작업을 위해 임시 영역을 읽고 쓰는 경우 temp 이벤트를 대기한다. | |
db file parallel read | 여러 개의 데이터 파일로부터 연속되지 않는 싱글 블록들을 동시에 읽어들일 때 발생 | |
버퍼 캐시 경합 (버퍼 캐시에서 블록을 읽는 과정에서 경합이 발생하여 나타나는 대기 이벤트) |
latch : cache buffers chains | 동일 테이블이나 인덱스를 여러 세션이 동시에 스캔 |
latch : cache buffers lru chain | 다른 테이블이나 인덱스들을 여러 세션이 동시에 스캔 | |
buffers busy waits | 동일 블록에 대한 동시 액세스에 따른 경합 | |
free buffer waits | free buffer를 할당받기 위해 DBWR의 Write를 대기 | |
LOCK 관련 대기 이벤트 | enq : TM - contention | DML을 수행할 때 TM 락을 획득하는 과정에서 경합이 발생하여 대기 |
enq : TX - row lock contention | 로우 레벨 락에 의한 경합이 발생하여 대기 | |
enq : TX - index contention | 동시에 여러 세션이 인덱스가 생성되어 있는 테이블에 대해서 많은 양의 DML을 수행하는 경우에 주로 발생 | |
enq : TX - allocate ITL entry | ITL 엔트리 부족에 의한 TX 락 경합이 발생하여 대기 | |
latch free | 특정 자원에 대한 래치를 여러 차례(약 2000번) 요구했지만 해당 자원이 계속 사용 중이어서 잠시 대기 상태로 빠질 때마다 발생 | |
기타 대기 이벤트 | log file sync | 변경 log buffer를 log file에 반영하는 동안 대기 |
log file switch completion | 현재 사용 중인 redo log file이 꽉 차서 더 이상 여유 공간을 확보할 수 없을 때 발생 | |
log buffer space | Log buffer를 할당 받기 위해 LGWR의 write를 대기 |
12 DB file sequential read 와 DB file scattered 이벤트 차이점은 무엇있가요?
db file sequential read | Single Block I/O. 한 번의 I/O call에 하나의 데이터 블록만 읽음. 인덱스 블록을 읽을 때 발생 |
db file scattered read | Multi Block I/O. Table Full Scan 또는 Index Fast Full Scan 시 나타남 |
13 옵티마이저란?
가장 효율적인 방법으로 SQL을 수행할 최적의 처리 경로를 생성해주는 DBMS의 핵심엔진
14 드라이빙 테이블이란?
JOIN시 먼저 엑세스돼서 ACCESS PATH를 주도하는 테이블
나중에 엑세스 되는 테이블은 드리븐 테이블 이라고 한다
결정규칙
* 인덱스를 이용한 엑세스 방식이 전체 테이블 엑세스 방식보다 우선순위가 높다
* 조인 컬럼에 대한 인덱스가 양쪽 테이블에 모두 존재할 때, 우선 순위가 높은 테이블을 선택
* 조인 컬럼에만 인덱스가 존재하는 경우에는 인덱스가 없는 테이블을 먼저 선택하여 조인 수행
* 만약 조인 테이블의 우선 순위가 동일하지 않다면 FROM 절에 나열된 테이블의 역순으로 수행
15 대용량 데이터베이스 수료하셨네요, Nested Loopjoin을 설명해 보세요
NL 조인은 두 테이블이 조인을 할 때, 드라이빙 테이블( Outer 테이블)에서 결합 조건에 일치하는 레코드를 내부 테이블(Inner Table)에서 조인하는 방식이다.
NL 조인의 특징
- Random 액세스 위주의 조인 방식이다. 따라서 인덱스 구성이 아무리 완벽하더라도 대량의 데이터를 조인할 때 매우 비효율적이다.
- 조인을 한 레코드씩 순차적으로 진행한다는 점이다.
- 인덱스 구성 전략이 특히 중요하다. 조인 컬럼에 대한 인덱스가 있느냐 없느냐, 있다면 컬럼이 어떻게 구성됐느냐에 따라 조인 효율이 크게 달라진다.
- 이런 여러가지 특징을 종합할 때, NL 조인은 소량의 데이터를 주로 처리하거나 부분범위처리가 가능한 온라인 트랜잭션 환경에 적합한 조인 방식이라고 할 수 있다.
16 이력서에 Optimizing Oracle Optimizer 과정 공부했다고 되어 있네요, Histogram을 설명해 보세요
히스토그램은 컬럼 값별로 데이터 비중 또는 빈도를 미리 계산해 놓은 통계정보다. 실제 데이터를 기반으로 계산해서 데이터 분포가 거의 정확하다.
17 정규화에대히서 설명하세요
정규화의 목표는 테이블간에 중복된 데이터를 허용하지 않는다
중복된 데이터를 허용하지 않음으로써 무결성을 유지할 수 있으며 DB의 저장용량을 줄일 수 있다
[1정규화]
테이블의 컬럼이 원자값을 갖도록 테이블을 분해하는 것
[2정규화]
1정규화를 진행한 테이블에 대해서 완전 함수 종속을 만족하도록 테이블을 분해하는것
기본키의 부분집합이 결정자가 되어선 안된다는것을 의미
[3정규화]
2정규화를 진행한 테이블에 대해서 이행적 종속을 없애도록 테이블을 분해하는것
이행적 종속이라는것은 A -> B , B -> C 가 성립될때 A->C가 성립되는것을 의미한다
18 다른 DB제품군에 대해 알고 있으신가요?
[DB] DB 종류 및 장단점 (tistory.com)
* DB종류
1. 관계형 데이터베이스 RDB
- Oracle, Mysql, MS-SQL, PostgreSQL, MariaDB 등
2. NoSQL (Not Only SQL)
- Mongodb, cassandra, hbase 등
* RDBMS, NoSQL 장단점
1. RDBMS
장점 : 업무 변화에 대한 적응력이 높아 변화하는 업무에 쉽게 활용하며 유지보수가 편리하다. 따라 생산성도 향상된다. 명확하게 스키마가 정의되어 있다. 데이터 무결성을 보장한다.
단점 : 다른 DBMS보다 더 많은 자원이 활용되어 시스템의 부하가 높다.
2. NoSQL
장점 : 스키마가 없기에 유연하게 작성 가능. 데이터가 애플리케이션이 필요로하는 형태로 저장되어 읽는 속도가 빠르다.
단점 : 유연성으로인한, 데이터 구조 결정이 늦춰질 수 있음. 데이터가 여러 컬렉션에 중복되어있어, 수정(Update)해야하는 경우 모든 컬렉션에서 수행하여야함.
19 오라클 파티션 테이블을 사용해본적이 있는가? 개념은 알고 있는가?
테이블 또는 인덱스 데이터를 특정 컬럼(파티션 키) 값에 따라 별도 세그먼트에 나눠서 저장하는 것
하나의 큰 테이블을 물리적으로 나눠놓은 것, 물리적으로 나눠놨지만 논리적으로는 하나의 테이블로 간주된다
사용이유
1 ) 가용성 증가 : 특정 Block 깨진경우
2 ) 관리비용 감소 : 특정 Partition 만 작업하는 경우
3 ) 성능 향상 : 해당 파티션만 scan하여 성능 향상된다.
파티션을 이용하면 대량 추가/변경/삭제 작업을 빠르게 처리할 수 있다.
20 (무엇무엇에 대한) 개념에 대해 설명하세요
21 오라클 백업과 복구전략
x
22 데이타 마이닝은 무엇이면 어떤 노력을 해왔나? 또는 어떤 노력을 할 것이냐?
자료저장소에 저장되어 있는 방대한 양의 데이터로부터 의사결정에 도움이 되는 유용한 정보를 발견하는 일련의 작업들의 집합.
23 PK 와 FK (AK) 에 대해 아는대로 설명
24 제약조건에 대해서 아는대로 설명
25 옵티마이져에 대해 아는대로 기술
26 트랜젝션의 4가지 특성에 대해 아는대로 기술
27 SELECT SS FROM TABLE WHERE AA=AA .... 과 같은 구분의 처리 순서는?
28 오라클의 커서는 무엇인가?
29 RBO 는 무었인가?
30 부분범위처리는 무엇이며, 왜 필요한가?
31 트리거란?
32 시노님(SYNONYM) or 시노늄이란?
33 시퀀스와 캐쉬는?
34 PL/SQL 에 관한 경험이 있는가?
35 바인딩 쿼리는 무엇인가?
36 오라클 설치시 문제점 또는 까다로웠던점, 어려웠던 점.
37 테이블 스페이스에 관해 얘기해 보라
38 인덱스의 장단점
39 로우를 몇개나 다뤄봤는가?(1억로우 이하는 데이타로도 안친다더군요)
40 백업 스케줄링은 해본적이 있는가?
41 SGA의 구조에 대해서 설명하시오
42 DB buffer cache size 조절하는 Parmeter는?
43 O/S 상에서 rm 명령어로 Online redo log file을 지웠을 때 조치는?
(상황 : Curnent 2번이고, Inacfive 상태인 1번에 해당하는 파일을 지운상태)
44 rm 명령어로 Data file을 삭제 했을 때 조치는? (system file X)
45 temp file 삭제시 DB는 정상 open 되는가?
46 1억건의 Updata문을 잘못 사용했을 때 그 내용을 볼 수 있는 방법은?
(Flash back Query 말고, 현재상태는 Archive)
47 Data buffer chain에 대해서 설명해보시오
48 DBE와 DBA의 차이점에 대해 설명해보시오