MS-SQL에서 인스턴스를 사용하면(셋팅되어 있는 MS-SQL 서버였기 때문에 인스턴스 사용에 대한 부분은 잘 모르겠다. 여기선 접속만...) MS-SQL서버의 주소에 인스턴스 명이 붙는다. 즉,
ServerDomain\InstanceName
같은 형식이 된다. ServerDomain같은 경우 도메인이 될 수도 있고 아이피가 될수도 있다. 인스턴스 이름은 정해준 이름으로 나오고.... 완벽히 파악은 못했지만 같은 네트워크 안에서는 이 주소만으로도 EM(Enterprise Manager)나 프로그램상의 코드로 붙을 수 있는데 네트워크 밖으로 나가면 그렇게 되지 않는다. 아마 네트워크내에서는 바로 연결이 가능하지만 외부망에서는 TCP/IP 접속상에 약간 다른 부분이 있는 듯 하다. (2000에서도 그런지는 잘 모르겠지만 2005서버에서는 TCP/IP로 붙을 수 있게 열어도 주어야 하고 원격허용여부도 설정해 주어야 원격접속자체가 가능하다.)
내부에서 잘 사용하고 있던 것을 네트워크밖으로 나가니까 접속을 할 수가 없었다. 네트워크나 서버 이것저것 다 살표보았지만 전혀 되지 않았는데 원격데스크탑등은 접속이 가능했기 때문에 서버위치까지는 찾아가는데 SQL Server에 접속을 하지 못하는 것으로 보였다.
그러다가 이게 인스턴스를 사용해서 주소가 단순 도메인이 아니라 도메인\인스턴스 형식이 되어서 비롯된 문제라는 것을 알게 되었다. 내가 겪은 환경에서는 인스턴스가 한개뿐이지만 인스턴스는 여러개를 만든다는 것이 전제되기 때문에 인스턴스마다 다른 포트가 할당된다. 그래서 접속을 할때 명시적으로 해당 인스턴스의 포트를 지정해 주어야 접속이 가능한 것으로 보인다.(왜 이름으로는 못찾는거야.. ㅡ..ㅡ)
커넥션 스트링의 정확한 규칙은 아래와 같다.
<servername>[\<instancename>],<port>
<ipaddress>[\<instancename>],<port>
ex) 123.123.123.123\mydb,1036
위의 2가지 형태이다. 위에서 []안에 있는 인스턴스이름은 생략가능하다는 표시이다. 주소뒤에 포트번호를 콤마(,)로 이어붙혀준다. 내 경우에는 1036이었다. 항상 느끼는 거지만 역시 뭔거 어려운 문제다 싶으면 해외사이트들을 검색해야 한다. 내가 참고한 블로그
서버포트를 확인하려면...
[Microsoft SQL Server]안에 들어가면 "서버 네트워크 유틸리티"와 "클라이언트 네트워크 유틸리티"라는 것이 있다. 서버 네트워크 유틸리티는 PC에 대한 서버에 대한 설정이고 클라이언트 네트워크 유틸리티는 지금 PC에서 다른 서버로 접속을 시도할 때의 설정에 관한 부분이다.
서버 네트워크 유틸리티에 들어가 보자.
(여기서 원격접속 자체가 가능하려면 명명된 파이프와 TCP/IP가 사용할 수 있는 프로토콜 측에 있어야 한다.)
TCP/IP를 선택하고 속성을 보면
해당 인스턴스의 포트번호가 나온다.
1433은 MS-SQL의 기본포트이기 때문에 달리 설정을 해주지 않으면 1433으로 접속을 시도한다. 즉 커넥션스트링을 적어줄 때 포트번호를 명시적으로 적어주지 않으면 1433으로 접속을 시도한다는 얘기이다. 그래서 MS-SQL의 인스턴스의 포트가 1433이 아니라면 명시적으로 포트번호를 적어주어야 한다.
역시 셋팅은 너무 머리아퍼.. ㅡ..ㅡ
Comments