성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] VT sequences to "CONOUT$" vs. STD_O...
[정성태] NetCoreDbg is a managed code debugg...
[정성태] Evaluating tail call elimination in...
[정성태] What’s new in System.Text.Json in ....
[정성태] What's new in .NET 9: Cryptography ...
[정성태] 아... 제시해 주신 "https://akrzemi1.wordp...
[정성태] 다시 질문을 정리할 필요가 있을 것 같습니다. 제가 본문에...
[이승준] 완전히 잘못 짚었습니다. 댓글 지우고 싶네요. 검색을 해보...
[정성태] 우선 답글 감사합니다. ^^ 그런데, 사실 저 예제는 (g...
[이승준] 수정이 안되어서... byteArray는 BYTE* 타입입니다...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <h1 style='font-family: Malgun Gothic, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>Database '...' already exists. Choose a different database name. (Microsoft SQL Server, Error: 1801)</h1> <p> <br /> "SQL Server 2008 R2 Enterprise SP2"에 있던 데이터베이스 파일(mdf, ldf)을 떼어다가(detach) "SQL Server 2008 R2 Express SP2"에 붙이려고(attach) 했는데 다음과 같은 오류 메시지만 나옵니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Attach database failed for Server '.\SQLEXPRESS'. (Microsoft.SqlServer.Smo) An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo) <span style='color: blue; font-weight: bold'>Database '...' already exists. Choose a different database name.</span> (Microsoft SQL Server, Error: 1801) </pre> <br /> SSMS(SQL Server Management Studio)에서 메뉴를 통해 실행했는데, 혹시나 싶어 다음과 같이 직접 쿼리로 전달해 보면 어떨까 싶어 시도해 보았는데요.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > // SQL SERVER ? 2005 ? T-SQL Script to Attach and Detach Database // <a target='tab' href='http://blog.sqlauthority.com/2007/08/24/sql-server-2005-t-sql-script-to-attach-and-detach-database/'>http://blog.sqlauthority.com/2007/08/24/sql-server-2005-t-sql-script-to-attach-and-detach-database/</a> USE [master] GO EXEC master.dbo.sp_detach_db @dbname = N'Tfs_TestCollection', @keepfulltextindexfile = N'true' GO USE [master] GO <span style='color: blue; font-weight: bold'>CREATE DATABASE [Tfs_TestCollection] ON ( FILENAME = N'D:\Test\Tfs_TestCollection.mdf' ), ( FILENAME = N'D:\Test\Tfs_TestCollection_Log.ldf' ) FOR ATTACH</span> GO IF EXISTS ( SELECT name FROM master.sys.databases sd WHERE name = N'Tfs_TestCollection' AND SUSER_SNAME(sd.owner_sid) = SUSER_SNAME() ) EXEC [Tfs_TestCollection].dbo.sp_changedbowner @loginame=N'sa', @map=false GO </pre> <br /> 역시 "Database '...' already exists. Choose a different database name."라는 오류만 반복할 뿐 정상적인 동작이 안되었습니다. 음... 그래서 이번에는 동일한 이름으로 Tfs_TestCollection라는 DB를 생성한 후, SQL Server NT 서비스를 내리고 파일을 바꿔치기 한 후 다시 SQL 서비스를 올렸습니다.<br /> <br /> SSMS 도구에서 해당 DB를 검사하니, 오호~~~ ^^ 이제야 제대로 된 오류 메시지가 나옵니다.<br /> <br /> <div style='BACKGROUND-COLOR: #ccffcc; padding: 10px 10px 5px 10px; MARGIN: 0px 10px 10px 10px; FONT-FAMILY: Malgun Gothic, Consolas, Verdana; COLOR: #005555'> Failed to retrieve data for this request. (Microsoft.SqlServer.Management.Sdk.Sfc)<br /> <br /> Database 'Tfs_TestCollection' cannot be started in this edition of SQL Server <span style='color: blue; font-weight: bold'>because part or all of object 'tbl_Branch' is enabled with data compression or vardecimal storage format. Data compression and vardecimal storage format are only supported on SQL Server Enterprise Edition.</span> Database 'Tfs_TestCollection' cannot be started because some of the database functionality is not available in the current edition of SQL Server. (Microsoft SQL Server, Error: 909)<br /> </div><br /> <br /> 그렇습니다. 동일한 "SQL Server 2008 R2 SP2" 제품군에 속함에도 불구하고 Enterprise Edition에서는 "Data compression and vardecimal storage format"라는 기능이 제공되지만 Express에서는 그렇지 못했던 것입니다.<br /> <br /> 아래의 자료를 보면, "Data compression" 기능은 오직 Enterprise 버전에만 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Features Supported by the Editions of SQL Server 2008 ; <a target='tab' href='https://learn.microsoft.com/en-us/previous-versions/sql/sql-server-2008/cc645993(v=sql.100)'>https://learn.microsoft.com/en-us/previous-versions/sql/sql-server-2008/cc645993(v=sql.100)</a> </pre> <br /> 기능의 차이야 제품군별로 있다는 것에 대해 이해는 되지만, attach할 때 엉뚱하게 "Database '...' already exists"라는 오류 메시지를 내주니 사용자들이 헤맬 수밖에 없습니다. ^^<br /> <br /> <hr style='width: 50%' /><br /> <br /> 실은, 위의 시나리오는 TFS의 Collection DB 를 옮길 때 발생한 문제였습니다. 오류 메시지상으로는 tbl_Branch 테이블만 지적하고 있는데 살펴보면 더 존재합니다.<br /> <br /> 도움을 받기 위해 검색해 보니 다음의 글이 나오는데요.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > TFS 2010 Migration Issue - SQL Server Enterprise Required ; <a target='tab' href='http://social.msdn.microsoft.com/Forums/en-NZ/tfsadmin/thread/9365b0da-f5e9-4219-b8b2-498df11d921b'>http://social.msdn.microsoft.com/Forums/en-NZ/tfsadmin/thread/9365b0da-f5e9-4219-b8b2-498df11d921b</a> </pre> <br /> 위의 글에 따라, 해당 DB에서 압축이 적용된 테이블을 다음의 쿼리로 알아낼 수 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > SELECT SCHEMA_NAME(sys.objects.schema_id) AS [SchemaName] ,OBJECT_NAME(sys.objects.object_id) AS [ObjectName] ,[rows] ,[data_compression_desc] ,[index_id] as [IndexID_on_Table] FROM sys.partitions INNER JOIN sys.objects ON sys.partitions.object_id = sys.objects.object_id WHERE data_compression > 0 AND SCHEMA_NAME(sys.objects.schema_id) <> 'SYS' ORDER BY SchemaName, ObjectName </pre> <br /> 아래는 실행한 결과입니다.<br /> <br /> <img alt='db_attach_error_1.png' src='/SysWebRes/bbs/db_attach_error_1.png' /><br /> <br /> 압축이 적용된 테이블을 알아냈으니, 이제 해제를 해볼까요? 역시 위의 글에서 소개된 데로 우선 LinkTreesLatest 테이블에 대해 다음과 같이 압축을 해제해 보았습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > ALTER INDEX ALL ON LinkTreesLatest REBUILD WITH (DATA_COMPRESSION = None); </pre> <br /> 그다음 다시 "SELECT SCHEMA_NAME(sys.objects.schema_id) AS [SchemaName]..." 쿼리를 이용해서 확인을 해보니, "LinkTreesLatest" 결과가 resultset에 포함되어 있지 않았습니다. 아하... 이게 맞긴 맞는 것 같습니다.<br /> <br /> 이후 아래의 쿼리를 모두 수행하고,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > ALTER INDEX ALL ON tbl_AuthorizationObject REBUILD WITH (DATA_COMPRESSION = None); ALTER INDEX ALL ON tbl_Branch REBUILD WITH (DATA_COMPRESSION = None); ALTER INDEX ALL ON tbl_BranchMapping REBUILD WITH (DATA_COMPRESSION = None); ALTER INDEX ALL ON tbl_LocalVersion REBUILD WITH (DATA_COMPRESSION = None); ALTER INDEX ALL ON tbl_Lock REBUILD WITH (DATA_COMPRESSION = None); ALTER INDEX ALL ON tbl_nodes REBUILD WITH (DATA_COMPRESSION = None); ALTER INDEX ALL ON tbl_PendingChange REBUILD WITH (DATA_COMPRESSION = None); ALTER INDEX ALL ON tbl_PendingChangeRecursive REBUILD WITH (DATA_COMPRESSION = None); ALTER INDEX ALL ON tbl_PendingMerge REBUILD WITH (DATA_COMPRESSION = None); ALTER INDEX ALL ON tbl_PendingRollback REBUILD WITH (DATA_COMPRESSION = None); ALTER INDEX ALL ON tbl_PropertyValue REBUILD WITH (DATA_COMPRESSION = None); ALTER INDEX ALL ON tbl_RegistryItems REBUILD WITH (DATA_COMPRESSION = None); ALTER INDEX ALL ON tbl_SecurityAccessControlEntry REBUILD WITH (DATA_COMPRESSION = None); ALTER INDEX ALL ON tbl_Version REBUILD WITH (DATA_COMPRESSION = None); ALTER INDEX ALL ON tbl_VersionedItem REBUILD WITH (DATA_COMPRESSION = None); ALTER INDEX ALL ON tbl_WorkingFolder REBUILD WITH (DATA_COMPRESSION = None); ALTER INDEX ALL ON tbl_WorkspaceMapping REBUILD WITH (DATA_COMPRESSION = None); </pre> <br /> 이제 다시 mdf/ldf 파일을 SQL Server Express에 가져가서 attach 시켜 보면 오류 없이 통과합니다.<br /> </p><br /> <br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
1400
(왼쪽의 숫자를 입력해야 합니다.)