Powershell invoke_sqlcmd未关闭连接
问题描述:
我正在使用Powershell来脚本来动态恢复数据库(sql server 2012)。Powershell invoke_sqlcmd未关闭连接
set-location "SQLSERVER:\sql\$host_name\$inst\databases\.$db_target"
$db = Invoke-Sqlcmd -Query "select type_desc,name,physical_name from sys.master_files where database_id=db_id(N'$db_target') order by type_desc desc "
当我执行该脚本,我得到了以下错误消息:
DBMS味精 - ODBC返回代码< -1>,SQL国家< 37000>,SQL消息 < 3101> < [ Microsoft] [SQL Server Native Client 10.0] [SQL Server]独有的 访问因为数据库正在使用而无法获得。>。
然后我用SSMS对数据库进行脱机使
alter database [db_target] set offline with rollback immediate
我的脚本工作正常之后。
问:
- 为什么invoke_sqlcmd不关闭会话?
- 我可以从我的powershell脚本执行alter database ....命令吗?
感谢
答
这里是我的代码。它不关闭连接。我认为我无法正确使用SMO选项
$host_name=$env:computername
$inst="JUDI2012"
$db_target="test_judi_custom"
set-location "SQLSERVER:\sql\$host_name\$inst\databases\$db_target"
$db = Invoke-Sqlcmd -Query "select type_desc,name,physical_name from sys.master_files where database_id=db_id(N'$db_target') order by type_desc desc" -QueryTimeout 1
$conn = New-Object System.Data.SqlClient.SqlConnection
$conn.ConnectionString = "Server=$($host_name);Database=$($db_target);Integrated_security=True;"
$sqlquery=$("alter database $db_target set offline with rollback immediate")
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = 'select count(*) from sys.tables'
$SqlCmd.Connection = $conn
$Reader = $Command.ExecuteReader()
$Datatable = New-Object System.Data.DataTable
$Datatable.Load($Reader)
$Datatable
$Conn.Close()
+0
尝试'$ conn.Close()'而不是'$ Conn.Close()'。该变量被设置为全部小写。 –
答
我认为更改为小写帮助,因为它暴露了另一个错误。 无法连接到服务器。 我担心我没有在任何地方指定实例名称。我有服务器(或主机)和数据库名称,但无处指定实例名称。 想法?
在你的代码中,你是否关闭了像'$ dbconnection.Close()'这样的连接...发布代码,以便我们可以提供更好的帮助。 – ShanayL
也许连接池。在Invoke-SqlCommand之后尝试'[System.Data.SqlClient.SqlConnection] :: ClearAllPools()'。 –
我尝试了很多选择,但连接仍然打开。这里是我的代码 - – Judi