MS-SQL 은 날짜/시간 데이터 저장을 위해 다음의 6가지 타입을 지원합니다.

 데이터 형식

 형식

 time

 hh:mm:ss[.nnnnnn]

 date

 YYYY-MM-DD

 smalldatetime

 YYYY-MM-DD hh:mm:ss

 datetime

 YYYY-MM-DD hh:mm:ss[.nnn]

 datetime2

 YYYY-MM-DD hh:mm:ss[.nnnnnn]

 datetimeoffset

 YYYY-MM-DD hh:mm:ss[.nnnnnn] [+|-]hh:mm

각 데이터 타입별 범위와 정확도 저장공간 크기등은 아래 url에서 '날짜 및 시간 데이터 형식' 을 참고해주세요.

https://docs.microsoft.com/ko-kr/sql/t-sql/functions/date-and-time-data-types-and-functions-transact-sql?view=sql-server-2017



이 중에서 datetime2 컬럼에 데이터를 적재한 뒤, CONVERT 함수를 사용하여 원하는 포맷에 맞게 출력해보겠습니다.

CONVERT함수는 ( 타입, 데이터, 날짜출력포맷 ) 의 매개변수를 지닙니다.


날짜출력포맷은 숫자로 되어있으며, 각 숫자별로 나오는 포맷이 달라집니다.

모든 숫자에 대해서는 포스팅 하지 않았으니, 더 자세히 알고싶으신 분들은 아래 url에서 '날짜 및 시간 스타일'을 참고해 주세요.

https://docs.microsoft.com/ko-kr/sql/t-sql/functions/cast-and-convert-transact-sql?view=sql-server-2017


저는 ISO, ODBC 표준에 대해서 포스팅을 진행하였습니다.

 숫자 (두 자리 연도)

 숫자 (네 자리 연도)

 표준

 출력

 12

 112

 ISO

 12 = yymmdd

 112 = yyyymmdd

 

 20, 120 (같은의미)

 ODBC

 yyyy-mm-dd hh:mi:ss (24h)

 

 21, 121 (같은의미)

 ODBC yyyy-mm-dd hh:mi:ss.mmm (24h)


테이블을 생성 및 데이터를 적재합니다.

 CREATE TABLE dt2 (c1 date, c2 datetime2)

 INSERT INTO dt2 VALUES ('2019-02-14', '2019-02-14 16:42:32.128402')


CONVERT 함수를 사용하여 데이터를 출력합니다.

 SELECT

  CONVERT(VARCHAR(6), C1, 12) AS C1_12,

  CONVERT(VARCHAR(8), C1, 112) AS C1_112,

  CONVERT(VARCHAR(19), C1, 120) AS C1_120,

  CONVERT(VARCHAR(8), C2, 112) AS C2_112,

  CONVERT(VARCHAR(19), C2, 120) AS C2_112

 FROM dt2


C1_12 C1_112 C1_120 C2_112 C2_112

190214 20190214 2019-02-14 20190214 2019-02-14 16:42:32


이번에는 CONVERT함수의 첫번째 매개변수의 저장공간의 값을 다르게 테스트 해보겠습니다.

첫 번째 타입의 크기가 출력되어야 하는 포맷길이보다 짧은 경우 데이터가 짤리는 것을 확인할 수 있습니다.

 SELECT

  CONVERT(VARCHAR(10), C2, 120) AS C2_10_120,

  CONVERT(VARCHAR(15), C2, 120) AS C2_15_120,

  CONVERT(VARCHAR(19), C2, 120) AS C2_19_120,

  CONVERT(VARCHAR(25), C2, 120) AS C2_25_120

 FROM dt2

C2_10_120 C2_15_120 C2_19_120 C2_25_120

2019-02-14 2019-02-14 16:4 2019-02-14 16:42:32 2019-02-14 16:42:32



추가로 GETDATE() 함수는 현재 시간을 밀리세크까지 반환합니다.

위의 CONVERT함수에서 C1 자리 대신 GETDATE()를 작성하여 테스트를 진행 할 수도 있습니다.

 SELECT GETDATE() AS GETDATE


GETDATE

2019-02-14 16:50:18.477


블로그 이미지

사용자 꽁담

SSIS를 사용하여 텍스트 내용을 테이블로 적재하는 방법, 혹은 추출하는 방법을 알아보겠습니다.


적재하는 방법을 먼저 알아보겠습니다.

1. txt 파일에 데이터가 다음과 같이 들어있습니다.


2. 테스트에 사용될 테이블을 생성합니다. (레코드 크기는 왜이렇게 커! 이러지말고 무시해주세요..)

CREATE TABLE dbo.TEST_txt (

  NAME VARCHAR(50),

  AGE INT,

  SEX CHAR(50) ) 


3. Visual Studio 를 실행한뒤 SSIS 솔루션을 생성합니다.


4. 데이터 흐름 태스크를 드래그하여 끌고 옵니다. 이후 데이터 흐름 태크스를 더블클릭합니다.


5. 플랫 파일 원본과 OLEDB 대상을 드래그하여 끌고 옵니다. 이후 플랫 파일 원본의 파란 화살표를 OLE DB 대상에 연결합니다.


6. 플랫 파일 원본을 더블클릭합니다.

6-1. 연결 관리자 이름과 설명을 입력한 뒤, 일반 탭에서 적재할 텍스트 파일을 선택합니다. 텍스트 파일의 첫 줄에 컬럼명이 작성되어 있지 않다면, 첫 번째 데이터 행의 열 이름 란의 네모박스 체크를 해제합니다.

6-2. 열 탭에서 데이터 구분자가 정확한지 확인합니다.

6-3. 각 열의 데이터 타입을 설정해줍니다. 이후 관리자 편집기 창에서 확인을 눌러 줍니다.

컬럼의 크기보다 크게 설정하면 적재할때 오류가 나기 때문에, 맞춰서 설정을 진행해주세요.

6-4. 연결 관리자의 원본의 Null 값을 데이터 흐름의 Null 값으로 유지에 체크합니다. (열과 오류 출력도 체크한번 해줍니다. 기본 설정) 이 후 편집기에서 확인을 눌러 마칩니다.


7. OLEDB 대상을 더블클릭합니다.

7-1. OLE DB 연결 관리자에서 새로 만들기를 클릭합니다.

7-2. 접속하려는 서버명을 서버 이름에 입력합니다. 데이터베이 명칭을 입력 후 연결 테스트를 클릭합니다.

7-3. 연결 테스트가 정상적인 경우 연결 테스트에 성공했다는 알림창이 팝업됩니다.

7-4. 적재하려는 테이블을 선택합니다.

7-5. 매핑 탭에서 입력 열과 대상 열을 매핑한 뒤 완료 합니다.

8. 만들어진 작업을 실행합니다.


9. SSMS 에서 적재된 데이터를 확인합니다.




이번에는 추출하는 방법에 대해서 알아보겠습니다. ( 위에 적재하는 방법과 비슷합니다. )


1. 데이터 흐름 테스크를 하나 더 생성한 뒤 더블 클릭 합니다.


2. 적재와는 반대로  OLE DB 원본과 플랫 파일 대상을 선택합니다.


3. OLE DB 원본을 더블 클릭한 뒤, 서버 연결 및 추출하려는 테이블을 선택합니다.


4. 플랫 파일 대상을 더블 클릭한 뒤, 새로만들기를 클릭합니다.

4-1. 구분 기호로 분리됨을 선택합니다.

4-2. 내려받길 원하는 파일명(바탕화면의 user2.txt를 입력함)을 입력한 뒤 편집기를 마칩니다.


5. 매핑작업을 진행합니다.



6. 만들어진 작업을 실행한뒤 생성된 텍스트파일의 내용을 확인합니다.

사진에서 | 는 현재 커서 위치 깜박임이며, 이 위치에 커서가 있는 이유는 컬럼 타입이 CHAR(50)이기 때문입니다.


블로그 이미지

사용자 꽁담

인터넷 접속이 되지 않게 서비스 하는 환경이 많습니다.

그런데 MS-SQL에서 제공하는 SQL Server 설치 패키지에서 SSDT를 설치하려면 온라인 환경을 이용해야 하기 때문에 진행할 수 없습니다.


이번에는 폐쇄망에서 SSDT를 설치하는 법을 포스팅합니다.


SSDT를 설치하기 위해서는 SQL Server와 Visual Studio가 설치되어 있어야 합니다.


1. 온라인 환경의 PC에서 Visual Studio(버전15.6)와 SSDT 패키지를 다운로드 받습니다.

Visual Studio Commuity : https://docs.microsoft.com/en-us/visualstudio/releasenotes/vs2017-relnotes-v15.6

SSDT : https://docs.microsoft.com/ko-kr/sql/ssdt/download-sql-server-data-tools-ssdt?view=sql-server-2017


2. 온라인 환경의 PC에서 Visual Studio와 SSDT를 Offline 모드로 설치합니다.


vs_community.exe --layout .\vs2017layout --add Microsoft.VisualStudio.Component.CoreEditor --add Microsoft.VisualStudio.Component.SQL.SSDT --add Microsoft.VisualStudio.Component.SQL.CLR --add Microsoft.Net.Component.4.TargetingPack --lang ko-kr


SSDT-Setup-KOR.exe /layout .\SSDTlayout


3. SSDTlayout 폴더와 생성된 vs2017layout 폴더를 폐쇄망 PC로 보냅니다.

4. vs2017layout폴더에서 vs_setup으로 설치를 완료(기본모드)합니다.

5. SSDTlayout 폴더에서 SSDT패키지를 관리자 권한으로 실행합니다.

   인스턴스에 도구 설치 -> Visual Studio Community 선택, 애칭 원하는 명으로 입력

   네모박스에 전부 선택 후 설치


6. Visual Studio 2017를 실행합니다.

7. 새로 만들기 - 템플릿 - 비지니스 인텔리전스 - Integration Services 프로젝트 선택 후 생성을 진행합니다.






블로그 이미지

사용자 꽁담

MS-SQL은 데이터베이스 콘솔 명령어로써 DBCC문을 제공합니다.


콘솔 명령은 아래 4가지의 범주로 분류할 수 있습니다.

 명령 범주

 수행하는 작업

 알림

 다양한 정보를 수집하고 표시

 유효성 검사

 데이터베이스, 테이블, 인덱스, 카탈로그, 파일 그룹 또는 데이터베이스 페이지 할당에 대한 유효성 검사

 유지 관리

 데이터베이스, 인덱스 또는 파일 그룹에 대한 유지 관리

 기타

 추적 플래그 설정이나 메모리에서 DLL제거 같은 기타 작업


아래 설명에서 앞부분의 DBCC가 생략되어 있습니다.

또한 각 DBCC문의 출력되는 열에대한 자세한 내용은 포스터 아래 url을 참고해주세요.



알림

 DBCC문

 설명

 INPUTBUFFER

 클라이언트가 인스턴스에 마지막으로 전송한 문을 표시

 OPENTRAN

 트랜잭션 로그 내에서 가장 오래된 활성 트랜잭션과 가장 오래된 분산 및 비분산 복제 트랜잭션에 대한 정보를 표시


 예) BEGIN TRAN

      INSERT INTO dbo.A VALUES (4, 1, 5)

      DBCC OPENTRAN;

      ROLLBACK

 OUTPUTBUFFER

 지정된 session_id의 현재 출력 버퍼를 16진수와 ASCII 형식으로 반환

 PROCCACHE

 프로시저 캐시에 대한 정보를 테이블 형식으로 표시

 SHOW_STATISTICS

 테이블 또는 인덱싱된 뷰에 대한 현재 쿼리의 최적화 통계를 표시


 예) CREATE TABLE dbo.A (COL1 INT)

      CREATE STATISTICS S_A ON dbo.A (COL1)

      DBCC SHOW_STATISTICS("dbo.A", S_A)

 SHOWCONTIG

 지정한 테이블이나 뷰의 데이터와 인덱스에 대한 조각화 정보를 표시

 SQLPERF

 모든 데이터베이스의 트랜잭션 로그 공간 사용량 통계를 제공

 TRACESTATUS

 추적 플래그의 상태를 표시


 예) DBCC TRACESTATUS(-1)  -- 전역

     DBCC TRACESTATUS()  -- 현재 세션

 USEROPTIONS

 현재 연결에 설정된 SET옵션을 반환


 예) DBCC USEROPTIONS



유효성 검사

 DBCC문

 설명

 CHECKALLOC

 디스크 공간 할당 구조의 일관성을 검사


 예) DBCC CHECKALLOC

 CHECKCATALOG

 카탈로그 일관성을 검사

 CHECKCONSTRAINTS

 테이블에서 특정 제약 조건이나 모든 제약 조건의 무결성을 검사

 CHECKDB

 모든 개체의 논리적 및 물리적 무결성을 검사

 CHECKALLOC, CHECKTABLE, CHECKCATALOG 를 내부적으로 수행

 CHECKFILEGROUP

 파일 그룹에서 모든 테이블과 인덱싱된 뷰의 할당과 구조적 무결성을 검사

 CHECKIDENT

 지정한 테이블의 현재 ID값을 검사하고 필요에 따라 변경

 CHECKTABLE

 테이블 또는 인덱싱된 뷰를 구성하는 모든 페이지 및 구조의 무결성을 검사



유지관리

 DBCC문

 설명

 CLEANTABLE

 테이블 또는 인덱싱된 뷰의 삭제된 가변 길이 열에서 공간을 반환

 DBREINDEX

 테이블에 대해 하나 이상의 인덱스를 다시 작성

 DROPCLEANBUFFERS

 버퍼 풀에서 빈 버퍼를 제거

 FREEPROCCACHE

 플랜 캐시에서 모든 요소를 제거

 INDEXDEFRAG

 테이블 또는 뷰의 인덱스를 조각 모음

 SHRINKDATABASE

 데이터베이스에 있는 데이터 및 로그 파일의 크기를 축소

 SHRINKFILE

 데이터베이스에 대헤 지정한 데이터 또는 로그 파일의 크기를 축소하거나 지정한 파일의 데이터를 같은 파일 그룹의 다른 파일로 이동하여 파일을 비우고 데이터베이스에서 제거할 수 있도록 함

 UPDATEUSAGE

 카탈로그 뷰의 부정확한 페이지와 행 개수를 보고하고 수정



기타

 DBCC문

 설명

 dllname(FREE)

 프로시저 DLL 을 메모리에서 언로드

 FLUSHAUTHCACHE

 로그인 및 방화벽 규칙 정보가 포함된 데이터베이스 인증 캐시를 비움

 FREESESSIONCACHE

 분산 쿼리에서 사용한 분산 쿼리 연결 캐시를 플러시

 FREESYSTEMCACHE

 모든 캐시의 사용하지 않는 캐시 항목을 모두 해제

 HELP

 지정한 DBCC 명령의 구문 정보를 반환

 TRACEOFF

 지정한 추적 플래그를 해제

 TRACEON

 지정한 추적 플래그를 설정

 추적 플래그 숫자 및 관련 정보 아래 url 참고

 https://docs.microsoft.com/ko-kr/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql?view=sql-server-2017

 CLONEDATABASE

 데이터베이스의 스키마 전용 클론을 생성



아래 url에서 DBCC에 대해 더 자세하게 확인할 수 있습니다.

https://docs.microsoft.com/ko-kr/sql/t-sql/database-console-commands/dbcc-transact-sql?view=sql-server-2017

블로그 이미지

사용자 꽁담

동적 쿼리를 실행할 수 있는 방법은 EXEC 와 EXEC sp_executesql 을 사용하는 2가지 방법이 있습니다.


EXEC 방식은 동적 쿼리의 매개변수 일부만 바뀌더라도 매번 컴파일이 되지만,

sp_executesql 방식은 매개변수를 파라미터화 할 수 있기 때문에 쿼리문 자체의 변경이 없다면 캐싱된 실행계획을 재사용할 수 있습니다.


sp_executesql에 관해서는 아래 url을 참고해주세요.

https://docs.microsoft.com/ko-kr/sql/relational-databases/system-stored-procedures/sp-executesql-transact-sql?view=sql-server-2017



테스트를 진행해봅니다.


1. 테스트에 사용될 테이블을 생성합니다.

CREATE TABLE dbo.A

(

PK_COL  INT PRIMARY KEY

  , COL1 INT

  , COL2 INT

);



CREATE TABLE dbo.B

(

PK_COL INT PRIMARY KEY

  , COL1 INT

  , COL2 INT

); 


2. 같은 쿼리에 대해 EXEC 방식과 sp_executesql 방식을 사용해서 테스트를 진행합니다.

DECLARE @SQL NVARCHAR(MAX);

SET @SQL =

N'SELECT A.COL1, A.COL2

, B.COL1, B.COL2

  FROM dbo.A A

  JOIN dbo.B B

ON B.PK_COL = A.PK_COL

WHERE A.COL1 = @VAL;';


DECLARE @PARAM_DEF NVARCHAR(MAX);

SET @PARAM_DEF = N'@VAL INT';


DECLARE @I INT;

SET @I = 1;

WHILE (@I <= 5) 

BEGIN

    EXEC sp_executesql @SQL, @PARAM_DEF, @VAL = @I;

DECLARE @PARAM NVARCHAR(MAX);

SET @PARAM = CAST(@I AS NVARCHAR(MAX));

EXEC (N'SELECT A.COL1, A.COL2

, B.COL1, B.COL2

  FROM dbo.A A

  JOIN dbo.B B

ON B.PK_COL = A.PK_COL

WHERE A.COL1 = ' + @PARAM + N';');

 

SET @I = @I + 1;

END 


3. EXEC와 sp_executesql의 플랜 실행 횟수를 비교합니다.

 SELECT cp.objtype, st.text, cp.usecounts

   FROM sys.dm_exec_cached_plans cp

   CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle) st

 WHERE text LIKE '%dbo.A%' AND text LIKE '%dbo.B%';




결론

EXEC 방식은 Adhoc, sp_executesql 방식은 Prepared으로 objtype에 등록되었습니다.

EXEC방식은 모든 매개변수에 대해 count가 1. 즉, 실행계획을 재사용하지 못한 반면,

sp_executesql방식은 모든 매개변수에 대해 실행계획을 재사용 하는 것을 확인할 수 있습니다.

블로그 이미지

사용자 꽁담

특정 정보를 처리하는 현재 세션을 변경할 수 있는 SET 문에 대해서 알아봅니다.

설명에서 문장 앞의 SET은 생략되어 있습니다.



날짜 및 시간문

 문장

 설명

 DATEFIRST

 일주일의 시작 요일을 1부터 7까지의 숫자로 설정

 옵션: 1 ~ 7  (1: 월요일 .. 7: 일요일)


 예) SET DATEFIRST 1  -- 월요일로 설정

 DATEFORMAT

 문자열 해석을 위한 월,일 및 연도 날짜 부분의 순서를 지정

 옵션: dmy, dym, mdy, myd, ymd, ydm


 예) SET DATEFORMAT dmy -- {day/month/year}



잠금문

 문장

 설명

 DEADLOCK_PRIORITY

 현재 세션이 다른 세션과 교착 상태에 있는 경우 현재 세션이 계속 실행되도록 하는 상대적 중요도를 지정


 옵션: LOW(-5), NORMAL(0), HIGH(5), -10 ~ 10


 예) SET DEADLOCK_PRIORITY LOW

 LOCK_TIMEOUT

 잠금이 해체될 때까지 문장이 기다려야 할 밀리초 시간을 지정

 옵션: -1(무기한 대기), 0(기다리지 않음)


 예) SET LOCK_TIMEOUT 1000



기타문

 문장

 설명

 CONCAT_NULL_YIELDS_NULL

 연결된 결과를 NULL값으로 다룰 것인지 또는 빈 문자열 값으로 다룰 것인지를 제어

 옵션: ON, OFF


 예) SET CONCAT_NULL_YIELDS_NULL ON   -- 'abc' + NULL = NULL

 CURSOR_CLOSE_ON_COMMIT

 트랜잭션을 커밋할 때 서버가 커서를 닫지 않음

 옵션: ON, OFF


 예) SET CURSOR_CLOSE_ON_COMMIT ON

 FIPS_FLAGGER

 FIPS 127-2 표준 준수를 확인하도록 지정

 옵션: ENTRY, FULL, INTERMEDIATE, OFF


 예) SET FIPS_FLAGGER ENTRY

 IDENTITY_INSERT

 명시적 값을 테이블의 Identity 컬럼열에 삽입할 수 있도록 변경

 옵션: ON, OFF


 예) SET IDENTITY_INSERT database_name.schema_name.table_name ON

 LANGUAGE

 언어 환경을 지정

 옵션: sys.syslanguages에 지정된 언어의 이름


 예) SET LANGUAGE N'language'

 OFFSETS

 지정한 키워드의 오프셋을 반환

 옵션: ON, OFF


 예) SET OFFSETS keyword_list ON

 QUOTED_IDENTIFIER

 인용 부호 구분 식별자 및 리터럴 문자열에 관해 ISO 규칙을 따르도록 지정

 옵션: ON, OFF


 예) SET QUOTED_IDENTIFIER ON



쿼리실행문

 문장

 설명

 ARITHABORT

 오버플로우 또는 0으로 나누기 오류가 발생하면 쿼리를 종료

 옵션: ON, OFF


 예) SET ARITHABORT ON

 ARITHIGNORE

 오버플로우 또는 0으로 나누기 오류에서 오류 메시지를 반환할지 여부

 옵션: ON, OFF


 예) SET ARITHIGNORE ON

 FMTONLY

 클라이언트에 메타 데이터만 반환

  - 이 기능은 더이상 지원하지 않음

 NOCOUNT

 T-SQL 또는 SP로 인해 영향을 받은 행 수를 나타내는 메시지가 결과 집합의 일부로 반환되지 않도록 함

 이 옵션이 ON으로 설정되어 있더라도 @@ROWCOUNT 함수는 업데이트됨

 ON으로 설정 시 네트워크 트래픽이 크게 줄어 성능이 눈에 띄게 향상

 옵션: ON, OFF


 예) SET NOCOUNT ON

 NOEXEC

 각 쿼리를 컴파일하지만 실행하지는 않음

 옵션: ON, OFF


 예) SET NOEXEC ON

 NUMERIC_ROUNDABORT

 식의 반올림에서 정밀도가 손실될 경우 생성되는 오류 보고의 수준을 지정

 위의 ARITHABORT, ARITHIGNORE와 연관있으며 아래 경로를 참고

 https://docs.microsoft.com/ko-kr/sql/t-sql/statements/set-numeric-roundabort-transact-sql?view=sql-server-2017

 옵션: ON, OFF


 예) SET NUMERIC_ROUNDABORT

 PARSEONLY

 T-SQL문의 구문을 검사한 후 컴파일하거나 실행하지 않고 오류 메시지를 반환

 옵션: ON, OFF


 예) SET PARSEONLY ON

 QUERY_GOVERNOR_COST_LIMIT

 쿼리가 실행될 수 있는 가장 긴 시간을 지정

 쿼리 관리자는 예상 비용이 해당 값을 초과하는 쿼리의 실행을 허용하지 않음

 옵션: 0(무기한 실행)


 예) SET QUERY_GOVERNOR_COST_LIMIT 10

 ROWCOUNT

 지정된 행 수가 반환된 후 쿼리 처리가 중지

 옵션: 0(모든 행이 반환)


 예) SET ROWCOUNT 10

 TEXTSIZE SELECT문에서 반환된 varchar(max), varbinary(max), text, image 데이터의 크기를 지정
 옵션: -1(무제한), 0(기본값4KB), 2147483647(2GB)

 예) SET TEXTSIZE 0



ISO 설정문

 문장

 설명

 ANSI_DEFAULTS

 ISO표준 동작을 전체적으로 지정하는 SQL Server설정 그룹을 제어

 OFF로 설정된 경우 아래 옵션을 사용할 수 없음

 옵션: ON, OFF


 예) SET ANSI_DEFAULTS OFF

 ANSI_NULL_DFLT_OFF

 새 열의 기본 NULL 허용 여부를 설정

 ON인 경우 ALTER TABLE이나 CREATE TABLE문을 사용해 만든 새 열의 기본값을 NOT NULL로 설정

 옵션: ON, OFF


 예) SET ANSI_NULL_DFLT_OFF ON

 ANSI_NULL_DFLT_ON

 새 열의 기본 NULL 허용 여부를 설정

 OFF인 경우 ALTER TABLE이나 CREATE TABLE문을 사용해 만든 새 열의 기본값을 NOT NULL로 설정

 옵션: ON, OFF


 예) SET ANSI_NULL_DFLT_ON OFF

 ANSI_NULLS

 NULL값과 함께 사용될 경우 = 와 <> 비교 연산자의 ISO 호환 동작을 지정

 옵션: ON, OFF


 예) SET ANSI_NULLS ON

 ANSI_PADDING

 열 크기보다 짧은 값을 저장하는 방법과 후행 공백이 있는 값을 저장하는 방법을 제어

 옵션: ON, OFF


 예) SET ANSI_PADDING ON

 ANSI_WARNINGS

 오류 상황에 대한 ISO 표준 동작을 지정

 옵션: ON, OFF


 예) SET ANSI_WARNINGS ON



통계문

 문장

 설명

 FORCEPLAN

 쿼리의 FROM절에 테이블이 나타나는 순서대로 조인을 처리

 옵션: ON, OFF


 예) SET FORCEPLAN ON

 SHOWPLAN_ALL

 문장은 실행하지 않고 실행된 방법에 대한 자세한 정보를 반환하고 해당 문에 대한 예상 리소스 요구 사항을 제공

 옵션: ON, OFF


 예) SET SHOWPLAN_ALL ON

 SHOWPLAN_TEXT

 문장은 실행되지 않고 실행 방법에 대한 자세한 정보를 텍스트 형식으로 반환

 옵션: ON, OFF


 예) SET SHOWPLAN_TEXT ON

 SHOWPLAN_XML

 문장은 실행되지 않고 실행 방법에 대한 자세한 정보를 XML 형식으로 반환

 옵션: ON, OFF


 예) SET SHOWPLAN_XML ON

 STATISTICS IO

 문에 의해 생성된 디스크 작동 크기에 대한 정보가 표시

 옵션: ON, OFF


 예) SET STATISTICS IO ON

 STATISTICS XML

 문장을 실행하고 해당 문이 실행된 방법에 대한 자세한 정보를 XML 문서 형식으로 반환

 옵션: ON, OFF


 예) SET STATISTICS XML ON

 STATISTICS PROFILE

 문장에 대한 프로필 정보를 표시

 옵션: ON, OFF


 예) SET STATISTICS PROFILE ON

 STATISTICS TIME

 각 문장을 구문 분석, 컴파일 및 실행하는데 필요한 밀리초 시간을 표시

 옵션: ON, OFF


 예) SET STATISTICS TIME ON



트랜잭션문

 문장

 설명

 IMPLICIT_TRANSACTIONS

 트랜잭션 모드를 암시적으로 설정

 옵션: ON, OFF


 예) SET IMPLICIT_TRANSACTIONS ON

 REMOTE_PROC_TRANSACTIONS

 로컬 트랜잭션이 활성 트랜잭션일 때 원격 저장 프로시저를 실행하면 MSDTC에서 관리하는 분산 트랜잭션이 시작되도록 지정

 옵션: ON, OFF


 예) SET REMOTE_PROC_TRANSACTIONS ON

 TRANSACTION ISOLATION LEVEL

 트랜잭션 잠금 및 행 버전 레벨을 제어

 옵션: READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SNAPSHOT, SERIALIZABLE


 예) SET TRANSACTION ISOLATION LEVEL READ COMMITTED

 XACT_ABORT

 런타임 오류가 발생할 경우 현재 트랜잭션을 자동 롤백할 것인지에 대한 여부 지정

 옵션: ON, OFF


 예) SET XACT_ABORT ON


블로그 이미지

사용자 꽁담

MsSQL 에서는 Cluster 이중화 방식을 지원합니다.

여기에서 모든 Cluster 노드는 하나의 디스크를 공유하는 방식으로 구성됩니다.


주 노드를 사용하고 있을 때는 보조 노드는 읽기만 가능합니다.

만약 주 노드에 장애가 발생하는 경우 보조 노드가 주 노드로 바뀌면서 읽기/쓰기가 가능해집니다.


그럼 구성해보겠습니다.

본 장비에서 VirtualBox 로 가상화 4대의 장비를 구성했습니다.

따라서 본 장비가 어느정도 스펙이 따라주어야... 합니다ㅎ


구성할 VirtualBox 4대의 정보를 먼저 표로 보여드립니다.

 구성/장비

 DC (Domain Controller)

 SQL01 (main)

 SQL02 (sub)

 SQLApp (App)

 IP

 192.168.56.101

 192.168.56.102

 192.168.56.103

 192.168.56.104

 Subnet

 255.255.255.0

 DNS

 192.168.56.1

 192.168.56.101

 Core

 4

 4

 4

 4

 Memory

 3G

 3G

 3G

 3G

 Storage

 32G

 1G (Quorum)

 10G (Data)

 5G (MSDTC)

 32G

 32G

 32G

 Network HOST + NAT HOST + NAT HOST + NAT HOST + NAT


사진이 추가되면 너무 길어져서 사진없이 글로만 설명하는 단계들이 많이 있습니다.

궁금하신 분은 댓글로 문의주시면 아는 부분에 대해 성의껏 답변드릴게요~



구성할 가상화 장비 아이피 확인


1. 본 장비에서 cmd창을 연 후에 ipconfig로 가상화 아이피를 확인합니다.

IPv4 주소가 DC 장비의 DNS 이며 192.168.56.x 로 모든 장비의 아이피들이 구성됩니다.

이는 각 사용자의 환경별로 다를 수 있습니다.



VirtualBox 가상화 장비 구성하기


1. 새로만들기를 선택합니다.

2. Name 란에 Domain Controller 를 입력합니다. (SQL01, SQL02, SQLApp을 구성할 때도 같은 방식으로 진행합니다.)

3. 메모리는 3G를 설정합니다.

4. 지금 새 가상 하드 디스크 만들기를 선택합니다.

5. VDI 를 선택합니다.

6. 고정 크기를 선택합니다.

7. 32G를 설정합니다.

8. 가상화 디스크가 생성되었습니다. 설정으로 들어갑니다.

9. 일반 - 고급을 누른 후 클립보드와 드래그 앤 드롭을 활성화 시켜줍니다.

10. 시스템 - 프로세서 - 프로세서 개수를 4로 변경합니다.

11. 네트워크 - 어댑터1에 호스트 전용 어댑터로 설정합니다. 이는 외부와 통신이 가능하게 하는 어댑터 입니다.

12. 네트워크 - 어댑터2에 NAT 설정합니다. 이는 가상화장비끼리 통신하는 어댑터 입니다.

13. 가상화 구성에서 13번 부터는 Domain Controller 설정할 때만 진행합니다. 저장소에서 디스크 추가하기를 선택합니다.

14. 새 디스크 만들기를 선택합니다.

15. 가상 하드 디스크를 선택합니다.

16. 고정크기를 선택합니다.

17. Quorum 을 입력한 뒤 1G를 설정합니다.

( Data는 10G, MSDTC는 5G를 입력합니다.) 따라서 저장소 추가를 총 3번 해야 합니다.


이와 같은 방식으로 SQL01, SQL02, SQLApp 도 만듭니다.



가상화 장비 Windows Server Standard 2016 설치


1. 4대의 가상화 장비에 Windows Server Standard 2016을 설치합니다.

 설치경험이 없으신 분들은 https://mozi.tistory.com/264 를 참고해주세요.

 설치 후 한글팩 설치 방법은 https://mozi.tistory.com/265 를 참고해주세요.



가상화 장비 컴퓨터 명 설정


1. 가상화 장비 컴퓨터 명을 설정합니다.

-> 내PC 우클릭 - 속성으로 들어갑니다.

-> 컴퓨터 이름, 도메인 및 작업 그룹 설정에서 설정 변경을 선택합니다.

-> 컴퓨터 이름에서 변경을 선택합니다.

-> 컴퓨터 이름에 장비역할에 맞게 DC, SQL01, SQL02, SQLApp 을 입력합니다.



DC 장비 도메인 컨트롤러 구성


1. NAT 네트워크 어댑터의 IP를 설정합니다.


2. 도메인 서비스 역할을 추가합니다.

 -> 서버 관리자를 실행합니다.

 -> 대시보드 - 이 로컬 서버 구성 - 역할 및 기능 추가를 선택합니다.

 -> 서버 역할에서 Active Directory 도메인 서비스와 DNS 서버에 체크합니다. (관리 도구 포함(해당되는 경우) 체크합니다.)

 -> 기능에서 장애 조치(Failover) 클러스터링에 체크합니다. (관리 도구 포함(해당되는 경우) 체크합니다.)

 -> 다시 시작하지 않음으로 두고 진행 및 설치를 완료합니다.


3. 도메인 컨트롤러로 승격합니다.

 -> 플래그 - 이 서버를 도메인 컨트롤러로 승격을 클릭합니다.

 -> 새 포리스트를 추가 - 루트 도메인에 mscs.com 을 입력합니다.

 -> 배포 구성이 완료되면 암호를 입력 후 재부팅합니다.

 -> 경고가 나오나 무시하고 진행/완료 및 재부팅을 합니다.

 -> mscs.com 도메인으로 로그인합니다.


4. 도메인 방화벽을 해제합니다.



SQL01, SQL02, SQLApp 도메인 가입


1. 위의 표를 참조하여 NAT 어댑터의 IPv4네트워크에 주소값을 설정합니다.

2. 각 장비에서 DC장비의 도메인에 가입합니다.

 -> 내PC 우클릭 - 속성으로 들어갑니다.

 -> 컴퓨터 이름, 도메인 및 작업 그룹 설정에서 설정 변경을 선택합니다.

 -> 컴퓨터 이름에서 변경을 선택합니다.

 -> 소속그룹 - 도메인에 mscs.com을 입력합니다.

 -> DC장비에서 구성 시 등록한 암호를 입력합니다.

 -> 컴퓨터를 재부팅한 뒤 mscs 도메인으로 로그인 합니다.

3. SQL Server패키지, SSMS 등을 서버로 전송합니다.

4. HOST 아이피를 비활성화 합니다. (장애 클러스터 유효성 검사시 활성화 되어있으면 네트워크 충돌로 실패됩니다.)

5. DC 도메인 컨트롤 구성시 진행했던 장애 조치 클러스터 기능만을 활성화 합니다.

6. 도메인 방화벽을 해제합니다.



DC 장비 AVAILABILITY DIRECTORY (AD) 구성


1. 디스크 관리에서 추가한 3개의 가상 하드디스크를 마운트합니다.

 -> 각각의 디스크에 대해서 단순 볼륨을 생성합니다.

 -> E: (Quorum), F: (Data), G: (MSDTC)


2. Quorum용 iSCSI 가상 디스크를 등록합니다.

 -> 서버 관리자 - 파일 및 저장소 서비스 - iSCSI 로 들어갑니다.

 -> 'iSCSI 대상 서버를 설치하려면 역할 및 기능 추가 마법사를 시작합니다' 를 클릭합니다.

 -> 우측 상단의 작업 - 새 iSCSI 가상 디스크 선택을 클릭합니다.

 -> iSCSI 가상 디스크 위치에서 E:를 선택 후 다음으로 넘어갑니다.

 -> iSCSI 가상 디스크 이름에서 이름란에 QuorumDisk 를 입력합니다.

 -> iSCSI 가상 디스크 크기에서 크기에 700 입력 후 고정크기를 선택합니다.

 -> iSCSI 대상에서 '새 iSCSI 대상'을 선택합니다.

 -> 대상 이름 및 액세스에서 원하는 이름 입력을 mscs로 입력합니다.

 -> 액세스 서버에서 추가 - 찾아보기 - 고급 - 지금찾기 - SQL01을 추가합니다. (SQL02도 동일한 방식으로 추가합니다.)

 -> 디스크를 생성합니다.


3. Data용 iSCSI 가상 디스크를 2번을 참조하여 등록합니다.

 -> iSCSI 가상 디스크 위치에서 F:를 선택 후 다음으로 넘어갑니다.

 -> iSCSI 가상 디스크 위치에서 DataDisk 를 입력합니다.

 -> iSCSI 가상 디스크 크기에서 크기에 8 입력 후 고정크기를 선택합니다.

 -> iSCSI 대상에서 '기존 iSCSI 대상'을 선택합니다. 이후 작업은 필요치 않습니다.


4. MSDTC용 iSCSI 가상 디스크를 2번을 참조하여 등록합니다.

 -> iSCSI 가상 디스크 위치에서 G:를 선택 후 다음으로 넘어갑니다.

 -> iSCSI 가상 디스크 위치에서 MSDTCDisk 를 입력합니다.

 -> iSCSI 가상 디스크 크기에서 크기에 4 입력 후 고정크기를 선택합니다.

 -> iSCSI 대상에서 '기존 iSCSI 대상'을 선택합니다. 이후 작업은 필요치 않습니다.



SQL01, SQL02 장비에서 iSCSI 디스크 등록


SQL01 장비에서 먼저 진행합니다.

1. iSCSI 초기자 속성을 설정합니다.

 -> 서버 관리자 - 도구 - iSCSI 초기자를 선택합니다.

 -> 검색 - 포털 검색 - IP 주소 또는 DNS 이름에 DC 장비의 IP를 입력합니다.

 -> 대상 - 연결 - 확인을 선택하여 해당 target의 상태가 연결됨으로 변경되는 것을 확인합니다.

2. 디스크 관리에서 해당 디스크를 등록합니다. (SQL02는 이미 마운트 되어있고 오프라인 상태라면 진행하지 않아도 됩니다.)

 -> 디스크 관리를 실행합니다.

 -> 오프라인 된 디스크를 온라인으로 변경합니다.

 -> 세 개의 디스크 초기화를 진행합니다.

 -> 세 개의 디스크 단순 볼륨으로 마운트를 진행합니다.

 -> 세 개의 디스크를 오프라인으로 변경합니다.



DC 장비에서 SQL01, SQL02 장애 클러스터 등록


1. 장애 조치 클러스터에서 SQL01, SQL02에 구성 유효성 검사를 진행합니다.

 -> 서버 관리자 - 도구 - 장애 조치 클러스터 관리자를 선택합니다.

 -> 구성의 유효성을 검사를 선택합니다.

 -> 서버 또는 클러스터 선택 - 찾아보기 - 고급 - 지금 찾기에서 SQL01, SQL02를 선택합니다.

 -> 테스트 옵션에서 모든 테스트 실행(권장)을 선택합니다.

 -> 유효성 검사가 정상적으로 통과되면 마법사를 종료합니다. 이 때 검사된 노드를 사용하여 클러스터 만들기 체크를 비활성합니다.


2. 장애 조치 클러스터에서 SQL01, SQL02에 대해 클러스터를 구성합니다.

 -> 서버 관리자 - 도구 - 장애 조치 클러스터 관리자를 선택합니다.

 -> 클러스터 만들기를 선택합니다.

 -> 서버 선택에서 찾아보기 - 고급 - 지금찾기 - SQL01, SQL02를 추가합니다.

 -> 클러스터 관리 액세스 지점에서 클러스터 이름을 mscsn 으로 입력합니다.

 -> 클러스터 관리 액세스 지점에서 주소를 192.168.56.105 로 입력합니다.

 -> 확인에서 '클러스터에 사용할 수 있는 모든 저장소를 추가하세요' 선택 해제합니다.

 -> 마법사를 종료하면 SQL01, SQL02가 노드로 묶여있는 것을 확인할 수 있습니다.



SQL01, SQL02 장비에서 DC 장비의 AD 공유 디스크 추가


1. SQL01에서 공유 디스크를 추가합니다.

 -> 서버 관리자 - 도구 - 장애 조치 클러스터 관리자를 선택합니다.

 -> mscsn.mscs.com - 저장소 - 디스크를 선택합니다.

 -> 디스크 추가 선택 - 모두 선택 후 확인을 선택합니다.

2. SQL02에서 저장소 - 디스크로 들어가면 자동으로 추가되어 있는 것을 확인할 수 있습니다.

3. SQL01에서 Quorum 디스크를 설정합니다.

 -> mscsn.mscs.com 우클릭 - 추가작업 - 클러스터 쿼럼 설정 구성을 선택합니다.

 -> 쿼럼 구성 옵션에서 고급 쿼럼 구성을 선택합니다.

 -> 응답 구성 선택에서 모든 노드를 선택합니다.

 -> 쿼럼 감시 선택에서 디스크 감시 구성을 선택합니다.

 -> 저장소 감시 구성에서 쿼럼용으로 생성한 디스크를 선택합니다.

 -> 마법사를 종료합니다.



SQL01, SQL02에서 장애조치 클러스터 설치


1. SQL01에서 SQL Server를 설치합니다.

 -> SQL Server 설치 응용프로그램을 실행합니다.

 -> 설치 - SQL Server 장애 조치(Failover) 클러스터 새로 설치를 선택합니다.

 -> 장애 조치 클러스터 설치 규칙에서 오류가 있으면 안됩니다.

 -> 기능 선택에서 데이터베이스 엔진 서비스를 체크합니다.

 -> 인스턴스 구성에서 SQL Server 네트워크 이름에 mscsnt를 입력합니다.

 -> 클러스터 디스크 선택에서는 DataDisk(명칭이 다르게 표시될 수 있으나 DataDisk를 선택해야함)를 선택합니다.

 -> 클러스터 네트워크 구성에서 IP주소를 입력합니다.

-> 서버 구성에서 서비스 계정 - 에이전트/엔진은 공통 계정으로 등록합니다.

 -> 데이터베이스 엔진 구성에서 서버 구성 - 혼합 모드 선택 암호 설정 후 현재 사용자 추가를 선택합니다.

 -> 설치를 완료합니다.


2. SQL02에서는 SQL01에서 설치한 장애조치 클러스터에 노드를 추가합니다.

 -> SQL Server 설치 응용프로그램을 실행합니다.

 -> 설치 - SQL Server 장애 조치 클러스터에 노드 추가를 선택합니다.

 -> 노드 추가 규칙에서 오류가 있다면 해결 후 진행을 선택합니다.

 -> 클러스터 노드 구성에서 SQL01에서 설정한 인스턴스를 선택합니다. (기본으로 잡혀있습니다.)

 -> 클러스터 네트워크 구성에서 SQL01에서 설정한 IP를 선택합니다. (DHCP 체크해제 합니다.)

 -> 서비스 계정에서 에이전트/엔진의 암호를 입력합니다.

 -> 설치 및 노드 추가를 완료합니다.



SQLApp에서 클러스터 IP로 접속


1. SSMS를 실행합니다.

2. SQL01 클러스터 설치 시 입력한 SQL Server네트워크 이름 mscsnt를 서비스 이름에 입력합니다.

3. 연결된 것을 확인합니다.

4. 현재 어느 노드를 사용하는지는 DC장비에서 디스크의 소유자 노드를 확인하여 알 수 있습니다.

5. SQL01 노드가 정상인 경우 SQL02는 읽기작업만 가능합니다.

6. SQL01 노드가 비정상으로 종료한다면 소유자 노드가 SQL02로 바뀌고 SQL02는 읽기/쓰기 작업이 가능합니다.

블로그 이미지

사용자 꽁담

MsSQL 테스트를 위해서 도메인 생성및 클러스터 노드 추가까지 완료한 후 AG 구성 도중 발생한 오류입니다.

참고로 이번 포스팅은 AG 구성 방법 및 사용 단어에 대해 미리 알고있어야 합니다. 추후 자세하게 포스팅할 계획입니다.


해당 인스턴스 - 관리 - SQL Server 로그 - 현재 로그를 확인해보니 아래와 같은 오류가 발생했습니다.

database mirroring login attempt by user, the login does not have connect permission on the endpoint. state 84


해결하는 방법은 다음과 같습니다.

1. 해당 데이터베이스에서 쿼리 창을 생성합니다.

2. 끝점의 이름을 확인합니다.

 SELECT * FROM sys.tcp_endpoints


3. 오류가 발생한 로그인을 추가한 뒤, 필요한 권한을 부여합니다.

 CREATE LOGIN [SQL02\Administrator] FROM WINDOWS

 GO

 GRANT CONNECT ON ENDPOINT::dbm_endpoint TO [SQL02\Administrator]

 GO


4. 다시 로그를 확인하면 정상적으로 진행되는 것을 확인할 수 있습니다.


블로그 이미지

사용자 꽁담

MsSQL 에서는 로그 전달이라고 하는 이중화 방식도 지원하고 있습니다.

현재 서비스 하는 서버(주 서버)와 같은 서버(보조 서버)를 구성한 후 주 서버의 데이터베이스를 보조 서버에 복사해 놓습니다.

그러고 주 서버의 데이터베이스에 트랜잭션이 발생하면 보조 서버에도 전달되게끔 설정하는 방식입니다.


로그 전달 순서는 다음과 같습니다.

1. 사용자가 주 서버에서 트랜잭션을 발생시키면 원본 DB의 젖아된 내용이 변경

2. 변경된 후 트랜잭션 로그의 백업 파일(*.TRN)이 주 서버의 지정된 폴더에 일정한 주기마다 백업

3. 백업된 로그 파일이 보조 서버의 지정된 폴더에 전달

4. 보조 서버의 지정된 폴더에 복사된 로그 파일(*.TRN)을 일정한 주기마다 보조 DB에 복원


* 주 서버(SQLTEST01)

* 보조 서버(SQLTEST02)



초기 환경 설정


1. 주 서버와 보조 서버의 SQL Server 에이전트를 실행합니다.


2. 서버에 TCP/IP 를 사용으로 변경합니다. 이 때는 SQL Server 가 재구동이 필요합니다.


3. 주 서버와 보조 서버에서 사용할 폴더를 생성합니다. 해당 폴더는 공유로 지정되어야 합니다.

폴더 우클릭 - 속성 - 공유 - 공유 - Everyone 추가 - 읽기/쓰기 권한 부여합니다.



주 서버 설정


4. 주 서버에 테스트에 사용될 데이터베이스와 테이블을 생성한 뒤 데이터를 적재합니다.


5. 주 서버 우클릭 - 태스크 - 트랜잭션 로그 전달을 선택합니다.


6. 이 데이터베이스를 로그 전달 구성의 주 데이터베이스로 사용에 체크한 뒤 백업 설정으로 들어갑니다.


7. 백업 폴더의 네트워크 경로를 지정합니다. 작성법은 \\컴퓨터이름\경로 입니다.

경로와 폴더 경로를 입력한 뒤 일정을 선택합니다.


8. 1분 단위 간격으로 변경합니다. 이는 짧으면 짧을 수록 부하는 증가하나 유실되는 트랜잭션은 적기 때문에 신뢰성이 높아집니다.


9. 추가를 선택합니다.


10. 보조 서버(SQLTEST02)를 선택합니다. 이 후 보조 데이터베이스 명을 입력합니다.


11. 파일 복사를 선택 후, 보조 서버를 위해 생성한 폴더를 입력합니다.

일정을 선택 후 마찬가지로 1분단위로 변경합니다.


12. 트랜잭션 로그 복원을 선택후 일정을 클릭, 1분 단위로 변경합니다.


13. 확인을 눌러 로그 전달 구성을 완료합니다.


14. 구성이 완료되면 닫기로 종료합니다.


15. 주 서버와 보조 서버에 복원에 필요한 파일이 생성됩니다.



이렇게 까지 진행하면 주 서버와 보조 서버는 이중화 관계가 구축됩니다.

단, 주 서버가 정상인 경우 보조 서버는 사용할 수 없습니다.

따라서, 주 서버가 비정상 적인 상황을 만들어 낸 후 보조 서버를 복구하여 테스트를 진행합니다.


16. 주 서버에 트랜잭션 발생 후 몇 분정도 있다가 오프라인 상태로 변경합니다.

INSERT INTO platTeam VALUES('')

INSERT INTO platTeam VALUES('')

GO


-- 3분 대기


USE tempdb

GO

ALTER DATABASE ShipSampleDB SET OFFLINE

GO


17. 보조 서버에서 복구하여 데이터베이스를 사용합니다.

USE tempdb

GO

RESTORE DATABASE ShipSampleDB WITH RECOVERY

GO


블로그 이미지

사용자 꽁담

이전 포스팅에서 진행하는 Replication 이중화 방식에서

이중화가 되지 않는 문제가 발생하였습니다. (복제 이중화 https://mozi.tistory.com/270)


오류 메시지는 'NT SERVICE\SQLAgent$SQLTEST02'이(가) 로그인하지 못했습니다. 이며 해결방법입니다.


1. 게시 서버에서 게시 - 복제 모니터 시작을 선택합니다.


2. 게시 - 에이전트 를 클릭하면 마지막 동작에 "'NT SERVICE\SQLAgent$SQLTEST02'이(가) 로그인하지 못했습니다." 라는 오류가 발생하고 동기화가 진행되지 않습니다.


3. 위의 오류를 더블클릭하면 좀 더 상세한 오류 내용을 확인할 수 있습니다.


이유와 아래에서 해결방법을 작성해보겠습니다.

게시자 (SQLTEST01) 서버는 로그인 목록에 'NT SERVICE\SQLAgent$SQLTEST02' 계정이 없습니다.

반면 배포자에서는 SQL Server 에이전트가 해당 계정으로 SQLTEST01 에 접속하려고 하고 있습니다.

4. SQL Server Configuration Manager 에 접속합니다.

배포자 서버의 SQL Server 에이전트의 속성을 선택합니다.


5. 찾아보기를 선택합니다.


6. 고급을 선택합니다.


7. 지금 찾기를 누른 후 모든 계정이 공유하는 사용자로 설정합니다.


8. 관리자 계정이 선택되었습니다.


9. 계정의 암호를 입력한 뒤에 확인을 누릅니다.


10. SQL Server 에이전트를 재 구동 합니다.


11. 계정이 Administrator 로 변경되었습니다.


12. 위 계정은 게시자 서버(SQLTEST01) 에서도 접근 가능한 계정이기 때문에 로그인 하지 못했다는 에러가 사라졌습니다.



그래서 다른 장비에서 이중화를 구성시에는, 같은 계정에 같은 암호를 설정한다고 합니다.


블로그 이미지

사용자 꽁담