연구개발/DBA
면접 질문
HEAD1TON
2011. 9. 8. 12:11
/**********************************************************************************
1. RDBMS가 뭔가요?
Relational Database Management System
키(key)와 값(value)들의 간단한 관계를 테이블화 시킨 매우 간단한 원칙의 전산정보 데이터베이스
2. 정규화가 뭔가요?
실세계에서 발생하는 데이터를 수학적인 방법에 의해 구조화시켜 체계적으로 데이터를 관리할 수 있도록 하는 것
3. 각 정규형의 차이점은 무엇인가요? (1차, 2차, 3차 등)
1차 정규화 - 복수의 속성값을 갖는 속성을 분리
"모든 엔티티타입에는 하나의 속성만 있어야 하며, 반복되는 속성의 집단은 별도의 엔티티타입으로 분리한다.
2차 정규화 - 주식별자에 종속적이지 않은 속성의 분리
부분 종속 속성을 분리
3차 정규화 - 속성에 종속적인 속성의 분리(1차,2차정규화를 통해 분리된 테이블에서 속성 중 주식별자에 종속된 속성 중에서
다시 속성간에 종속 관계가 발생한다면 3차 정규화를 진행)
이전 종속 속성의 분리
보이스-코드 정규화(BCNF) - 다수의 주식별자 분리
4차 정규화 - 특정 속성 값에 따라 선택적인 속성의 분리(식별자간에 역할이 중복되지 않음)
5차 정규화 - 결합 종속일 경우는 두 개 이상의 N개로 분리
4. 저장 프로시저는 무엇인가요?
일련의 쿼리를 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합
5. 트리거는 무엇인가요?
DML 문이 TABLE에 대해 행해질 때 묵시적으로 수행되는 프로시저
트리거는 TABLE과 별도로 DATABASE에 저장되며 VIEW에 대해서가 아니라 TABLE에 관해서만 정의될 수 있다.
6. 뷰는 무엇인가요?
실제 데이터를 갖고 있는 테이블의 정보를 선별적으로 링크하여 보여주는 것으로써 일종의 바로가기 아이콘과 같은 개념
추가적으로 테이블을 생성하는 낭비없이 외부로 유출되면 안되는 데이터를 가려내고 보여줄 수 있다.
7. 인덱스는 무엇인가요?
영어사전의 "찾아보기" 같이 DATA를 빨리 찾을 수 있도록 하는 것.
종류는 클러스터드 인덱스와 넌클러스터드 인덱스가 있음.
장점 - 검색 속도가 빨라지며 시스템부하가 줄어 시스템 성능이 좋아진다.
단점 - 데이터베이스 공간을 차지하므로 추가적인 공간이 필요함(대략 데이터베이스 크기의 10%)
생성하는데 시간이 많이 소요될 수 있으며 데이터의 변경 작업(Insert, Update, Delete)이 자주 일어날 경우
성능이 많이 나빠질 수도 있다.
8. 클러스터드 인덱스와 넌클러스터드 인덱스의 차이는 무엇인가요?
클러스터드 인덱스는
-테이블에 데이터가 추가/수정 될 때 테이블에 실제로 저장되는 물리적인 정렬기준
-테이블당 1개만 생성 가능
-물리적으로 정렬되어 있으므로 검색이 빠르다.
-PK(Primary Key)를 정의하면 자동 생성된다.
넌클러스터드 인덱스
-논리적인 정렬기준
-하나의 테이블에 여러개 생성 가능(최대 249개)
9. 테이블에 설정될 수 있는 인덱스 형태들은 어떤 형태들이 있나요?
클러스터드 인덱스와 넌클러스터드 인덱스
10. 커서는 무엇인가요?
테이블에서 여러 개의 행을 쿼리한 후에, 쿼리의 결과인 행 집합을 한 행씩 처리하기 위한 방식
11. DBCC 명령어는 어떤것들을 사용해 보았나요?
DBCC TRACEON / TRACEOFF / TRACESTATUS
DBCC SQLPERF(LOGSPACE / IOSTATS / LRUSTATS / NETSTATS)
DBCC OPENTRAN
DBCC CHECKDB
DBCC INPUTBUFFER / OUTPUTBUFFER
DBCC PROCCACHE / FREEPROCCACHE
DBCC SHOWCONFIG
DBCC SHOW_STATISTICS
DBCC USEROPTIONS
DBCC INDEXDEFRAG
DBCC DROPCLEANBUFFERS
12. 연결된 서버는 무엇인가요?
다른 데이터베이스와 연결하여 데이터 전달 및 조회를 위함
13. 데이터 정렬(Collation)은 무엇인가요?
Sort
14. 데이터 정렬 종류는 어떤 것들이 있나요?
ASC / DESC
15. 프라이머리 키와 유니크 키의 차이는 무엇인가요?
PRIMARY KEY는 UNIQUE KEY의 부분집합으로 테이블에 한 개 밖에 없으며 NULL 값을 허용하지 않음
UNIQUE KEY는 NULL값 허용- 한개만
16. 일대일, 일대다, 다대다 관계의 테이블 설계는 어떻게 하나요?
일대일 -
하나의 엔티티타입으로 완전히 통합하는 방법
부분 통합을 하는 방법
슈퍼 엔티티타입 생성하는 방법
일대다 -
그냥 쓰면 됨.
다대다 -
PK에 의한 다대다관계는 주식별자 통합
속성에 의한 다대다관계는 부모 엔티티타입에 속성 추가
17. NOLOCK이 무엇인가요?
READ UNCOMMITED
18. DELETE 명령어와 TRUNCATE 명령어의 차이는 무엇인가요?
DELETE는 테이블의 데이터 삭제
TRUNCATE는 데이터만 삭제. 속도는 TRUNCATE가 휠씬 빠름(로그를 쓰지 않기 때문에)
19. Sql Server에서 지원하는 조인방식은 어떤 것들이 있나요?
Nested Loop Join - 루프를 돌며 조건 찾기
Hash Join - 조인에 참여하는 두 개의 테이블 중 상대적으로 크기가 작은 테이블을 해시 함수에 통과시켜 그 결과 값을
해시 테이블에 저장한다. 그런 다음, 큰 테이블을 한 행, 한 행 해시 테이블에 매칭을 시켜가며 값을 찾아내 간다.
해시 테이블에는 실제 데이터가 아닌 해시 값이 저장되기 때문에 작은 테이블이 해싱되어야 해시 테이블의
크기를 작게 유지하여 비교 속도가 빨라지게 된다.
Merge Join - 병합을 위해서는 조인된 양쪽 컬럼이 반드시 정렬되어 있어야 한다.
20. HAVING 절과 WHERE 절과의 차이는 무엇인가요?
HAVING절 - GROUP BY에 대한 조건을 부여하며 집계함수와 함께 사용할 수 있다.
WHERE절 - 조건 검색을 위해 씀
21. 서브쿼리가 무엇인가요?
쿼리 안에 쿼리가 있는 것
22. 서브쿼리의 결과 종류는 어떤 것들이 있나요?
단일행 - 한개의 컬럼만 리턴
복수행 - 실행결과가 여러개의 행을 리턴(복수개의 행과 비교해야 하므로 in연산자를 사용)
복수컬럼 - 실행결과가 복수개의 컬럼, 복수개의 행을 리턴
상호관련 - main query절에 사용된 테이블이 서브쿼리절에 다시 재 사용되는 경우
23. 프로파일러는 무엇인가요?
데이터베이스가 작동할 때 쿼리 및 로그 등의 모니터링을 하기 위한 도구
24. 사용자정의함수는 무엇인가요?
SQL Server 2000에서 추가된 기능으로 다른 일반 프로그래밍에서처럼 자유롭게 함수를 정의하고 활용할 수 있는 것.
함수의 유형은 크게 스칼라, 인라인테이블, 다중문테이블 3가지가 있다.
25. 사용자정의함수의 결과 종류는 어떤 것들이 있나요?
스칼라 - 단일 데이터 값을 리턴하는 함수
인라인테이블 - 테이블 형태의 결과 값을 리턴하는 함수
다중문테이블 - 테이블 형태의 결과 값을 리턴하는 함수로 기본적인 기능은 인라인 테이블 함수와 비슷하지만
리턴되어지는 테이블 형식을 직접 정의할 수 있다.
26. SQL Server의 TCP/IP 포트는 무엇인가요? 바꿀 수 있나요?
기본포트는 1433. 당연히 바꿀 수 있으며 보안 문제로 인하여 바꿔서 사용하는 것을 권장
27. SQL Server의 인증 모드는 어떤것이 있나요? 바꿀 수 있나요?
원도우 인증과 SQL Server 인증. 당연히 바꿀 수 있음
28. SQL Server 로긴 유저와 암호는 어디에 저장되어 있나요?
-
29. SQL Server의 버전 정보를 확인할 수 있는 명령어는 무엇인가요?
SELECT @@VERSION
30. SQL server 에이전트는 무엇인가요?
자동화 기능을 위해 필수적인 서비스.-SQL Server Agent 경고, 데이터베이스 메일, 데이터베이스 유지관리 계획, 로그 전달
31. 저장프로시저는 재귀호출이 될까요? 몇단계까지 가능할까요?
재귀호출이 가능하며 32단계까지만 가능.
32. @@ERROR 는 무엇인가요?
시스템 함수로써 Transact_SQL문이 성공적으로 실행되면 0을 반환하고 오류가 발생하면 해당 오류 번호를 반환
33. RAISERROR 는 무엇인가요..?
오류 메시지를 생성하고 세션에 대한 오류 처리를 시작할 수 있음.
sys.messages 카탈로그 뷰에 저장된 사용자 정의 메시지를 참조하거나 동적으로 메시지를 작성할 수 있음.
TRY..CATCH구문 사용
34. 로그전달은 무엇인가요?
주서버와 보조서버에 데이터를 동기화 시킨 후 트랜잭션이 발생되면 주서버의 트랜잭션 로그가 보조서버에도 전달되게끔 설정하는 것
35. 지역 임시 테이블과 전역 임시 테이블의 차이는 무엇인가요?
지역 임시 테이블은 현재 세션에서만 볼 수 있으나 전역 임시 테이블은 모든 세션에서 볼 수 있음.
36. DB이름을 바꿀 수 있는 명령어는 무엇인가요?
EXEC sp_renamedb '이전DB명', '바꿀 DB명'
37. sp_configure 명령어는 무엇인가요?
SQL Server의 설정을 변경하고자 할 시 사용하는 명령어
38. 복제의 종류는 어떤것들이 있는지 차이점을 설명해주세요.
스냅숏 복제(Snapshot Replication) - 정기적으로 게시서버에서 지정된 게시의 모든 데이터를 통째로 구독서버에 전달
트랜잭션 복제(Transaction Replication) - 변경된 데이터만을 전달하는 방식
병합 복제(Merge Replication) - 스냅숏 복제와 트랜잭션 복제는 게시서버에서 구독서버로 전달되는 방식이나
병합 복제는 구독서버에서 게시서버로 변경사항이 전달되는 방식
39. SQL Server 설치시 추가되는 서비스들은 어떤 것들이 있나요?
SQL Server Integration Services
SQL Server Analysis Services
SQL Full-text Filter Daemon Launcher
SQL Server Reporting Services
SQL Server Browser
40. 유저의 권한 변경 키워드 3개는 무엇이 있나요?
GRANT - 보안 주체에 보안 개체에 대한 사용 권한을 부여.
DENY - 보안 주체에 대한 사용 권한을 거부.
REVOKE - 이전에 부여하거나 거부된 사용 권한을 제거.
41. SET QUOTED_IDENTIFIER의 의미는 무엇인가요?
기본값은 ON
SET QUOTED_IDENTIFIER OFF 시 큰따옴표를 사용하여 식별자를 구분 할 수 있음
42. STUFF함수와 REPLACE함수와의 차이는 무엇인가요?
REPLACE 함수는 지정된 문자열 값의 모든 항목을 다른 문자열 값으로 바꿈
STUFF 함수는 다른 문자열에 문자열을 삽입.
SELECT STUFF('abcdef', 2, 3, 'ijklmn');
GO
----------------------------------------------
aijklmn
43. master 데이터베이스를 어떻게 재구축하나요?
1.서버 차원의 모든 구성 값을 기록
SELECT * FROM sys.configurations;
2.SQL Server 인스턴스와 현재 데이터 정렬에 적용된 모든 서비스 팩과 핫픽스를 기록.
시스템 데이터베이스를 다시 작성한 후 이러한 업데이트를 다시 적용해야 함.
SELECT
SERVERPROPERTY('ProductVersion') AS ProductVersion,
SERVERPROPERTY('ProductLevel') AS ProductLevel,
SERVERPROPERTY('ResourceVersion') AS ResourceVersion,
SERVERPROPERTY('ResourceLastUpdateDateTime') AS ResourceLastUpdateDateTime,
SERVERPROPERTY('Collation') AS Collation;
3.시스템 데이터베이스의 모든 데이터와 로그 파일의 현재 위치를 기록.
시스템 데이터베이스를 다시 작성하면 모든 시스템 데이터베이스가 원래 위치에 설치 됨.
시스템 데이터베이스 데이터나 로그 파일을 다른 위치로 이동한 경우 해당 파일을 다시 이동해야 함.
SELECT name, physical_name AS current_file_location
FROM sys.master_files
WHERE database_id IN (DB_ID('master'), DB_ID('model'), DB_ID('msdb'), DB_ID('temp'));
4. master, model, msdb 데이터베이스의 현재 백업을 찾음.
5. SQL Server 인스턴스가 복제 배포자로 구성된 경우 배포 데이터베이스의 현재 백업을 찾습니다.
6. 시스템 데이터베이스를 다시 작성할 수 있는 권한이 있는지 확인합니다. 작업을 수행하기 위해 sysadmin
고정 서버 역할의 멤버여야 함.
7.master, model, msdb 데이터와 로그 템플릿 파일의 복사본이 로컬 서버에 있는지 확인.
44. 각 시스템데이터베이스들의 기능들은 무엇인가요?
master 데이터베이스 - SQL Server 인스턴스에 대한 모든 시스템 수준 정보를 기록.
msdb 데이터베이스 - SQL Server 에이전트에서 알림과 작업을 예약하는데 사용.
model 데이터베이스 - SQL Server에서 생성되는 모든 데이터베이스에 대한 템플릿으로 사용.
Resource 데이터베이스 - SQL Server에 포함된 시스템 개체가 들어 있는 읽기 전용 데이터베이스.
tempdb 데이터베이스 - 임시 개체나 중간 결과 집합을 보관하기 위한 작업 영역.
45. 프라이머리키와 포린키는 무엇인가요?
PRIMARY KEY - 테이블에는 일반적으로 테이블의 각 행을 고유하게 식별하는 값을 가진 열 또는 열 조합이 포함되어
있으며 이러한 열이나 열 조합을 테이블의 PRIMARY KEY라고 하며 테이블에 엔터티 무결성을 적용함.
FOREIGN KEY - 두 테이블의 데이터 간 연결을 설정하고 강제 적용하는데 사용하는 열을 말함.
46. 무결성이 무엇인가요? 제약 조건들에 대해서 설명해주세요.
주식별자에 대해 중복되지 않는 값을 갖지 않는 것.
무결성은 4가지 범주로 구성됨.
엔터티 무결성 - 행을 특정 테이블의 고유 엔터티로 정의. 엔터티 무결성은 UNIQUE 인덱스, UNIQUE 제약조건 또는 PRIMARY KEY
제약 조건을 통해 테이블의 기본 키나 식별자 열의 무결성을 강제 적용함.
도메인 무결성 - 특정 열에 대한 항목의 유효성. 데이터 형식을 통해 유형을 제한하거나 CHECK 제약 조건 및 규칙을 통해 형식을 제한
하거나 FOREIGN KEY 제약 조건, CHECK 제약 조건, DEFAULT 정의, NOT NULL 정의 및 규칙을 통해 가능한 값
범위를 제한하여 도메인 무결성을 강제 적용할 수 있음.
참조 무결성 - 행이 입력되거나 삭제될 때 테이블 간에 정의된 관계를 유지.
사용자 정의 무결성 - 다른 무결성 범주에 속하지 않는 특정 업무 규칙을 정의할 수 있음.
제약 조건 - PRIMARY KEY 제약조건, FOREIGN KEY 제약조건, UNIQUE 제약조건, CHECK 제약조건, DEFAULT 정의, NULL 값 허용
PRIMARY KEY 제약조건 - 데이터의 고유성을 보장.
FOREIGN KEY 제약조건 - 외래 키 테이블에 저장되는 데이터를 제어하는 것이지만 기본 키 테이블의 데이터 변경 사항도 제어할 수 있음.
UNIQUE 제약조건 - 열 또는 열 조합에 대해 고유성을 강제 적용하고자 할 때 사용.
DEFAULT 정의 - 레코드의 각 열은 값을 가져야하므로 DEFAULT 정의를 정의하는 것이 보다 좋은 해결책.
NULL 값 허용 - 테이블의 행에서 특정 열에 NULL값을 포함할 수 있는지 여부를 결정.
47. 관계형 테이블의 속성은 무엇인가요?
-
48. 반정규화가 무엇인가요?
성능을 위해 정규화된 데이터 모델의 중복성을 허용하도록 하는 것.
49. 어떻게 @@ERROR 와 @@ROWCOUNT 를 한번에 얻을 수 있나요?
@@ERROR를 @@ROWCOUNT와 함께 사용하여 DML 문 작업의 유효성을 확인할 수 있음.
@@ERROR의 값을 확인하여 오류 표시가 있는지 검사하고 @@ROWCOUNT를 사용하여 업데이트가 테이블의 행에 제대로 적용되었는지 확인.
USE AdventureWorks;
GO
IF OBJECT_ID(N'Purchasing.usp_ChangePurchaseOrderHeader',N'P')IS NOT NULL
DROP PROCEDURE Purchasing.usp_ChangePurchaseOrderHeader;
GO
CREATE PROCEDURE Purchasing.usp_ChangePurchaseOrderHeader
(
@PurchaseOrderID INT
,@EmployeeID INT
)
AS
-- Declare variables used in error checking.
DECLARE @ErrorVar INT;
DECLARE @RowCountVar INT;
-- Execute the UPDATE statement.
UPDATE PurchaseOrderHeader
SET EmployeeID = @EmployeeID
WHERE PurchaseOrderID = @PurchaseOrderID;
-- Save the @@ERROR and @@ROWCOUNT values in local
-- variables before they are cleared.
SELECT @ErrorVar = @@ERROR
,@RowCountVar = @@ROWCOUNT;
-- Check for errors. If an invalid @EmployeeID was specified
-- the UPDATE statement returns a foreign-key violation error #547.
IF @ErrorVar <> 0
BEGIN
IF @ErrorVar = 547
BEGIN
PRINT N'ERROR: Invalid ID specified for new employee.';
RETURN 1;
END
ELSE
BEGIN
PRINT N'ERROR: error '
+ RTRIM(CAST(@ErrorVar AS NVARCHAR(10)))
+ N' occurred.';
RETURN 2;
END
END
-- Check the row count. @RowCountVar is set to 0
-- if an invalid @PurchaseOrderID was specified.
IF @RowCountVar = 0
BEGIN
PRINT 'Warning: The EmployeeID specified is not valid';
RETURN 1;
END
ELSE
BEGIN
PRINT 'Purchase order updated with the new employee';
RETURN 0;
END;
GO
50. Identity 컬럼이 무엇인가요?
현재 값 알아내기 - SELECT @@IDENTITY
테이블의 현재 값 알기 - DBCC CHECKIDENT('tablename')
강제 값 지정 - DBCC CHECKIDENT('tablename', RESEED, 10000)
51. 스케쥴 잡이 무엇인가요?
관리를 자동화하기 위한 서비스 즉 일정이 지정된 관리 태스크를 실행하는 Microsoft Windows 서비스
52. 어떤 인덱스도 가지고 있는 않은 테이블을 무엇이라고 부르고 무슨 목적으로 사용하나요?
작은 테이블 - 검색 위주가 아닌 insert, update가 자주 일어나는 경우에 사용. 인덱스를 쓰는 것 보다는 없는 것이 성능상 유리한 테이블
53. BCP는 무엇인가요? 어떤 경우에 사용하나요?
분할된 뷰를 포함하여 SELECT문이 작동하는 SQL Server 데이터베이스의 어디에서나 데이터를 가져올 수 있도록 사용하는 유틸리티
데이터 파일로 SQL Server 테이블의 데이터를 대량으로 내보냄.
쿼리의 데이터를 대량으로 내보냄
SQL Server 테이블로 데이터 파일의 데이터를 대량으로 가져옴.
서식 파일을 생성.
54. JOIN절 대신에 서브쿼리를 대체할 수 있나요?
대체할 수 있으나 JOIN 절에 비해 서브쿼리는 성능한 우월하지 않기에 JOIN절을 사용할 수 있다면 권장
55. 오라클과 같은 다른 DBMS에 연결할 수 있나요?
LINKED SERVER를 이용하여 OPENROWSET 이나 OPENDATASOURCE를 쓰기도 함.
56. 테이블이 사용중인 인덱스는 어떻게 알 수 있나요?
sp_helpindex 또는 실행계획을 보면 됨.
57. 다른 인스턴스로 테이블이나 스키마, 뷰 등을 복사하려면 어떻게 해야 하나요?
SSIS(SQL Server Integration Services)를 이용.
SSIS에서 파일을 복사 또는 다운로드하고 이벤트에 응답하여 전자 메일 메시지를 보내며 데이터 웨어하우스를 업데이트하고 데이터를 정리
및 마이닝하며 SQL Server 개체와 데이터를 관리하여 복잡한 비지니스 문제를 해결할 수 있음.
58. 셀프 조인이 무엇인가요?
자기자신과 자기자신이 조인하는 것 즉 자기자신을 참조하는 조인
59. 크로스 조인이 무엇인가요?
카티션 조인 이라고도 하며 한 테이블의 모든 행과 다른 테이블의 모든 행을 짝지어 반환
60. 가상 테이블에 트리거를 사용할 수 있나요?
가상 테이블(VIEW)에 트리거 사용 가능
61. 저장프로시저의 장점들을 설명해주세요.
저장 프로시저는 다수의 클라이언트 응용프로그램에서 서버로 보낼 T-SQL문을 미리 모아서 서버에서 관리하는 데이터로 저장해 둔 것으로
다수의 클라이언트들이 서버에 저장된 T-SQL 문을 공유하는 것이 가능해졌다.
데이터베이스 내에서 테이블 칼럼 등의 구조가 변경되더라도 서버에서 저장 프로시저의 정의만 수정하면 클라이언트는 신경쓰지 않아도 된다.
뷰와 마찬가지로 프로시저의 정의를 몰라도 그 처리 결과를 사용할 수 있기 때문이다.
또한 특정 형식의 데이터만을 추가할 수 있는 테이블이 있는 경우에는 추가 조건에 제한을 주는 프로시저를 정의해두고 해당 프로시저를 통해
서만 접근할 수 있도록 구성할 수도 있다.
저장 프로시저는 T-SQL문을 서버가 미리 저장하고 있으며 T-SQL문을 실행할 때에 처리단위가 되며 Batch처리와 같이 해당 저장 프로시저에서
정의한 T-SQL문을 하나의 배치로 간주하여 한꺼번에 처리하고 최적화시킨다.
T-SQL문이 미리 저장되어 있어 대량의 T-SQL문을 서버로 보내는 대신 단순히 저장 프로시저의 이름과 매개변수만 보내면 된다. 따라서,
프로시저를 사용할 경우 네트워크의 체증은 감소하게 된다.
클라이언트 간의 처리 루틴 공유가 가능하다.
데이터베이스 내부구조를 감춘다.
서버의 보호 및 데이터의 무결성을 구현한다.
쿼리의 저장속도를 향상시켜준다.
네트웍의 과부하를 감소할 수 있다.
62. 데이터웨어하우징이 무엇인가요?
개방형 시스템 도입으로 흩어져 있는 각종 기업정보를 최종 사용자가 쉽게 활용, 신속한 의사결정을 유도하도록 해 기업내 흩어져 있는 방대한
양의 데이터에 쉽게 접근하고 이를 활용할 수 있게 하는 기술
63. OLTP가 무엇인가요?
OnLine Realtime Transaction Processing - 데이터 입력, 조회 등을 위한 트랜잭션 지향의 업무를 쉽게 관리해줌.(업무 프로세스 중심)
데이터의 입력, 조회 등이 많이 일어나므로 소량의 데이터 처리 활용
OLAP(OnLine Analytical Processing)는 사용자로 하여금 데이터를 다른 관점으로 쉽게, 또한 선택적으로 추출하고 바라볼 수 있게 해줌.(사용자의 분석 수행 기반)
조회 관점이므로 대량의 데이터 처리 활용
64. XML은 어떻게 사용하나요?
T-SQL 확장 언어는 FOR XML을 사용하여 관계형 쿼리 결과를 XML에 매핑하고 OPENXML을 사용하여 XML로부터 관계형 뷰를 생성하는
SQL 중심 접근 방식을 제공함.
데이터에 대한 데이터 대량 로드, 쿼리 및 업데이트 기능을 지원하는 XML 중심 접근 방식을 제공하는 AXSD를 사용하여 정의.
65. 실행계획이 무엇인가요? 당신은 언제 사용하는지 어떻게 보는지 설명해주세요.
데이터베이스의 쿼리 실행 시 쿼리에 대한 구조적 처리의 절차를 보여주는 것.
쿼리 짜면서 실행해서 봄.
66. SELECT 문의 처리 순서는?
FROM -> ON -> JOIN -> WHERE -> GROUP BY -> WITH CUBE 또는 WITH ROLLUP -> HAVING -> SELECT -> DISTINCT -> ORDER BY -> TOP
67. 분산/파티셔닝 테이블 원래와 이해
테이블의 행 데이터가 매우 많은 대용량 데이터베이스의 경우 INSERT, UPDATE 등의 작업은 갈수록 느려지게 된다. 이럴 경우, 테이블을 분할하는 것이
시스템 성능에 큰 도움이 된다. 테이블을 분할 할 때는 테이블의 범위에 따라서 서로 다른 파일그룹에 저장하는 것이 가장 보편적이다.
예를 들어, 10년간 데이터가 저장된 테이블이라면 아마도 과거의 데이터는 주로 조회에만 이용될 뿐 거의 변경이 되지 않을 것이다. 그러므로 작년
이전의 데이터와 올해의 데이터를 서로 다른 파일 그룹에 저장한다면 효과적일 수 있다. 또 다른 예로는 월별 데이터의 업데이트가 잦은 데용량
데이터라면 각 월별로 분할 테이블을 구성할 수도 있다. 그런데 분할 테이블에는 꼭 분할 인덱스라는 용어가 같이 따라오게 된다.
1. 파일그룹으로 분리한 데이터베이스 생성
2. 파티션 함수를 정의 : 파티션 함수는 테이블 또는 인덱스를 분할하는 방법을 지정
3. 파티션 구성표를 정의 : 파티션 구성표는 파티션 함수에 의해 생성된 파티션을 파일그룹별로 나눠주는 역할을 한다.
4. 테이블 정의 시 파티션 구성표를 적용
5. 데이터 입력 또는 대량 데이터 로드
6. 자동으로 범위에 따라서 파일 그룹에 분할되어 저장됨.
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
1. 조인의 종류와 각조인들의 장단점을 말하시오
INNER JOIN - 조인을 하는 테이블에서 서로 일치하는 값이 있는 항목만 가져온다.
CROSS JOIN - 양쪽 테이블의 모든 행에 대해 서로 연결한다. WHERE절이 없다.
OUTER JOIN - 어느 한쪽 테이블의 데이터를 모두 가져온다. LEFT OUTER JOIN, RIGHT OUTER JOIN
SELF JOIN - 자기 자신을 다시 조인한다.
2. 조인시 where 구문이 인라인뷰속에 있는거랑 밖에 있는 거랑의 차이점
3. null 데이타가 존재할시 count, sum 연산
COUNT = 0
SUM = NULL
4. 테이블 한개 던져주고 1~4 정규화 시키시오
1차 정규화 - 복수 속성값에 대한 속성의 분리
2차 정규화 - 주식별자에 종속적이지 않은 속성의 분리
3차 정규화 - 속성에 종속적인 속성의 분리
BCNF - 다수의 식별자 분리
4차 정규화 - 특정 속성 값에 따라 선택적인 속성의 분리(식별자간에 역할이 중복되지 않음)
5차 정규화 - 결합 종속일 경우 두 개 이상의 N개로 분리
5. exec와 sp_excutesql로 각각 동적쿼리를 만들고 이 둘의 차이점을 말하시오
문자열 쿼리 - 받아들이는 변수 값에 따른 쿼리 조건 문이나 기타 쿼리문의 변경이 일어날 때 자주 사용
6. 쿼리플랜을 보고 해당 플렌을 설명하시오
7. 모델링 , 모델링Tool ( ER-WIn, ERSTUDIO 사용유무)
8. 파싱 원리및 컴파일유무
9. 인덱스 종류와 설명
10. 함수/프로시저 만들줄 아느냐?
1. page 단위와 익스텐트 종류 설명
2. 백업 종류와 시점별 리스토어 설명
3. DB 옵션설명
4. 스트레스 tool과 성능분석/profiller 사용 유무
5. log 쉬핑 / standby 서버, 클러스터링 / 복제 운영
6. dbcc 명령어
7. 분산/파티셔닝 테이블 원리 이해
8. 파일그룹/ Trmp DB 이동
1. update 는 몇가지 종류가 있나요?
2. merge interval 에 대해서 설명해 보세요.
3. execution plan 의 iterator 를 몇가지 분류로 나누어 보세요.
4. static index seek 와 dynamic index seek 의 차이는 무엇인가요?
5. sort warning 과 hash warning 은 언제 발생하나요?
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
DBA 정기업무
일일작업
1. 네트워크를 포함한 필요한 서비스가 시작(작동)중인지 확인
2. 윈도우 이벤트 뷰어를 통한 오류 및 경고등의 중요 메시지를 점검 및 문제를 해결
3. Sql Server 로그에서 오류 및 중요 메시지를 점검하고 문제를 해결한다.
4. Sql server 에이전트 로그에서 오류를 포함한 중요 메시지를 점검하고 문제를 해결한다.
5. 에이전트 서비스에 정의해둔 각 작업(job)의 성공여부를 점검하고 필요한 조칠르 취한다.
6. windows server와 sql server의 주요 카운트를 모니터하면서 이상 증상을 확인한다.
7. windows의 성능 모니터의 "성능 로그 및 경고 | 카운트 로그"에서 성능 통계정보를 수집한다.
8. Profiler와 같은 도구를 이용 과도한 리소스 소비, 잠금 유발, 차단(blocking)문제, DeadLoc을 유발하는
쿼리를 추적, 조치를 취한다.
9. 디스크 공간은 충분한지 점검한다.
10. 통계 업데이트 실시
주간작업
1. 인덱스 조각화 상태를 점검하고 필요시 적절한 방법으로 조각모음을 수행한다.
(DBCC SHOWCONTIG, DBCC DB REINDEX, DBCC INDEXDEFRAG)
2. 시스템 및 사용자 데이테베이스의 전체 백업 혹은 차등 백업을 수행한다.
3. 통계 업데이트 실시
(UPDATE STATISTICS, SP_UPDATESTATS)
4. 데이터와 로그 파일에서 불필요하게 과도한 여유 공간을 줄임
월간작업
1. 운영체제 전체 백업
2. 시스템 및 사용자 데이터베이스의 전체 백업 혹은 차등 백업 수행
3. 데이터베이스 무결성 검사 수행, 그 결과에 따라 조치를 취함
(DBCC CHECKTABLE 혹은 DBCC CHECKDB 명령을 이용)
4. 테스트 장비에서 시스템 및 사용자 데이터베이스를 완전히 복구 및 복원할 수 있도록 시연
5. SQLDIAG.EXE 수행 및 검토
6. 각 서버 별로 지난 1개월간 수집한 성능 통계정보를, 기존의 성능 통계정보와 비교하여
향후 소요되는 S/W, H/W 용량을 예측한다.
비정기작업
1. 트랜잭션 로그 파일이 일정수준 이상으로 채워진 경우, 로그백업 등등을 이용하여 로그 사이즈를 줄인다.
2. 데이터베이스 구조 변경, 로그인 변경, 서버 구성 옵션 변경등이 있으면 MASTER를 백업한다.
3. 에이전트 서비스의 작업, 경고, 운영자 및 유지 관리계획 등이 변경되면 MSDB를 백업한다.
4. 시스템 및 사용자데이터베이스 개체를 추가 혹은 변경한 경우 해당 데이터베이스의 스크립트 백업을 수행한다.
****************************************************************************/
1. RDBMS가 뭔가요?
Relational Database Management System
키(key)와 값(value)들의 간단한 관계를 테이블화 시킨 매우 간단한 원칙의 전산정보 데이터베이스
2. 정규화가 뭔가요?
실세계에서 발생하는 데이터를 수학적인 방법에 의해 구조화시켜 체계적으로 데이터를 관리할 수 있도록 하는 것
3. 각 정규형의 차이점은 무엇인가요? (1차, 2차, 3차 등)
1차 정규화 - 복수의 속성값을 갖는 속성을 분리
"모든 엔티티타입에는 하나의 속성만 있어야 하며, 반복되는 속성의 집단은 별도의 엔티티타입으로 분리한다.
2차 정규화 - 주식별자에 종속적이지 않은 속성의 분리
부분 종속 속성을 분리
3차 정규화 - 속성에 종속적인 속성의 분리(1차,2차정규화를 통해 분리된 테이블에서 속성 중 주식별자에 종속된 속성 중에서
다시 속성간에 종속 관계가 발생한다면 3차 정규화를 진행)
이전 종속 속성의 분리
보이스-코드 정규화(BCNF) - 다수의 주식별자 분리
4차 정규화 - 특정 속성 값에 따라 선택적인 속성의 분리(식별자간에 역할이 중복되지 않음)
5차 정규화 - 결합 종속일 경우는 두 개 이상의 N개로 분리
4. 저장 프로시저는 무엇인가요?
일련의 쿼리를 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합
5. 트리거는 무엇인가요?
DML 문이 TABLE에 대해 행해질 때 묵시적으로 수행되는 프로시저
트리거는 TABLE과 별도로 DATABASE에 저장되며 VIEW에 대해서가 아니라 TABLE에 관해서만 정의될 수 있다.
6. 뷰는 무엇인가요?
실제 데이터를 갖고 있는 테이블의 정보를 선별적으로 링크하여 보여주는 것으로써 일종의 바로가기 아이콘과 같은 개념
추가적으로 테이블을 생성하는 낭비없이 외부로 유출되면 안되는 데이터를 가려내고 보여줄 수 있다.
7. 인덱스는 무엇인가요?
영어사전의 "찾아보기" 같이 DATA를 빨리 찾을 수 있도록 하는 것.
종류는 클러스터드 인덱스와 넌클러스터드 인덱스가 있음.
장점 - 검색 속도가 빨라지며 시스템부하가 줄어 시스템 성능이 좋아진다.
단점 - 데이터베이스 공간을 차지하므로 추가적인 공간이 필요함(대략 데이터베이스 크기의 10%)
생성하는데 시간이 많이 소요될 수 있으며 데이터의 변경 작업(Insert, Update, Delete)이 자주 일어날 경우
성능이 많이 나빠질 수도 있다.
8. 클러스터드 인덱스와 넌클러스터드 인덱스의 차이는 무엇인가요?
클러스터드 인덱스는
-테이블에 데이터가 추가/수정 될 때 테이블에 실제로 저장되는 물리적인 정렬기준
-테이블당 1개만 생성 가능
-물리적으로 정렬되어 있으므로 검색이 빠르다.
-PK(Primary Key)를 정의하면 자동 생성된다.
넌클러스터드 인덱스
-논리적인 정렬기준
-하나의 테이블에 여러개 생성 가능(최대 249개)
9. 테이블에 설정될 수 있는 인덱스 형태들은 어떤 형태들이 있나요?
클러스터드 인덱스와 넌클러스터드 인덱스
10. 커서는 무엇인가요?
테이블에서 여러 개의 행을 쿼리한 후에, 쿼리의 결과인 행 집합을 한 행씩 처리하기 위한 방식
11. DBCC 명령어는 어떤것들을 사용해 보았나요?
DBCC TRACEON / TRACEOFF / TRACESTATUS
DBCC SQLPERF(LOGSPACE / IOSTATS / LRUSTATS / NETSTATS)
DBCC OPENTRAN
DBCC CHECKDB
DBCC INPUTBUFFER / OUTPUTBUFFER
DBCC PROCCACHE / FREEPROCCACHE
DBCC SHOWCONFIG
DBCC SHOW_STATISTICS
DBCC USEROPTIONS
DBCC INDEXDEFRAG
DBCC DROPCLEANBUFFERS
12. 연결된 서버는 무엇인가요?
다른 데이터베이스와 연결하여 데이터 전달 및 조회를 위함
13. 데이터 정렬(Collation)은 무엇인가요?
Sort
14. 데이터 정렬 종류는 어떤 것들이 있나요?
ASC / DESC
15. 프라이머리 키와 유니크 키의 차이는 무엇인가요?
PRIMARY KEY는 UNIQUE KEY의 부분집합으로 테이블에 한 개 밖에 없으며 NULL 값을 허용하지 않음
UNIQUE KEY는 NULL값 허용- 한개만
16. 일대일, 일대다, 다대다 관계의 테이블 설계는 어떻게 하나요?
일대일 -
하나의 엔티티타입으로 완전히 통합하는 방법
부분 통합을 하는 방법
슈퍼 엔티티타입 생성하는 방법
일대다 -
그냥 쓰면 됨.
다대다 -
PK에 의한 다대다관계는 주식별자 통합
속성에 의한 다대다관계는 부모 엔티티타입에 속성 추가
17. NOLOCK이 무엇인가요?
READ UNCOMMITED
18. DELETE 명령어와 TRUNCATE 명령어의 차이는 무엇인가요?
DELETE는 테이블의 데이터 삭제
TRUNCATE는 데이터만 삭제. 속도는 TRUNCATE가 휠씬 빠름(로그를 쓰지 않기 때문에)
19. Sql Server에서 지원하는 조인방식은 어떤 것들이 있나요?
Nested Loop Join - 루프를 돌며 조건 찾기
Hash Join - 조인에 참여하는 두 개의 테이블 중 상대적으로 크기가 작은 테이블을 해시 함수에 통과시켜 그 결과 값을
해시 테이블에 저장한다. 그런 다음, 큰 테이블을 한 행, 한 행 해시 테이블에 매칭을 시켜가며 값을 찾아내 간다.
해시 테이블에는 실제 데이터가 아닌 해시 값이 저장되기 때문에 작은 테이블이 해싱되어야 해시 테이블의
크기를 작게 유지하여 비교 속도가 빨라지게 된다.
Merge Join - 병합을 위해서는 조인된 양쪽 컬럼이 반드시 정렬되어 있어야 한다.
20. HAVING 절과 WHERE 절과의 차이는 무엇인가요?
HAVING절 - GROUP BY에 대한 조건을 부여하며 집계함수와 함께 사용할 수 있다.
WHERE절 - 조건 검색을 위해 씀
21. 서브쿼리가 무엇인가요?
쿼리 안에 쿼리가 있는 것
22. 서브쿼리의 결과 종류는 어떤 것들이 있나요?
단일행 - 한개의 컬럼만 리턴
복수행 - 실행결과가 여러개의 행을 리턴(복수개의 행과 비교해야 하므로 in연산자를 사용)
복수컬럼 - 실행결과가 복수개의 컬럼, 복수개의 행을 리턴
상호관련 - main query절에 사용된 테이블이 서브쿼리절에 다시 재 사용되는 경우
23. 프로파일러는 무엇인가요?
데이터베이스가 작동할 때 쿼리 및 로그 등의 모니터링을 하기 위한 도구
24. 사용자정의함수는 무엇인가요?
SQL Server 2000에서 추가된 기능으로 다른 일반 프로그래밍에서처럼 자유롭게 함수를 정의하고 활용할 수 있는 것.
함수의 유형은 크게 스칼라, 인라인테이블, 다중문테이블 3가지가 있다.
25. 사용자정의함수의 결과 종류는 어떤 것들이 있나요?
스칼라 - 단일 데이터 값을 리턴하는 함수
인라인테이블 - 테이블 형태의 결과 값을 리턴하는 함수
다중문테이블 - 테이블 형태의 결과 값을 리턴하는 함수로 기본적인 기능은 인라인 테이블 함수와 비슷하지만
리턴되어지는 테이블 형식을 직접 정의할 수 있다.
26. SQL Server의 TCP/IP 포트는 무엇인가요? 바꿀 수 있나요?
기본포트는 1433. 당연히 바꿀 수 있으며 보안 문제로 인하여 바꿔서 사용하는 것을 권장
27. SQL Server의 인증 모드는 어떤것이 있나요? 바꿀 수 있나요?
원도우 인증과 SQL Server 인증. 당연히 바꿀 수 있음
28. SQL Server 로긴 유저와 암호는 어디에 저장되어 있나요?
-
29. SQL Server의 버전 정보를 확인할 수 있는 명령어는 무엇인가요?
SELECT @@VERSION
30. SQL server 에이전트는 무엇인가요?
자동화 기능을 위해 필수적인 서비스.-SQL Server Agent 경고, 데이터베이스 메일, 데이터베이스 유지관리 계획, 로그 전달
31. 저장프로시저는 재귀호출이 될까요? 몇단계까지 가능할까요?
재귀호출이 가능하며 32단계까지만 가능.
32. @@ERROR 는 무엇인가요?
시스템 함수로써 Transact_SQL문이 성공적으로 실행되면 0을 반환하고 오류가 발생하면 해당 오류 번호를 반환
33. RAISERROR 는 무엇인가요..?
오류 메시지를 생성하고 세션에 대한 오류 처리를 시작할 수 있음.
sys.messages 카탈로그 뷰에 저장된 사용자 정의 메시지를 참조하거나 동적으로 메시지를 작성할 수 있음.
TRY..CATCH구문 사용
34. 로그전달은 무엇인가요?
주서버와 보조서버에 데이터를 동기화 시킨 후 트랜잭션이 발생되면 주서버의 트랜잭션 로그가 보조서버에도 전달되게끔 설정하는 것
35. 지역 임시 테이블과 전역 임시 테이블의 차이는 무엇인가요?
지역 임시 테이블은 현재 세션에서만 볼 수 있으나 전역 임시 테이블은 모든 세션에서 볼 수 있음.
36. DB이름을 바꿀 수 있는 명령어는 무엇인가요?
EXEC sp_renamedb '이전DB명', '바꿀 DB명'
37. sp_configure 명령어는 무엇인가요?
SQL Server의 설정을 변경하고자 할 시 사용하는 명령어
38. 복제의 종류는 어떤것들이 있는지 차이점을 설명해주세요.
스냅숏 복제(Snapshot Replication) - 정기적으로 게시서버에서 지정된 게시의 모든 데이터를 통째로 구독서버에 전달
트랜잭션 복제(Transaction Replication) - 변경된 데이터만을 전달하는 방식
병합 복제(Merge Replication) - 스냅숏 복제와 트랜잭션 복제는 게시서버에서 구독서버로 전달되는 방식이나
병합 복제는 구독서버에서 게시서버로 변경사항이 전달되는 방식
39. SQL Server 설치시 추가되는 서비스들은 어떤 것들이 있나요?
SQL Server Integration Services
SQL Server Analysis Services
SQL Full-text Filter Daemon Launcher
SQL Server Reporting Services
SQL Server Browser
40. 유저의 권한 변경 키워드 3개는 무엇이 있나요?
GRANT - 보안 주체에 보안 개체에 대한 사용 권한을 부여.
DENY - 보안 주체에 대한 사용 권한을 거부.
REVOKE - 이전에 부여하거나 거부된 사용 권한을 제거.
41. SET QUOTED_IDENTIFIER의 의미는 무엇인가요?
기본값은 ON
SET QUOTED_IDENTIFIER OFF 시 큰따옴표를 사용하여 식별자를 구분 할 수 있음
42. STUFF함수와 REPLACE함수와의 차이는 무엇인가요?
REPLACE 함수는 지정된 문자열 값의 모든 항목을 다른 문자열 값으로 바꿈
STUFF 함수는 다른 문자열에 문자열을 삽입.
SELECT STUFF('abcdef', 2, 3, 'ijklmn');
GO
----------------------------------------------
aijklmn
43. master 데이터베이스를 어떻게 재구축하나요?
1.서버 차원의 모든 구성 값을 기록
SELECT * FROM sys.configurations;
2.SQL Server 인스턴스와 현재 데이터 정렬에 적용된 모든 서비스 팩과 핫픽스를 기록.
시스템 데이터베이스를 다시 작성한 후 이러한 업데이트를 다시 적용해야 함.
SELECT
SERVERPROPERTY('ProductVersion') AS ProductVersion,
SERVERPROPERTY('ProductLevel') AS ProductLevel,
SERVERPROPERTY('ResourceVersion') AS ResourceVersion,
SERVERPROPERTY('ResourceLastUpdateDateTime') AS ResourceLastUpdateDateTime,
SERVERPROPERTY('Collation') AS Collation;
3.시스템 데이터베이스의 모든 데이터와 로그 파일의 현재 위치를 기록.
시스템 데이터베이스를 다시 작성하면 모든 시스템 데이터베이스가 원래 위치에 설치 됨.
시스템 데이터베이스 데이터나 로그 파일을 다른 위치로 이동한 경우 해당 파일을 다시 이동해야 함.
SELECT name, physical_name AS current_file_location
FROM sys.master_files
WHERE database_id IN (DB_ID('master'), DB_ID('model'), DB_ID('msdb'), DB_ID('temp'));
4. master, model, msdb 데이터베이스의 현재 백업을 찾음.
5. SQL Server 인스턴스가 복제 배포자로 구성된 경우 배포 데이터베이스의 현재 백업을 찾습니다.
6. 시스템 데이터베이스를 다시 작성할 수 있는 권한이 있는지 확인합니다. 작업을 수행하기 위해 sysadmin
고정 서버 역할의 멤버여야 함.
7.master, model, msdb 데이터와 로그 템플릿 파일의 복사본이 로컬 서버에 있는지 확인.
44. 각 시스템데이터베이스들의 기능들은 무엇인가요?
master 데이터베이스 - SQL Server 인스턴스에 대한 모든 시스템 수준 정보를 기록.
msdb 데이터베이스 - SQL Server 에이전트에서 알림과 작업을 예약하는데 사용.
model 데이터베이스 - SQL Server에서 생성되는 모든 데이터베이스에 대한 템플릿으로 사용.
Resource 데이터베이스 - SQL Server에 포함된 시스템 개체가 들어 있는 읽기 전용 데이터베이스.
tempdb 데이터베이스 - 임시 개체나 중간 결과 집합을 보관하기 위한 작업 영역.
45. 프라이머리키와 포린키는 무엇인가요?
PRIMARY KEY - 테이블에는 일반적으로 테이블의 각 행을 고유하게 식별하는 값을 가진 열 또는 열 조합이 포함되어
있으며 이러한 열이나 열 조합을 테이블의 PRIMARY KEY라고 하며 테이블에 엔터티 무결성을 적용함.
FOREIGN KEY - 두 테이블의 데이터 간 연결을 설정하고 강제 적용하는데 사용하는 열을 말함.
46. 무결성이 무엇인가요? 제약 조건들에 대해서 설명해주세요.
주식별자에 대해 중복되지 않는 값을 갖지 않는 것.
무결성은 4가지 범주로 구성됨.
엔터티 무결성 - 행을 특정 테이블의 고유 엔터티로 정의. 엔터티 무결성은 UNIQUE 인덱스, UNIQUE 제약조건 또는 PRIMARY KEY
제약 조건을 통해 테이블의 기본 키나 식별자 열의 무결성을 강제 적용함.
도메인 무결성 - 특정 열에 대한 항목의 유효성. 데이터 형식을 통해 유형을 제한하거나 CHECK 제약 조건 및 규칙을 통해 형식을 제한
하거나 FOREIGN KEY 제약 조건, CHECK 제약 조건, DEFAULT 정의, NOT NULL 정의 및 규칙을 통해 가능한 값
범위를 제한하여 도메인 무결성을 강제 적용할 수 있음.
참조 무결성 - 행이 입력되거나 삭제될 때 테이블 간에 정의된 관계를 유지.
사용자 정의 무결성 - 다른 무결성 범주에 속하지 않는 특정 업무 규칙을 정의할 수 있음.
제약 조건 - PRIMARY KEY 제약조건, FOREIGN KEY 제약조건, UNIQUE 제약조건, CHECK 제약조건, DEFAULT 정의, NULL 값 허용
PRIMARY KEY 제약조건 - 데이터의 고유성을 보장.
FOREIGN KEY 제약조건 - 외래 키 테이블에 저장되는 데이터를 제어하는 것이지만 기본 키 테이블의 데이터 변경 사항도 제어할 수 있음.
UNIQUE 제약조건 - 열 또는 열 조합에 대해 고유성을 강제 적용하고자 할 때 사용.
DEFAULT 정의 - 레코드의 각 열은 값을 가져야하므로 DEFAULT 정의를 정의하는 것이 보다 좋은 해결책.
NULL 값 허용 - 테이블의 행에서 특정 열에 NULL값을 포함할 수 있는지 여부를 결정.
47. 관계형 테이블의 속성은 무엇인가요?
-
48. 반정규화가 무엇인가요?
성능을 위해 정규화된 데이터 모델의 중복성을 허용하도록 하는 것.
49. 어떻게 @@ERROR 와 @@ROWCOUNT 를 한번에 얻을 수 있나요?
@@ERROR를 @@ROWCOUNT와 함께 사용하여 DML 문 작업의 유효성을 확인할 수 있음.
@@ERROR의 값을 확인하여 오류 표시가 있는지 검사하고 @@ROWCOUNT를 사용하여 업데이트가 테이블의 행에 제대로 적용되었는지 확인.
USE AdventureWorks;
GO
IF OBJECT_ID(N'Purchasing.usp_ChangePurchaseOrderHeader',N'P')IS NOT NULL
DROP PROCEDURE Purchasing.usp_ChangePurchaseOrderHeader;
GO
CREATE PROCEDURE Purchasing.usp_ChangePurchaseOrderHeader
(
@PurchaseOrderID INT
,@EmployeeID INT
)
AS
-- Declare variables used in error checking.
DECLARE @ErrorVar INT;
DECLARE @RowCountVar INT;
-- Execute the UPDATE statement.
UPDATE PurchaseOrderHeader
SET EmployeeID = @EmployeeID
WHERE PurchaseOrderID = @PurchaseOrderID;
-- Save the @@ERROR and @@ROWCOUNT values in local
-- variables before they are cleared.
SELECT @ErrorVar = @@ERROR
,@RowCountVar = @@ROWCOUNT;
-- Check for errors. If an invalid @EmployeeID was specified
-- the UPDATE statement returns a foreign-key violation error #547.
IF @ErrorVar <> 0
BEGIN
IF @ErrorVar = 547
BEGIN
PRINT N'ERROR: Invalid ID specified for new employee.';
RETURN 1;
END
ELSE
BEGIN
PRINT N'ERROR: error '
+ RTRIM(CAST(@ErrorVar AS NVARCHAR(10)))
+ N' occurred.';
RETURN 2;
END
END
-- Check the row count. @RowCountVar is set to 0
-- if an invalid @PurchaseOrderID was specified.
IF @RowCountVar = 0
BEGIN
PRINT 'Warning: The EmployeeID specified is not valid';
RETURN 1;
END
ELSE
BEGIN
PRINT 'Purchase order updated with the new employee';
RETURN 0;
END;
GO
50. Identity 컬럼이 무엇인가요?
현재 값 알아내기 - SELECT @@IDENTITY
테이블의 현재 값 알기 - DBCC CHECKIDENT('tablename')
강제 값 지정 - DBCC CHECKIDENT('tablename', RESEED, 10000)
51. 스케쥴 잡이 무엇인가요?
관리를 자동화하기 위한 서비스 즉 일정이 지정된 관리 태스크를 실행하는 Microsoft Windows 서비스
52. 어떤 인덱스도 가지고 있는 않은 테이블을 무엇이라고 부르고 무슨 목적으로 사용하나요?
작은 테이블 - 검색 위주가 아닌 insert, update가 자주 일어나는 경우에 사용. 인덱스를 쓰는 것 보다는 없는 것이 성능상 유리한 테이블
53. BCP는 무엇인가요? 어떤 경우에 사용하나요?
분할된 뷰를 포함하여 SELECT문이 작동하는 SQL Server 데이터베이스의 어디에서나 데이터를 가져올 수 있도록 사용하는 유틸리티
데이터 파일로 SQL Server 테이블의 데이터를 대량으로 내보냄.
쿼리의 데이터를 대량으로 내보냄
SQL Server 테이블로 데이터 파일의 데이터를 대량으로 가져옴.
서식 파일을 생성.
54. JOIN절 대신에 서브쿼리를 대체할 수 있나요?
대체할 수 있으나 JOIN 절에 비해 서브쿼리는 성능한 우월하지 않기에 JOIN절을 사용할 수 있다면 권장
55. 오라클과 같은 다른 DBMS에 연결할 수 있나요?
LINKED SERVER를 이용하여 OPENROWSET 이나 OPENDATASOURCE를 쓰기도 함.
56. 테이블이 사용중인 인덱스는 어떻게 알 수 있나요?
sp_helpindex 또는 실행계획을 보면 됨.
57. 다른 인스턴스로 테이블이나 스키마, 뷰 등을 복사하려면 어떻게 해야 하나요?
SSIS(SQL Server Integration Services)를 이용.
SSIS에서 파일을 복사 또는 다운로드하고 이벤트에 응답하여 전자 메일 메시지를 보내며 데이터 웨어하우스를 업데이트하고 데이터를 정리
및 마이닝하며 SQL Server 개체와 데이터를 관리하여 복잡한 비지니스 문제를 해결할 수 있음.
58. 셀프 조인이 무엇인가요?
자기자신과 자기자신이 조인하는 것 즉 자기자신을 참조하는 조인
59. 크로스 조인이 무엇인가요?
카티션 조인 이라고도 하며 한 테이블의 모든 행과 다른 테이블의 모든 행을 짝지어 반환
60. 가상 테이블에 트리거를 사용할 수 있나요?
가상 테이블(VIEW)에 트리거 사용 가능
61. 저장프로시저의 장점들을 설명해주세요.
저장 프로시저는 다수의 클라이언트 응용프로그램에서 서버로 보낼 T-SQL문을 미리 모아서 서버에서 관리하는 데이터로 저장해 둔 것으로
다수의 클라이언트들이 서버에 저장된 T-SQL 문을 공유하는 것이 가능해졌다.
데이터베이스 내에서 테이블 칼럼 등의 구조가 변경되더라도 서버에서 저장 프로시저의 정의만 수정하면 클라이언트는 신경쓰지 않아도 된다.
뷰와 마찬가지로 프로시저의 정의를 몰라도 그 처리 결과를 사용할 수 있기 때문이다.
또한 특정 형식의 데이터만을 추가할 수 있는 테이블이 있는 경우에는 추가 조건에 제한을 주는 프로시저를 정의해두고 해당 프로시저를 통해
서만 접근할 수 있도록 구성할 수도 있다.
저장 프로시저는 T-SQL문을 서버가 미리 저장하고 있으며 T-SQL문을 실행할 때에 처리단위가 되며 Batch처리와 같이 해당 저장 프로시저에서
정의한 T-SQL문을 하나의 배치로 간주하여 한꺼번에 처리하고 최적화시킨다.
T-SQL문이 미리 저장되어 있어 대량의 T-SQL문을 서버로 보내는 대신 단순히 저장 프로시저의 이름과 매개변수만 보내면 된다. 따라서,
프로시저를 사용할 경우 네트워크의 체증은 감소하게 된다.
클라이언트 간의 처리 루틴 공유가 가능하다.
데이터베이스 내부구조를 감춘다.
서버의 보호 및 데이터의 무결성을 구현한다.
쿼리의 저장속도를 향상시켜준다.
네트웍의 과부하를 감소할 수 있다.
62. 데이터웨어하우징이 무엇인가요?
개방형 시스템 도입으로 흩어져 있는 각종 기업정보를 최종 사용자가 쉽게 활용, 신속한 의사결정을 유도하도록 해 기업내 흩어져 있는 방대한
양의 데이터에 쉽게 접근하고 이를 활용할 수 있게 하는 기술
63. OLTP가 무엇인가요?
OnLine Realtime Transaction Processing - 데이터 입력, 조회 등을 위한 트랜잭션 지향의 업무를 쉽게 관리해줌.(업무 프로세스 중심)
데이터의 입력, 조회 등이 많이 일어나므로 소량의 데이터 처리 활용
OLAP(OnLine Analytical Processing)는 사용자로 하여금 데이터를 다른 관점으로 쉽게, 또한 선택적으로 추출하고 바라볼 수 있게 해줌.(사용자의 분석 수행 기반)
조회 관점이므로 대량의 데이터 처리 활용
64. XML은 어떻게 사용하나요?
T-SQL 확장 언어는 FOR XML을 사용하여 관계형 쿼리 결과를 XML에 매핑하고 OPENXML을 사용하여 XML로부터 관계형 뷰를 생성하는
SQL 중심 접근 방식을 제공함.
데이터에 대한 데이터 대량 로드, 쿼리 및 업데이트 기능을 지원하는 XML 중심 접근 방식을 제공하는 AXSD를 사용하여 정의.
65. 실행계획이 무엇인가요? 당신은 언제 사용하는지 어떻게 보는지 설명해주세요.
데이터베이스의 쿼리 실행 시 쿼리에 대한 구조적 처리의 절차를 보여주는 것.
쿼리 짜면서 실행해서 봄.
66. SELECT 문의 처리 순서는?
FROM -> ON -> JOIN -> WHERE -> GROUP BY -> WITH CUBE 또는 WITH ROLLUP -> HAVING -> SELECT -> DISTINCT -> ORDER BY -> TOP
67. 분산/파티셔닝 테이블 원래와 이해
테이블의 행 데이터가 매우 많은 대용량 데이터베이스의 경우 INSERT, UPDATE 등의 작업은 갈수록 느려지게 된다. 이럴 경우, 테이블을 분할하는 것이
시스템 성능에 큰 도움이 된다. 테이블을 분할 할 때는 테이블의 범위에 따라서 서로 다른 파일그룹에 저장하는 것이 가장 보편적이다.
예를 들어, 10년간 데이터가 저장된 테이블이라면 아마도 과거의 데이터는 주로 조회에만 이용될 뿐 거의 변경이 되지 않을 것이다. 그러므로 작년
이전의 데이터와 올해의 데이터를 서로 다른 파일 그룹에 저장한다면 효과적일 수 있다. 또 다른 예로는 월별 데이터의 업데이트가 잦은 데용량
데이터라면 각 월별로 분할 테이블을 구성할 수도 있다. 그런데 분할 테이블에는 꼭 분할 인덱스라는 용어가 같이 따라오게 된다.
1. 파일그룹으로 분리한 데이터베이스 생성
2. 파티션 함수를 정의 : 파티션 함수는 테이블 또는 인덱스를 분할하는 방법을 지정
3. 파티션 구성표를 정의 : 파티션 구성표는 파티션 함수에 의해 생성된 파티션을 파일그룹별로 나눠주는 역할을 한다.
4. 테이블 정의 시 파티션 구성표를 적용
5. 데이터 입력 또는 대량 데이터 로드
6. 자동으로 범위에 따라서 파일 그룹에 분할되어 저장됨.
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
1. 조인의 종류와 각조인들의 장단점을 말하시오
INNER JOIN - 조인을 하는 테이블에서 서로 일치하는 값이 있는 항목만 가져온다.
CROSS JOIN - 양쪽 테이블의 모든 행에 대해 서로 연결한다. WHERE절이 없다.
OUTER JOIN - 어느 한쪽 테이블의 데이터를 모두 가져온다. LEFT OUTER JOIN, RIGHT OUTER JOIN
SELF JOIN - 자기 자신을 다시 조인한다.
2. 조인시 where 구문이 인라인뷰속에 있는거랑 밖에 있는 거랑의 차이점
3. null 데이타가 존재할시 count, sum 연산
COUNT = 0
SUM = NULL
4. 테이블 한개 던져주고 1~4 정규화 시키시오
1차 정규화 - 복수 속성값에 대한 속성의 분리
2차 정규화 - 주식별자에 종속적이지 않은 속성의 분리
3차 정규화 - 속성에 종속적인 속성의 분리
BCNF - 다수의 식별자 분리
4차 정규화 - 특정 속성 값에 따라 선택적인 속성의 분리(식별자간에 역할이 중복되지 않음)
5차 정규화 - 결합 종속일 경우 두 개 이상의 N개로 분리
5. exec와 sp_excutesql로 각각 동적쿼리를 만들고 이 둘의 차이점을 말하시오
문자열 쿼리 - 받아들이는 변수 값에 따른 쿼리 조건 문이나 기타 쿼리문의 변경이 일어날 때 자주 사용
6. 쿼리플랜을 보고 해당 플렌을 설명하시오
7. 모델링 , 모델링Tool ( ER-WIn, ERSTUDIO 사용유무)
8. 파싱 원리및 컴파일유무
9. 인덱스 종류와 설명
10. 함수/프로시저 만들줄 아느냐?
1. page 단위와 익스텐트 종류 설명
2. 백업 종류와 시점별 리스토어 설명
3. DB 옵션설명
4. 스트레스 tool과 성능분석/profiller 사용 유무
5. log 쉬핑 / standby 서버, 클러스터링 / 복제 운영
6. dbcc 명령어
7. 분산/파티셔닝 테이블 원리 이해
8. 파일그룹/ Trmp DB 이동
1. update 는 몇가지 종류가 있나요?
2. merge interval 에 대해서 설명해 보세요.
3. execution plan 의 iterator 를 몇가지 분류로 나누어 보세요.
4. static index seek 와 dynamic index seek 의 차이는 무엇인가요?
5. sort warning 과 hash warning 은 언제 발생하나요?
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
DBA 정기업무
일일작업
1. 네트워크를 포함한 필요한 서비스가 시작(작동)중인지 확인
2. 윈도우 이벤트 뷰어를 통한 오류 및 경고등의 중요 메시지를 점검 및 문제를 해결
3. Sql Server 로그에서 오류 및 중요 메시지를 점검하고 문제를 해결한다.
4. Sql server 에이전트 로그에서 오류를 포함한 중요 메시지를 점검하고 문제를 해결한다.
5. 에이전트 서비스에 정의해둔 각 작업(job)의 성공여부를 점검하고 필요한 조칠르 취한다.
6. windows server와 sql server의 주요 카운트를 모니터하면서 이상 증상을 확인한다.
7. windows의 성능 모니터의 "성능 로그 및 경고 | 카운트 로그"에서 성능 통계정보를 수집한다.
8. Profiler와 같은 도구를 이용 과도한 리소스 소비, 잠금 유발, 차단(blocking)문제, DeadLoc을 유발하는
쿼리를 추적, 조치를 취한다.
9. 디스크 공간은 충분한지 점검한다.
10. 통계 업데이트 실시
주간작업
1. 인덱스 조각화 상태를 점검하고 필요시 적절한 방법으로 조각모음을 수행한다.
(DBCC SHOWCONTIG, DBCC DB REINDEX, DBCC INDEXDEFRAG)
2. 시스템 및 사용자 데이테베이스의 전체 백업 혹은 차등 백업을 수행한다.
3. 통계 업데이트 실시
(UPDATE STATISTICS, SP_UPDATESTATS)
4. 데이터와 로그 파일에서 불필요하게 과도한 여유 공간을 줄임
월간작업
1. 운영체제 전체 백업
2. 시스템 및 사용자 데이터베이스의 전체 백업 혹은 차등 백업 수행
3. 데이터베이스 무결성 검사 수행, 그 결과에 따라 조치를 취함
(DBCC CHECKTABLE 혹은 DBCC CHECKDB 명령을 이용)
4. 테스트 장비에서 시스템 및 사용자 데이터베이스를 완전히 복구 및 복원할 수 있도록 시연
5. SQLDIAG.EXE 수행 및 검토
6. 각 서버 별로 지난 1개월간 수집한 성능 통계정보를, 기존의 성능 통계정보와 비교하여
향후 소요되는 S/W, H/W 용량을 예측한다.
비정기작업
1. 트랜잭션 로그 파일이 일정수준 이상으로 채워진 경우, 로그백업 등등을 이용하여 로그 사이즈를 줄인다.
2. 데이터베이스 구조 변경, 로그인 변경, 서버 구성 옵션 변경등이 있으면 MASTER를 백업한다.
3. 에이전트 서비스의 작업, 경고, 운영자 및 유지 관리계획 등이 변경되면 MSDB를 백업한다.
4. 시스템 및 사용자데이터베이스 개체를 추가 혹은 변경한 경우 해당 데이터베이스의 스크립트 백업을 수행한다.
****************************************************************************/