Sunday, May 24, 2009

aspnetdb 오류처리

출처 : http://www.hoons.kr/Board.aspx?Name=QAASPNET&Mode=2&BoardIdx=10076&Key=&Value=




최근 aspnetdb.mdf 를 이용해서 사용자 계정과 역할관리를 하는 테스트를 하다 뜻하지 않는 오류로 3~4일을 고생했는데 혹 필요할 분이 있을까해서 블로그에 올린 내용을 이곳에도 올려봅니다.
먼저 오류는 aspnetdb.mdf 파일을 연결하지 못한다는 오류로 데이터베이스가 있거나 지정한 파일을 열수 없거나 파일이 UNC 공유 위치에 있다는 오류였습니다.
문제를 해결하기 위해 인터넷을 뒤지던중 실제로 다양한 오류메세지의 aspnetdb.mdf 연결 오류가 발생한다는 사실을 발견하였습니다. [관련자료]
결국 많은 경우 오류가 발생하는 원인은 SQLEXPRESS에서 이미 aspnetdb 가 여러이유로 등록이 되어있기 때문에 발생한 오류였습니다.
해결방법은 SQLEXPRESS 를 중지한 후 XP는 \Documents and Settings\<사용자>\Local Settings\Application Data\Microsoft\Microsoft SQL Server Data, Vista는 \Users\<사용자>\AppData\Local\Microsoft\Microsoft SQL Server Data 폴더의 SQLEXPRESS 폴더를 삭제한 다음 시스템을 재부팅하는 방법이 일반적으로 소개되었습니다.
하지만 제 경우는 위와 같이 해도 문제가 해결되지 않아 여러가지 시도중 다음과 같은 방법으로 해결했습니다.
1. aspnet 데이터 파일 생성
실제 machine.config 파일에는 LocalSqlServer 연결문자열의 데이터베이스에서 사용자를 관리하도록 설정되어 있고 web.config에서 LocalSqlServer 에서 VisualStudio에서 웹사이트를 생성하면 App_Data 폴더에 개별적으로 생성이된 aspnetdb.mdf 를 attache 로 열도록
다음과 같이 설정되어 있습니다.
data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true
그리고 오류는 이 부분에서 해당 파일을 attache 하지 못하거나 열지 못해서 발생한 오류였습니다.
따라서 위와 같은 오류를 해결하기 위해 먼저 App_Data 폴더안의 aspnetdb.mdf 가 아니라 사용자 관리를 할 데이터 베이스를 SQLEXPRESS에 aspnet_regsql을 이용해 직접 생성하였습니다.
2. web.config 파일 수정(ASP.NET 구성파일)
LocalSqlServer 의 연결문자열을 다음과 같이 수정하였습니다.
Database=aspnetdb;Server=(local)\SQLEXPRESS;Integrated Security=SSPI;
위의 내용은 결국 App_Data 폴더의 aspnetdb.mdf 파일이 아니라 SQLEXPRESS에 등록된 aspnetdb를 사용자 계정 및 역할관리를 위해 사용하겠다는 뜻입니다.
위와 같이 하여 실제 오류를 수정하였습니다.
이곳 게시판에 aspnetdb 관련하여 검색을 해보니 원격지의 SQL 서버에서 권한 관리에 대한 질문도 있던데 이 경우는 마찬가지로 해당 원격지 SQL 서버에 aspnet_regsql 을 이용해서 관리데이터베이스를 생성하고 구성파일의 LocalSqlServer 의 연결 문자열을 해당 서버를 이용하도록 변경하면 됩니다.
만약 여러개의 웹 어플리케이션에서 같은 권한을 사용하길 원한다면 마찬가지로 1과 같이 생성한 aspnetdb 로 각 웹 어플린케이션의 연결문자열을 수정하면 가능하며
반대로 각각 웹 어플리케이션마다 별도의 관리를 하고 싶다면 aspnet_regsql 을 이용해 추가적으로 데이터베이스를 생성한 다음 생성된 데이터 베이스로 각 연결문자열을 수정하면 됩니다.
aspnet_regsql 사용법이나 web.config 파일 수정방법등은 인터넷에서 쉽게 찾으실 수 있으며 제 블로그에도 간단히 적어 놓았으니 참고하시면 됩니다.
많은 분들이 아시는 부분일 수 있겠으나 혹 필요하신 분들을 위하여 참고삼아 적어보았습니다.