Invoke-Sqlcmd 在某些数据库上查询@@IDLE 或@@IO_BUSY 失败
Query on @@IDLE or @@IO_BUSY fails on some databases from Invoke-Sqlcmd
运行 在查询@@IDLE 或@@IO_BUSY 时,对多个数据库的相同查询有时会失败。它在 6 个数据库上工作,在 4 个数据库上失败。当使用-Verbose
时,输出VERBOSE: Arithmetic overflow occurred.
,但没有指示什么对象溢出。
PS C:\src\Modules> $Query
SELECT
SERVERPROPERTY('ServerName') AS ServerName
,SERVERPROPERTY('ComputerNamePhysicalNetBIOS') AS ComputerNamePhysicalNetBIOS
,@@IDENTITY AS I_DENTITY
,@@IDLE AS I_DLE
,@@IO_BUSY AS I_O_BUSY
,@@MAX_PRECISION AS MAX_PRECISION
PS C:\src\Modules> $ServerInstance = 'DBSERVER1'
PS C:\src\Modules> Invoke-Sqlcmd -Query $Query -ServerInstance $ServerInstance -Verbose
ServerName : DBSESRVER1
ComputerNamePhysicalNetBIOS : DGEDW284
I_DENTITY :
I_DLE : -869467476
I_O_BUSY : 1767922
MAX_PRECISION : 38
PS C:\src\Modules> $ServerInstance = 'DBSERVER2'
PS C:\src\Modules> Invoke-Sqlcmd -Query $Query -ServerInstance $ServerInstance -Verbose
PS C:\src\Modules>
使用的代码在失败的数据库上将 $Results 设置为 $null。
try {
$Results = Invoke-Sqlcmd -Query $Query `
-ServerInstance $Instance `
-ErrorAction SilentlyContinue
if ($null -ne $Results) {
foreach ($Result in $Results) {
$result | Add-Member -NotePropertyName instance -NotePropertyValue $Instance
$ResultList += $result
}
} else {
Write-Verbose "Results is set to `$null for instance $Instance"
}
}
catch {
Write-Verbose "in catch"
}
为后代从文档复制的注释 - 如果在@@CPU_BUSY 或@@IO_BUSY 中返回的时间超过大约 49 天的累积 CPU 时间,您将收到算术溢出警告。在那种情况下,@@CPU_BUSY、@@IO_BUSY 和@@IDLE 变量的值不准确。
运行 在查询@@IDLE 或@@IO_BUSY 时,对多个数据库的相同查询有时会失败。它在 6 个数据库上工作,在 4 个数据库上失败。当使用-Verbose
时,输出VERBOSE: Arithmetic overflow occurred.
,但没有指示什么对象溢出。
PS C:\src\Modules> $Query
SELECT
SERVERPROPERTY('ServerName') AS ServerName
,SERVERPROPERTY('ComputerNamePhysicalNetBIOS') AS ComputerNamePhysicalNetBIOS
,@@IDENTITY AS I_DENTITY
,@@IDLE AS I_DLE
,@@IO_BUSY AS I_O_BUSY
,@@MAX_PRECISION AS MAX_PRECISION
PS C:\src\Modules> $ServerInstance = 'DBSERVER1'
PS C:\src\Modules> Invoke-Sqlcmd -Query $Query -ServerInstance $ServerInstance -Verbose
ServerName : DBSESRVER1
ComputerNamePhysicalNetBIOS : DGEDW284
I_DENTITY :
I_DLE : -869467476
I_O_BUSY : 1767922
MAX_PRECISION : 38
PS C:\src\Modules> $ServerInstance = 'DBSERVER2'
PS C:\src\Modules> Invoke-Sqlcmd -Query $Query -ServerInstance $ServerInstance -Verbose
PS C:\src\Modules>
使用的代码在失败的数据库上将 $Results 设置为 $null。
try {
$Results = Invoke-Sqlcmd -Query $Query `
-ServerInstance $Instance `
-ErrorAction SilentlyContinue
if ($null -ne $Results) {
foreach ($Result in $Results) {
$result | Add-Member -NotePropertyName instance -NotePropertyValue $Instance
$ResultList += $result
}
} else {
Write-Verbose "Results is set to `$null for instance $Instance"
}
}
catch {
Write-Verbose "in catch"
}
为后代从文档复制的注释 - 如果在@@CPU_BUSY 或@@IO_BUSY 中返回的时间超过大约 49 天的累积 CPU 时间,您将收到算术溢出警告。在那种情况下,@@CPU_BUSY、@@IO_BUSY 和@@IDLE 变量的值不准确。