Eu tento criar uma tabela para armazenar as informações de armazenamento usadas para cada banco de dados.
Como eles estão hospedados em diferentes Clusters/Instâncias, criei uma tabela com todas as Informações de Instâncias/Servidor.
_________________________
|________DBInstance_______|
|____ID___|_Instância_______|
|____1____|Servidor\Instância__|
|____2____|AG-Ouvinte_____|
Em seguida, crio um cursor e envio minha consulta para todos os servidores listados na Instance-Table.
DECLARE @ID nvarchar(2), @Instancename VARCHAR(50), @cmd NVARCHAR(MAX)
DECLARE DBCursor CURSOR FOR
SELECT ID, Instance
from DBInstancelist;
DECLARE @ID nvarchar(2), @Instancename VARCHAR(50), @cmd NVARCHAR(MAX)
DECLARE DBCursor CURSOR FOR
SELECT ID, Instance
from DBInstancelist;
OPEN DBCursor
FETCH NEXT FROM DBCursor into @id , @Instancename
WHILE @@FETCH_STATUS = 0
BEGIN
select @cmd = N'INSERT INTO DBSIZE
select a.*
from OPENROWSET (''SQLNCLI'',''Server=' + @Instancename + ';Trusted_Connection=YES;'',''select
[ID] = '+@ID+',
[Database Name] = DB_NAME(database_id),
[Type] = CASE WHEN Type_Desc = ''''ROWS'''' THEN ''''Data File''''
WHEN Type_Desc = ''''LOG'''' THEN ''''Log File''''
ELSE ''''SUMME'''' END,
[Size in MB] = CAST( ((SUM(Size)* 8) / 1024.0) AS DECIMAL ),
GETDATE() AS Scantime
FROM sys.master_files
WHERE database_id > 4
GROUP BY GROUPING SETS
(
(DB_NAME(database_id), Type_Desc),
(DB_NAME(database_id))
)
ORDER BY DB_NAME(database_id), Type_Desc DESC'')
AS a;'
--select @cmd
exec sp_executesql @cmd
--select @cmd
FETCH NEXT FROM DBCursor into @ID, @Instancename
END
CLOSE DBCursor
DEALLOCATE DBCursor
para as primeiras 4 Instâncias eu recebo a Informação I exceto, para a 5ª Instância entretanto, eu recebo após o Erro.
"Arithmetic overflow error converting expression to data type int.
Este erro só aparece, se eu adicionar a linha
"[ID] = '+@ID+',",
mas o ID da instância é necessário para relatórios adicionais.
Por que a conversão está aparecendo e como posso pará-la (Onde está meu erro)?
Desculpe, não sei como destacar um comentário.
Scott Hodgin poste a solução:
é a linha correta e solução para o meu problema :)
Muito obrigado :) !