Eliminar todas las conexiones activas de una base de datos

CREATE PROCEDURE dbo.KillConexiones
@dbName SYSNAME
AS
BEGIN
SET NOCOUNT ON

DECLARE @spid INT,
@cnt INT,
@sql VARCHAR(255)

SELECT @spid = MIN(spid), @cnt = COUNT(*)
FROM master..sysprocesses
WHERE dbid = DB_ID(@dbname)
AND spid != @@SPID

PRINT 'Eliminando '+RTRIM(@cnt)+' procesos.'

WHILE @spid IS NOT NULL
BEGIN
PRINT 'Eliminando Proceso '+RTRIM(@spid)
SET @sql = 'KILL '+RTRIM(@spid)
EXEC(@sql)
SELECT @spid = MIN(spid), @cnt = COUNT(*)
FROM master..sysprocesses
WHERE dbid = DB_ID(@dbname)
AND spid != @@SPID
PRINT RTRIM(@cnt)+' Procesos por eliminar.'
END
END
GO

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

Microsoft Certified DBA
Microsoft Certified Trainer
Twitter: @bernachea

Read More...

Traducción del Checklist de Mejores Prácticas para ser un DBA excepcional por Brad McGehee

Mejores Prácticas para ser un DBA excepcional SQL Server (redactado por el genial Brad McGehee )

1. Ingresa a un SQL grupo de usuarios (chapters.sqlpass.org)
2. Únete a SQL PASS (www.sqlpass.org)
3. Asistir a por lo menos una conferencia de profesionales cada año.
4. Asistir a por lo menos una sesión de entrenamiento cada año.
5. Lea por lo menos cuatro libros sobre SQL Server cada año.
6. Lea el libro electrónico Cómo convertirse en un DBA excepcional (descarga free en red-gate.com)
7. Aprenda todo lo que pueda acerca de su trabajo, especialmente aquellas áreas que nadie más le gusta o quiere dominar.
8. Sea voluntario en su trabajo para tareas nuevas y difíciles que le harán conocer en toda su organización.
9. Instale SQL Server en una computadora portátil o de escritorio y practique nuevos aspectos de SQL Server, especialmente de SQL Server 2008 y 2008R2 y del nuevo denali (2010).
10. Participar en los foros de SQL Server (preguntar y responder preguntas)
1. www.SQLServerCentral.com
2. http://ask.sqlservercentral.com/com
3. www.microsoft.com / comunidades / grupos de noticias / en-us / default.aspx
11. Obtenga la certificación como DBA de SQL Server:
1. a. Microsoft Certified Technology Specialist (http://www.microsoft.com/learning/en/us/certification/cert-sql-server.aspx # Tab2)
2. b. TI de Microsoft Certified Professional (http://www.microsoft.com/learning/en/us/certification/cert-sql-server.aspx # tab3)















Día a día

1. Compruebe los registros de eventos del S.O. y los registros de SQL Server para detectar eventos inusuales.
2. Verifique que todos los trabajos programados se han ejecutado correctamente.
3. Confirme que las copias de seguridad se han hecho y guardado con éxito a un lugar seguro.
4. Monitoree el espacio en disco para asegurarse de que sus servidores de SQL no se quedarán sin espacio en disco. Para un mejor rendimiento, todos los discos deben tener 15% o más de espacio libre.
5. A lo largo del día, haga un seguimiento periódico de rendimiento utilizando Monitor de sistema y de perfiles / Traza de SQL.
6. Monitorear regularmente e identificar problemas de bloqueo.
7. Mantenga un registro de los cambios que realice a los servidores, incluyendo la documentación de los problemas de rendimiento a identificar y corregir.
8. Crear alertas de SQL Server para que le avise de posibles problemas, y las envíe por mail. Tomar las medidas necesarias.
9. Regularmente restaure copias de seguridad en un servidor de prueba para verificar que realmente los puede restaurar. No es necesario para restaurar todas las copias de seguridad todos los días, pero debiera hacerlo a menudo para asegurarse de que usted tiene buenas copias de seguridad.
10. Tómese su tiempo para aprender algo nuevo como un DBA para promover su desarrollo profesional.

Instalación

1. Siempre documente las instalaciones de modo completo, aun cuando parezca redundante, esto hará que las instancias de SQL Server se pueden reproducir fácilmente en caso de emergencia.
2. Si es posible, instalar y configurar todas las instancias de SQL Server de una manera consistente, de la misma forma , basándose en las normas pre-acordadas de su organización.
3. No instale los servicios de SQL Server que no se utilizan, como Microsoft indexación de texto completo, Reporting Services o Analysis Services.
4. Para obtener el mejor rendimiento de SQL Server, detenga todos los servicios del sistema operativo que no son necesarios.
5. Para un óptimo rendimiento de SQL Server, no ejecutar al SQL Server junto con ninguna otra aplicación.
6. Para obtener el mejor rendimiento I / O, busque los archivos de base de datos (. mdf) y archivos de registro (. ldf) en discos separados para aislar a los patrones de acceso a disco.
7. Si tempdb se utiliza en gran medida, pongalo en un disco aparte.
8. No instale SQL Server en un controlador de dominio.
9. Asegúrese de que SQL Server se instala en una partición NTFS.
10. No utilice NTFS con cifrado de archivos de datos (EFS) y ni compresión de datos sobre el disco de la base de datos de SQL Server y los archivos de registro.

Actualizar1. Ejecute el Upgrade Advisor de SQL Server antes de actualizar. Haga los cambios necesarios antes de realizar la actualización.2. Realizar una actualización de prueba antes de actualizar los servidores de producción. Y no se olvide de probar las aplicaciones con la nueva versión también.3. Antes de actualizar, asegúrese de tener un plan para revertir los cambios en caso que la actualización sea problemática.4. No actualizar clústeres de SQL Server en su lugar. En cambio, a reconstruirlos en un nuevo hardware.5. Si actualiza desde una versión anterior de SQL Server, debe actualizar todas las estadísticas en todas las bases de datos. Esto se debe a que las estadísticas no se actualizan automáticamente durante el proceso de actualización.

Seguridad

  1. Asegure la seguridad física de cada Servidor SQL , previniendo que cualquier usuario no autorizado pueda acceder físicamente a sus servidores.
  2. Instalar solamente las mínimas y necesarias nettwork libraries y network protocols en sus instancias SQL
  3. Minimize el número de usuarios sysadmins con acceso a SQL Server.
  4. Como DBA, logueesé como sysadmin solo cuando realmente lo necesite. Cree cuentas específicas para DBAs para que puedan acceder a SQL Server cuando no necesiten privilegios sysadmin.
  5. Asigne a la cuenta "sa" una password realmente compleja y no la use nunca para loguearse a SQL Server. En vez de eso use una cuenta Windows Authentication para acceder SQL Server como sysadmin.
  6. Dele a los usuarios los mínimos permisos necesarios que le permitan a ellos realizar su trabajo.
  7. De ser posible, use stored procedures o views para el acceso a los datos en vez de dejarlos acceder directamente a las tablas.
  8. De ser posible, use Windows Authentication logins en vez de SQL Server logins.
  9. Use strong passwords (combinación de mayúsculas, minúsculas, numeros y caracteres especiales) para todos los SQL Server login.
  10. No le asigne permisos al rol de base de datos "public"
  11. Remueve Logins IDs que ya no necesitan acceder a SQL Server apenas los detecte.
  12. Deshabilite el usuario "guest" en cada base de datos usando REVOKE CONNECT FROM GUEST.
  13. No use "cross database ownership chaining" si no es realmente necesario.
  14. Nunca habilite permisos a xp_cmdshell a los usuarios que no son sysadmin.
  15. Eliminar las bases de ejemplo (adventureworks, pubs, northwind) de todas las instancias de producción.
  16. Usar Windows Global Groups, o SQL Server Roles para manejar grupos de usuarios con similares permisos.
  17. No debería crear ni permitir crear network shares en servidores SQL Server.
  18. Configurar login auditing , de esta manera se puede ver quienes intentaron loguearse y los intentos fallidos de login.
  19. No use jamás la cuenta sa ni login ids que sean sysadmin como cuentas de acceso desde aplicaciones.
  20. Asegurese que sus servidores están detrás de un firewall y no están expuestos directamente a internet.
  21. En SQL Server 2005 y previos, remover el grupo de BUILTIN/Administrators para evitar que los administradores locales del servidor puedan acceder a SQL Server. En SQL Server 2008, el grupo BUILTIN/Administrators group no existe en forma predeterminada.
  22. Ejecute cada servicio SQL Server bajo una cuenta de dominio diferente.
  23. Dele a las cuentas asignadas a los servicios SQL Server los minimos permisos que le permitan al mismo ejecutarse de la manera correcta. En la mayoría de los casos los permisos de un administrador local no son necesarios y menos aún los permisos de un administrador de dominio.
  24. Cuando use queries distribuidas use linked servers en vez de remote servers. Remote servers están solo por backward compatibility.
  25. No navegue internet desde una instancia de producción de SQL Server.
  26. En vez de instalar antivirus/antispyware en un SQL Server, realice scaneos desde un servidor remoto y solo cuando la actividad del servidor SQL no sea tan alta.
  27. Agregue los service packs, tanto de SQL Server com de sistema operativo apenás estén disponibles.
  28. Considere la posibilidad de encriptar los backups con herramientas como Red Gate SQL Backup Pro u otras.
  29. Solo habilite las trazas de "C2 auditing" o "Common Criteria compliance" cuando sea realmente necesario, porque sobrecargan el servidor si están habilitadas.
  30. Considere seriamente ejecutar un SQL Server security scanner para detectar si hay huecos de seguridad en sus servidores, tanto a nivel sistema operativo como servidor de base de datos. http://searchsqlserver.techtarget.com/feature/SQL-Server-security-test-checklist
  31. Considere habilitar SSL or IPSEC para las conexiones entre sql server y los clientes.
  32. Si está utilizando SQL Server 2005/2008, habilite password policy checking.
  33. Si está usando SQL Server 2008 en un entorno de alta seguridad, considere implementar TDE, Transparent Data Encryption para proteger los datos de su servidor.
  34. Si utiliza SQL Server 2005, no use SQL Server Surface Area Configuration para desbloquear características que nunca se utilizan y que pueden traer solamente problemas de seguridad.
  35. Si está usando SQL Server 2005/2008 y crea endpoints, solo habilite permisos grant CONNECT a los logins que realmente necesitan acceder esos endpoints. Explicitamente deniegue (deny) CONNECT permissions a los endpoints que no son necesarios para los usuarios.

Mantenimiento de Jobs

  1. Evite ejecutar jobs en el mismo horario. Preferentemente cada job debe ejecutarse en su propio horario.
  2. Cuando cree jobs asegurese de incluir intercepción de errores, de loguear la actividad del job y de establecer alertas (mails por ejemplo) para asegurarse de saber al momento de cualquier fallo que pudiera ocurrir.
  3. Cree un login específico con el solo propósito de ejecutar jobs y asignele a dicho login todos los jobs.
  4. Si su job incluye código Transact-SQL, asegurese que está optimizado para que se ejecute correctamente.
  5. Periodicamente (diario, semanal, mensual) reconstruya o reorganice los índices de sus bases de datos para remover la fragmentación logica y aprovechar mejor el especio en disco.
  6. Periódicamente y como parte de sus tareas de mantenimiento, ejecute DBCC CHECKDB en todas sus bases de datos para comprobar su integridad y detectar eventuales problemas.
  7. Evite ejecutar comandos DBCC en los horarios donde se da la mayor carga de trabajo en sus servidores. Estos comandos son altamente requirientes en términos de recursos y afectan la performance.
  8. Si usted reinicia muy raramente el servicio SQL Server service, se va a encontrar con que el log de SQL Server se pone muy grande y toma mucho tiempo para cargar y ser mostrado. Usted puede cerrar el log error actual y crear uno nuevo ejecutando sp_cycle_errorlog o DBCC ERRORLOG. Establezca esto como un job semanal.
  9. Haga un script de todos los jobs y guarde esos scripts en un lugar seguro por si necesita en algun momento reconstruir los servers.

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

Microsoft Certified DBA
Microsoft Certified Trainer
Twitter: @bernachea

Read More...