单个数据库开始于 SQL 数据库堆叠

Individual DB start in SQL DB Stacking

我们有一个场景,多个 SQL 数据库安装在单个 SQL 实例下(SQL 数据库整合)

VM Name = MyHostQAS

SQL Instance Name = MyHostQAS\NISQLSERVER2

SQL DB1 = QWA

SQL DB2 = QWB

我的要求是编写一个 PS 脚本,远程 starts/stops 个人 SQL 数据库(不是整个 SQL 实例)

我首先尝试使用 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 : Login failed for user 'admin'. At 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

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

可能-Database参数指定的数据库不在线导致登录失败。为参数指定一个系统数据库,如 mastertempdb

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

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