MS SQL을
사용하다보면
로그인과
사용자가
분리되는
일들이
있다.
(특히
복원시에
이런
문제가
자주
발생한다.)
아래는
로그인과
단절된 User를
찾는
프로시져이다.
USE
master
GO
CREATE
DATABASE
test
GO
-- Login 생성
CREATE
LOGIN
[sql_User]
WITH
PASSWORD=N'test123'
GO
USE
[test]
GO
-- User 생성
CREATE
USER
[sql_User]
FOR
LOGIN
[sql_User]
WITH
DEFAULT_SCHEMA=[dbo]
GO
DROP
LOGIN
[sql_User]
GO
-- 단절된
User 찾기
EXEC
sp_change_users_login
@Action='Report'
GO

VM Ware 만 사용하다 이번에 Hyper-V를 사용하기로 결정 했다.
VM ware를 NAT 설정이 정말 쉽다.
하지만 이놈의 Hyper-V는 어렵다. :-(
구성안의 내용은 모든 가상 서버는 인터넷에 접속되어야 하고 노트북과 Hyper-V 서버(host)에 접속되어야 한다.
(물론 들어 오는 포트에 대해서는 설정 했을 경우에만 가능)
첫번째로 구성해야 할 것이
Hyper-V의 가상 네트워크 관리자이다.
가상 네트워크 관리자에서 만들 수 있는 네트워크는 3종류(외부,내부,개인)가 있는데 자세한 사항은 도움말을…
우선 외부를 만든다.
두번째로 가상서버에서 사용할 내부를 만든다.(2개 이상을 만들자)
그 후 네트워크 연결을 보면 추가한 외부, 내부(2개 이상)이 보일 것이다.
내부로 되어 있는 네트워크 2개 이상을 선택한 후 팝업메뉴의 브리지 생성을 클릭하면
아래와 같은 브리지가 생성된다.

그리고 상태에 브리지됨으로 표시가 된다.
가상의 허브를 만들어 주는 것이라고 생각하면 된다.
그 다음 물리적 네트워크 연결의 속성의 공유탭의 '다른 네트워크 사용자가 이 컴퓨터의 인터넷 연결을 통해 연결 할 수 있도록 허용'을 체크하고 '네트워크 브리지' 를 선택한다.

그리고 외부의 속성에서 공유탭의 '다른 네트워크 사용자가 이 컴퓨터의 인터넷 연결을 통해 연결 할 수 있도록 허용'을 체크한다.
이렇게 하면 구성은 완료 된다.
브리지의 속성을 보면

브리지의 포함될 네트워크들이 표시된다. 추가되는 가상서버의 '내부 가상네트워크'를 생성해서 추가해 주면 된다.

브리지의 IP 설정 값(자동으로 192.168.137.1이 설정된다.)
가상서버는 내부 가상네트워크를 하나씩 할당해 주면 192.168.137.x 의 C클래스가 할당된다.
MS SQL에서 테이블의 컬럼 중 char, varchar, text, nchar, nvarchar 및 ntext은 collation을 설정 할 수 있다.
MSDN의 설명을 보면
열에 대한 데이터 정렬을 지정합니다. 데이터 정렬 이름은 Windows 데이터 정렬 이름이나 SQL 데이터 정렬 이름이 될 수 있습니다.
이렇게 정의 되어 있습니다. 말 그대로 데이터를 정렬할 때 기준을 설정해 주는 것입니다.
그런데 문제는 이것이 설정상 변경 될 수 있는 것입니다.
CREATE TABLE tt_1
(
id INT
, name VARCHAR(10) COLLATE Korean_Wansung_CI_AS
)
GO
CREATE TABLE tt_2
(
id INT
, name VARCHAR(10) COLLATE Korean_Wansung_BIN
)
SELECT *
FROM sys.columns
WHERE OBJECT_ID('tt_1') = object_id
위와 같이 임의로 선택 할 수 있습니다.
이로써 발생 할 수 있는 문제는
SELECT *
FROM tt_1 A
INNER JOIN tt_2 B
ON A.name = B.name
메시지468, 수준16, 상태9, 줄4
equal to 작업에서의"Korean_Wansung_BIN"과(와) "Korean_Wansung_CI_AS" 간의데이터정렬충돌을해결할수없습니다.
같은 에러가 납니다.
해결 방법은 두가지 입니다.
아시겠지만 컬럼의 collate 변경입니다.
ALTER TABLE tt_2
ALTER COLUMN name VARCHAR(10) COLLATE Korean_Wansung_CI_AS
두번째는 퀴리에서 collation을 변경하는 것입니다.
SELECT *
FROM tt_1 A
INNER JOIN tt_2 B
ON A.name = B.name COLLATE Korean_Wansung_CI_AS
하지만 두번째 방법을 사용하면

Compute Scalar로 변경을 하고 Join을 하네요.
분산 환경이 아닌 경우 첫 번째 경우가 좋은 선택일 것 같습니다.
오늘 이벤트 로그에 에러를 남기는 작업을 진행중 이벤트 로그를 띄우자
4201 - WMI 어쩌구~~~
나온다.
이론.... ㅡㅡ
구글을 검색해 보니 "C:\windows\system32\logfiles\wmi\rtbackup" 의
SYSTEM 권한을 전부 주면 해결된다고하는데.
설정 결과 안된다... ㅠㅠ
재부팅하면 정상적으로 가동된다. 반드시 재부팅이 필수다.
여러대의 MS SQL을 사용하다보면 서로의 데이터를 사용해야 하는 경우가 발생합니다.
몇가지 방법이 있지만 스케쥴러에서 작업을 하는 경우 로그인을 설정 할 수 있는 연결된 서버를
대부분 사용합니다.
아래는 연결된 서버 및 계정을 사용하는 방법입니다.
EXEC master.dbo.sp_addlinkedserver
@server = N'TESTDB' -- 연결될 서버의 별칭
, @provider = N'SQLNCLI' -- PROVIDER
, @datasrc = N'192.168.0.1' -- 연결될 서버의 IP
GO
EXEC master.dbo.sp_addlinkedsrvlogin
@rmtsrvname = N'TESTDB' -- 위에서 사용한 서버의 별칭
, @useself = N'False' -- FALSE, TRUE가 있는데 사용자의 ID,PASS를 지정하는 경우 FALSE로...
, @locallogin = NULL
, @rmtuser = N'USER_ID' -- 연결될 서버의 사용자 ID
, @rmtpassword = 'USER_PASSWORD' -- 연결될 서버의 패스워드
처럼 구성되면 아래와 같이 연결된 서버가 나오게 됩니다.