성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] How can I tell whether two programs...
[정성태] The case of the fail-fast crashes c...
[정성태] Creating Docker multi-arch images f...
[정성태] BinaryFormatter removed from .NET 9...
[정성태] Extending the Windows Shell Progres...
[우광현] 와..... 범위를 잡았으니 클라이언트가 해당 범위를 확인해본다...
[정성태] 딱히, 그것 이상으로 더 설명할 내용이 없습니다. 동적 포...
[정성태] If Windows 3.11 required a 32-bit p...
[정성태] What is a hard error, and what make...
[괴물신인] 질문작성자인데 이 글을 이제봤네요 ㄷㄷ 이 글처럼 타입별로 인...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <br /> <div style='font-family: 맑은 고딕, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>SQL Express 버전과 User Instance 옵션</div><br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; width: 800px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > SQL Server 2005 Express Edition Technical Articles - SQL Server 2005 Express Edition User Instances ; <a target='_tab' href='https://docs.microsoft.com/en-us/previous-versions/sql/sql-server-2005/express-administrator/bb264564(v=sql.90)'>https://docs.microsoft.com/en-us/previous-versions/sql/sql-server-2005/express-administrator/bb264564(v=sql.90)</a> </pre> <br /> 와... ^^ SQL Express 버전에 "User Instance"라는 재미있는 옵션이 있네요. <a target='_tab' href='/0/0/236'>Oxite 설치</a>를 하면서 web.config의 DB 연결문자열을 보았는데 다음과 같았습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; width: 800px; background-color: #fbedbb; overflow-x: scroll; font-family: Consolas, Verdana;' > <connectionStrings> <add name="ApplicationServices" connectionString="Data Source=.\SQLEXPRESS2008;AttachDBFileName=|DataDirectory|Oxite.Database.mdf; Integrated Security=true;<b style='color: Blue;'>User Instance=true;</b>"/> </connectionStrings> </pre> <br /> 그 동안의 깜냥으로, User Instance라는 것이 SQL Instance가 사용자마다 생성된다는 것을 짐작할 수 있게 하는데요. 실제로 연결 과정을 보면 더 재미있습니다. 일단, 새로운 SQL Instance를 생성해야 하는데 이를 위해서 master, msdb, tempdb와 같은 시스템 DB를 아래의 사용자 폴더로 복사합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; width: 800px; background-color: #fbedbb; overflow-x: scroll; font-family: Consolas, Verdana;' > 비스타의 경우 C:\Users\[계정명]\AppData\Local\Microsoft\Microsoft SQL Server Data\[SQL Express인스턴스 이름] </pre> <br /> 그리고는 AttachDBFileName 경로에 지정된 DB를 해당 SQL Instance에 연결합니다. 이 때문에, 작업 관리자로 보면 다음과 같이 sqlservr.exe가 2개가 나옵니다.<br /> <br /> [그림 1: 작업관리자 - sqlservr.exe]<br /> <img alt='sql_express_user_instance_1.PNG' src='/SysWebRes/bbs/sql_express_user_instance_1.PNG' /><br /> <br /> AttachDBFileName 옵션으로 인해 개발자가 mdb 파일을 굳이 SQL 서버에 등록하지 않고도 사용할 수 있게 하는 편리함이 있는데, 이에 더해서 User Instance 옵션은 관리자 계정이 아닌 상태에서도 SQL DB를 사용할 수 있게 해준다는 것입니다. (즉, UAC에서도 잘 된다는 것이지요.)<br /> <br /> SQL 인스턴스가 동적으로 생성되었으니, 이것 역시 "SQL Server Management Studio"로도 연결이 되겠지요. 그럴려면 허용된 Named Pipe 이름을 알아야 하는데 이는 "<a target='_tab' href='https://docs.microsoft.com/en-us/sysinternals/downloads/process-explorer'>Process Explorer</a>"로 sqlservr.exe를 살펴보면 알아낼 수 있습니다.<br /> <br /> [그림 2: Process Explorer로 확인한 Named Pipe 이름]<br /> <img alt='sql_express_user_instance_2.PNG' src='/SysWebRes/bbs/sql_express_user_instance_2.PNG' /><br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; width: 800px; background-color: #fbedbb; overflow-x: scroll; font-family: Consolas, Verdana;' > "C:\...\MSSQL\Binn\sqlservr.exe" -U"C:\...\MSSQL\Template Data" -d"C:\Users\...\SQLEXPRESS2008"\master.mdf -l"C:\Users\...\SQLEXPRESS2008"\mastlog.ldf -e"C:\Users\...\SQLEXPRESS2008"\error.log -c -SSQLEXPRESS2008 -s<b style='color: Blue;'>1BBB3E46-938C-4E</b> -w60 </pre> <br /> 이 중에서 -s 스위치로 시작한 것이 Named Pipe의 이름이며 이를 이용해서 다음과 같이 인스턴스 명을 구성해 주면 연결이 가능합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; width: 800px; background-color: #fbedbb; overflow-x: scroll; font-family: Consolas, Verdana;' > 연결 문자열 형식 np:\\.\pipe\[Named Pipe이름]\tsql\query </pre> <br /> 이번 경우에는 "np:\\.\pipe\1BBB3E46-938C-4E\tsql\query"가 되겠고, 다음 그림에서 보는 것처럼 연결 대화창에서 지정하면,<br /> <br /> [그림 3: Named Pipe 연결 문자열 지정]<br /> <img alt='sql_express_user_instance_3.PNG' src='/SysWebRes/bbs/sql_express_user_instance_3.PNG' /><br /> <br /> 성공한 경우, 아래와 같은 관리 화면을 볼 수 있습니다.<br /> <br /> [그림 4: SQL Server Management Studio 화면]<br /> <img alt='sql_express_user_instance_5.PNG' src='/SysWebRes/bbs/sql_express_user_instance_5.PNG' /><br /> <br /> 만약, 이 과정에서 다음과 같은 오류가 발생한다면, "SQL Server Configuration Manager"를 실행시켜서 "SQL Server Network Configuration"에서 "Named Pipes" 프로토콜을 "Enabled" 상태로 변경해 주면 됩니다.<br /> <br /> [그림 5: Named Pipe 연결 오류]<br /> <img alt='sql_express_user_instance_4.PNG' src='/SysWebRes/bbs/sql_express_user_instance_4.PNG' /><br /> <br /> <span style='margin: 10px 0px 10px 10px; font-family: 맑은 고딕, Consolas, Verdana; font-style: italic; width: 800px; background-color: #ccffcc; color: #005555;'> A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server) (Microsoft SQL Server, Error: 2)<br /> </span><br /><br /> <br /> 특이한 면이 있지요! Named Pipe 프로토콜 지원 여부에 관계없이 User Instance 옵션으로 생성된 SQL 인스턴스는, 프로그램 코드에서 연결문자열을 User Instance 옵션을 직접 지정한 클라이언트에게는 무조건 Named Pipe 연결을 지원하는 반면, 정작 Management Studio에서 연결하려면 프로토콜 지원을 추가해야 하니 말이죠. 아무튼, SQL 서비스가 "인스턴스"라는 개념을 통해서 하나의 PC에서 다중으로 설치될 수 있다는 점이, 결국 User Instance라는 편리한 개발환경으로 이어지고 있습니다.<br /> <br /> <br /><br /><hr /><span style='color: Maroon'>[이 토픽에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
9929
(왼쪽의 숫자를 입력해야 합니다.)