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 

我的脚本工作正常之后。

问:

  1. 为什么invoke_sqlcmd不关闭会话?
  2. 我可以从我的powershell脚本执行alter database ....命令吗?

感谢

+0

在你的代码中,你是否关闭了像'$ dbconnection.Close()'这样的连接...发布代码,以便我们可以提供更好的帮助。 – ShanayL

+1

也许连接池。在Invoke-SqlCommand之后尝试'[System.Data.SqlClient.SqlConnection] :: ClearAllPools()'。 –

+0

我尝试了很多选择,但连接仍然打开。这里是我的代码 - – Judi

这里是我的代码。它不关闭连接。我认为我无法正确使用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()'。该变量被设置为全部小写。 –

我认为更改为小写帮助,因为它暴露了另一个错误。 无法连接到服务器。 我担心我没有在任何地方指定实例名称。我有服务器(或主机)和数据库名称,但无处指定实例名称。 想法?