sql-server - 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
你能帮忙解决这个问题吗?
解决方案
可能参数指定的数据库-Database
不在线,所以登录失败。为参数指定一个类似master
or的系统数据库tempdb
:
Invoke-Sqlcmd -ServerInstance MyHostQAS\NISQLSERVER2" -Database "master" -Query "ALTER DATABASE QWA SET online;"
不确定是什么促使您要求切换 ONLINE/OFFLINE,但您可以考虑打开数据库AUTO_CLOSE
选项。这将在数据库未使用时自动释放资源,但会以启动开销为代价(与通过脚本将数据库设置为 ONLINE 没有太大区别)。
推荐阅读
- bash - 在私有以太坊区块链上生成 Enode?
- java - 为什么 Java 自动模块不包含导出部分
- html - datatable-pager 中的下一个按钮和后退按钮不起作用
- python - scipy.optimize.newton() 的问题:“添加”对象不可调用
- django - 注释和计数 django
- python - Python tkinter - 在画布中移动对象
- php - 如何正确地将电子邮件中的数据拆分为数组
- c# - 禁用 WPF DataGrid 中第一行的第一列
- r - R中的条件矩阵或组合
- java - Java Queue Peek() 保持返回最新条目而不是第一次输入