Outsider's Dev Story: Database/MS SQL 카테고리 글 목록https://blog.outsider.ne.kr/Stay Hungry. Stay Foolish. Don't Be Satisfied.2024-03-15T10:11:26+09:00Textcube 1.10.7 : Tempo primoMS-SQL Server 인스턴스(Instance) 사용시 원격 접속하기Outsiderhttps://blog.outsider.ne.kr/1572008-06-22T02:10:17+09:002008-06-22T02:07:59+09:00이거 해결하느라고 원래 할려고 했던 일도 거의 못하고 죽는 줄 알았다.<br /><br />MS-SQL에서 인스턴스를 사용하면(셋팅되어 있는 MS-SQL 서버였기 때문에 인스턴스 사용에 대한 부분은 잘 모르겠다. 여기선 접속만...) MS-SQL서버의 주소에 인스턴스 명이 붙는다. 즉,<br /><br />
<blockquote style="color: rgb(255, 118, 53);">ServerDomain\InstanceName</blockquote><br />같은 형식이 된다. ServerDomain같은 경우 도메인이 될 수도 있고 아이피가 될수도 있다. 인스턴스 이름은 정해준 이름으로 나오고.... 완벽히 파악은 못했지만 같은 네트워크 안에서는 이 주소만으로도 EM(Enterprise Manager)나 프로그램상의 코드로 붙을 수 있는데 네트워크 밖으로 나가면 그렇게 되지 않는다. 아마 네트워크내에서는 바로 연결이 가능하지만 외부망에서는 TCP/IP 접속상에 약간 다른 부분이 있는 듯 하다. (2000에서도 그런지는 잘 모르겠지만 2005서버에서는 TCP/IP로 붙을 수 있게 열어도 주어야 하고 원격허용여부도 설정해 주어야 원격접속자체가 가능하다.)<br /><br />내부에서 잘 사용하고 있던 것을 네트워크밖으로 나가니까 접속을 할 수가 없었다. 네트워크나 서버 이것저것 다 살표보았지만 전혀 되지 않았는데 원격데스크탑등은 접속이 가능했기 때문에 서버위치까지는 찾아가는데 SQL Server에 접속을 하지 못하는 것으로 보였다.<br /><br />그러다가 이게 인스턴스를 사용해서 주소가 단순 도메인이 아니라 도메인\인스턴스 형식이 되어서 비롯된 문제라는 것을 알게 되었다. 내가 겪은 환경에서는 인스턴스가 한개뿐이지만 <span style="color: rgb(153, 204, 102);">인스턴스는 여러개를 만든다는 것이 전제되기 때문에 인스턴스마다 다른 포트가 할당된다. 그래서 접속을 할때 명시적으로 해당 인스턴스의 포트를 지정해 주어야 접속이 가능한 것으로 보인다.</span>(왜 이름으로는 못찾는거야.. ㅡ..ㅡ) <br /><br />커넥션 스트링의 정확한 규칙은 아래와 같다.<br /><br />
<blockquote style="color: rgb(255, 118, 53); font-weight: bold;"><servername>[\<instancename>],<port><br /><ipaddress>[\<instancename>],<port><br /><br />ex) 123.123.123.123\mydb,1036</blockquote><br /><br />위의 2가지 형태이다. 위에서 []안에 있는 인스턴스이름은 생략가능하다는 표시이다. 주소뒤에 포트번호를 콤마(,)로 이어붙혀준다. 내 경우에는 1036이었다. 항상 느끼는 거지만 역시 뭔거 어려운 문제다 싶으면 해외사이트들을 검색해야 한다. <a href="http://www.it-sideways.com/2008/02/connection-to-remote-ms-sql-server-2005.html" target="_blank">내가 참고한 블로그</a><br /><br />서버포트를 확인하려면...<br /><br /><div class="imageblock center" style="text-align: center; clear: both;"><img src="//blog.outsider.ne.kr/attach/1/1350780280.jpg" alt="사용자 삽입 이미지" height="207" width="512" /></div><br /><span style="color: rgb(153, 204, 102);">[Microsoft SQL Server]안에 들어가면 "서버 네트워크 유틸리티"와 "클라이언트 네트워크 유틸리티"라는 것이 있다. 서버 네트워크 유틸리티는 PC에 대한 서버에 대한 설정이고 클라이언트 네트워크 유틸리티는 지금 PC에서 다른 서버로 접속을 시도할 때의 설정에 관한 부분이다.</span><br /><br />서버 네트워크 유틸리티에 들어가 보자.<br /><br /><div class="imageblock center" style="text-align: center; clear: both;"><img src="//blog.outsider.ne.kr/attach/1/1356155892.jpg" alt="사용자 삽입 이미지" height="364" width="642" /></div><br />(여기서 원격접속 자체가 가능하려면 명명된 파이프와 TCP/IP가 사용할 수 있는 프로토콜 측에 있어야 한다.)<br />TCP/IP를 선택하고 속성을 보면<br /><br /><div class="imageblock center" style="text-align: center; clear: both;"><img src="//blog.outsider.ne.kr/attach/1/1007499530.jpg" alt="사용자 삽입 이미지" height="197" width="512" /></div><br />해당 인스턴스의 포트번호가 나온다. <br /><br /><span style="color: rgb(153, 204, 102);">1433은 MS-SQL의 기본포트이기 때문에 달리 설정을 해주지 않으면 1433으로 접속을 시도한다. 즉 커넥션스트링을 적어줄 때 포트번호를 명시적으로 적어주지 않으면 1433으로 접속을 시도한다는 얘기이다. 그래서 MS-SQL의 인스턴스의 포트가 1433이 아니라면 명시적으로 포트번호를 적어주어야 한다.</span><br /><br />역시 셋팅은 너무 머리아퍼.. ㅡ..ㅡ<br /><br /><p><strong><a href="https://blog.outsider.ne.kr/157?commentInput=true#entry157WriteComment">댓글 쓰기</a></strong></p>MS SQL Server 2005에서 웹에서 DB접속 되지 않을 때Outsiderhttps://blog.outsider.ne.kr/1472008-04-30T14:46:47+09:002008-04-30T14:46:47+09:00<P>MS SQL Server 2005를 처음 사용해 보았다. 그 이전까지는 MS SQL Server 2000만 쓰다가 회사에서 윈도우를 밀면서 2005로 깔았더니 영~ 적응이 안되고 있는 상태이다. 그냥 비슷하게 될줄 알았는데 이게 왠걸... 내부 디비부분정도가 바뀌었을줄 알았더니 형태가 완전 다르다. EM<sup style="font-family:tahoma;"><a href="https://blog.outsider.ne.kr/147#footnote_147_1" id="footnote_link_147_1">1</a></sup>이 없을 때의 그 당혹감이란.... 차차 적응 되겠지만....<br /><br />계속 쓰던 소스고 틀린데가 없는데 웹페이지 만들어서 DB에 붙으려고 하니까 붙어지지가 않았다. 이건 MS SQL Server 2005가 MS SQL Server 2000과는 설정이 달라서 그런 문제인데 디폴트 상태로는 TCP/IP가 막혀있어서 접속이 되지 않는다.<br /><br /><div class="imageblock center" style="text-align: center; clear: both;"><img src="//blog.outsider.ne.kr/attach/1/1137994854.jpg" alt="SQL Server Configuration Manager" height="104" width="750" /></div><br />[MS SQL Server 2005] - [구성도구] - [SQL Server Configuration Manager]에 들어간다.</P>
<P><div class="imageblock center" style="text-align: center; clear: both;"><img src="//blog.outsider.ne.kr/attach/1/1034677392.jpg" alt="사용자 삽입 이미지" height="566" width="539" /></div> </P>
<P>MS SQL Server 2005 네트워크 구성에서 원하는 서버를 선택해야 한다. 화면에선 SQLServer를 사용했지만 SQLExpress를 사용한다면 당연히 그에 대한 프로토콜을 설정해 주어야 한다.<br /><br />기본으로는 TCP/IP가 아니요로 되어 있는데 이것을 예로 바꾸어 준다. 물론 지정된 포트인 1433을 사용하지 않는다면 그에 대한 부분도 Native Client 구성에서 맞추어 주어야 한다.<br /><br /><br />역시 환경이 바뀌면 여러가지로 피곤해 지는군.....</P><div class=footnotes><div class=footnotes_in><ol class=footnotes><li id="footnote_147_1">엔터프라이즈 매니저 <a href="#footnote_link_147_1">[Back]</a> </li>
</ol></div></div><p><strong><a href="https://blog.outsider.ne.kr/147?commentInput=true#entry147WriteComment">댓글 쓰기</a></strong></p>[Book] Microsoft SQL Server 2000 - 전문가로 가는 지름길 1 (개발자용)Outsiderhttps://blog.outsider.ne.kr/982008-08-26T09:14:15+09:002008-01-17T00:54:46+09:00<div class="ttbReview">
<fieldset style="margin: 10px; padding: 5px; width: 90%;"><legend><a class="aladdin_title" href="http://www.aladdin.co.kr/shop/wproduct.aspx?ISBN=8972805831&ttbkey=ttboutsideris1727002&copyPaper=1">Microsoft SQL Server 2000</a></legend>
<p>
</p><table>
<tbody>
<tr>
<td><a href="http://www.aladdin.co.kr/shop/wproduct.aspx?ISBN=8972805831&ttbkey=ttboutsideris1727002&copyPaper=1"><img alt="" src="http://image.aladdin.co.kr/cover/cover/8972805831_1.gif" border="0"></a></td>
<td style="vertical-align: top;" align="left"><a class="aladdin_title" href="http://www.aladdin.co.kr/shop/wproduct.aspx?ISBN=8972805831&ttbkey=ttboutsideris1727002&copyPaper=1">Microsoft SQL Server 2000</a> - <img alt="10점" src="http://image.aladdin.co.kr/img/common/star_s10.gif" border="0"><br>정원혁 지음/대림</td></tr></tbody></table></fieldset> <br><br>난 DB나 쿼리에 상당히 약하기 때문에 보기 시작한 책이다. 또 업무상 주로 MS-SQL을 쓰기 때문에.....<br><br>이 책을 보면서 내내 든 느낌은 탄탄하다는 느낌이다. 아주 쉽지도 아주 어렵지도 않고 딱 정당하다... 물론 나한테.... 너무 쉬운 책은 처음에 볼 때는 이해가 쉽게 되는 것 같아 좋기도 하지만 한번 보고 나면 더이상 볼게 없어지는 상황에 이를 수가 있는데 이책은 그렇지 않다.<br><br>나는 초급자 이긴 하지만 아주 초급이 나이어두 꽤 도움이 될만한 수준의 내용을 담고 있고 지은이가 SQL에 대해서 확실히 이해를 하고 있다는 느낌을 받을 수 있을만큼 중요한 부분을 차근차근하게 설명을 해준다.<br><br>이 시리즈는 1,2권으로 나누어져 있는데 1권은 개발자적인 부분이고 2권은 DBA적인 부분인데 나는 DBA가 아니므로 1권만 봤는데 기본적인 테이블 사용에 관한 쿼리부분은 당연한 부분이고 중급자적인 부분으로 여겨지는 색인이나 트랜잭션, 트리거, 스토어드 프로시저등등 MS-SQL을 사용하는데 필요한 모든 부분에 대해서 고심한 흔적이 느껴지는 적절한 예제와 따라하기를 통해 이해를 돕고 있으며 기초적인 부분과 중급부분을 자연스럽게 이어서 설명하면서 이해쉽게 해주었다.<br><br>물론 SQL Server 2000이 나온지 8년이나 되었고 2005를 넘어 이제 곧 서버 2008이 나올 예정이긴 하지만 기본적인 부분은 동일하기 때문에 지금 보아도 충분이 도움이 되리라고 생각한다. 현재에도 많은 도움이 되었지만 어느정도 시간이 지난 뒤에 다시 보아도 또 도움이 될듯한 책이다.</div><p><strong><a href="https://blog.outsider.ne.kr/98?commentInput=true#entry98WriteComment">댓글 쓰기</a></strong></p>Join해서 Update 하기Outsiderhttps://blog.outsider.ne.kr/912009-01-24T11:50:48+09:002007-12-29T18:14:23+09:00Update를 하는데 그냥 WHERE조건으로 하는게 아니라 다른 테이블과 JOIN을 해서 그 값으로 현재테이블의 값에 넣어야 할 필요가 있어서 사용하게 되었다. 평소에 쓰던 방식과 좀 달라서 어려웠었다.<br><br><pre class="line-numbers"><code class="language-sql">
BEGIN TRAN
UPDATE table_1
SET column1 = column2
FROM table_1 AS A
INNER JOIN table_2 AS B
ON A.column3 = B.column4
INNER JOIN table_3 AS C
ON B.column5 = C.column6
ROLLBACK TRAN
</code></pre><br>컬럼수가 많아서 좀 복잡하긴 한데 그냥 내가 쓴 쿼리를 그대로 써 넣었다. (업데이트가 제대로 될지 몰라서 트랜잭션을 걸었다. ㅎㅎ) <br><br>컬럼수가 좀 많고 복잡해서 이해가 어려울것 같다. 일단 JOIN이 2번 된 형태이다. table_1에 있는 column1을 table_3에 있는 column2의 값으로 모두 입력해 넣으려고 한 쿼리이다. <br><br>일단 업데이트문 자체는 그대로 써주고 그 이하는 SELET문에 쓰는것처럼 FROM절을 사용한다. table_1을 table_2와 JOIN하고 그걸 다시 table_3와 JOIN해서 table_3에 있는 column2를 사용하는 것이다. 이름이 겹치지 않아서인지 column1과 2 따로 별칭을 써주지 않아도 되었다.<br><br>평소에 쓰던 쿼리들과는 형태가 좀 다른 형태라 이해가 쉽지 않지만 이렇게 쓰면 Update에 JOIN을 해서 사용할 수 있다.<p><strong><a href="https://blog.outsider.ne.kr/91?commentInput=true#entry91WriteComment">댓글 쓰기</a></strong></p>MS SQL 테이블을 SQL문으로 생성하기Outsiderhttps://blog.outsider.ne.kr/622009-01-24T03:22:32+09:002007-11-04T01:48:52+09:00<p>순서로 얘기하자면 ERWin등을 통해서 모델링을 해서 쿼리를 생성해서 테입르을 만드는게 맞겠지만 간단한 거의 경우에는 꼭 그런 수순을 밟게 되는 것도 아니고 처음엔 모델링 했지만 이게 한번에 잘 되는 작업도 아니고 중간중간에 바로 디비를 수정하게 되는 경우도 생기고 어쨌든 간에 현재 사용하는 테이블에서 SQL쿼리를 생성해야 하는 경우가 있더란 말이지...<br><br><div class="imageblock center" style="text-align: center; clear: both;"><img src="//blog.outsider.ne.kr/attach/1/1154314780.jpg" alt="사용자 삽입 이미지" height="280" width="498" /></div></p><br>엔터프라이즈 관리자(2000이다)에서 해당 테이블에서 [모든 작업] - [SQL 스크립트 생성]에 들어간다. <br><br><div class="imageblock center" style="text-align: center; clear: both;"><img src="//blog.outsider.ne.kr/attach/1/1138970754.jpg" alt="사용자 삽입 이미지" height="418" width="631" /></div><br>그러면 현재 선택한 테입르이 "스크립팅될 개체"에 표시된다. 이곳에 나타난 것만 SQL로 생성한다.<br><br>위의 모두표시 버튼을 누르면 왼쪽의 pub의 개체라고 된 곳에 모든 테이블이 표시되고 필요한 것만 오른쪽으로 이동하면 된다. 서식이나 옵션을 보면 약간의 설정과 어떤 형태의 쿼리문으로 나오는지가 나오는데 특별한 경우가 아니면 크게 신경을 안써도 될것 같다.(사실은 잘 모르는 부분이라.. ㅎㅎ)<br><br><pre class="line-numbers"><code class="language-sql">
-- 생성된 SQL문
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].[sales]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
DROP TABLE [dbo].[sales]
GO
CREATE TABLE [dbo].[sales] (
[stor_id] [char] (4) COLLATE Korean_Wansung_CI_AS NOT NULL ,
[ord_num] [varchar] (20) COLLATE Korean_Wansung_CI_AS NOT NULL ,
[ord_date] [datetime] NOT NULL ,
[qty] [smallint] NOT NULL ,
[payterms] [varchar] (12) COLLATE Korean_Wansung_CI_AS NOT NULL ,
[title_id] [tid] NOT NULL
) ON [PRIMARY]
GO
</code></pre><br>위에가 이렇게 생성한 쿼리문이다. 필요한 다른 곳에서 이 쿼리를 실행하면 디비가 생성된다. 다만 데이터는 나가지 않고 오직 테이블을 생성하는 쿼리만 만든다.(현재로써는 데이터도 쿼리문으로 생성을 어떻게 하는지를 좀 고민하고 있는데.. 쩝;;;)<br><p><strong><a href="https://blog.outsider.ne.kr/62?commentInput=true#entry62WriteComment">댓글 쓰기</a></strong></p>