oracle dba, 개발자 분들이여download.microsoft.com/download/a/c/f/acf9283a-f123-48a0...oracle...
TRANSCRIPT
Oracle DBA, 개발자 분들이여, Microsoft SQL Server 2012를 자유
롭게 사용하자!
SQL Server For Oracle DBA & Developer
㈜온디멘드 책임 윤선식
Speaker
• Company – 현 온디멘드 DB사업부 책임컨설턴트 – 전 프리먼트(이랜드계열) DBA – 전 YES24.COM 웹개발 파트장
… (무역회사 전산팀장, SI/SM PM/PL)
• Consulting / Speaker – Oracle To SQL Server Migration Consulting – SQL Server 2012 Upgrade POC – SQL Server 보안진단 Consulting – SQL Server 보안 On-Site Seminar Speaker – 개인정보보호법과 SQL Server 보안 Seminar Speaker – …
• Community – SQLER.COM SQL Frontier Member – SQLTAG.org Member – SQLIAN Partner Member – …
http://www.ondmd.com/
무엇을 말하고자 하는가?
무엇을 말하고자 하는가?
현 상황?
데이터베이스 사용 현황
*Embarcadero Technologies Database Survey Report http://www.embarcadero.com/images/dm/technical-papers/database-survey-report.pdf **IDC's Server Workloads 2010 Model
한 가지만 사용?
*Embarcadero Technologies Database Survey Report http://www.embarcadero.com/images/dm/technical-papers/database-survey-report.pdf **IDC's Server Workloads 2010 Model
SQL Server를 도입한다면?
관리자가 고민하는 것?
• SQL Server 꼭 관리해야 하나?
개발자가 고민하는 것?
• Unix / Linux To SQL Server
개발자가 고민하는 것?
• Oracle 기반 개발자가 고민하는 것
개발자가 고민하는 것?
• Oracle 기반 개발자가 고민하는 것
decode lpad
rownum sequence
start with ~ connect by
SQL Server 잘 쓰려면?
SQL Server를 사용한다면!
설치할 때 서비스는?
• 전부 체크 설치?
설치 및 데이터 경로
• C:\Program Files ???
Core
• 병렬처리
IO 분산
• File Group / TempDB
http://msdn.microsoft.com/ko-kr/library/ms175527.aspx
Port / sa
• SQL Service Port / sa
실행 계획 보기
• 실행계획, 인덱스, Stored Procedure
Oracle to SQL Server Migration
Migration을 진행한다면?
• 왜 Migration을 진행해야 하는가 보다는 어떻게 성공적으로 진행해야 하는가에 초점을 맞추면, 길이 보인다.
Migration 절차
• Oracle To SQL Server Migration 진행 절차
1. System Analysis
2. Diagnostics
3. Migration Plan/Schedule
4. DB Object Migration / Application Source Migration
5. Oracle To SQL Server Data Transform
6. Test / Debugging
7. Open / Monitoring
SQL Server Migration Assistant
• SSMA for Oracle 5.2
SSMA 활용
• SSMA for Oracle 5.2
SSMA 활용
• SSMA for Oracle 5.2
– Oracle : 7.3 or later
– SQL Server : 2005, 2008, 2008R2, 2012
– Support conversion of Oracle %ROWTYPE parameters with NULL default
http://www.microsoft.com/Download/en/details.aspx?id=28766
SSMA 활용
• SSMA for Oracle 5.2
개발자 쿼리 변환
• NULL
– Oracle과 SQL Server는 NULL 처리가 다름
– SQL Server에서는 empty string과 NULL을 엄격히 구분
구문 또는 조건 ORACLE (단 컬럼 속성이 nullable)
SQL SERVER
null 일 때 where A IS NULL where A = null 또는 where A IS NULL
null 이 아닐 때 where A IS NOT NULL where A != null 또는 where A IS NOT NULL
NULL 또는 ‘’ 모두 같은 값으로 처리하고 이 경우에 해당될 때
where A IS NULL 또는 where A = ‘’
where ISNULL(A,’’) = ‘’
NULL 또는 ‘’ 모두 같은 값으로 처리하되 이 경우에 해당되지 않을 때
where A IS NOT NULL 또는 where A != ‘’
where ISNULL(A,’’) != ‘’ 또는 where ISNULL(A,’’) <> ‘’
NULL 허용 컬럼에 NULL을 INSERT 하고 싶을 경우
VALUES (‘’) 또는 VALUES (null)
VALUES (NULL) 만 하용
정렬기준 NULL 은 최하위 NULL이 최상위
SQL 전문가 가이드 : The Guide for SQL Professional [2010]
개발자 쿼리 변환
• DataType 에 의한 변환처리 어려움
• Oracle에만 존재하는 구문
– DECODE
– LPAD
– MERGE
– LEAD / LAG
– Start With ~ Connect By
개발자 쿼리 변환
• Start With ~ Connect By ~ 변환 SAMPLE
ORACLE
SELECT DEPT_ID, SYS_CONNECT_BY_PATH(DEPT_NAME, ‘>’, ‘ > ‘) || ‘ > ‘ AS DEPT_NAME FROM HR.TB_DEPARTMENT START WITH DEPT_ID = 2 CONNECT BY PRIOR DEPT_ID = PARENT_DEPT_ID SQL Server
WITH CTE_TABLE AS ( SELECT 1 AS LVL, A.DEPT_ID, PARENT_DEPT_ID, DEPT_NAME, CONVERT(VARCHAR(100), CAST(A.DEPTNAME as VARCHAR(100)) + ' > ') AS DEPT_NAME FROM dbo.TB_DEPARTMENT A WHERE A.DEPT_ID = 2 UNION ALL SELECT LVL + 1, M.DEPT_ID, M.PARENT_DEPT_ID, M.DEPT_NAME, CONVERT(VARCHAR(100), N.DEPT_NAME + ' > ' + CAST(M.DEPT_NAME AS VARCHAR(100)) + ' > ' ) AS DEPT_NAME FROM dbo.TB_DEPARTMENT M JOIN CTE_TABLE N ON M.PARENT_DEPT_ID = N.DEPT_ID ) SELECT * FROM CTE_TABLE;
개발자 쿼리 변환
• Oracle Function vs SQL Server Function
– http://www.sqler.com/269782
– http://www.sqler.com/270809
– http://www.sqler.com/316811
SQL Server 2012 New Feature
• SQL Server 2012의 새로 나온 T-SQL
– SEQUENCE : Oracle과 유사
– LEAD / LAG : Oracle과 유사
– IIF : Oracle IIF와 유사
– CHOOSE : INDEX 에 따라 실행, CHOOSE / CASE 와 유사
– EOMONTH : 월의 마지막 날짜를 구함
– TRY_CONVERT : 변환 시 오류가 발생하면 NULL RETURN
– OFFSET / FETCH : 페이징 처리
– …
OFFSET / FETCH
• ORDER BY Clause – MSDN
http://www.sqlserver-training.com/how-to-use-offset-fetch-option-in-sql-server-order-by-clause/-
Application 설정
• WAS
• JDBC Driver
• UNICODE
Linked Server 설정
• SQL Server to Oracle Linked Server
– Oracle Client 설치!
이관 - 1
• SQL Server 가져오기 / 내보내기 이용 데이터 이관
이관 - 2
• SQL Server Data Tools 이용 데이터 이관
SSIS Adapter
• Microsoft Connectors for Oracle and Teradata
– 기존 OLEDB Provider보다 높은 전송속도!
– Ver 1.2 : SQL Server 2008 / 2008 R2
http://www.microsoft.com/download/en/details.aspx?WT.mc_id=rss_alldownloads_all&id=29284
– Ver 2.0 : SQL Server 2012
http://www.microsoft.com/download/en/details.aspx?id=29283
Migration Case Study
I사
• 시스템 개요 – 대부분의 시스템이 SQL Server – 하나의 시스템 하나만 Oracle
• 쿼리 변환 – 대부분의 쿼리 변환에는 큰 문제가 없음 – Sequence USP_Get_Sequence SP 생성 – LPAD, INSTR, TO_DATE Function 구현
• 이슈 처리
– Linked Server 연결 시 XA-Transaction 미 지원으로 별도 모듈 개발
– SQL Server Collation에 따른 Key 중복 제거 – 정렬순서 조정 – Data Cleansing 수행
S사
• 시스템 개요 – 대부분의 System이 Oracle – 개발자 및 관리자 SQL Server 경험 전무
• 쿼리 변환 – 대부분의 쿼리가 XML 내에 존재 – Sequence USP_Get_Sequence SP 생성 – LPAD, INSTR, TO_DATE Function 구현
• 이슈 처리
– WebLogic 설정 작업(Driver, Transaction Timeout) – 동적 구문이 많아서 검증에 많은 시간 소요
exp) NULL XML Mapping : #data:VARCHAR# – System Collation 사용으로 정렬순서 맞춤 – 숫자표현 부분 상이한 부분에 대해 FLOAT 등으로 변경 처리
결국 우리의 목적은?
References
• 3rd Party Tools – SSMS Tools Pack
http://www.ssmstoolspack.com/ – SQL Pretty Printer
http://www.dpriver.com/dlaction.php – Instant SQL Formatter
http://www.dpriver.com/pp/sqlformat.htm
• 기타 참고 사이트 – Microsoft SQL Server JDBC Driver 4.0
http://www.microsoft.com/downloads/ko-kr/details.aspx?FamilyID=49c554ca-41a0-472c-b728-75df5789369c
– Type 4 JDBC Drivers(Oracle Site) http://docs.oracle.com/cd/E12840_01/wls/docs103/jdbc_drivers/mssqlserver.html
– iBatis SQL Maps http://openframework.or.kr/Wiki.jsp?page=Hibernate/iBATIS-SqlMaps-2_ko.pdf
– Using Advanced Data Types http://msdn.microsoft.com/en-us/library/ms378813.aspx