Sei sulla pagina 1di 5

/* monitoreando en sql server por medio de scrips*/ /**onitoreando los job que fallaron en la ultima secion*/ SELECT name

FROM msdb.dbo.sysjobs A, msdb.dbo.sysjobservers B WHERE A.job_id = B.job_id AND B.last_run_outcome = 0 /*muy util si tenemosjobs que realizen procesos que no tengas controlados por medio de notificaciones,*/ /**espacio en cada disco para la intancia sql server*/ EXEC master..xp_fixeddrives /*** para ver un listadod e jobs desabilitados*/ SELECT name FROM msdb.dbo.sysjobs WHERE enabled = 0 ORDER BY name /*de esta forma se evita el trabajo manual*/ /***para ver un listado de jobs que estan trabajando en tiempo real*/ msdb.dbo.sp_get_composite_job_info NULL, NULL, NULL, NULL, NULL, NULL, 1, NULL, NULL /****para ver la ultima ves que el servidor halla sido repaldada*/ 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 /****leer las ultimas entradas del log*/ CREATE TABLE #Errors (vchMessage varchar(255), ID int) CREATE INDEX idx_msg ON #Errors(vchMessage, ID) 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 select * from #Errors DROP TABLE #Errors /*ver los diferentes administradores del sistema*/ sp_helpsrvrole

/*Scripts TSQL Monitoring Services Using T-SQL Todos tenemos en cuenta que nuestra herramienta de administracin de instancias/base de datos SQL Server es iniciada a travs de 2 servicios principales como son el MSSQLSERVER y el SQLSERVERAGENT (existen otro grupo de servicios como el Integration Services, Fulltext Search, SQL Server Browser, entre otros). Cabe destacar que es de vital importancia establecer un monitoreo sobre dichos servicios dado que si por ejemplo, el servicio SQLSERVERAGENT se viene abajo, no se podrn ejecutar de forma automtica las tareas que tengamos programadas en la instancia y en caso de que sea el servicio MSSQLSERVER.. entonces simplemente dejaramos de prestar servicio al usuario final (esto teniendo en cuenta que no tengamos un servidor de alta disponibilidad o que las opciones de Database Mirroring/ Failover Clustering o Replication no estn previamente configuradas). El script para el monitoreo de los servicios MSSQLSERVER y SQLSERVEAGENT es el siguiente:*/ CREATE TABLE #MSSQLSERVER ( ID_ INT IDENTITY, SERVICE VARCHAR (40), STATE VARCHAR (40) ) INSERT INTO #MSSQLSERVER (SERVICE) VALUES ('MSSQLSERVER') INSERT INTO #MSSQLSERVER (STATE) EXEC MASTER.DBO.XP_SERVICECONTROL 'QUERYSTATE', 'MSSQLSERVER' DECLARE @S1 VARCHAR (40) SELECT @S1 = STATE FROM #MSSQLSERVER WHERE ID_ = @@IDENTITY UPDATE #MSSQLSERVER SET STATE = @S1 WHERE ID_ = @@IDENTITY -1 DELETE FROM #MSSQLSERVER WHERE ID_ = @@IDENTITY SELECT SERVICE, STATE FROM #MSSQLSERVER DROP TABLE #MSSQLSERVER

CREATE TABLE #SQLSERVERAGENT ( ID_ INT IDENTITY, SERVICE VARCHAR (40), STATE VARCHAR (40) ) INSERT INTO #SQLSERVERAGENT (SERVICE) VALUES ('SQLSERVERAGENT') INSERT INTO #SQLSERVERAGENT (STATE) EXEC MASTER.DBO.XP_SERVICECONTROL 'QUERYSTATE', 'SQLSERVERAGENT'

DECLARE @S2 VARCHAR (40) SELECT @S2 = STATE FROM #SQLSERVERAGENT WHERE ID_ = @@IDENTITY UPDATE #SQLSERVERAGENT SET STATE = @S2 WHERE ID_ = @@IDENTITY -1 DELETE FROM #SQLSERVERAGENT WHERE ID_ = @@IDENTITY SELECT SERVICE, STATE FROM #SQLSERVERAGENT DROP TABLE #SQLSERVERAGENT /*Scripts TSQL Monitoring Processes on the SQL Instance Para poder conocer que esta interactuando con nuestras instancias y mucho mas, con las bases de datos que all residen podemos hacer uso del monitoreo de procesos que utiliza SQL Server. Debido al gran numero de actividades que lleva a cabo un DBA dentro de una organizacin a veces resulta imposible estar pendiente del monitor para ver que esta ocurriendo en el momento. Para esto tenemos el siguiente script que nos permite ver, en el Query Analizer, los procesos que estn ejecutndose en la instancia.*/ CREATE TABLE #PROCESOSSRV( APP VARCHAR(60), HOSTNAME VARCHAR(30), [USER] VARCHAR(30), [DATABASE] VARCHAR(60), PROCSTATE VARCHAR(30), CPUTIME VARCHAR(30), NUMLECESC VARCHAR(30) ) INSERT INTO #PROCESOSSRV(APP, HOSTNAME, [USER], [DATABASE], PROCSTATE, CPUTIME, NUMLECESC) SELECT SP.PROGRAM_NAME AS 'APP', SP.HOSTNAME AS 'HOST NAME', SP.LOGINAME AS 'USER', SDB.NAME AS 'DATABASE', SP.STATUS AS 'STATE', SP.CPU AS 'CPU TIME', SP.PHYSICAL_IO AS 'PROCESS I/O' FROM MASTER.DBO.SYSPROCESSES SP INNER JOIN MASTER.DBO.SYSDATABASES SDB ON SP.DBID = SDB.DBID SELECT APP, HOSTNAME, [USER], [DATABASE], PROCSTATE, CPUTIME, NUMLECESC FROM #PROCESOSSRV DROP TABLE #PROCESOSSRV

/*Scripts TSQL Monitoring Hard Drives Un aspecto muy importante de las bases de datos es que todas residen en unidades de discos locales o a traves de una SAN. Indiferentemente donde residan los archivos de base de datos (.mdf, .ndf, .ldf) tienden a crecer acorde al nivel de transacciones que presente dicha base de datos por lo que es muy importante monitorear las unidades de disco donde estas residen. Dicho monitore se puede realizar a traves del siguiente script:*/ DECLARE DECLARE DECLARE DECLARE DECLARE DECLARE @HR INT @FSO INT @DRIVE CHAR(1) @ODRIVE INT @TOTALSIZE VARCHAR(20) @MB BIGINT ; SET @MB = 1048576

CREATE TABLE #DRIVESSIZES (DRIVE CHAR(1) PRIMARY KEY, FREESPACE INT NULL, TOTALSIZE INT NULL, ID_SERVIDOR INT NULL) INSERT #DRIVESSIZES(DRIVE,FREESPACE) EXEC MASTER.DBO.XP_FIXEDDRIVES EXEC @HR=SP_OACREATE 'SCRIPTING.FILESYSTEMOBJECT',@FSO OUT IF @HR <> 0 EXEC SP_OAGETERRORINFO @FSO DECLARE DCUR CURSOR LOCAL FAST_FORWARD FOR SELECT DRIVE FROM #DRIVESSIZES ORDER BY DRIVE OPEN DCUR FETCH NEXT FROM DCUR INTO @DRIVE WHILE @@FETCH_STATUS=0 BEGIN EXEC @HR = SP_OAMETHOD @FSO,'GETDRIVE', @ODRIVE OUT, @DRIVE IF @HR <> 0 EXEC SP_OAGETERRORINFO @FSO EXEC @HR = SP_OAGETPROPERTY @ODRIVE,'TOTALSIZE', @TOTALSIZE OUT IF @HR <> 0 EXEC SP_OAGETERRORINFO @ODRIVE UPDATE #DRIVESSIZES SET TOTALSIZE=@TOTALSIZE/@MB WHERE DRIVE=@DRIVE FETCH NEXT FROM DCUR INTO @DRIVE END CLOSE DCUR

DEALLOCATE DCUR EXEC @HR=SP_OADESTROY @FSO IF @HR <> 0 EXEC SP_OAGETERRORINFO @FSO SELECT DRIVE AS 'HARD DRIVES',FREESPACE AS 'FREE(MB)',TOTALSIZE AS 'TOTAL(MB)',CAST((FREESPACE/(TOTALSIZE*1.0))*100.0 AS DECIMAL (15,4)) AS 'FREE(%)',CAST(100-((FREESPACE/(TOTALSIZE*1.0))*100.0) AS DECIMAL (15,4)) AS 'USED(%)', 23 FROM #DRIVESSIZES ORDER BY DRIVE DROP TABLE #DRIVESSIZES

Potrebbero piacerti anche