Algunos Scripts para monitorear SQL Server

Para monitorear el estado de los jobs que fallaron en su última ejecución:

SELECT name FROM msdb.dbo.sysjobs A, msdb.dbo.sysjobservers B
                           WHERE A.job_id = B.job_id AND B.last_run_outcome = 0
Espacio en cada disco para la instancia SQL:

EXEC master..xp_fixeddrives
Para ver un listado de Jobs Deshabilitados:
SELECT name FROM msdb.dbo.sysjobs
           WHERE enabled = 0 ORDER BY name
Para ver un listado de los jobs que están actualmente en ejecución:

msdb.dbo.sp_get_composite_job_info
          NULL, NULL, NULL, NULL, NULL, NULL, 1, NULL, NULL
Para ver logines que son miembros de los roles de servidor:
SELECT 'ServerRole' = A.name, 'MemberName' =  B.name
      FROM master.dbo.spt_values A, master.dbo.sysxlogins B
              WHERE A.low = 0 AND A.type = 'SRV' AND B.srvid IS NULL
Para ver la última vez que las bases de datos fueron backupeadas:

SELECT  B.name as Database_Name, ISNULL(STR(ABS(DATEDIFF(day, GetDate(),
MAX(Backup_finish_date)))),
'NEVER') as DaysSinceLastBackup,
ISNULL(Convert(char(10), MAX(backup_finish_date), 101), 'NEVER')
as LastBackupDate
FROM master.dbo.sysdatabases B
LEFT OUTER JOIN msdb.dbo.backupset A
ON A.database_name = B.name AND A.type = 'D'
GROUP BY B.Name
ORDER BY B.name

Para leer las ultimas entradas del archivo de log (NO el transaction log):

CREATE TABLE #Errors (vchMessage varchar(255), ID int)
CREATE INDEX idx_msg ON #Errors(ID, vchMessage)
INSERT #Errors EXEC xp_readerrorlog
SELECT vchMessage
FROM #Errors
WHERE vchMessage
NOT LIKE '%Log backed up%' AND vchMessage
NOT LIKE '%.TRN%' AND vchMessage
NOT LIKE '%Database backed up%' AND vchMessage
NOT LIKE '%.BAK%' AND vchMessage
NOT LIKE '%Run the RECONFIGURE%' AND
vchMessage NOT LIKE '%Copyright (c)%'
ORDER BY ID

DROP TABLE #Errors


Espero sus comentarios, sugerencias, correcciones, etc y espero además
que estos scripts les sean de utilidad.

Hugo Román Bernachea
Mail de contacto: SQLServer777@gmail.com

Microsoft Certified DBA
Microsoft Certified Trainer
Twitter: @bernachea









Read More...

Como obtener todos los campos de una tabla en SQL 2000 y en 2005

--como obtener todos los campos de una tabla
Una vez determinado el object id, en este caso el 146230095 que corresponde a la tabla store de adventureworks, podremos ejecutar una de las siguientes consultas dependiendo de si estamos en 2000 o en 2005 (y 2008)

--sql server 2000
select syscolumns.name [name], systypes.name [type],
syscolumns.length as 'length',
syscolumns.isnullable as 'isnullable'
from syscolumns inner join systypes
on syscolumns.xtype = systypes.xtype and
syscolumns.xusertype = systypes.xusertype
where syscolumns.id = 14623095"
and systypes.name <> 'sysname'
order by syscolumns.colid

--sql server 2005 & 2008

with ctabla
as
(select s.name + '.' + t.name tabla, t.object_id oid from sys.tables t
inner join sys.schemas s on t.schema_id = s.schema_id)

select c.name [name],
(select top 1name from sys.systypes where xtype = c.system_type_id) [type],
c.max_length [length], c.is_nullable [isnullable] from sys.columns c
inner join ctabla t on c.object_id = t.oid
where t.oid = 14623095
order by c.name

Hugo Román Bernachea
Mail de contacto: SQLServer777@gmail.com

Microsoft Certified DBA
Microsoft Certified Trainer
Twitter: @bernachea

Read More...

Como obtener todas las tablas de una base de datos en SQL Server 2000 y en 2005

--Todas las tablas de una base de datos
-- en sql 2000

select name, Id from sysobjects
where type='U' and name <> 'dtproperties'
order by name

-- en sql 2005
with ctabla
as
(select s.name + '.' + t.name tabla, t.object_id oid from sys.tables t
inner join sys.schemas s on t.schema_id = s.schema_id)
select t.tabla, name from sys.columns c
inner join ctabla t on c.object_id = t.oid

Hugo Román Bernachea
Mail de contacto: SQLServer777@gmail.com

Microsoft Certified DBA
Microsoft Certified Trainer
Twitter: @bernachea

Read More...