2011-12-19 9 views
1

저는 dev 환경 배포를 자동화하는 powershell 스크립트를 작성 중이며 db를 연결하는 데 문제가 있습니다. SqlServerCmdletSnapin100SqlServerProviderSnapin100 스냅 샷을 두 개 추가하고 SQLSERVER:\SQL\localhost\SQLEXPRESSAttachDatabase 메서드를 사용합니다. 이것은 잘 작동하고 동일한 방법으로 DetachDatabase 메서드를 사용하면 스크립트를 계속해서 다시 실행할 수 있습니다. 관리 스튜디오에서 분리하여 스크립트를 다시 실행하려고하면 문제가 발생합니다. 아무리 내가 여기 (권한 등) 무슨 스크립트는 지속적으로 오류가있는이 시점에서 실패하지 않습니다 :powershell은 관리 스튜디오에서 분리 한 SQL Server 데이터베이스를 첨부합니다.

Exception calling "AttachDatabase" with "2" argument(s): 
"Attach database failed for Server 'localhost\SQLEXPRESS'. " 

을 내가 스크립트가 다시 작동합니다 나는이 부착하고있는 데이터베이스의 이름을 변경하는 경우. 시스템 데이터베이스에 데이터베이스 나 데이터베이스 파일에 걸려있는 뭔가가 있습니까?

답변

1

SMO는 중첩 된 오류 개체를 사용하므로 기본 오류 메시지가 어떤 것인지 궁금합니다. 이 문을 실행하는 경우 :

$error[0] | fl -force

당신은

업데이트 이 빠른 테스트 란 어떻게해야합니까 어떤 오류 메시지 : SSMS 사용 분리 데이터베이스 "HSG"내 로컬 인스턴스를 성공적으로이 스크립트 부착 :

PS SQLSERVER:\SQL\WIN7BOOT\SQL1> $s = get-item . 
PS SQLSERVER:\SQL\WIN7BOOT\SQL1> $s.AttachDatabase("hsg",$sc) 
PS SQLSERVER:\SQL\WIN7BOOT\SQL1> $sc = new-object System.Collections.Specialized.StringCollection 
PS SQLSERVER:\SQL\WIN7BOOT\SQL1> $sc.Add("C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL1\MSSQL\DATA\hsg.mdf") 
PS SQLSERVER:\SQL\WIN7BOOT\SQL1> $sc.Add("C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL1\MSSQL\DATA\hsg_log.ldf) 
+0

감사합니다. Chad 오류입니다. 기존 데이터베이스와 이름이 같은 데이터베이스를 연결할 수 없습니다. 저는 이제 관리 스튜디오를 통해 새로 고침을 5 번했습니다 :) 데이터베이스가 적어도 데이터베이스 목록에 없습니다. – dmgdotnet

+0

위의 오류가 발생한 후 DetachDatabase를 업데이트하면 다른 오류가 발생합니다. Detach failed ... 데이터베이스가 존재하지 않습니다. – dmgdotnet

+0

문제를 repo 할 수 없습니다. 또 하나의 제안은 PowerShell PS SQLSERVER : \ SQL \ WIN7BOOT \ SQL1> get-item에서 데이터베이스를 새로 고쳐보십시오. | % {$ _. databases.refresh()} –

0

SQL Server Management Studio를 사용하여 데이터베이스를 분리하고 다음 코드를 사용하여 데이터베이스를 다시 동일한 인스턴스에 연결했습니다. 파일이 같더라도 첨부 된 데이터베이스가 원래 이름을 얻지 못하는 것을 제외하고는 제대로 작동했습니다.

PS SQLSERVER:\sql\Hodentek8\RegencyPark\databases> 
$files = new-object system.collections.specialized.stringcollection 

$files.add("C:\Program Files\Microsoft SQLServer\MSSQL11.REGENCYPARK\MSSQL\DATA\Feb6.mdf") 


$files.add("C:\Program Files\Microsoft SQL Server\MSSQL11.REGENCYPARK\MSSQL\DATA\Feb6_log.ldf") 

$server=new-object Microsoft.SqlServer.Management.Smo.Server('Hodentek8\RegencyPark') 

$db=new-object Microsoft.SqlServer.Management.Smo.Server 

$dbname="feb6" 

$server.AttachDatabase($db,$files) 

일부 세부 사항은 여기에 있습니다 : http://hodentekmsss.blogspot.com/2015/04/attaching-detached-database-in-sql.html

관련 문제