首页 > 解决方案 > SQL DB Stacking 中的单个数据库开始

问题描述

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

VM Name = MyHostQAS

SQL Instance Name = MyHostQAS\NISQLSERVER2

SQL DB1 = QWA

SQL DB2 = QWB

我的要求是编写一个远程启动/停止单个 SQL 数据库(而不是整个 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”登录失败。在 line:1 char:1 + Invoke-Sqlcmd -Username "admin" -Password "Admin123#" -ServerIn ... + ~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [Invoke-Sqlcmd], SqlException + FullyQualifiedErrorId : SqlExectionError,Microsoft.SqlServer.Management.PowerShell.GetScriptCommand Invoke-Sqlcmd : At line:1 char:1 + Invoke-Sqlcmd -Username "admin" -Password "Admin123 #" -ServerIn ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ParserError: (:) [Invoke-Sqlcmd], ParserException + FullyQualifiedErrorId : ExecutionFailureException,Microsoft.SqlServer .Management.PowerShell.GetScriptCommand

你能帮忙解决这个问题吗?

标签: sql-serverpowershell-remoting

解决方案


可能参数指定的数据库-Database不在线,所以登录失败。为参数指定一个类似masteror的系统数据库tempdb

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

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


推荐阅读