A SQL Server 0 설치 A. 소개 Relational DataBase Management System SQL Server 0는마이크로소프트사에서제공하는 RDBMS 다. 마이크로소프트사는스탠다드 standard 버전이상의상업용에디션과익스프레스 express 버전 의무료에디션을제공하는데, 이책에서는실습을위해 SQL Server 0 익스프레스에디 션 SP 을사용한다. SP(Service Pack, 서비스팩 ) 은기존에발표된소프트웨의문제점을수정하고기능을추가하여배포하는버전이다. 향후새로운서비스팩이출시될수있으므로본인이설치하는시점에맞게설치하기바란다. 익스프레스에디션은상업용에디션에비해메모리사용량과데이터베이스크기등의차이가있지만관계형데이터베이스의대부분의기능을사용할수있다. 참고로 0 상업용에디션 ( 스탠다드버전이상 ) 은고가용성솔루션인 Always on 기능과클라우드컴퓨팅을지원한다. SQL Server 0 익스프레스에디션에서하드디스크에저장할수있는데이터베이스의총크기는 0GB, 메모리는 GB이다. 그외버전별차이는마이크로소프트사의웹페이지 (http://msdn.microsoft.com/ko-kr/library/cc645993.aspx) 를참고하기바란다. SQL Server 0 익스프레스에디션을설치하기위한시스템요구사항은다음과같다. 운영체제 : Windows Server 008 Service Pack, Windows Vista Service Pack, Windows 7 Service Pack, Windows Server 008 R Service Pack CPU 3bit 윈도우시스템 : Intel 또는호환가능한 GHz 이상의프로세서 (GHz 이상권장 ) 64bit 윈도우시스템 :.4GHz 이상의프로세서 RAM : 최소 5MB(GB 이상권장 ) 하드디스크 : 최소.GB SQL Server 008 익스프레스에디션은 Windows XP Service Pack 3 이상에서 Windows Framework 3.5, Windows Installer 4.5 등을설치한후사용할수있다. 506
A. 다운로드 http://www.microsoft.com/ko-kr/download 에접속한다. 검색창에 sql server 0 express 를입력하고검색을클릭한다. 검색결과중 [MicrosoftR SQL ServerR 0 서비스팩 (SP) Express] 를선택한다. 507
3 SQL Server 0 익스프레스버전중 SQLEXPRWT_x86_KOR.exe 의 [ 다운로드 ] 를클릭한다. [ 표 A-] 은익스프레스버전의다운로드종류이다. 각각은 x86(3bit) 버전과 x64(64bit) 버전이따로존재한다. 이책에서는 x86의 Express with Tools 버전인 SQLEXPRWT_x86_KOR.exe 를다운로드한다. 3bit 버전과 64bit 버전의선택은사용하고있는윈도우가 3bit 냐 64bit 냐에따라달라진다. 3bit 윈도우의경우 64bit 를설 치할수없고 64bit 윈도우의경우 3bit 를설치할수있다. 하지만 64bit 윈도우에 3bit 를설치하면내부에서별도로 64bit 와 3bit 간의처리를해주어야하므로권장하지않는다. 508
표 A- SQL Server 0 익스프레스버전의다운로드파일종류 파일이름 LocalDB Express Express with Tools SQL Server Management Studio Express(Tools only) Express with Advanced Services 특징 모든프로그래밍기능을포함한다. 사용자모드에서실행구성이필요없는빠른설치가가능하다. 필수구성요소가적은경량버전이다. 데이터베이스엔진만포함한다. 핵심 Express 데이터베이스서버다. 원격연결을수락하거나원격으로관리할경우사용한다. 데이터베이스엔진과 SQL Server Management Studio Express가포함되어있다. LocalDB도포함되어있다. LocalDB를제외한다른데이터베이스는포함되어있지않다. LocalDB, SQL Express, SQL Azure 등 SQL Server 인스턴스를관리하는도구만포함되어있다. SQL Express의모든구성요소 ( 데이터베이스엔진, Express Tools, Reporting Services) 가포함되어있다. 전체텍스트검색기능이포함되어있다. A.3 설치 다운로드받은파일을실행하면압축이풀리고다음과같이 SQL Server 설치센터가나타난다. 이화면에서 [ 새 SQL Server 독립실행형설치또는기존설치에기능추가 ] 를클릭한다. 509
사용조건에서 동의함 에체크하고 < 다음 > 을클릭한다. 다음 (N) 을클릭하면 제품업데이트 화면이나타난다. 업데이트할내용이없다면자동으로다음단계로진행되고, 새로운업데이트 가존재하면 제품업데이트 페이지에서업데이트파일을확인하고 다음 (N) 을클릭한다. 다음단계에서는업데이트를포함하여자 동으로설치가진행된다. 3 설치파일설치가시작되면서잠시기다리면자동으로다음단계로진행한다. 50
4 기능선택에서그림과같이설정하고 < 다음 > 을클릭한다. Visual Studio 00이설치되어있는경우 Service Pack 이상이적용되어있어야한다. Service Pack 을설치하지않고설치를진행하면 기능선택 이전에 설치지원규칙 에서자동으로통과되지않고 업데이트가필요한이전 Visual Studio 00 인스턴스입니다. 라는메시지가나타나면서설치가잠시중지된다. 이때안내메시지를참조하거나 http://www.microsoft.com/kokr/download/details.aspx?id=369 에서 Service Pack 을받아설치한후 다시실행 을클릭하면계속진행할수있다. 5 인스턴스구성은다음과같이설정한후 < 다음 > 을클릭한다. 하나의컴퓨터에인스턴스를다르게하여여러개의 SQL Server 를설치할수있다. SQL Server Express Edition 의기본값은 명명된인스턴스 이며 SQLExpress 로설정되어있다. 참고로 기본인스턴스 를선택하면 SQLSERVER 라는이름으로인스턴 스가추가된다. 5
6 서버구성역시기본값으로설정하고 < 다음 > 을클릭한다. 7 데이터베이스엔진구성에서그림과같이선택한후 < 다음 > 을클릭한다. 혼합모드는 SQL Server 관리자의계정을설정하기위한모드다. 인증모드 : 혼합모드 sa 계정암호 : sapass 5
8 오류보고화면을확인하고 < 다음 > 을클릭한다. 9 설치가진행되는것을확인하고, 설치가완료되면 < 다음 > 을클릭한다. 53
0 다음과같은안내창이나오면 < 확인 > 을클릭한다. 완료화면이나타나면 < 닫기 > 를클릭하여설치를종료하고윈도우를재시작한다. 54
추가설정여기서부터는추가설정사항으로 SQL Server가외부프로그램접속에응답하기위한통신포트를설정하는과정이다. SQL Server Management Studio만사용할경우설정하지않아도상관없지만이책의실습을위해진행한다. 윈도우 [ 시작 ]-[ 모든프로그램 ]-[Microsoft SQL Server 0]-[ 구성도구 ]-[SQL Server 구성관리자 ] 를선택한다. 3 SQL Server 구성관리자가실행되면 [SQL Server 네트워크구성 ] 왼쪽의삼각형 ( ) 을 클릭하고 [SQLEXPRESS 에대한프로토콜 ]-[TCP/IP] 를선택한다. 3 55
4 [TCP/IP] 에서마우스오른쪽버튼을누르고 [ 속성 ] 을선택한다. [TCP/IP 속성 ] 창이나타 나면아래와같이변경한후 < 확인 > 을클릭한다. [ 프로토콜 ] 탭 : 사용 ( 예 ) [IP 주소 ] 탭 : IPAll - TCP 동적포트 (433) 3 4 5 5 TCP/IP 설정이완료되었으면 < 확인 > 을클릭한후윈도우를재시작한다. 56
A.4 마당서점데이터베이스생성 마당서점의데이터베이스 Madang을생성하기위해윈도우의 [ 시작 ]-[ 모든프로그램 ]- [Microsoft SQL Server 0]-[SQL Server Management Studio] 를선택한다. 인증을 [Windows 인증 ] 으로선택한후 < 연결 > 을클릭한다. 3 서버이름 MADANG_DB\SQLEXPRESS 는 MADANG_DB 라는이름을가진컴퓨터에설치된 SQLEXPRESS 라는인스 턴스를의미한다. MADANG_DB 는사용자의컴퓨터마다다르게나타난다. 툴바에서 [ 파일열기 ]( ) 를클릭하여이책에서제공하는 madang_db_with_sample. sql 파일을선택하고 < 열기 > 를클릭한다. 57
예제소스는 http://hanb.co.kr/exam/404 에서다운로드하여사용하거나툴바의 [ 새쿼리 ]( 에아래의소스를입력한다. 입력후에는앞으로실습을위해서저장해둔다. -- 실습에필요한 Madang DB 와 COMPANY DB 를모두생성한다. -- 데이터베이스생성 USE [master] -- 마당데이터베이스생성 ) 를클릭한후쿼리편집기 파일명 : madang_db_with_sample.sql IF EXISTS(SELECT name FROM sys.databases WHERE (name = 'Madang') OR (name = 'madang')) DROP DATABASE [Madang]; CREATE DATABASE Madang GO USE [master] -- COMPANY 데이터베이스생성 IF EXISTS(SELECT name FROM sys.databases WHERE (name = 'COMPANY') OR (name = 'Company')) DROP DATABASE [COMPANY]; CREATE DATABASE COMPANY GO -- GO 명령어는 T-SQL 문은아니지만현재까지명령어를 SQL Server에보내서실행시키는역할을한다. -- 즉 GO 명령어는명령어를묶어서배치로서버에보내는역할을한다. -- Book, Customer, Orders 테이블생성 USE [Madang] CREATE TABLE Book ( bookid INT PRIMARY KEY, bookname VARCHAR(40), publisher VARCHAR(40), price INT ); CREATE TABLE Customer ( custid INT PRIMARY KEY NONCLUSTERED, name VARCHAR(40), address VARCHAR(40), phone VARCHAR(30) ); CREATE TABLE Orders ( orderid INT PRIMARY KEY, custid INT REFERENCES Customer(custid), 58
bookid INT REFERENCES Book(bookid), saleprice INT, orderdate DATE ); -- Book, Customer, Orders 데이터생성 INSERT INTO Book VALUES (, ' 축구의역사 ', ' 굿스포츠 ', 7000); INSERT INTO Book VALUES (, ' 축구아는여자 ', ' 나무수 ', 3000); INSERT INTO Book VALUES (3, ' 축구의이해 ', ' 대한미디어 ', 000); INSERT INTO Book VALUES (4, ' 골프바이블 ', ' 대한미디어 ', 35000); INSERT INTO Book VALUES (5, ' 피겨교본 ', ' 굿스포츠 ', 8000); INSERT INTO Book VALUES (6, ' 역도단계별기술 ', ' 굿스포츠 ', 6000); INSERT INTO Book VALUES (7, ' 야구의추억 ', ' 이상미디어 ', 0000); INSERT INTO Book VALUES (8, ' 야구를부탁해 ', ' 이상미디어 ', 3000); INSERT INTO Book VALUES (9, ' 올림픽이야기 ', ' 삼성당 ', 7500); INSERT INTO Book VALUES (0, 'Olympic Champions', 'Pearson', 3000); INSERT INTO Customer VALUES (, ' 박지성 ', ' 영국맨체스타 ', '000-5000-000'); INSERT INTO Customer VALUES (, ' 김연아 ', ' 대한민국서울 ', '000-6000-000'); INSERT INTO Customer VALUES (3, ' 장미란 ', ' 대한민국강원도 ', '000-7000-000'); INSERT INTO Customer VALUES (4, ' 추신수 ', ' 미국클리블랜드 ', '000-8000-000'); INSERT INTO Customer VALUES (5, ' 박세리 ', ' 대한민국대전 ', NULL); -- 주문 (Orders) 테이블의책값은할인판매를가정함 INSERT INTO Orders VALUES (,,, 6000, '03-07-0'); INSERT INTO Orders VALUES (,, 3, 000, '03-07-03'); INSERT INTO Orders VALUES (3,, 5, 8000, '03-07-03'); INSERT INTO Orders VALUES (4, 3, 6, 6000, '03-07-04'); INSERT INTO Orders VALUES (5, 4, 7, 0000, '03-07-05'); INSERT INTO Orders VALUES (6,,, 000, '03-07-07'); INSERT INTO Orders VALUES (7, 4, 8, 3000, '03-07-07'); INSERT INTO Orders VALUES (8, 3, 0, 000, '03-07-08'); INSERT INTO Orders VALUES (9,, 0, 7000, '03-07-09'); INSERT INTO Orders VALUES (0, 3, 8, 3000, '03-07-0'); GO -- 3 장에서사용되는 Imported_Book 테이블생성 CREATE TABLE Imported_Book ( bookid INT, bookname VARCHAR(40), publisher VARCHAR(40), price INT ); 59
INSERT INTO Imported_Book VALUES (, 'Zen Golf', 'Pearson', 000); INSERT INTO Imported_Book VALUES (, 'Soccer Skills', 'Human Kinetics', 5000); -- 여기서부터는사용자아이디를생성하는부분 -- SQL Server에서 master 외에다른사용자를만드려면로그인과사용자아이디를만들어야함 USE [master] GO -- 로그인아이디 mduser 생성 IF EXISTS(SELECT * FROM sys.syslogins WHERE name = N'mduser') DROP LOGIN [mduser] CREATE LOGIN mduser WITH PASSWORD='mdpass', default_database=madang -- 사용자아이디 mduser 생성 GO -- mduser에게 Madang 데이터베이스 user 및권한부여 USE [Madang] GO IF EXISTS (SELECT * FROM sys.database_principals WHERE name = N'mduser') DROP USER [mduser]; CREATE USER mduser FOR login mduser WITH default_schema=dbo EXEC sp_addrolemember db_owner, mduser GO -- mduser에게 COMPANY 데이터베이스 user 및권한부여 USE [COMPANY] GO IF EXISTS (SELECT * FROM sys.database_principals WHERE name = N'mduser') DROP USER [mduser]; CREATE USER mduser FOR login mduser WITH default_schema=dbo EXEC sp_addrolemember db_owner, mduser GO -- 연습문제사원데이터베이스생성 CREATE TABLE Dept ( deptno INT CONSTRAINT PK_DEPT PRIMARY KEY, dname VARCHAR(4), loc VARCHAR(3) ); 50
CREATE TABLE Emp ( empno INT CONSTRAINT PK_EMP PRIMARY KEY, ename VARCHAR(0), job VARCHAR(9), MGR SMALLINT, hiredate DATE, sal DECIMAL(7,), comm DECIMAL(7,), deptno INT CONSTRAINT FK_deptno REFERENCES Dept ); -- Dept 데이터 4 개삽입 INSERT INTO Dept VALUES (0,'ACCOUNTING','NEW YORK'); INSERT INTO Dept VALUES (0,'RESEARCH','DALLAS'); INSERT INTO Dept VALUES (30,'SALES','CHICAGO'); INSERT INTO Dept VALUES (40,'OPERATIONS','BOSTON'); -- Emp 데이터 4 개삽입 INSERT INTO Emp VALUES (7369, 'SMITH', 'CLERK', 790, '-7-980', 800, NULL, 0); INSERT INTO Emp VALUES (7499, 'ALLEN', 'SALESMAN', 7698, '0-0-98', 600, 300, 30); INSERT INTO Emp VALUES (75, 'WARD', 'SALESMAN', 7698, '0--98', 50, 500, 30); INSERT INTO Emp VALUES (7566, 'JONES', 'MANAGER', 7839, '04-0-98', 975, NULL, 0); INSERT INTO Emp VALUES (7654, 'MARTIN', 'SALESMAN', 7698, '09-8-98', 50, 400, 30); INSERT INTO Emp VALUES (7698, 'BLAKE', 'MANAGER', 7839, '05-0-98', 850, NULL, 30); INSERT INTO Emp VALUES (778, 'CLARK', 'MANAGER', 7839, '06-09-98', 450, NULL, 0); INSERT INTO Emp VALUES (7788, 'SCOTT', 'ANALYST', 7566, '07-3-987', 3000, NULL, 0); INSERT INTO Emp VALUES (7839, 'KING', 'PRESIDENT', NULL, '-7-98', 5000, NULL, 0); INSERT INTO Emp VALUES (7844, 'TURNER', 'SALESMAN', 7698, '09-08-98', 500, 0, 30); INSERT INTO Emp VALUES (7876, 'ADAMS', 'CLERK', 7788, '07-3-987', 00, NULL, 0); INSERT INTO Emp VALUES (7900, 'JAMES', 'CLERK', 7698, '-03-98', 950, NULL, 30); 5
INSERT INTO Emp VALUES (790, 'FORD', 'ANALYST', 7566, '-03-98', 3000, NULL, 0); INSERT INTO Emp VALUES (7934, 'MILLER', 'CLERK', 778, 0-3-98', 300, NULL, 0); GO USE [Madang] 3 파일이열리면 SQL 편집기에서 [ 실행 ]( ) 을클릭한다. 5
4 실행이완료된후 [ 개체탐색기 ]-[ 데이터베이스 ]-[Madang]-[ 테이블 ] 을클릭하면 Madang DB 와테이블이생성되어있는것을확인할수있다. 5 테스트를위해 SQL Server 를종료한후 SQL Server 인증모드로다시로그인해보자. 방 법은 SQL Server Management Studio 를실행시킨후인증을 [SQL Server 인증 ] 으로 선택하고, 로그인과암호를다음과같이입력한후 < 연결 > 을클릭하면된다. 로그인 : mduser 암호 : mdpass 3 향후 SQL 실습을위해위의로그인정보를기억해두기바란다. 53
6 툴바에서 [ 새쿼리 ]( ) 를클릭한다. 쿼리창에다음과같이입력하고 [ 실행 ]( ) 을클릭한다. 아래 [ 결과 ] 탭에서결과를확인할수있다. SELECT * FROM Customer; 3 개체탐색기의 MADANG_DB\SQLEXPRESS 는 사용자컴퓨터이름 \ 인스턴스명 으로각사용자마다다르게나타난다. MADANG_DB 는컴퓨터이름이며 Madang 은데이터베이스이름이므로혼돈하지않도록주의하기바란다. 7 정상적으로실행이완료되는것을확인하고 SQL Server Management Studio 를종료 한다. 54
A.5 AdventureWorks Sample Database 설치 AdventureWorks Sample Database는마이크로소프트사에서제공하는 SQL Server용실습데이터베이스다. Cycle 회사를모델로만들어졌으며, 실습에사용할 LT light 버전은간단한실습을위해기존모델을축소하여제공한것이다. 관련파일을다운로드하기위해 http://msftdbprodsamples.codeplex.com/ 에접속한다. [Download - AdventureWorks Database-008, 008R and 0] 를클릭한다. 55
[AdventureWorksLT0_Database.zip] 을클릭하여다운로드한다. 향후버전이업그레이드되더라도설치방법은동일하므로잘익혀두기바란다. 3 설치를위해다음의위치에압축을해제한다. C:\AdventureWorksLT0 56
3 4 압축을해제하면다음과같이데이터파일 (mdf) 과로그파일 (ldf) 을확인할수있다. 57
5 윈도우의 [ 시작 ]-[ 모든프로그램 ]-[Microsoft SQL Server 0]-[SQL Server Management Studio] 에서마우스오른쪽버튼을누른후 [ 관리자권한으로실행 ] 을선 택한다. 사용자계정컨트롤화면이나오면 < 예 > 를클릭한다. 6 Windows 인증모드로 SQL Server 에연결한다. 58
7 [ 개체탐색기 ]-[ 데이터베이스 ] 에서마우스오른쪽버튼을누른후 [ 연결 ] 을선택한다. 8 [ 데이터베이스연결 ] 창이열리면 < 추가 > 를클릭하여 C:\AdventureWorksLT0 폴 더에서 AdventureWorksLT0_Data.mdf 파일을선택한후 < 확인 > 을클릭한다. 59
3 4 9 다음과같이데이터파일과로그파일이추가되면 < 확인 > 을클릭하여데이터베이스연결 을마친다. 530
0 데이터베이스가제대로추가되었는지확인하기위해 [ 개체탐색기 ]-[ 데이터베이스 ]- [AdventureWorksLT0]-[ 테이블 ] 을클릭하여테이블을확인한다. 테스트를위해 [ 새쿼리 ]( ) 를클릭한후다음과같이입력하고 [ 실행 ]( ) 을클릭해결과가나오는지확인한다. USE AdventureWorksLT0; GO SELECT * FROM SalesLT.Address; 3 53
마지막으로앞으로실습을위해 AdventureWorksLT0 데이터베이스에 mduser 를추가하고사용권한을부여해보자. [ 새쿼리 ]( ) 를클릭하여다음과같이입력하고 [ 실행 ]( ) 을클릭한다. [ 개체탐색기 ]-[ 데이터베이스 ]-[AdventureWorksLT0]- [ 보안 ]-[ 사용자 ] 를클릭하면 mduser 가추가되어있는것을확인할수있다. USE AdventureWorksLT0; GO CREATE USER mduser FOR login mduser WITH default_schema=saleslt; EXEC sp_addrolemember db_owner,mduser; GO 3 53