Я хотел бы создать базу данных SQL Server с помощью сценария PowerShell, используя имя пользователя и пароль. Я использовал этот скрипт:
$SQLInstanceName = "(localdb)\MSSQLLocalDB"
$Server = New-Object -TypeName Microsoft.SqlServer.Management.Smo.Server -ArgumentList $SQLInstanceName
# This sets the connection to mixed-mode authentication
$Server.ConnectionContext.LoginSecure=$false;
# This sets the login name
$Server.ConnectionContext.set_Login("test");
# This sets the password
$Server.ConnectionContext.set_Password("*******")
$SourceDBName = "@@SourceDBName@@"
$SourceDB = $Server.Databases[$SourceDBName]
$CopyDBName = "@@DestDBName@@"
$CopyDB = New-Object -TypeName Microsoft.SqlServer.Management.SMO.Database -ArgumentList $Server , $CopyDBName
$CopyDB.Create()
$ObjTransfer = New-Object -TypeName Microsoft.SqlServer.Management.SMO.Transfer -ArgumentList $SourceDB
$ObjTransfer.CopyAllTables = $true
$ObjTransfer.Options.WithDependencies = $true
$ObjTransfer.Options.ContinueScriptingOnError = $true
$ObjTransfer.DestinationDatabase = $CopyDBName
$ObjTransfer.DestinationServer = $Server.Name
$ObjTransfer.DestinationLoginSecure = $true
$ObjTransfer.CopySchema = $true
$ObjTransfer.ScriptTransfer() enter code here
$ObjTransfer.TransferData()
Но я получаю эту ошибку:
SetParent failed for Database 'coupadb_master_TestClient'. "
at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
Afaik SetParent используется для установки экземпляра SQL Server, на котором определена база данных. Может проблема с разрешением? Кроме того, попытайтесь поймать исключение и получить полную трассировку strack и, возможно, любые внутренние исключения.
У меня был плохой опыт работы с PowerShell и SQL-сервером. Некоторые скрипты работали в Powershell IDE, но не при прямом выполнении. Все под одним всемогущим счетом. И получил бессмысленные исключения. Я сделал простой код C# для задачи, используя SMO, и работал как шарм. Да, я знаю, что это не должно иметь никакого значения, но это имело значение. В любом случае, я согласен с @ManojChoudhari, что резервное копирование-восстановление - гораздо лучшая стратегия, если это применимо.
мне просто нужна оболочка базы данных. со сценарием аутентификации Windows работает правильно. но я хотел бы сделать это в смешанном режиме.
Могу ли я предложить вам взглянуть на dbatools.io, это модуль PowerShell с открытым исходным кодом, который способен делать то, что вы пытаетесь сделать...





по какой причине вы не используете проверку подлинности Windows? Кроме того, почему вы не делаете резервную копию, а затем восстанавливаете?