관리자를 위한 짧은 팁입니다.

 

시작하기 전에 우선.. 아래 글부터

http://www.sqler.com/390533

http://msdn.microsoft.com/ko-kr/library/dd207004.aspx

 

이 글을 읽으시면 SQL Server 단일 사용자 모드 지정이 나옵니다.

 

시작매개변수 -m 또는 -f 을 추가함으로써 단일 사용자 모드 를 지정할 수 있는데요.

sql-f.png

 

SQLCMD 를 사용하여 단일 사용자 모드를 접속하면 큰 문제가 되지 않지만,

SSMS를 사용하고자 하면.

sql-f_2.png

 

우선 개체 탐색기 까지는 잘 표시됩니다.

sql-f_3.png

 

자 여기서 "새 쿼리" 버튼을 누르면?

sql-f_4.png

 

아뿔싸... 분명 나 혼자 접속하는데, 왜 안 된다는 것일까요?

이는, 이미 개체 탐색기로 접속 및 표시하면서 하나의 사용자를 할당받기 때문입니다.

하여, 단순히 SSMS 를 실행하면 안 되고, 옵션과 함께 SSMS를 실행해야 합니다.

 

일단... SSMS 옵션은 다음 글 참조.

http://www.sqler.com/462605

ssms -S [서버명]

--> -U 와 -P 옵션을 주지 않으면 현재 Window 사용자 계정으로 접속합니다.

 

이렇게 접속하면, 개체탐색기 보다는 쿼리 창이 우선권을 가지고, 쿼리 창을 열고 난 후 개체 탐색기는 다음과 같이 접속이 안 됩니다.

sql-f_5.png

 

sql-f_6.png

 

혹, 모르시는 분들을 위해~~~ 써 봤습니다.

 

데이터베이스 단일 사용자 모드는 다음 글 참조

http://www.sqler.com/398925

 

안녕하세요? 쓸만한게없네 윤선식입니다.

 

Azure Camp 지원을 위해 여러가지 힘을 쓰고,

드디어, 기회를 주시어 당첨되었으나...

외근 및 집안 일로 인해 조금 늦게 작업을 시작하게 되었습니다.

 

하여... 다른 Azure 로 접속을. ㅋ.

하여간 이번엔 SQL Azure 에 대해 좀 더 많이 알아보기로 했습니다.

 

1. https://manage.windowsazure.com/ 사이트로 접속하여, 로그인 계정과 암호를 넣고 로그인하였습니다.

1-1.png

 

다른 부분들은 생략하고...

 

2. DB 부분에서 Manage를 누르자 방화벽을 열 것인지 묻습니다. "YES"를 눌러서 방화벽에 Rule을 추가했습니다.

2-1.png

 

3. 방화벽을 열게 되면 계속 관리할 것인지 묻습니다. "YES"를 눌러서 관리를 시작합니다.

3-1.png

 

4. 실버라이트가 설치되어 있지 않으면, 실버라이트를 설치합니다.

4-1.png

 

5. 브라우저를 새로 열고 관리로 들어갑니다. 데이터베이스에 따른 USERNAME과 PASSWORD를 입력하고 Log on 합니다.

5-1.png

 

6. 기본적인 Summary 화면이 표시됩니다.  저는 쿼리 위주의 작업을 할 것이므로 "New Query"를 선택합니다.
 6-1.png

 

7. 새 쿼리 창이 표시됩니다.

7-1.png

 

8. 버젼이 궁금하여 "SELECT @@VERSION" 명령을 실행해 보았습니다.

8-1.png

  - Azure RTM으로 표시되네요. 그런데 뒤 쪽 Build Number가 11.0.2286.0 입니다. 그래서 더 자세히 확인해 보기로 했습니다.

 

9.  SERVERPROPERY를 이용하여 "ProductVersion"과 "Edtition"을 확인해 보았습니다.

9-1.png

  - Version은 11.0.2286.0, Edition은 SQL Szure로 표시됩니다.

 

10. 데이터베이스 호환성이 어떤지 확인해 보기로 했습니다.

10-1.png

 

  - 호환성은 100 으로 SQL Server 2008에 해당됩니다.

 

11. SQL Server 2012 명령어로 확인해 보려고 합니다. SQL Server 2012의 새로 나온 함수인 "EOMONTH"를 사용해 보았습니다.

11-1.png

 

  - 오~ 잘 됩니다.

 

12. 그래서 SQL Server 2012 HASHBYTES를 이용하여 테스트를 진행했습니다. 참고로 SQL Server 2008까지는 SHA2 해시 알고리즘을 지운하지 않습니다. 하여 SHA2 알고리즘을 실행해 보았습니다.

12-1.png

  - SHA2_256 은 bynary_data 라는 값으로, SHA2_512 는 NULL 로 정상적으로 HASH가 되지 않네요.

 

13. SHA2_256  bynary_data 값을 클립보드로 복사하려고 하니, Silverlight 메시지가 표시됩니다. "예"를 눌러 허용했습니다.

13-1.png

 

14. SHA2_256 값은 다음과 같이 숫자로 표시됩니다.

14-1.png

 

15. 실제 SQL Server 2012에서 위 명령어를 수행해 보았습니다.

15-1.png

  - 잘 되네요... 결국 SQL Azure에서 SHA2_256 은 되는데, SHA2_512 는 안 되네요. 살짝 애매합니다. ㅋ.

 

16. 성능 쪽은 어떤 지 보기로 했습니다. SET STATISTICS 명령어를 사용해 보기로 했습니다.

16-1.png

  - IO 와 TIME 모두 잘 되네요.

 

17. 시스템을 확인하기 위한 명령어를 해 보기로 했습니다. sp_lock 명령어를 사용해 봤습니다.

17-1.png

  - sp_lock 은 찾지 못하는군요

 

18. 시스템 확인을 위한 다른 명령어를 사용해 보기로 했습니다. sp_who 명령어를 사용해 보았습니다.

18-1.png

  - sp_who도 sp_lock 과 마찬가지로 정상 동작하지 못합니다.

 

19. 암호화를 위한 명령어를 사용해 보기로 했습니다. 마스터키를 생성해 보았습니다.

19-1.png

  - 시스템 명령이라 그런지 SQL Azure에서는 지원하지 않네요.

 

20. 암호화를 위한 또다른 명령어인 대칭키 생성 명령어를 사용해 보기로 했습니다.

 20-1.png

  - 이 또한, 시스템 명령이라 그런지 SQL Azure에서는 지원하지 않네요.

 

여러가지 변수들로 충분히 테스트해 볼 수 없던 점이 아쉽긴 했지만,

새로운 것을 시험해 볼 수 있는, 정말... 새로운 체험이었던 듯 합니다.

 

감사합니다.

 

 

 

SQL Server 2012의 신규 함수로 LAG, LEAD 가 있습니다.

이미 오라클에서는 지원하고 있었지만, SQL Server 는 2012에 포함되었네요.

 

LAG 함수는 현재 결과집합에서 이전 행의 데이터를 가져오는 함수이고,

LEAD 함수는 LAG와 반대로 현재 결과집합에서 다음 행의 데이터를 가져오는 함수입니다.

 

이 함수가 나오기 이전에는 SELF JOIN을 사용하거나 CTE(Common Table Expression)을 사용해야 했습니다.

 

각설하고... SQL Server 2012의 샘플DB인 AdventureWoks2012 데이터베이스에서 예제를 만들어 보았습니다.

 

1. 원본 데이터 SELECT 

 

USE AdventureWorks2012

GO

 

SELECT

        ProductID, ModifiedDate, StandardCost

FROM

        Production.ProductCostHistory

WHERE

        ProductID IN (711, 712, 713)

ORDER BY

        ProductID, ModifiedDate

 

1.png

 

 

2. CTE 로 구현.

 

WITH LAG_LEAD_CTE

AS

(

        SELECT

               ROW_NUMBER() OVER (ORDER BY ProductID, ModifiedDate) AS RN, ProductID, ModifiedDate, StandardCost

        FROM

               Production.ProductCostHistory

        WHERE

               ProductID IN (711, 712, 713)

)

SELECT

        A.ProductID, A.StandardCost, A.ModifiedDate, B.StandardCost AS PrevStandardCost, C.StandardCost AS NextStandardCost

FROM

        LAG_LEAD_CTE A LEFT JOIN LAG_LEAD_CTE B ON A.ProductID = B.ProductID AND A.RN = B.RN + 1

        LEFT JOIN LAG_LEAD_CTE C ON A.ProductID = C.ProductID AND A.RN = C.RN - 1

ORDER BY

        A.ProductID, A.ModifiedDate

;

 

2-1.png

 ROW_NUMBER  를 주고 재귀쿼리를 이용,  뒤의 ROW, 앞의 ROW 와 조인하여  결과를 보여줍니다.

 

 

3. LAG / LEAD 함수를 사용하여 구현

 

SELECT

        ProductID, StandardCost, ModifiedDate,

        LAG(StandardCost, 1, NULL) OVER (PARTITION BY ProductID ORDER BY ModifiedDate) PrevStandardCost,

        LEAD(StandardCost, 1, NULL) OVER (PARTITION BY ProductID ORDER BY ModifiedDate) NextStandardCost

FROM

        Production.ProductCostHistory

WHERE

        ProductID IN (711, 712, 713)

ORDER BY ProductID, ModifiedDate

;

 

3-1.png

결과는 CTE와 LAG, LEAD 함수 사용 시 모두 같습니다만, 훨씬 구문이 가벼워진 것을 알 수 있습니다.

 

 

 

그럼 CTE로 구현했을 때와 LAG / LEAD 함수 로 구현했을 때의 성능 차이는 어느 정도일까요?

 

1) CTE 로 구현 시 IO 및 TIME 수치

 

SQL Server 구문 분석 컴파일 시간:

   CPU 시간 = 16ms, 경과 시간 = 25ms.

 

(9 행이 영향을 받음)

테이블 'Worktable'. 검색 0, 논리적 읽기 0, 물리적 읽기 0, 미리 읽기 0, LOB 논리적 읽기 0, LOB 물리적 읽기 0, LOB 미리 읽기 0.

테이블 'ProductCostHistory'. 검색 9, 논리적 읽기 18, 물리적 읽기 0, 미리 읽기 0, LOB 논리적 읽기 0, LOB 물리적 읽기 0, LOB 미리 읽기 0.

 

 SQL Server 실행 시간:

 CPU 시간 = 16밀리초, 경과 시간 = 4밀리초

 

 

2) LAG, LEAD 함수를 사용하여 구현 시 IO 및 TIME 수치

 

SQL Server 구문 분석 컴파일 시간:

   CPU 시간 = 11ms, 경과 시간 = 11ms.

 

(9 행이 영향을 받음)

테이블 'Worktable'. 검색 0, 논리적 읽기 0, 물리적 읽기 0, 미리 읽기 0, LOB 논리적 읽기 0, LOB 물리적 읽기 0, LOB 미리 읽기 0.

테이블 'ProductCostHistory'. 검색 3, 논리적 읽기 6, 물리적 읽기 0, 미리 읽기 0, LOB 논리적 읽기 0, LOB 물리적 읽기 0, LOB 미리 읽기 0.

 

 SQL Server 실행 시간:

 CPU 시간 = 0밀리초, 경과 시간 = 1밀리초

 

CTE보다 더 좋은 성능이 나오네요.

 

참고 URL

LAG : http://msdn.microsoft.com/ko-kr/library/hh231256.aspx

LEAD : http://msdn.microsoft.com/ko-kr/library/hh213125.aspx

 

짧은 팁입니다...

 

간혹 Linked Server 로 Open Query를 사용할 때, USE 명령어를 써야 할 때가 있습니다.

 

하지만 일반적인 방식으로 사용하면서 USE 명령어를 쓰면

 

"연결된 서버 "서버"의 OLE DB 공급자 "SQLNCLI10"은(는) 개체에 열이 없거나 현재 사용자에게 해당 개체에 대한 사용 권한이 없음을 나타냅니다." 오류가 발생합니다.

 

이럴 때에는 EXEC 라는 명령어로 한번 더 감싸주면 됩니다.

 

SELECT * FROM OPENQUERY

       (연결된서버,'

       EXEC (

             ''USE Database;

             EXEC dbo.TestSP;''

             );'

       )

 

이상입니다.

 

SQL Server 평가판을 설치해 놓고, 한동안 잊고 살다가~~
SQL Server 2012 Management Studio를 실행하면...

1.png

 

이런 메시지를 만날 수 있습니다. 두둥~

2.png

 

정식 에디션을 구매했음에도 불구하고, 이런 메시지를 만나면 멘붕이 오면서 O/S 재설치를 고려할 수도 있는데,

이 때에는 업그레이드 기능을 이용하면 됩니다.

 

1. 우선 정식 DVD를 넣고, 자동실행을 한 뒤, "유지 관리" 를 선택합니다.

3.png

 

2. 유지관리에서 "버전 업그레이드"를 선택합니다.

4.png

 

3. 다음과 같이 화면이 변경되면서 업그레이드가 시작됩니다.

5.png

 

6.png

 

 4. 설치 규칙 검사를 진행합니다.

7.png

 

5. 특별한 문제가 없는 경우 "확인"을 클릭합니다.

   이미 이전에 SQL Server 2012를 설치했으므로, 구성을 변경하지 않았다면 큰 문제 없이 통과됩니다.

8.png

 

6. 프로세스 처리 메시지가 표시됩니다.

9.png

 

7. "지원 규칙 작업"이 완료되면, "다음"을 선택합니다.

10.png

 

8. 제품 키 입력 화면입니다. 정식 라이선스를 구매한 경우 이미 제품키가 입력되어 있으므로, 특별히 입력할 필요는 없습니다.

   다만, Command 창에서 별도로 수행하려면 해당 키를 알아야 합니다.

11.png

 

9. 소프트웨어 사용 동의에서 "동의함"을 체크하고, "다음"을 선택합니다.

12.png

 

10. 인스턴스를 선택합니다. SQL Server 2012만 설치되어 있고, 기본 인스턴스를 사용한 경우엔 "MSSQLSERVER"가 됩니다.

 저의 경우엔 SQL2012라는 인스턴스로 사용하여 다음과 같이 표시된 것입니다. "다음"을 선택합니다.

13.png

 

11. 버전 업그레이드 규칙을 확인합니다. 특별한 이상이 없을 경우 "다음"을 선택합니다.

14.png

 

** 업그레이드하려는 버전이 지원되는 버전이어야 합니다. **

자세한 사항은 다음 URL에서 확인할 수 있습니다. : http://msdn.microsoft.com/ko-kr/library/ms143393.aspx

 

12. 최종적으로 업그레이드 준비상태를 확인하고, "업그레이드" 버튼을 선택합니다.

15.png

 

13. 업그레이드가 완료되면 다음과 같은 화면이 표시됩니다. 만약 오류가 발생한 경우,

  12.번 단계에서 표시된 구성 파일 경로에서의 로그를 찾아 분석합니다.

16.png

 

14. 이제 SQL Server Management Studio를 실행하여 버전을 확인하면 다음과 같습니다.

17.png

 

오홋. 성공입니다.

 

** 참고로  Command 창에서 업그레이드를 진행하려면

   Setup.exe /q /ACTION=editionupgrade /INSTANCENAME=<Instance Name> /PID=<PID key for new edition> 를 수행하면 됩니다.

  > <Instance Name> : SQL Server 2012를 설치할 때 지정한 인스턴스명입니다. 특별히 지정하지 않으면  "MSSQLSERVER" 입니다.

  > <PID key for new edition> : 제품키 입니다. 위 GUI 설정에서는 8.번에 나온 제품키 입니다.

 

SQL Server 2008 은 다음 URL을 참고하세요.

 

* SQL2K8 평가판에서 정품으로 업그레이드 하는 방법
http://blogs.technet.com/b/koreapartner/archive/2009/03/04/sql2k8.aspx

 

+ Recent posts