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 권한을 전부 주면 해결된다고하는데.

설정 결과 안된다... ㅠㅠ

재부팅하면 정상적으로 가동된다. 반드시 재부팅이 필수다.

  1. asd 2011.09.20 14:28

    굳이 재부팅 안하시고, 서비스 항목에 보면
    window event log 관련된 서비스가 2개 있습니다 그거 켜시면 됩니다.

여러대의 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'   -- 연결될 서버의 패스워드 

처럼 구성되면 아래와 같이 연결된 서버가 나오게 됩니다.

+ Recent posts