Buscar este blog

miércoles, 30 de septiembre de 2015

JOB - Ejecución Remota

Lo hace mediante el linked server 'servidor2'.
EXEC servidor2.msdb.dbo.sp_start_job @job_name = N'PRUEBA_ISA';

1.- Creamos un job de prueba en el servidor1.
2.- Creamos un login con rol de administrador en servidor1
3.- Creamos un linked server en servidor2. con el usuario que creamos anteriormente
4.- Ejecutamos:

EXEC servidor2.msdb.dbo.sp_start_job @job_name = N'PRUEBA_ISA';


miércoles, 16 de septiembre de 2015

TEMPDB - Servicios SQL Server

En una ocasión se tuvo que rearmar un servidor. Este tenia un SQL Server 2008 R2 SP2, sus particiones, discos; D:/ datos, L:/ Logs, T:/ tempdb y C:/ el sistema operativo y bases master, msdb y model.

El plan consistía en actualizar las LUNs y HHDs, para esto había que eliminar las Luns volverlas a crear eliminar las particiones de discos D,L,T y volverlar a armar, y renombrar los discos con las letras M, N y H. Dejando solo la unidad C sin tocar.

Cuando el área de infraestructura termino el trabajo, me tocaba renonbrar el SQL y configurar nuevamente la tempdb y restorear algunas bases de datos en esta instancia.

Problema:
Cuando quise levantar el servicio de SQL. me salia este error.



Esto sucedía porque no encontraba los archivos de la tempdb del disco T. Esto me di cuenta al momento de mirar el logs de windows, indicaba que no encontraba la ruta.

La solución fue:

Renombrar H por T. y crear los archivos tempdev.mdf y templog a mano.
después de esto levanto el Servicio de SQL, levantado el servicio los otros pasos
fueron fáciles de realizar.












viernes, 11 de septiembre de 2015

SINONIMOS - SQL Server 2008

Se pueden crear sinónimos para los siguientes tipos de objetos:

Procedimiento almacenado del ensamblado (CLR)
Función con valores de tabla del ensamblado (CLR)
Función escalar del ensamblado (CLR)
Funciones de agregado del ensamblado (CLR)
Procedimiento de filtro de replicación
Procedimiento almacenado extendido
Función escalar de SQL
Función SQL con valores de tabla
Función SQL con valores de tabla insertados
Procedimiento almacenado de SQL
Vista
Tabla1 (definida por el usuario)

1 Incluye tablas temporales locales y globales

Biografia: https://msdn.microsoft.com/es-es/library/ms177544(v=sql.100).aspx

QUERY PLAN - Plan de ejecución

Los planes de ejecución se guardan en memoria, a medida que se van ejecutando los SPs, consultas, etc. estos se acumulan en memoria para ser reutilizados. Por ejemplo un SP que tiene un parámetro variable de X = 57, X = 98 y X=107

Select * from tabla
where X =?

El valor X va cambiar 3 veces, estas ejecuciones se guardaran en cache para su reutilización.

Cuando se libera un plan de ejecución?. Esto depende de la saturación de la memoria, cuando esto sucede se satura la memoria; el SQL elige los planes de ejecución con la cuota igual a cero para eliminarlos.

Supongamos que tenemos planes de ejecución con Cuota cero pero no tenemos saturación de memoria: Estos no serán eliminados.



viernes, 21 de agosto de 2015

JOB - Busca Job En ejecución

SQL Server 2000. Lo uso para identificar el job. teniendo el número hexadecimal.0x....

1.- Ejecuto: sp_who2 'active'--encuentra el proceso--

Salida: SQLAgent - TSQL JobStep (Job 0xEE3F000650732D4DB127DF7C7F95ED44 : Step 2)


2.- copio el numero hexadecimal

SELECT *
FROM msdb.dbo.sysjobs
WHERE job_id = CAST(0xEE3F000650732D4DB127DF7C7F95ED44 AS UNIQUEIDENTIFIER)

jueves, 6 de agosto de 2015

Migración Jobs SQL Server 2000 a 2005,2008,2012

Se puede hacer creando los script directamente a mano esto funciona para la version SQL 2000 a SQL 2005 para los otras versiones usar  Integration Services para migrar.

miércoles, 5 de agosto de 2015

MAIL - SQL Server 2000 "xp_sendmail"


1.- Tira el siguiente error: 

Message
Executed as user: OMINT\SQLServer. xp_sendmail: failed with mail error 0x80004005 [SQLSTATE 42000] (Error 18025).  The step failed. 


2.- Para solucionarlo ejecutar:  exec master.dbo.xp_stopmail


pobar el envio de mail nuevamente



3.- Si fuera necesario levantar el envió de mail ejecutar: exec master.dbo.xp_startmail

martes, 21 de julio de 2015

DBCC INDEXDEFRAG

Se dejara de usar a partir de la V12 en adelante.
El DBCC INDEXDEFRAG es muy útil y eficiente para defragmentar los índices, lo interesante es que no mantiene bloqueos a largo plazo, y no genera bloqueos en actualizaciones (Update) y consultas (Select).

El tiempo dependerá de la ejecución del DBCC INDEXDEFRAG, del tamaño de la tabla y cuan fragmentado esta el índice. Por lo general no hay que preocuparse por esto. Si la defragmentación tarda mucho sobre un índice especifico sera mejor aplicar una reconstrucción del índice.

Si se esta trabajando con grandes volúmenes de datos y los indices presentan una fragmentacion también grande hay que tener cuidado porque los resultados pueden genera demaciada informacion en el registro log que la creacion misma de un indice.

Script de microsoft para defragmentar:

/*Perform a 'USE ' to select the database in which to run the script.*/
-- Declare variables
SET NOCOUNT ON;
DECLARE @tablename varchar(255);
DECLARE @execstr   varchar(400);
DECLARE @objectid  int;
DECLARE @indexid   int;
DECLARE @frag      decimal;
DECLARE @maxfrag   decimal;

-- Decide on the maximum fragmentation to allow for.
SELECT @maxfrag = 30.0;

-- Declare a cursor.
DECLARE tables CURSOR FOR
   SELECT TABLE_SCHEMA + '.' + TABLE_NAME
   FROM INFORMATION_SCHEMA.TABLES
   WHERE TABLE_TYPE = 'BASE TABLE';

-- Create the table.
CREATE TABLE #fraglist (
   ObjectName char(255),
   ObjectId int,
   IndexName char(255),
   IndexId int,
   Lvl int,
   CountPages int,
   CountRows int,
   MinRecSize int,
   MaxRecSize int,
   AvgRecSize int,
   ForRecCount int,
   Extents int,
   ExtentSwitches int,
   AvgFreeBytes int,
   AvgPageDensity int,
   ScanDensity decimal,
   BestCount int,
   ActualCount int,
   LogicalFrag decimal,
   ExtentFrag decimal);

-- Open the cursor.
OPEN tables;

-- Loop through all the tables in the database.
FETCH NEXT
   FROM tables
   INTO @tablename;

WHILE @@FETCH_STATUS = 0
BEGIN
-- Do the showcontig of all indexes of the table
   INSERT INTO #fraglist 
   EXEC ('DBCC SHOWCONTIG (''' + @tablename + ''') 
      WITH FAST, TABLERESULTS, ALL_INDEXES, NO_INFOMSGS');
   FETCH NEXT
      FROM tables
      INTO @tablename;
END;

-- Close and deallocate the cursor.
CLOSE tables;
DEALLOCATE tables;

-- Declare the cursor for the list of indexes to be defragged.
DECLARE indexes CURSOR FOR
   SELECT ObjectName, ObjectId, IndexId, LogicalFrag
   FROM #fraglist
   WHERE LogicalFrag >= @maxfrag
      AND INDEXPROPERTY (ObjectId, IndexName, 'IndexDepth') > 0;

-- Open the cursor.
OPEN indexes;

-- Loop through the indexes.
FETCH NEXT
   FROM indexes
   INTO @tablename, @objectid, @indexid, @frag;

WHILE @@FETCH_STATUS = 0
BEGIN
   PRINT 'Executing DBCC INDEXDEFRAG (0, ' + RTRIM(@tablename) + ',
      ' + RTRIM(@indexid) + ') - fragmentation currently '
       + RTRIM(CONVERT(varchar(15),@frag)) + '%';
   SELECT @execstr = 'DBCC INDEXDEFRAG (0, ' + RTRIM(@objectid) + ',
       ' + RTRIM(@indexid) + ')';
   EXEC (@execstr);

   FETCH NEXT
      FROM indexes
      INTO @tablename, @objectid, @indexid, @frag;
END;

-- Close and deallocate the cursor.
CLOSE indexes;
DEALLOCATE indexes;

-- Delete the temporary table.
DROP TABLE #fraglist;
GO

jueves, 16 de julio de 2015

REINDEX - Tabla de comportamientos de reindex

TABLA DE COMPORTAMIENTOS DE REINDEX

Scenario
SQL Server 2008 R2
SQL Server 2008
SQL Server 2005
SQL Server 2000
DBCC REINDEX to rebuild the Clustered Index ix_Col1
Update all Index Statistics
Update all Index Statistics
Update only the Clustered Index
All statistics updated
DBCC REINDEX in the NonClustered Index
Update only the NonClustered Index
Update only the NonClustered Index
Update only the NonClustered Index
Update only the NonClustered Index
DBCC REINDEX without specify the index. That means all index must be updated
All statistics updated
All statistics updated
All statistics updated
All statistics updated
ALTER INDEX REBUILD to update the Clustered Index
Update only the Clustered Index
Update only the Clustered Index
Update only the Clustered Index
Not Apply
ALTER INDEX REBUILD to update the NonClustered Index
Update only the NonClustered Index
Update only the NonClustered Index
Update only the NonClustered Index
Not Apply
ALTER INDEX ALL REBUILD to update the ALL Index
Update all Index Statistics
Update all Index Statistics
Update all Index Statistics
Not Apply

Monitoreo con PSSDIAG, SQLNEXUS y PerfStatsScripts

Para el servidor Pegaso
1.- instalar PSSDIAG en C:\PSSDIAG
Revisar el ejecutable en: C:\PSSDIAG\Pristine\pssdiag.cmd
Verificar donde se instaló el SQLdiag: F:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLdiag.exe

2.- Copiar SQL Nexux y PerfStatsScript2008 en C:\temp2
SQL Nexus: Es el editor de los reportes
PerfStatsScript2008: es la carpeta que contiene los reportes script y xml

3.- Donde y como ejecutar los monitoreos.
Para ejecutar un monitoreo vamos a la carpeta  PerfStatsScript2008 y modificamos el archivos: StartSQLDiagTrace2008.cmd o creamos una copia de este y lo modificamos.


@REM  To register the collector as a service, open a command prompt, change to this
@REM  directory, and run:
@REM 
@REM     SQLDIAG /R /I "%cd%\SQLDiagPerfStats_Trace.XML" /O "%cd%\SQLDiagOutput" /P
@REM 
@REM  You can then start collection by running "SQLDIAG START" from Start->Run, and
@REM  stop collection by running "SQLDIAG STOP".

@rem the command below sets sqldiag.exe path.  if your installation is different, adjust accordinly
@rem sql 2008 sqldiag.exe will be able to capture multiple platforms.
@rem any sqldiag will be able to detect 32 bit or 64 bit instances
set SQLDIAGCMD=F:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLdiag.exe

"%SQLDIAGCMD%" /I "C:\Temp2\PerfStatsScript2008\SQLDiagPerfStats_Trace2008.XML" /O "G:\SQLDiagOutput" /P

BLOQUEOS - Kb Microsoft




http://support.microsoft.com/kb/271509

JOB - Eliminar jobs obsoletos

Eliminar o dar de Baja Jobs


Se borraron BD en des-uso, el problema es que estas bases estuvieron operativas y productivas en su momento,
 y cuando se dieron de baja no se tomo en cuenta los job y usuarios que accedian a las bases desde alguna app.

El error que encontre en el log era el siguiente:

2013-05-09 10:18:03.88 Logon       Error: 18456, Severity: 14, State: 38.
2013-05-09 10:18:03.88 Logon       Login failed for user 'dominio\xxxxx'. Reason: Failed to open the explicitly specified database. [CLIENT: xx.xxx.xx.xx]

1.- Lo primero es ejecutar un trace con SQL Server Profiler, seleccionando los eventos: Error Log y User Error Message. y tildando en todas las columnas para un mejor análisis.

2.- Después navegar por el trace e identificar los problemas del usuario 'dominio\xxxxx', una vez identificado es bastante facil.


1.-
--sacar el database_id-- si no existe la base paso a la consulta 2
select * from sys.databases
where name = 'basededato'

2.-
--Buscar por "database_name" segun la consulta anterior
-- y sacar el job_id para ejecutar en la siguiente consulta
use msdb
go
select database_name, * from sysjobsteps
order by 1 desc

3.-
select name, job_id,* from sysjobs
where job_id = '36E88341-774B-4D26-BD63-863F53EE42BB'

lunes, 13 de julio de 2015

SUSPECT - Recuperar base de datos

/*

--modo emergencia sql server 2000--

sp_configure ‘allow’ ,1
GO
Reconfigure with override
GO
Update sysdatabases set status = 32768 where name = ‘SQLDBPool’
GO
sp_configure ‘allow’, 0
GO
Reconfigure with override
go


*/

/*
Caso estado de la base emergencia en suspect, Servidor:
SQL Server 2005
--Antes de seguir estos pasos es posible que reiniciando el servicio
--de SQL solucione el problema de bases: suspect.

*/

--Pongo la base en modo emergencia
use  master
GO
ALTER DATABASE emergencias SET EMERGENCY


--Pongo la base en modo simple
ALTER DATABASE emergencias  SET SINGLE_USER
WITH ROLLBACK IMMEDIATE
GO

--Ejecuto el check db para reparar datos perdidos
DBCC CHECKDB (emergencias, REPAIR_ALLOW_DATA_LOSS)
GO

--Con el resultado del dbcc checkdb identifico la tabla/vista/indice ------donde esta el problema

--Como indentifique la tabla del problema ejecuto
--dbcc checktable, siempre en el estado modo simple user

DBCC CHECKTABLE ('EM_Visitas_Enc', REPAIR_REBUILD)
GO

--Pongo la base modo multi user
ALTER DATABASE emergencias  SET MULTI_USER


--Ejecuto dbcc checkdb sobre toda la base
--ya no deberiamos tener errores.

use emergencias
go

DBCC CHECKDB

lunes, 6 de julio de 2015

BACKUPS - Bases del Sistema - Device

1.- Ejecutar el  Device.sql
     Que genera los archivos de los device para backups de bases del sistema
     Después programar Job de bakups

/*Isaac Pacheco*/

/*Devices for system databases backup*/
/*Cambiar @physicalname donde corresponde*/
/*Bases Master,Model,msdb*/

----------------------/Master/-------------------------
EXEC master.dbo.sp_addumpdevice
@devtype = N'disk', @logicalname = N'masterLMV',
@physicalname = N'D:\MSSQL2008R2\masterLMV.bak'
GO

EXEC master.dbo.sp_addumpdevice
@devtype = N'disk', @logicalname = N'masterMJS',
@physicalname = N'D:\MSSQL2008R2\masterMJS.bak'
GO

------------------------/Model/------------------------
EXEC master.dbo.sp_addumpdevice
@devtype = N'disk', @logicalname = N'modelLMV',
@physicalname = N'D:\MSSQL2008R2\modelLMV.bak'
GO

EXEC master.dbo.sp_addumpdevice
@devtype = N'disk', @logicalname = N'modelMJS',
@physicalname = N'D:\MSSQL2008R2\modelMJS.bak'
GO

------------------------msdb----------------------------
EXEC master.dbo.sp_addumpdevice
@devtype = N'disk', @logicalname = N'msdbLMV',
@physicalname = N'D:\MSSQL2008R2\msdbLMV.bak'
GO

EXEC master.dbo.sp_addumpdevice
@devtype = N'disk', @logicalname = N'msdbMJS',
@physicalname = N'D:\MSSQL2008R2\msdbMJS.bak'
GO