我们有一个场景,在单个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
你可以帮忙解决这个问题吗?
答案 0 :(得分:0)
使用-Database
参数指定的数据库可能不在线,因此登录失败。为参数指定系统数据库,如master
或tempdb
:
Invoke-Sqlcmd -ServerInstance MyHostQAS\NISQLSERVER2" -Database "master" -Query "ALTER DATABASE QWA SET online;"
不确定是什么驱使您要求切换ONLINE / OFFLINE,但您可能会考虑启用数据库AUTO_CLOSE
option。这将在数据库未使用时自动释放资源,但代价是启动开销(与通过脚本设置数据库ONLINE没有太大区别)。