SQL 아카데미에서 교육 받은후 SQL 를 해본 사람들이 어느 정도의 지식을 가지고 있는가
라는 주제로 정원혁 강사님께서 내주신 문제 이다.
얼마전 내 서랍속에서 있던걸 회사 사람들과 함께 풀어 보았다.
저희 회사 형이 답과 설명까지 잘 달아 주실걸 퍼왔다..^^
1.다음 구문에서 오류가 발생 되는 쿼리는?
1) SELECT type, SUM(price) as sum_price FROM dbo.titles GROUP BY type HAVING sum_price IS NOT NULL
2) SELECT * FROM dbo.titles t, dbo.pub_info p WHERE t.pub_id = p.pub_id
3) SELECT case when type = 'business' then '업무용' else '비업무용' end as type, count(*) as 수량 FROM dbo.titles GROUP BY type
4) SELECT ISNULL(Country, '합계') AS Country, qty FROM( SELECT Country, COUNT AS (*) qty FROM dbo.Customers GROUP BY Country WITH ROLLUP) AS inTable
/**********************************************************************
SELECT type, SUM(price) as sum_price FROM dbo.titles GROUP BY type HAVING SUM(price) IS NOT NULL
**********************************************************************/
2. 단일 프로세서가 장착된 서버를 업그레이드 하여 4 CPU 서버로 확장하였다. 현재 다음과 같은 서버 구성 옵션이 설정된 상태이다. 어떤 옵션을 변경해야 필요한 경우 병렬처리 계획을 통해 쿼리를 좀 더 빠르게 수행할 수 있을까?
1) Query Cost Governer Limit을 32767로 변경
2) Affinity Mask 옵션을 1로 변경
3) Max Degree of Parallelism 옵션을 4로 변경
4) Cost threshold for parallelism 옵션을 10으로 변경
/**********************************************************************
Query Cost Governer Limit : 이 옵션은 Query 제한 시간을 뜻한다. 즉, 이 옵션을 32767로 변경을 하면 32767초 걸리는 Query는 실행하지 않는다 라는 의미인 것 이다.
http://msdn.microsoft.com/ko-kr/library ··· %29.aspx
Max Degree of Parallelism : 이 옵션은 병렬처리 될 프로세서의 수를 뜻한다. 이 값이 0이면 모든 프로세서를 활용하여 병렬처리를 한다는 것이고, 1이면 병렬처리를 하지 않는 다는 말이다. 왜 1이면 병렬처리를 하지 않는것일까? 프로세서가 1 라고 정의 하니 병렬처리를 하지 않는것 뿐이다. 프로세서가 2개 이상은 되어야 병렬처리를 할 수 있으니 말이다.
즉, CPU가 4개인 서버에서 이 옵션이 4인것은 지극히 정상이다.
http://msdn.microsoft.com/ko-kr/library/ms181007.aspx
Cast threshold for parallelism : 이 옵션은 병렬처리 임계값을 나타낸다. 기본 값은 5 이다. 기본값이 5인데, 이것을 10으로 바꾼다고 변하는게 없다. 다만 임계값 수치가 넘어가야 병렬처리를 한다.
Affinity Mask : 프로세서 연결 선호도라고 하는데, 기본값은 0이고 이 값을 1 로 변경할때 병렬처리에 관련하여 큰 효과를 얻을 수 있다. 자세한 내용은
http://msdn.microsoft.com/ko-kr/library/ms187104.aspx
**********************************************************************/
3.FULL OUTER JOIN의 결과집합을 설명한 것 중 옳은 것은?
1) ON 절에 지정된 칼럼을 기준으로 양쪽 테이블의 모든 행의 조합을 반환
2) JOIN 조건에 일치하지 않는 행의 칼럼 값을 NULL로 치환한 상태로, 양쪽 테이블의 모든 행을 반환
3) 양쪽 테이블의 모든 행과 모든 칼럼을 반환
4) SQL Server 에서는 사용할 수 없는 JOIN 구문
/**********************************************************************
여기에서 어떻게 보면 3)번의 내용도 FULL OUTER JOIN의 내용과 비슷하지 않나? 머 FULL OUTER JOIN의 정확하게 표현해 놓은 설명은 2)번이기 하다.
**********************************************************************/
4. sqlplan 확장자 파일에 대한 설명으로 옳은 것은?
1) SQL Server 2005 Upgrade Assistant 결과물 파일
2) 병합 복제 추적 파일
3) 쿼리 실행 계획 파일(XML 형식)
4) 용할 수 없는 확장자
5. 다음 중 SQL Server 2005에서 온라인으로 수행할 수 있는 인덱스 관리 작업은?
1) ALTER INDEX … WITH REBULID
2) ALTER INDEX … WITH REORGANIZE
3) A와 B를 모두 온라인으로 수행가능
4) A와 B 모두 온라인으로 수행 불가능
/**********************************************************************
SQL Serer 2005의 새로 추가된 기능이며 자세한 내요은 아래 링크http://msdn.microsoft.com/ko-kr/library/ms188388.aspx
**********************************************************************/
6.아래 표현은 관계형 데이터 모델에 적용되는 정규화 단계를 설명한다. 어떤 정규화 단계에 해당하는지 고르시오. "모든 키가 아닌 칼럼은 기본 키 전체에 의존적이어야 한다. 기본 키의 일부분에 의존적이어서는 안 된다.
1) 1차 정규화
2) 2차 정규화
3) 3차 정규화
4) BCNF
/**********************************************************************
제 1 정규형 : 반복되는 속성이나 그룹의 속성을 제거 하고, 새로운 실체를 추가한 후에 기존의 실체와 일대다의 관계를 형성한다.
제 2 정규형 : 복합키(Composit Primary Key)로 구성된 경우 해당 테이블 안의 컬럼들은 복합키 전체에 의존적이어야 한다. 만일 복합키 일부에 의 존적인 컬럼이 존재한다면 이를 제거해야 한다.
제 3 정규형 : 한 테이블 안의 모든 키가 아닌 컬럼들은 기본키(Primary Key)에 의존해야 한다. 만일 키가 아닌 컬럼에 종속되는 속성이 존재한다면 이를 제거해야 한다.
**********************************************************************/
7.다음 중 데이터 무결성의 종류에 해당하지 않는 것을 고르시오.
1) 엔터티 무결성
2) 참조 무결성
3) 도메인 무결성
4) 연결 무결성
/**********************************************************************
엔티티무결성(Entity Integrity) : 한 테이블에서 각각의 로우(ROW)는 상호구분 가능해야 한다. 참조무결성을 유지하기에 가장 기본이고 필수적인것이 기본키인 것 이다.
참조무결성(Referential Integrity) : 관계를 맺고 있는 두 테이블 사이에 서로 불일치한 데이터가 발생하지 못하도록 하기 위한 제약조건이다.
도메인무결성(Domain Integrity) : 한 컬럼에 입력될 수 있는 테이터의 유형, 형식, 경우의 수 등을 정의해서 잘못된 형식의 데이터가 입력되지 못하도록 하는 것이다.
**********************************************************************/
8. 다음 중 Nonclustered Index를 사용한 쿼리의 성능을 결정짓는 가장 중요한 항목에 해당하는 것을 고르시오. (참고. SQL Server 2000 기준 용어 사용)
1) 인덱스 구성 수준
2) 책갈피 조회(Bookmark Lookup)
3) 인덱스 키 칼럼 수
4) 최적화기(Optimizer)
/**********************************************************************
SQL Server 2005 에서는 Bookmark Lookup 이라는 것이 없어졌다. Clustered Index가 있으면 Clustered Index Seek 해서 Join 하고 Heap이면 RID Lookup 해서 Join 한답니다.
자세한 내용은 http://www.ddoung2.com/17
**********************************************************************/
9.다음 중 Non-SARG에 해당되지 않는 것은?
1) WHERE co11 + 1 = 100
2) WHERE LEFT(col2, 1) = '1'
3) WHERE col3 LIKE 'A%'
4) WHERE col1 = col2
/**********************************************************************
SARG(Search Argument)란? Index를 사용할 수 있도록 고려된 조건이라고 한다. ?? 무슨 소리?? 즉, WHERE 절에 조건이 인덱스를 사용하도록 고려하여 만들어야 한다는 말이다.
비교값은 항상 M:1(Many to one)의 관계이다. 그럼 NON-SARG란?? SARG의 반대말이겠지..
혹시나 왜 4)은 아니야? 라는 질문을 하는 사람이 있을것 같아 추가 설명을 한다.
앞서 말했듯이 M:1의 관계가 되어야 하는대 WHERE col1 = col2 여기서 col2의 값은 ?? 알수가 없다. Table Scan 고고싱 ㅋ
**********************************************************************/
10. NESTED LOOP 물리적 연산자를 사용해서 실행되는 조인의 최적 성능을 위해서 기본적으로 필요한 두 가지 요구 사항을 잘 나열한 것은?
1) 적은 행을 반환하는 외부(선행) 입력, 인덱스 검색이 가능한 내부(후행) 입력
2) 인덱스 검색이 가능한 내부(후행) 입력, 인덱스 스캔을 수행하는 외부(선행) 입력
3) 인덱스 스캔을 수행하는 외부(선행) 입력, 적은 행을 반환하는 외부(선행) 입력
4) 정렬된 출력을 가지는 내부(후행) 입력, 인덱스 스캔을 수행하는 외부(선행) 입력
/**********************************************************************
NESTED LOOP : 간단한게 말해서 비교 반복문이라고 할 수 있다. 다른 말로 하면 프로그램언어중의 FOR문이라고 할수도 있다. NESTED LOOP 방식의 성능을 높이기 위해서는 2가지가 필수이다.
1. 후행테이블의 크기가 작어야 한다.
2. 요소들의 비교가 빠르게 이루어지도록 인덱스가 미리 정의 되여 있어야 한다.
이 외에 SORT MERGE JOIN 과 HSAH JOIN 방식이 있다.
**********************************************************************/
11.트랜잭션(Transaction)이 갖추어야 할 기본 속성에 해당하지 않는 것은?
1) 원자성(atomicity)
2) 일관성(consistency)
3) 고립성(isolation)
4) 결정성(determination)
/**********************************************************************
원자성(Automicity) : 하나의 트랙잭션이 완료되었을 때의 데이터는 해당 트랙잭션의 처리를 모두 완료한 후의 상태이거나 처리를 받아 들이기 이전의 상태이어야 한다. 즉, 데이터의 갱신은 All or Nothing 개념이여야 한다는 것이다. 일부분 변경은 허용되지 않는다.
일관성(Consistency) : 트랜잭션의 성럽, 미성립에 불문하고 데이터의 내용은 일관성이 유지되어야 한다. 즉, 이 트랜잭션의 실행으로 일관성이 깨지지 않는다.
격리성(Isolation) : 연산의 중간 결과에 다른 트랜잭션이나 작업이 접근할 수 없다
영속성(Durability) : 트랜잭션이 종료한 후에는 장애 등으로 데이터의 내용이 변경되지 않아야 한다.
**********************************************************************/
12. 다음 T-SQL 구문중에 SQL Server 2005에서 실행되지 않는 구문은?
1) SELECT * FROM t1, t2 WHERE t1.col1 *= t2.col2
2) SELECT col1+col2 AS newCol FROM t1 ORDER BY newCol
3) DECLARE @i INT; SET @i = 10; SELECT TOP(@i) * FROM t1
4) DELETE TOP(5) FROM t1
/**********************************************************************
SELECT * FROM t1, t2 WHERE t1.col1 *= t2.col2 은 T-SQL 이다. ANSI 방식이 아니다.
근데 안돌아가나 ?? 안해봐서 모르겠다.. ㅋㅋ
**********************************************************************/
13.DBCC SQLPERF(waitstats) 명령을 실했을 때 CXPACKET 항목의 비율이 가장 높게 나왔다. 점검해봐야 할 부분의 하나라고 생각되는 것은?
1) Network
2) Disk
3) Parallel Process
4) Memory
/**********************************************************************
너무나 많은 카운터들이 있어 다 설명 못한다.
또는 sys.dm_os_wait_stats 찾아보아라.
**********************************************************************/
14.저장 프로시저(Stored Procedure)의 정의(해당 개체를 생성한 스크립트)를 표시하고자 할 때 사용할 수 있는 구문은?
1) sp_helpfile
2) sp_helptext
3) sp_helpscript
4) sp_procoption
/**********************************************************************
sp_helpfile : http://msdn.microsoft.com/ko-kr/library/ms174307.aspx
sp_helptext : http://msdn.microsoft.com/ko-kr/library ··· %29.aspx
sp_procoption : http://msdn.microsoft.com/ko-kr/library/ms181720.aspx
**********************************************************************/
15.다음과 같은 분할된 테이블(Partitioned Table)이 있다.
CREATE PARTITION FUNCTION UserInfoPF (INT)
AS RANGE RIGHT FOR VALUES (1000, 2000, 3000)
GO
CREATE PARTITION SCHEME UserInfoPS
AS PARTITION UserInfoPF TO (Fgroup1, Fgroup2, Fgroup3, Fgroup4)
GO
CREATE TABLE UserInfo(
UNumber INT NOT NULL PRIMARY KEY,
UName VARCHAR(50) NOT NULL,
Age TINYINT NOT NULL
) ON UserInfoPS (UNumber);
GO
여기서 다음의 INSERT 쿼리를 실행하여 추가되는 행은 어느 파일 그룹에 저장될까?
INSERT INTO UserInfo VALUES(2000, '홍길동', 28)
1) Fgroup1
2) Fgroup2
3) Fgroup3
4) Fgroup4
/**********************************************************************
RANGE RIGHT 와 RANGE LEFT 와 비교하기
CREATE PARTITION FUNCTION UserInfoPF (INT)
AS RANGE RIGHT FOR VALUES (1000, 2000, 3000)
은
파티션 1 : UNumber < 1000
파티션 2 : UNumber >= 1000 AND UNumber < 2000
파티션 3 : UNumber >= 2000 AND UNumber < 3000
파티션 4 : UNumber >= 3000
CREATE PARTITION FUNCTION UserInfoPF (INT)
AS RANGE LEFT FOR VALUES (1000, 2000, 3000)
은
파티션 1 : UNumber <= 1000
파티션 2 : UNumber > 1000 AND UNumber <= 2000
파티션 3 : UNumber > 2000 AND UNumber <= 3000
파티션 4 : UNumber > 3000
이다. 차이점을 알겠는가??
http://msdn.microsoft.com/ko-kr/library ··· examples
**********************************************************************/
16.다음 성능카운터 중 값이 높을 수록 좋은 것은?
1) MSSQLSERVER\Access Methods: Forwarded Records/sec
2) MSSQLSERVER\Access Methods: Full Scans/sec
3) MSSQLSERVER\Access Methods: Index Searches/sec
4) 위의 1)과 3)
17.다음 성능카운터 중 메모리와 관계 없는 것은?
1) Page Faults/Sec
2) Buffer cache hit ratio
3) Page life expectancy
4) 1), 2), 3) 모두 메모리와 관련 있는 성능카운터이다
/**********************************************************************
16)번 17)번은 알아서 찾아보라. 이곳에 적기에는 너무 많은 내용들이다.
**********************************************************************/
18.다음의 물리적 장치 중 가장 I/O 속도가 낮은 장치는?
1) CPU
2) Memory
3) Disk
4) Cache Memory
/**********************************************************************
이 문제는 내가 유일하게 자신이게 대답할 수 있는 문제이다. ㅋㅋ
**********************************************************************/
19. 다음 중 백업, 복원에 대한 이야기 중 틀린 것은?
1) 트랜잭션 로그 복원은 전체 백업 파일을 복원 후, 가장 마지막 트랜잭션 로그 백업부분을 복원하면 된다.
2) 단순복구 모델은 개발서버 또는 테스트 서버에서 사용이 권장된다.
3) 전체복구 모델에서만 STOPAT옵션을 이용하여 특정 시점 복원이 가능하다.
4) SQL Server 2005에서는 미러(mirror) 백업 및 복사 백업이 추가 되었다.
/**********************************************************************
트랜잭션 로그 복원은 전체 백업 파일을 복원 후, 가장 마지막 트랜잭션 로그 백업부분을 복원하면 된다. ?? 무슨 소리니 ㅋ**********************************************************************/
20.다음 중 맞는 이야기는?
1) 하드웨어의 증설이 가격 대비 성능 향상이 가장 높다.
2) 읽기 수에 비해서 응답시간이 오래 걸리는 쿼리는 recompile 문제로 일어 난다.
3) Tempdb file의 개수는 CPU의 개수와 연관성이 없다.
4) SQL Server 2005에서는 Database 생성 시, 그 크기와 관계 없이 매우 빠른 속도로 생성 된다.
21. 다음은 SQL Server에서 사용하는 데이터 유형이다. 다음 중 사용 공간의 크기가 다른 하나는?
1) REAL
2) INT
3) SMALLDATETIME
4) MONEY
22.현재 서비스 중인 웹서버에 이상이 발견되어 페이지가 나타나지 않고 있다. 웹 서버를 확인해 보니, CPU 사용량이 낮아서 웹서버에는 문제가 없어 보인다. SQL Server 서버의 작업 관리자를 보니 CPU가 10% 이하로 낮게 나타나고 있다 (평상시 CPU 사용량은 60~70%를 유지한다.). 쿼리 분석기에서 sp_lock 명령을 실행시켜 보니 아래와 같은 사항이 발견되고 있다. 현재 상황을 가장 적절하게 설명한 것은 어느 것인가?
1) 52번 세션에서 대량 작업(BULK INSERT)이 이루어지고 있다. 해당 작업 세션을 강제 종료 시켜야 한다.
2) SQL Server에는 문제가 없다.
3) 파일 증가가 발생하고 있다. 관리자에게 요청해서 현재 DB 사용량을 파악해서 비업무시간에 파일을 수동으로 증가시켜주어야 한다.
4) 16번 DB에 이상이 생겨서 SQL Server 엔진이 자동으로 데이터를 다른 곳으로 이동시키고 있다.
23.우리회사에서 운영하고 있는 DB 서버에 업무 시간 중 Profiler를 이용해서 수집된 쿼리를 분석하였다. 튜닝하려는 쿼리는 여러 테이블을 JOIN을 걸어서 데이터를 가져오는 구조이다. 테이블 중에 스캔이 발생하는 실행계획을 확인하여 적절한 인덱스를 생성해 주었다. 하지만, 해당 쿼리는 해당 인덱스를 이용하지 않고, 기존의 실행계획을 계속 사용하고 있다. 새로 생성된 인덱스를 이용하여 실행계획을 구성하게 하려는 작업과 관계가 먼 것은?
1) 해당 인덱스의 선택도가 좋은지를 다시 확인하고, 선택도가 좋은 항목이 앞에 오도록 구성한다.
2) SARG을 준수하고 있는지 확인하고, 인덱스를 사용할 수 있는 조건절 컬럼이 가공되지 않도록 조정한다.
3) 인덱스 힌트를 부여해서 해당 인덱스를 이용하도록 지정한다.
4) 출력되는 컬럼의 순서를 인덱스 컬럼의 순서에 맞도록 조정한다.
24. 다음 중 SQL Server 서비스가 아닌 것은?
1) SSIS : SQL Server Integration Service
2) SSRS : SQL Server Reporting Service
3) SSNS : SQL Server Notification Service
4) SSAS : SQL Server Adviser Service
25. 다음 데이터의 구조를 보고, 설계기법 중 어떤 기법을 적용해야 좋은지 선택하라.
Emp Table 의 구조 및 자료 현황이다.
사번 직원명 연봉 시급 직책 비정규직직급 입사일 고용일
1 홍길동 3000 Null 과장 Null 20040101 null
2 이순신 Null 10000 Null 선임 Null 20070228
3 김유신 Null 15000 Null 책임 Null 20060605
4 강감찬 2500 Null 대리 Null 20051231 null
5 정약용 Null 30000 Null 수석 Null 20020301
1) 제2정규화
2) 제3정규화
3) BCNF
4) Super Type - Sub Type
-http://ddoung2.com/entry/SQL-Server-Academy-지식-테스트 퍼왔습니다.
라는 주제로 정원혁 강사님께서 내주신 문제 이다.
얼마전 내 서랍속에서 있던걸 회사 사람들과 함께 풀어 보았다.
저희 회사 형이 답과 설명까지 잘 달아 주실걸 퍼왔다..^^
1.다음 구문에서 오류가 발생 되는 쿼리는?
1) SELECT type, SUM(price) as sum_price FROM dbo.titles GROUP BY type HAVING sum_price IS NOT NULL
2) SELECT * FROM dbo.titles t, dbo.pub_info p WHERE t.pub_id = p.pub_id
3) SELECT case when type = 'business' then '업무용' else '비업무용' end as type, count(*) as 수량 FROM dbo.titles GROUP BY type
4) SELECT ISNULL(Country, '합계') AS Country, qty FROM( SELECT Country, COUNT AS (*) qty FROM dbo.Customers GROUP BY Country WITH ROLLUP) AS inTable
/**********************************************************************
SELECT type, SUM(price) as sum_price FROM dbo.titles GROUP BY type HAVING SUM(price) IS NOT NULL
**********************************************************************/
2. 단일 프로세서가 장착된 서버를 업그레이드 하여 4 CPU 서버로 확장하였다. 현재 다음과 같은 서버 구성 옵션이 설정된 상태이다. 어떤 옵션을 변경해야 필요한 경우 병렬처리 계획을 통해 쿼리를 좀 더 빠르게 수행할 수 있을까?
1) Query Cost Governer Limit을 32767로 변경
2) Affinity Mask 옵션을 1로 변경
3) Max Degree of Parallelism 옵션을 4로 변경
4) Cost threshold for parallelism 옵션을 10으로 변경
/**********************************************************************
Query Cost Governer Limit : 이 옵션은 Query 제한 시간을 뜻한다. 즉, 이 옵션을 32767로 변경을 하면 32767초 걸리는 Query는 실행하지 않는다 라는 의미인 것 이다.
http://msdn.microsoft.com/ko-kr/library ··· %29.aspx
Max Degree of Parallelism : 이 옵션은 병렬처리 될 프로세서의 수를 뜻한다. 이 값이 0이면 모든 프로세서를 활용하여 병렬처리를 한다는 것이고, 1이면 병렬처리를 하지 않는 다는 말이다. 왜 1이면 병렬처리를 하지 않는것일까? 프로세서가 1 라고 정의 하니 병렬처리를 하지 않는것 뿐이다. 프로세서가 2개 이상은 되어야 병렬처리를 할 수 있으니 말이다.
즉, CPU가 4개인 서버에서 이 옵션이 4인것은 지극히 정상이다.
http://msdn.microsoft.com/ko-kr/library/ms181007.aspx
Cast threshold for parallelism : 이 옵션은 병렬처리 임계값을 나타낸다. 기본 값은 5 이다. 기본값이 5인데, 이것을 10으로 바꾼다고 변하는게 없다. 다만 임계값 수치가 넘어가야 병렬처리를 한다.
Affinity Mask : 프로세서 연결 선호도라고 하는데, 기본값은 0이고 이 값을 1 로 변경할때 병렬처리에 관련하여 큰 효과를 얻을 수 있다. 자세한 내용은
http://msdn.microsoft.com/ko-kr/library/ms187104.aspx
**********************************************************************/
3.FULL OUTER JOIN의 결과집합을 설명한 것 중 옳은 것은?
1) ON 절에 지정된 칼럼을 기준으로 양쪽 테이블의 모든 행의 조합을 반환
2) JOIN 조건에 일치하지 않는 행의 칼럼 값을 NULL로 치환한 상태로, 양쪽 테이블의 모든 행을 반환
3) 양쪽 테이블의 모든 행과 모든 칼럼을 반환
4) SQL Server 에서는 사용할 수 없는 JOIN 구문
/**********************************************************************
여기에서 어떻게 보면 3)번의 내용도 FULL OUTER JOIN의 내용과 비슷하지 않나? 머 FULL OUTER JOIN의 정확하게 표현해 놓은 설명은 2)번이기 하다.
**********************************************************************/
4. sqlplan 확장자 파일에 대한 설명으로 옳은 것은?
1) SQL Server 2005 Upgrade Assistant 결과물 파일
2) 병합 복제 추적 파일
3) 쿼리 실행 계획 파일(XML 형식)
4) 용할 수 없는 확장자
5. 다음 중 SQL Server 2005에서 온라인으로 수행할 수 있는 인덱스 관리 작업은?
1) ALTER INDEX … WITH REBULID
2) ALTER INDEX … WITH REORGANIZE
3) A와 B를 모두 온라인으로 수행가능
4) A와 B 모두 온라인으로 수행 불가능
/**********************************************************************
SQL Serer 2005의 새로 추가된 기능이며 자세한 내요은 아래 링크http://msdn.microsoft.com/ko-kr/library/ms188388.aspx
**********************************************************************/
6.아래 표현은 관계형 데이터 모델에 적용되는 정규화 단계를 설명한다. 어떤 정규화 단계에 해당하는지 고르시오. "모든 키가 아닌 칼럼은 기본 키 전체에 의존적이어야 한다. 기본 키의 일부분에 의존적이어서는 안 된다.
1) 1차 정규화
2) 2차 정규화
3) 3차 정규화
4) BCNF
/**********************************************************************
제 1 정규형 : 반복되는 속성이나 그룹의 속성을 제거 하고, 새로운 실체를 추가한 후에 기존의 실체와 일대다의 관계를 형성한다.
제 2 정규형 : 복합키(Composit Primary Key)로 구성된 경우 해당 테이블 안의 컬럼들은 복합키 전체에 의존적이어야 한다. 만일 복합키 일부에 의 존적인 컬럼이 존재한다면 이를 제거해야 한다.
제 3 정규형 : 한 테이블 안의 모든 키가 아닌 컬럼들은 기본키(Primary Key)에 의존해야 한다. 만일 키가 아닌 컬럼에 종속되는 속성이 존재한다면 이를 제거해야 한다.
**********************************************************************/
7.다음 중 데이터 무결성의 종류에 해당하지 않는 것을 고르시오.
1) 엔터티 무결성
2) 참조 무결성
3) 도메인 무결성
4) 연결 무결성
/**********************************************************************
엔티티무결성(Entity Integrity) : 한 테이블에서 각각의 로우(ROW)는 상호구분 가능해야 한다. 참조무결성을 유지하기에 가장 기본이고 필수적인것이 기본키인 것 이다.
참조무결성(Referential Integrity) : 관계를 맺고 있는 두 테이블 사이에 서로 불일치한 데이터가 발생하지 못하도록 하기 위한 제약조건이다.
도메인무결성(Domain Integrity) : 한 컬럼에 입력될 수 있는 테이터의 유형, 형식, 경우의 수 등을 정의해서 잘못된 형식의 데이터가 입력되지 못하도록 하는 것이다.
**********************************************************************/
8. 다음 중 Nonclustered Index를 사용한 쿼리의 성능을 결정짓는 가장 중요한 항목에 해당하는 것을 고르시오. (참고. SQL Server 2000 기준 용어 사용)
1) 인덱스 구성 수준
2) 책갈피 조회(Bookmark Lookup)
3) 인덱스 키 칼럼 수
4) 최적화기(Optimizer)
/**********************************************************************
SQL Server 2005 에서는 Bookmark Lookup 이라는 것이 없어졌다. Clustered Index가 있으면 Clustered Index Seek 해서 Join 하고 Heap이면 RID Lookup 해서 Join 한답니다.
자세한 내용은 http://www.ddoung2.com/17
**********************************************************************/
9.다음 중 Non-SARG에 해당되지 않는 것은?
1) WHERE co11 + 1 = 100
2) WHERE LEFT(col2, 1) = '1'
3) WHERE col3 LIKE 'A%'
4) WHERE col1 = col2
/**********************************************************************
SARG(Search Argument)란? Index를 사용할 수 있도록 고려된 조건이라고 한다. ?? 무슨 소리?? 즉, WHERE 절에 조건이 인덱스를 사용하도록 고려하여 만들어야 한다는 말이다.
비교값은 항상 M:1(Many to one)의 관계이다. 그럼 NON-SARG란?? SARG의 반대말이겠지..
혹시나 왜 4)은 아니야? 라는 질문을 하는 사람이 있을것 같아 추가 설명을 한다.
앞서 말했듯이 M:1의 관계가 되어야 하는대 WHERE col1 = col2 여기서 col2의 값은 ?? 알수가 없다. Table Scan 고고싱 ㅋ
**********************************************************************/
10. NESTED LOOP 물리적 연산자를 사용해서 실행되는 조인의 최적 성능을 위해서 기본적으로 필요한 두 가지 요구 사항을 잘 나열한 것은?
1) 적은 행을 반환하는 외부(선행) 입력, 인덱스 검색이 가능한 내부(후행) 입력
2) 인덱스 검색이 가능한 내부(후행) 입력, 인덱스 스캔을 수행하는 외부(선행) 입력
3) 인덱스 스캔을 수행하는 외부(선행) 입력, 적은 행을 반환하는 외부(선행) 입력
4) 정렬된 출력을 가지는 내부(후행) 입력, 인덱스 스캔을 수행하는 외부(선행) 입력
/**********************************************************************
NESTED LOOP : 간단한게 말해서 비교 반복문이라고 할 수 있다. 다른 말로 하면 프로그램언어중의 FOR문이라고 할수도 있다. NESTED LOOP 방식의 성능을 높이기 위해서는 2가지가 필수이다.
1. 후행테이블의 크기가 작어야 한다.
2. 요소들의 비교가 빠르게 이루어지도록 인덱스가 미리 정의 되여 있어야 한다.
이 외에 SORT MERGE JOIN 과 HSAH JOIN 방식이 있다.
**********************************************************************/
11.트랜잭션(Transaction)이 갖추어야 할 기본 속성에 해당하지 않는 것은?
1) 원자성(atomicity)
2) 일관성(consistency)
3) 고립성(isolation)
4) 결정성(determination)
/**********************************************************************
원자성(Automicity) : 하나의 트랙잭션이 완료되었을 때의 데이터는 해당 트랙잭션의 처리를 모두 완료한 후의 상태이거나 처리를 받아 들이기 이전의 상태이어야 한다. 즉, 데이터의 갱신은 All or Nothing 개념이여야 한다는 것이다. 일부분 변경은 허용되지 않는다.
일관성(Consistency) : 트랜잭션의 성럽, 미성립에 불문하고 데이터의 내용은 일관성이 유지되어야 한다. 즉, 이 트랜잭션의 실행으로 일관성이 깨지지 않는다.
격리성(Isolation) : 연산의 중간 결과에 다른 트랜잭션이나 작업이 접근할 수 없다
영속성(Durability) : 트랜잭션이 종료한 후에는 장애 등으로 데이터의 내용이 변경되지 않아야 한다.
**********************************************************************/
12. 다음 T-SQL 구문중에 SQL Server 2005에서 실행되지 않는 구문은?
1) SELECT * FROM t1, t2 WHERE t1.col1 *= t2.col2
2) SELECT col1+col2 AS newCol FROM t1 ORDER BY newCol
3) DECLARE @i INT; SET @i = 10; SELECT TOP(@i) * FROM t1
4) DELETE TOP(5) FROM t1
/**********************************************************************
SELECT * FROM t1, t2 WHERE t1.col1 *= t2.col2 은 T-SQL 이다. ANSI 방식이 아니다.
근데 안돌아가나 ?? 안해봐서 모르겠다.. ㅋㅋ
**********************************************************************/
13.DBCC SQLPERF(waitstats) 명령을 실했을 때 CXPACKET 항목의 비율이 가장 높게 나왔다. 점검해봐야 할 부분의 하나라고 생각되는 것은?
1) Network
2) Disk
3) Parallel Process
4) Memory
/**********************************************************************
너무나 많은 카운터들이 있어 다 설명 못한다.
또는 sys.dm_os_wait_stats 찾아보아라.
**********************************************************************/
14.저장 프로시저(Stored Procedure)의 정의(해당 개체를 생성한 스크립트)를 표시하고자 할 때 사용할 수 있는 구문은?
1) sp_helpfile
2) sp_helptext
3) sp_helpscript
4) sp_procoption
/**********************************************************************
sp_helpfile : http://msdn.microsoft.com/ko-kr/library/ms174307.aspx
sp_helptext : http://msdn.microsoft.com/ko-kr/library ··· %29.aspx
sp_procoption : http://msdn.microsoft.com/ko-kr/library/ms181720.aspx
**********************************************************************/
15.다음과 같은 분할된 테이블(Partitioned Table)이 있다.
CREATE PARTITION FUNCTION UserInfoPF (INT)
AS RANGE RIGHT FOR VALUES (1000, 2000, 3000)
GO
CREATE PARTITION SCHEME UserInfoPS
AS PARTITION UserInfoPF TO (Fgroup1, Fgroup2, Fgroup3, Fgroup4)
GO
CREATE TABLE UserInfo(
UNumber INT NOT NULL PRIMARY KEY,
UName VARCHAR(50) NOT NULL,
Age TINYINT NOT NULL
) ON UserInfoPS (UNumber);
GO
여기서 다음의 INSERT 쿼리를 실행하여 추가되는 행은 어느 파일 그룹에 저장될까?
INSERT INTO UserInfo VALUES(2000, '홍길동', 28)
1) Fgroup1
2) Fgroup2
3) Fgroup3
4) Fgroup4
/**********************************************************************
RANGE RIGHT 와 RANGE LEFT 와 비교하기
CREATE PARTITION FUNCTION UserInfoPF (INT)
AS RANGE RIGHT FOR VALUES (1000, 2000, 3000)
은
파티션 1 : UNumber < 1000
파티션 2 : UNumber >= 1000 AND UNumber < 2000
파티션 3 : UNumber >= 2000 AND UNumber < 3000
파티션 4 : UNumber >= 3000
CREATE PARTITION FUNCTION UserInfoPF (INT)
AS RANGE LEFT FOR VALUES (1000, 2000, 3000)
은
파티션 1 : UNumber <= 1000
파티션 2 : UNumber > 1000 AND UNumber <= 2000
파티션 3 : UNumber > 2000 AND UNumber <= 3000
파티션 4 : UNumber > 3000
이다. 차이점을 알겠는가??
http://msdn.microsoft.com/ko-kr/library ··· examples
**********************************************************************/
16.다음 성능카운터 중 값이 높을 수록 좋은 것은?
1) MSSQLSERVER\Access Methods: Forwarded Records/sec
2) MSSQLSERVER\Access Methods: Full Scans/sec
3) MSSQLSERVER\Access Methods: Index Searches/sec
4) 위의 1)과 3)
17.다음 성능카운터 중 메모리와 관계 없는 것은?
1) Page Faults/Sec
2) Buffer cache hit ratio
3) Page life expectancy
4) 1), 2), 3) 모두 메모리와 관련 있는 성능카운터이다
/**********************************************************************
16)번 17)번은 알아서 찾아보라. 이곳에 적기에는 너무 많은 내용들이다.
**********************************************************************/
18.다음의 물리적 장치 중 가장 I/O 속도가 낮은 장치는?
1) CPU
2) Memory
3) Disk
4) Cache Memory
/**********************************************************************
이 문제는 내가 유일하게 자신이게 대답할 수 있는 문제이다. ㅋㅋ
**********************************************************************/
19. 다음 중 백업, 복원에 대한 이야기 중 틀린 것은?
1) 트랜잭션 로그 복원은 전체 백업 파일을 복원 후, 가장 마지막 트랜잭션 로그 백업부분을 복원하면 된다.
2) 단순복구 모델은 개발서버 또는 테스트 서버에서 사용이 권장된다.
3) 전체복구 모델에서만 STOPAT옵션을 이용하여 특정 시점 복원이 가능하다.
4) SQL Server 2005에서는 미러(mirror) 백업 및 복사 백업이 추가 되었다.
/**********************************************************************
트랜잭션 로그 복원은 전체 백업 파일을 복원 후, 가장 마지막 트랜잭션 로그 백업부분을 복원하면 된다. ?? 무슨 소리니 ㅋ**********************************************************************/
20.다음 중 맞는 이야기는?
1) 하드웨어의 증설이 가격 대비 성능 향상이 가장 높다.
2) 읽기 수에 비해서 응답시간이 오래 걸리는 쿼리는 recompile 문제로 일어 난다.
3) Tempdb file의 개수는 CPU의 개수와 연관성이 없다.
4) SQL Server 2005에서는 Database 생성 시, 그 크기와 관계 없이 매우 빠른 속도로 생성 된다.
21. 다음은 SQL Server에서 사용하는 데이터 유형이다. 다음 중 사용 공간의 크기가 다른 하나는?
1) REAL
2) INT
3) SMALLDATETIME
4) MONEY
22.현재 서비스 중인 웹서버에 이상이 발견되어 페이지가 나타나지 않고 있다. 웹 서버를 확인해 보니, CPU 사용량이 낮아서 웹서버에는 문제가 없어 보인다. SQL Server 서버의 작업 관리자를 보니 CPU가 10% 이하로 낮게 나타나고 있다 (평상시 CPU 사용량은 60~70%를 유지한다.). 쿼리 분석기에서 sp_lock 명령을 실행시켜 보니 아래와 같은 사항이 발견되고 있다. 현재 상황을 가장 적절하게 설명한 것은 어느 것인가?
1) 52번 세션에서 대량 작업(BULK INSERT)이 이루어지고 있다. 해당 작업 세션을 강제 종료 시켜야 한다.
2) SQL Server에는 문제가 없다.
3) 파일 증가가 발생하고 있다. 관리자에게 요청해서 현재 DB 사용량을 파악해서 비업무시간에 파일을 수동으로 증가시켜주어야 한다.
4) 16번 DB에 이상이 생겨서 SQL Server 엔진이 자동으로 데이터를 다른 곳으로 이동시키고 있다.
23.우리회사에서 운영하고 있는 DB 서버에 업무 시간 중 Profiler를 이용해서 수집된 쿼리를 분석하였다. 튜닝하려는 쿼리는 여러 테이블을 JOIN을 걸어서 데이터를 가져오는 구조이다. 테이블 중에 스캔이 발생하는 실행계획을 확인하여 적절한 인덱스를 생성해 주었다. 하지만, 해당 쿼리는 해당 인덱스를 이용하지 않고, 기존의 실행계획을 계속 사용하고 있다. 새로 생성된 인덱스를 이용하여 실행계획을 구성하게 하려는 작업과 관계가 먼 것은?
1) 해당 인덱스의 선택도가 좋은지를 다시 확인하고, 선택도가 좋은 항목이 앞에 오도록 구성한다.
2) SARG을 준수하고 있는지 확인하고, 인덱스를 사용할 수 있는 조건절 컬럼이 가공되지 않도록 조정한다.
3) 인덱스 힌트를 부여해서 해당 인덱스를 이용하도록 지정한다.
4) 출력되는 컬럼의 순서를 인덱스 컬럼의 순서에 맞도록 조정한다.
24. 다음 중 SQL Server 서비스가 아닌 것은?
1) SSIS : SQL Server Integration Service
2) SSRS : SQL Server Reporting Service
3) SSNS : SQL Server Notification Service
4) SSAS : SQL Server Adviser Service
25. 다음 데이터의 구조를 보고, 설계기법 중 어떤 기법을 적용해야 좋은지 선택하라.
Emp Table 의 구조 및 자료 현황이다.
사번 직원명 연봉 시급 직책 비정규직직급 입사일 고용일
1 홍길동 3000 Null 과장 Null 20040101 null
2 이순신 Null 10000 Null 선임 Null 20070228
3 김유신 Null 15000 Null 책임 Null 20060605
4 강감찬 2500 Null 대리 Null 20051231 null
5 정약용 Null 30000 Null 수석 Null 20020301
1) 제2정규화
2) 제3정규화
3) BCNF
4) Super Type - Sub Type
-http://ddoung2.com/entry/SQL-Server-Academy-지식-테스트 퍼왔습니다.