450 likes | 611 Views
개발자 관점에서 바라본 SQL Server 2005 (1). 강성재 Developer Evangelist Microsoft Korea D&PE. 왜 64-bit 인가 ?. 64-bit Architectures. Platform Direction. 32-bit x86. 애플리케이션 운용 폭. 64-bit x64. 64-bit IPF. 확장성. 64-bit 의 힘 !. RDBMS Scientific computing Data modelling Physical system simulation
E N D
개발자 관점에서 바라본 SQL Server 2005 (1) 강성재 Developer Evangelist Microsoft Korea D&PE
Platform Direction 32-bit x86 애플리케이션 운용 폭 64-bit x64 64-bit IPF 확장성
64-bit의 힘! • RDBMS • Scientific computing • Data modelling • Physical system simulation • CAD/CAE • Imaging • Data mining • ERP / Manufacturing / Process modelling • Shared application hosting • Server consolidation • Online Game Server (특히 한국!!!)
목차 • SQL Server 2005 살펴 보기 • Transact-SQL 강화 • XML 과 XQuery • 서비스 브로커 • 웹 서비스 지원
1. SQL Server 2005 살펴 보기 • SQL Server 2005 컴포넌트 • 새로운 데이터베이스 개발 기능 • SQL Server 2005의 개발 지원 도구 • SQL Server Management Studio
Data Transformation Services Notification Services Analysis Services SQL Server 2005 Full-Text Search Relational Database Engine Reporting Services .NET CLR Service Broker Replication Native HTTP Support SQL Server 2005 컴포넌트
새로운 데이터베이스 개발 기능 • Transact-SQL 강화 • XML 지원 • 메시지 기반 서비스 • HTTP 지원 • 알림(Notification) 서비스 • CLR 통합 • 리포팅 서비스 • SQL 관리 객체
SQL Server 2005의 개발 지원 도구 • SQL Server Management Studio • Business Intelligence Development Studio • sqlcmd • Visual Studio designers
SQL Server Management Studio 데이터베이스 개발 환경 통합
데모 SQL Server Management Studio
2. Transact-SQL 강화 • 데이터 타입 강화 • 데이터 정의 언어 강화 • 데이터 조작 언어 강화 • 구조적 예외 처리
데이터 정의 언어 강화 • 데이터베이스 DDL 문 • 테이블 DDL 문 • .NET Framework 프로그래밍 • 테이블과 인덱스 분할 • 인덱싱 강화 • 보안 DDL 문 • 서비스 브로커 문 • DDL 트리거와 이벤트 알림
데이터 조작 언어 강화 • OUTPUT 키워드 • PIVOT ,UNPIVOT • APPLY • Ranking 기능
OUTPUT 키워드 Declare a table-valued variable 1 Use OUTPUT to return details to the variable 2 DECLARE @InsertDetails TABLE (ProductID int, InsertedBy sysname) INSERT INTO Stock.ProductList OUTPUT inserted.ProductID, suser_name() INTO @InsertDetails VALUES ('Racing Bike', 412.99) SELECT * FROM @InsertDetails
PIVOT 과 UNPIVOT • PIVOT – 값을 컬럼으로 변환 SELECT * FROM Sales.Order PIVOT (SUM(Qty) FOR Prod IN ([Bike],[Chain])) PVT • UNPIVOT –컬럼을 값으로 변환 SELECT Cust, Prod, Qty FROM Sales.PivotedOrder UNPIVOT (Qty FOR Prod IN ([Bike],[Chain])) UnPVT
데모 DML Enhancements
3. XML 과 XQuery • XML 데이터 타입 • XML 스키마 • XQuery
데이터베이스와 XML 장점: • 구조적 데이터와 반구조적 데이터를 위한 단일 스토어 • 관계 모델에 다양한 내용 정의 • 적절한 데이터 모델 선택 기능: • XML Indexes • XQuery 기반의 데이터 구조(검색, 복구) • XQuery 기반의 변경(조작) XML 스키마 지원: • Typed XML: 유효한 스키마 • Untyped XML: 유효하지 않은 XML
XML 데이터 타입 CREATE TABLE xml_tab ( the_id INTEGER, xml_col XML) CREATE PROCEDURE transform ( @x XML, @y XML OUTPUT) AS ... CREATE FUNCTION simple ( @x NVARCHAR(max)) RETURNS XML AS DECLARE @a XML SET @a = @x ... RETURN @a
XML column • XML column 은 well-formed XML을 저장 • XML 1.0 추천
XML 스키마 XML schema collection 생성 CREATE XML SCHEMA COLLECTION cvSchemas AS N'<?xml version="1.0" ?> <xsd:schema targetNamespace= ...'
데이터베이스와 XML Schema • 데이터베이스 내의 XML 데이터는 XML 스키마를 사용해야 한다 • XML SCHEMA COLLECTION 생성 • collection 이름은 XML 인스턴스와 연동 • XML SCHEMA COLLECTION 생성은 순수 스키마 요구 CREATE XML SCHEMA COLLECTION geocoll '<xs:schema ... literal schema targetNamespace = urn:geo> targetNamespace ... </xs:schema>' CREATE TABLE Locations ( reference to location xml(geocoll) schema collection ... )
XML 인덱스 • XML column 기반의 XML 인덱스 생성 • Column에 대해 XML 질의 최적화 • 먼저 primary XML 인덱스 생성 (node table) • 세 개의 특별한 인덱스 타입 • VALUE –content 질의 최적화 • PATH –structure 질의 최적화 • PROPERTY –name/value 최적화 CREATE TABLE xml_tab ( id integer primary key, doc xml) GO CREATE PRIMARY XML INDEX xml_idx on xml_tab (doc) GO
XQuery • XQuery 는 Xpath의 서브셋 • XPath 또는 FLWOR 표현 사용 • 대부분 유요한 XPath 문장은 XQuery 문장과 같다 (: this is a valid XQuery :) /people/person[age > 30] (: so is this FLWOR expression :) for $p in /people/person where $p/age > 30 order by $p/age[1] return $p/name
FLWOR 표현 • XML 질의는FLWOR 표현 • 다섯 타입의 절로 구성 • FOR • LET (SQL Server 2005 또는System.Xml지원하지 않음) • WHERE • ORDER BY • RETURN
XML 문서 예 <people> <person> <name> <givenName>Martin</givenName> <familyName>Gudgin</familyName> </name> <age>33</age> <height>short</height> </person> <person> <name> <givenName>Simon</givenName> <familyName>Horrell</familyName> </name> <age>40</age> <height>short</height> </person> <person> <name> <givenName>Mark</givenName> <familyName>Szolkowski</familyName> </name> <age>30</age> <height>medium</height> </person> </people>
XML 데이터 타입 메소드 query 메소드 사용 value 메소드 사용 exist 메소드 사용 columns 과 variables 관계 결합 modify 메소드 사용
서비스 브로커 • 서비스 지향 아키텍처(SOA)란? • 서비스 브로커 시스템 아키텍처 • 서비스 브로커 통신 아키텍처 • 서비스 브로커 사용
서비스 지향 아키텍처(SOA)란? • 서비스 간의 느슨한 통신 • SOA 예: Message Queuing Web Services
Message type Queue Service Contract Service program 서비스 브로커 시스템 아키텍처
서비스 브로커 사용 • 데이터베이스 내의 서비스 브로커 사용 • 서비스 구현 • Contracts 생성 • Queues 생성 • Services 생성 • Message 전송 • Message 수신
데이터베이스 내의 서비스 브로커 사용 서비스 브로커 상태 점검 1 SELECT is_broker_enabled FROM sys.databases WHERE database_id = db_id() 서비스 브로커 사용 가능 2 ALTER DATABASE AdventureWorks SET ENABLE_BROKER
Services 구현 디자인: • Message types • Contracts • Queues • Services • Service program logic
Contracts 생성 message 타입 생성 1 CREATE MESSAGE TYPE [//Adventure-Works.com/Expenses/ExpenseClaim] VALIDATION = WELL_FORMED_XML CREATE MESSAGE TYPE [//Adventure-Works.com/Expenses/ClaimResponse] VALIDATION = VALID_XML WITH SCHEMA COLLECTION awschemas Contract 생성 2 CREATE CONTRACT [//Adventure-Works.com/Expenses/ProcessExpense] ( [//Adventure-Works.com/Expenses/ExpenseClaim] SENT BY INITIATOR, [// Adventure-Works.com/Expenses/ClaimResponse] SENT BY TARGET )
Queues 생성 activation parameters 명시 3 CREATE QUEUE ExpenseQueue CREATE QUEUE ExpenseQueueWithActivation WITH STATUS = OFF, ACTIVATION ( PROCEDURE_NAME = ProcessExpense, MAX_QUEUE_READERS = 5, EXECUTE AS SELF)
Services 생성 통신 라이프타임에 대해 메시지 유지 여부 선택 4 CREATE SERVICE [//Adventure-Works.com/SubmitExpense] ON QUEUE ExpenseQueue ( [//Adventure-Works.com/Expenses/ProcessExpense] )
Message 전송 dialog handle 변수 선언 1 dialog 통신 시작 2 Message 전송 3 DECLARE @dialog_handle uniqueidentifier BEGIN DIALOG CONVERSATION @dialog_handle FROM SERVICE [//Adventure-Works.com/SubmitExpense] TO SERVICE '//Adventure-Works.com/ProcessExpense' ON CONTRACT [//Adventure-Works.com/Expenses/ProcessExpense] ;SEND ON CONVERSATION @dialog_handle MESSAGE TYPE [//Adventure-Works.com/Expenses/ExpenseClaim] (@msgString)
Message 수신 Message 저장을 위한 변수 선언 1 RECEIVE 문 호출 2 message 타입 체크 그리고 적절한 프로세스 3 만약 통신 종료이면, END CONVERSATION 호출 4 DECLARE @conversation UNIQUEIDENTIFIER DECLARE @msg NVARCHAR(MAX), @msgType NVARCHAR(256) ;RECEIVE TOP(1) @conversation = conversation_handle, @msgType = message_type_name, @msg = message_body FROM ExpenseQueue IF (@msgType = '//Adventure-Works.com/Expenses/ExpenseClaim') -- process @msg … END CONVERSATION @conversation
추천서적: Microsoft PressIT 전문가를 위한 고급 정보 최신 기술서적에 대한 정보는 여기서 참조하세요. www.microsoft.com/learning/books/
추천서적: IT 전문가를 위한 참고서적 이 서적은 국내 대형서점에서 판매되며, 온라인 서점에서도 판매 됩니다.