база данных sql server powershell attach, отсоединенная управляющей студией - PullRequest
1 голос
/ 19 декабря 2011

Я пишу сценарий powershell, который автоматизирует развертывание среды разработки, и у меня возникла проблема с подключением БД. Я добавляю 2 оснастки SqlServerCmdletSnapin100 и SqlServerProviderSnapin100 и использую SQLSERVER:\SQL\localhost\SQLEXPRESS и метод AttachDatabase. Это работает хорошо, и если я использую метод DetachDatabase таким же образом, я могу постоянно перезапускать скрипт. Моя проблема возникает, когда я отсоединяюсь от управляющей студии и пытаюсь снова запустить скрипт. Независимо от того, что я здесь делаю (разрешения и т. Д.), С этого момента скрипт будет постоянно отказывать с ошибкой:

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

Если я изменю имя базы данных, я присоединяюсь, так как скрипт снова будет работать. Есть ли в системной базе данных что-то, что будет висеть на базе данных или файлах базы данных, которые мне также нужно удалить?

Ответы [ 3 ]

1 голос
/ 19 декабря 2011

SMO использует вложенные объекты ошибок, поэтому мне интересно, что говорится в базовом сообщении об ошибке. Если вы запустите это утверждение:

$error[0] | fl -force

Какое сообщение об ошибке вы получаете

Обновление Провел быстрый тест: Отсоедините базу данных "hsg" от моего локального экземпляра с помощью SSMS и успешно подключите с помощью этого сценария:

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 голосов
/ 30 апреля 2015

возможно, вместо localhost \ SQLExpress вы должны использовать: Я нашел это исправление для некоторых моих кодов, которые возвращали ту же ошибку:

$srv = new-object Microsoft.SqlServer.Management.Smo.Server 'Hodentek8\RegencyPark' 

Заменить 'Hodentek8 \ RegencyPark' на ("(local)") для экземпляра по умолчанию

Пример здесь: http://hodentekmsss.blogspot.com/2015/04/counting-sql-server-configuration.html

0 голосов
/ 30 апреля 2015

Я отключил базу данных с помощью 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...