[Info]Tags categorized posts and contents patterns..

[AJAX] Ajax Code E xamples.. [Book] About the book.. [CSS] CSS Code E xamples.. [DB] Sql Code E xamples.. [DEV] All development stor...

레이블이 MS-SQL Server 2005인 게시물을 표시합니다. 모든 게시물 표시
레이블이 MS-SQL Server 2005인 게시물을 표시합니다. 모든 게시물 표시

2016년 2월 16일 화요일

[DB]MS-SQL Server 인스턴스(Instance) 사용시 원격 접속하기..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

이거 해결하느라고 원래 할려고 했던 일도 거의 못하고 죽는 줄 알았다.

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이 아니라면 명시적으로 포트번호를 적어주어야 한다.

역시 셋팅은 너무 머리아퍼.. ㅡ..ㅡ

[DB]MS SQL Server 2005에서 웹에서 DB접속 되지 않을 때..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

MS SQL Server 2005를 처음 사용해 보았다. 그 이전까지는 MS SQL Server 2000만 쓰다가 회사에서 윈도우를 밀면서 2005로 깔았더니 영~ 적응이 안되고 있는 상태이다. 그냥 비슷하게 될줄 알았는데 이게 왠걸... 내부 디비부분정도가 바뀌었을줄 알았더니 형태가 완전 다르다. EM[엔터프라이즈 매니저]이 없을 때의 그 당혹감이란.... 차차 적응 되겠지만....

계속 쓰던 소스고 틀린데가 없는데 웹페이지 만들어서 DB에 붙으려고 하니까 붙어지지가 않았다. 이건 MS SQL Server 2005가 MS SQL Server 2000과는 설정이 달라서 그런 문제인데 디폴트 상태로는 TCP/IP가 막혀있어서 접속이 되지 않는다.

SQL Server Configuration Manager

[MS SQL Server 2005] - [구성도구] - [SQL Server Configuration Manager]에 들어간다.

사용자 삽입 이미지

MS SQL Server 2005 네트워크 구성에서 원하는 서버를 선택해야 한다. 화면에선 SQLServer를 사용했지만 SQLExpress를 사용한다면 당연히 그에 대한 프로토콜을 설정해 주어야 한다.

기본으로는 TCP/IP가 아니요로 되어 있는데 이것을 예로 바꾸어 준다. 물론 지정된 포트인 1433을 사용하지 않는다면 그에 대한 부분도 Native Client 구성에서 맞추어 주어야 한다.


역시 환경이 바뀌면 여러가지로 피곤해 지는군.....