单个数据库在SQL DB堆栈中启动

时间:2018-05-16 11:07:31

标签: sql-server powershell-remoting

我们有一个场景,在单个SQL实例(SQL DB Consolidation)下安装多个SQL DB

VM Name = MyHostQAS

SQL Instance Name = MyHostQAS\NISQLSERVER2

SQL DB1 = QWA

SQL DB2 = QWB

我的要求是编写一个远程启动/停止单个SQL DB(而不是整个SQL实例)的PS脚本

我尝试使用sqlcmd首先在安装了SQL实例的服务器上本地运行(在cmd中)

sqlcmd -S MyHostQAS\NISQLSERVER2 -Q "ALTER DATABASE QWA SET online;"

此工作正常,QWA DB已启动。当我们执行以下PS查询时,我们会收到错误

Invoke-Sqlcmd -Username "admin" -Password "Admin123#" -ServerInstance "MyHostQAS\NISQLSERVER2" -Database "QWA" -Query "ALTER DATABASE QWA SET online;"

错误:

  

Invoke-Sqlcmd:用户' admin'登录失败。在行:1个字符:1   + Invoke-Sqlcmd -Username" admin" -Password" Admin123#" -ServerIn ...   + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~       + CategoryInfo:InvalidOperation:(:) [Invoke-Sqlcmd],SqlException       + FullyQualifiedErrorId:SqlExectionError,Microsoft.SqlServer.Management.PowerShell.GetScriptCommand   Invoke-Sqlcmd:行:1 char:1   + Invoke-Sqlcmd -Username" admin" -Password" Admin123#" -ServerIn ...   + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~       + CategoryInfo:ParserError:(:) [Invoke-Sqlcmd],ParserException       + FullyQualifiedErrorId:ExecutionFailureException,Microsoft.SqlServer.Management.PowerShell.GetScriptCommand

你可以帮忙解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

使用-Database参数指定的数据库可能不在线,因此登录失败。为参数指定系统数据库,如mastertempdb

Invoke-Sqlcmd -ServerInstance MyHostQAS\NISQLSERVER2" -Database "master" -Query "ALTER DATABASE QWA SET online;"

不确定是什么驱使您要求切换ONLINE / OFFLINE,但您可能会考虑启用数据库AUTO_CLOSE option。这将在数​​据库未使用时自动释放资源,但代价是启动开销(与通过脚本设置数据库ONLINE没有太大区别)。