2017/08/31

MSSQL DB 분리시 연결 해제/차단

여러곳에서 연결을 해서 사용중인 DB 의 분리는, 계속해서 외부나 기타 App 에서 연결을 시도하기 때문에 단일 사용자 모드로 변경해도 오류가 발생하면서 진행되지 않을수 있음.

ALTER DATABASE 대상DB SET SINGLE_USER WITH ROLLBACK IMMEDIATE
=> 다중 접속 서비스의 DB의 경우, 단일로 변경되어도 이미 그 단일 1개 연결이 즉시 되어 있어서 DB 분리 에러가 발생함

메시지 3703, 수준 16, 상태 2, 줄 1
데이터베이스 '대상DB'은(는) 현재 사용 중이므로 분리할 수 없습니다.

 

1. 방화벽을 통해서  SQL Port 를 차단하여 서버 외부 연결 방지
2. MSSQL 서비스외, SQLAgent 등 SQL 관련 다른 서비스를 모두 중지
3. 작업모니터 또는 프로세스 Kill 쿼리를 사용하여 대상 DB 연결 프로세스 모두 종료
4. DB 분리  EXEC sp_detach_db '대상DB', 'true';

 

* 주의 : Management Studio 와 같은 도구 이용시, DB목록을 열거 후  대상 DB를 선택하면 1개 연결이 되버리므로, DB 분리 쿼리문 연결 외  다른 연결이 되지 않도록 주의 필요

 


- 멀티 접속으로 변경시 ALTER DATABASE 대상DB SET MULTI_USER WITH ROLLBACK IMMEDIATE

- 아래와 같은 프로세스 kill 쿼리문과 함께 DB 분리 프로시져 쿼리문을 바로 붙여서 같이 실행

USE [master]
GO
SET NOCOUNT ON

DECLARE @DBName VARCHAR(50);
DECLARE @spidstr VARCHAR(8000);
DECLARE @ConnKilled SMALLINT

SET @ConnKilled = 0
SET @spidstr = ''
SET @DBName = '대상DB'

IF db_id(@DBName) < 4 

BEGIN 
           PRINT 'Connections to system databases cannot be killed'
           RETURN
END

SELECT @spidstr=coalesce(@spidstr,',' )+'kill '+convert(varchar, spid)+ '; '
FROM master..sysprocesses WHERE dbid=db_id(@DBName)

IF LEN(@spidstr) > 0

BEGIN
           EXEC(@spidstr)
           SELECT @ConnKilled = COUNT(1)  FROM master..sysprocesses
           WHERE dbid=db_id(@DBName)
END

 


2017/07/12

MSSQL LocalSystem 계정으로 로그온

psexec -i -s "C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\Ssms.exe"

이 방법은, NT AUTHORITY\SYSTEM 계정이 SQL 계정 목록에 포함되어 있고, 적절한 권한이 할당 되어 있는 경우에, 사용자 계정 정보 없이 LocalSystem 계정으로 Management Studio 를 이용하여 SQL 에 접근하는 방법. (주로 관리자 계정 정보를 알수 없는 경우에 활용)

psexec 가 간단하지만, 그외 LocalSystem 계정으로 실행되는 여러가지 프로세스 또는 서비스를 활용해도 가능함.

 

 

 


2017/04/28

netsh - portproxy, nat (port forwarding)

netsh interface portproxy add v4tov4 listenport=4389 listenaddress=192.168.1.111 connectport=80 connectaddress=192.168.0.33

netsh interface portproxy add v4tov4 listenport=4389 listenaddress=0.0.0.0 connectport=3389 connectaddress=192.168.100.101


netsh interface portproxy add v4tov4 listenport=4389  connectport=3389 connectaddress= 192.168.100.103 protocol=tcp


netsh interface portproxy delete v4tov4 listenport=4422 listenaddress=192.168.100.101
netsh interface portproxy show all
netsh interface portproxy reset

"IP Helper" service 


netsh routing ip nat add portmapping "LAN NAME" tcp 0.0.0.0 5118  192.168.0.3 8182

 


가장 많이 본 글