Mejor Notificacion de SQL Agent Jobs

Se tienen varios pasos en un job que se necesita que en caso de error continúe, pero el último paso es exitoso el job queda reportado exitoso sin importar que pasos anteriores fallaran, como siempre nosotros necesitamos que si algún paso falla reporte el job como  tal (fail) que hacer:

Incluimos un paso al final con  el siguiente código

use msdb
if (
select count(2)
FROM [msdb].[dbo].[sysjobsteps]
where [last_run_outcome] = 0 and job_id = (
select job_id from dbo.sysjobs
where name = ‘nombrejob’ and step_id in (1,2))
) > 0
BEGIN
RAISERROR(‘Failure detected in nombrejob.’, 17, 1)
END

Hay que incluir los pasos en (step_id) sin incluir el último claro esta además del nombre del job..

Instant Initialization

Bueno quiero comentarles sobre esto; ya que me toco vivirlo en algún momento al restaurar desde una ruta compartida por motivos de espacio.

Es una característica nueva de SQL Server 2005 que se basa en una característica de NTFS que se agregó a Windows XP (y por lo tanto, también está disponible en Windows 2003 Server).

Permite que las solicitudes de asignación de archivos para pasar de cero en la creación de la inicialización. Como resultado, las solicitudes de asignación de archivos pueden ocurrir instantáneamente – no importa lo que el tamaño del archivo.

La mayoría de las solicitudes de asignación de archivos son pedidos pequeños, con pequeños cambios incrementales (como los archivos doc,. Xls, etc), pero los archivos de base de datos puede ser bastante grande. De hecho, debe ser bastante grande como pre-asignación de un tamaño de archivo razonable es una buena práctica para reducir la fragmentación de archivos. Además, el crecimiento automático provoca problemas de rendimiento pero en general es algo que desea evitar en lo posible.

Como consecuencia de ello, los tiempos de creación de base de datos puede tardar minutos en horas o días, dependiendo de la solicitud de asignación de archivos.

Adjunto datos de una prueba realizada por su majestad Kimberly L Tripp muy interesante y comparable.

Performance Test with Zero Initialization

Hardware: Dell Precision 670 Dual Proc (x64) with Dual Core, 4 GB Memory, RAID 1+0 array w/4-142 GB, 15000rpm disks:
CREATE DATABASE with 20 GB Data file = 14:02 minutes
ALTER DATABASE BY 10 GB = 7:01 minutes
RESTORE 30 GB DATABASE (EMPTY Backup) = 21:07 minutes
RESTORE 30 GB DATABASE (11GB Backup) = 38:28 minutes

Performance Test with Instant Initialization
Hardware: Dell Precision 670 Dual Proc (x64) with Dual Core, 4 GB Memory, RAID 1+0 array w/4-142 GB, 15000rpm disks
CREATE DATABASE with 20 GB Data file = 1.3 seconds
ALTER DATABASE BY 10 GB = .4 seconds
RESTORE 30 GB DATABASE (EMPTY Backup) = 5 seconds

Como realizar esto..

Conceder permisos «Perform Volume Maintenance Tasks» para utilizar “instant initialization” el servicio de SQL Server se debe ejecutar con una cuenta que tenga los  privilegios necesarios, Si el servicio de SQL Server se ejecuta como administrador local este permiso ya existe.

Este permiso puede ser otorgado por un administrador a través de la herramienta directiva de seguridad local (Local Security Policy tool), (Start, All Programs, Administrative Tools)

SQL Server utiliza automáticamente la inicialización instantánea.

NOTA: Si se conceden permisos, mientras que SQL Server se está ejecutando, se debe reiniciar el servicio de SQL.

SSRS – System.Data.OracleClient requires Oracle client software version 8.1.7 or greater

Error que me ocurrió hace poco al publicar un reporte y tratar de generarlo el mismo se conectaba directamente a Oracle 11g. El escenario el siguiente WK 2008 enterprise 64X, teníamos instalados los clientes de Oracle tanto de 64X como 86X al realizar varias pruebas me di cuenta que efectivamente no estaba utilizando el cliente correcto.

«An error occurred during client rendering.
An error has occurred during report processing.
Cannot create a connection to data source ‘dsPlanillasRT’.
System.Data.OracleClient requires Oracle client software version 8.1.7 or greater»

Solución:

Dar permisos a la carpeta: Oracle\Oracle version\bin directory and to the Oracle\Oracle version\network\admin directory.

Más información: http://support.microsoft.com/default.aspx?scid=kb;en-us;870668

Error loading PackageName: Failed to decrypt protected XML node

Un lindo error y sumamente común porque comó siempre en el Business Intelligence Development Studio (BIDS) todo funciona.

Error loading PackageName: Failed to decrypt protected XML node «PackagePassword» with error 0x8009000B «Key not valid for use in specified state.»

Esto es causa del valor de la propiedad ProtectionLevel del Paquete DTSX, para proteger la información sensible del Paquete DTSX

  • Do not save sensitive (DontSaveSensitive). Esta opción implica que no se      guardará la información sensible. Si volvermos a abrir el Paquete DTSX desde BIDS, deberemos volver a especificar el valor de los datos sensibles.
  • Encrypt all with password (EncryptAllWithPassword). Esta opción implica que se encripta el Paquete DTSX completo, utilizando para la encriptación, un clave      especificada por el usuario, como si se tratase de una contraseña. Si      volvermos a abrir el Paquete DTSX desde BIDS o si queremos ejecutarlo      (ej:con dtexec), deberemos especificar la password para poder recuperar el      Paquete DTSX.
  • Encrypt all with user key (EncryptAllWithUserKey). Esta opción implica que se encripta el paquete completo, utilizando para la encriptación, un clave basada en el perfil de usuario. Sólo el mismo usuario utilizando el mismo perfil, puede volver a cargar el Paquete DTSX.
  • Encrypt sensitive with password (EncryptSensitiveWithPassword). Similar a EncryptAllWithPassword, pero en este caso, sólo se encripta la información sensible del Paquete DTSX. Utiliza DPAPI.
  • Encrypt sensitive with user key (EncryptSensitiveWithUserKey). Similar a EncryptAllWithUserKey, pero en este caso, sólo se encripta la información sensible del Paquete DTSX. Utiliza DPAPI.
  • Rely on server storage for encryption (ServerStorage). Protege el Paquete DTSX completo mediante la utilización de los roles de base de datos de MSDB (db_dtsoperator, db_dtsadmin, db_dtsltduser). Esta opción no está soportada desde BIDS guardando el Paquete DTSX en el File System.

Más información: http://support.microsoft.com/kb/918760

Propiedades de los artículos en la Replicación

Es interesante que revisemos si las propiedades de replicación del artículo por defecto se ajustan a nuestras necesidades. Para ello utilizaremos el botón “Article Properties” para desplegar la ventana de propiedades:

Una modificación habitual a estas propiedades por defecto es activar la copia automática de los índices no-clustered. Por defecto el artículo contara únicamente con el índice cluster si éste existiera. También puede ser interesante habilitar la opción de copiar las restricciones check (“copy check constraints”) para facilitar al optimizador los planes de ejecución de algunas consultas.

Replicación de datos Sql Server

Agunos Script muy prácticos.

•Script to run on Distribution database –Retorna configuración completa de la replicación

USE Distribution
GO
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
— Get the publication name based on article
SELECT DISTINCT
srv.srvname publication_server
, a.publisher_db
, p.publication publication_name
, a.article
, a.destination_object
, ss.srvname subscription_server
, s.subscriber_db
, da.name AS distribution_agent_job_name
FROM MSArticles a
JOIN MSpublications p ON a.publication_id = p.publication_id
JOIN MSsubscriptions s ON p.publication_id = s.publication_id
JOIN master..sysservers ss ON s.subscriber_id = ss.srvid
JOIN master..sysservers srv ON srv.srvid = p.publisher_id
JOIN MSdistribution_agents da ON da.publisher_id = p.publisher_id
AND da.subscriber_id = s.subscriber_id
ORDER BY 1,2,3

•Script to run on Publisher database – Retorna que publicaciones fueron configuradas

— Run from Publisher Database
— Get information for all databases
DECLARE @Detail CHAR(1)
SET @Detail = ‘Y’
CREATE TABLE #tmp_replcationInfo (
PublisherDB VARCHAR(128),
PublisherName VARCHAR(128),
TableName VARCHAR(128),
SubscriberServerName VARCHAR(128),
)
EXEC sp_msforeachdb
‘use ?;
IF DATABASEPROPERTYEX ( db_name() , »IsPublished» ) = 1
insert into #tmp_replcationInfo
select
db_name() PublisherDB
, sp.name as PublisherName
, sa.name as TableName
, UPPER(srv.srvname) as SubscriberServerName
from dbo.syspublications sp
join dbo.sysarticles sa on sp.pubid = sa.pubid
join dbo.syssubscriptions s on sa.artid = s.artid
join master.dbo.sysservers srv on s.srvid = srv.srvid

IF @Detail = ‘Y’
SELECT * FROM #tmp_replcationInfo
ELSE
SELECT DISTINCT
PublisherDB
,PublisherName
,SubscriberServerName
FROM #tmp_replcationInfo
DROP TABLE #tmp_replcationInfo

•Script to run on Subscriber database – Retorna cuales articulos fueron replicados a la base de datos suscriptora.

— Run from Subscriber Database
SELECT distinct publisher, publisher_db, publication
FROM dbo.MSreplication_subscriptions
ORDER BY 1,2,3

Máximo De Memoria Por Sistema Operativo

Maximum RAM
Windows Server Edition 64-bit 32-bit
2008 (RTM) Datacenter 2TB 64GB
2008 (RTM) Enterprise 2TB 64GB
2008 (RTM) Standard 32GB 4GB
2003 (R2) Datacenter 1TB 128GB
2003 (R2) Enterprise 1TB 64GB
2003 (R2) Standard 32GB 4GB
2003 (SP2) Datacenter 1TB 128GB
2003 (SP2) Enterprise 1TB 64GB
2003 (SP2) Standard 32GB 4GB
2003 (RTM) Datacenter 512GB 64GB
2003 (RTM) Enterprise 64GB 32GB
2003 (RTM) Standard 16GB 4GB
2000 (RTM) Datacenter 64GB (IA64) 32GB
2000 (RTM) Advanced Not Supported 8GB
2000 (RTM) Standard Not Supported 4GB

Permisos sobre SSIS cuando se desea trabajar remotamente (Desde cada PC)

SSIS funciona a nivel de componentes DCOM por lo que los permisos se deben de brindar desde el MMC Component Services.

Los pasos son los
siguientes

  1. Se debe de abrir una consola de MMC
  2. Buscar el snap in que se llama component services
  3. Buscar dentro de DCOM un valor que se llama MSDTSSERVER100
  4. Botón derecho y ubicar el TAB Security
  5. Brindar permisos en las restantes opciones
  6. Luego brindar accesos a MSDB de acuerdo al perfil que se desee  manejar.
  7. Reiniciar el servicio.

El enlace.

http://msdn.microsoft.com/en-us/library/aa337083.aspx

Error SSIS Distribuido

Este error se presenta cuando la base de datos MSDB no va estar alojada localmente.

Solucion: Se debe modificar MsDtsSrvr.ini.xml e incluir el server.

Ejemp
<ServerName>10.1.102.XXX</ServerName>

Se debe reiniciar el servicio.

The Integration Services
service relies on a configuration file for its settings. By default, the name
for this configuration file is MsDtsSrvr.ini.xml, and the file is located in
the folder, %ProgramFiles%\Microsoft SQL Server\100\DTS\Binn.

Mejores Prácticas para ser un DBA

  1. Tómese su tiempo para aprender algo nuevo como un DBA para promover su desarrollo profesional.
  2. Compruebe los registros de eventos del S.O. y los registros de SQL Server para detectar eventos inusuales.
  3. Siempre use el modo de autenticación de Windows si es posible.
  4. Utilice siempre una contraseña segura para la cuenta sa y cambiar la contraseña de la cuenta sa periódicamente.
  5. Cambiar el nombre de la cuenta sa a un nombre de cuenta diferente para prevenir los ataques en la cuenta sa por su nombre.
  6. Trate en la medida de lo posible separar en discos tempdb, datos y logs.
  7. No instalar servicios de SQL que no vallan a ser utilizados.
  8. Nunca nunca utilice auto shirink en las base de datos.
  9. Trate de tener los menos sysadmin posibles.
  10. Trate de segregar  la seguridad lo mas posible dando los permisos que realemente son necesarios.
  11. Siempre configurar  login auditing para detectar posibles intentos de acceso no autorizados.
  12. En SQL Server 2005 y previos, remover el grupo de BUILTIN/Administrators.
  13. Ejecute cada servicio SQL Server bajo una cuenta de dominio.
  14. No se preocupe tanto por los backups preocupese mas por realizar pruebas de los restore de esos backups.
  15. Utilice siempre DBCC CHECKDB para comprobar integridad física y lógica de todos los objetos en las bases de datos.
  16. Realizar un inventario (El equipo de administradores de bases de datos puede perder la pistade lo que hay allá fuera y con ello ocasionar instancias no administradas de SQL Server)
  17. Estandarizar configuraciones (Es extremadamente difícil trabajar deforma eficaz al pasar de una instancia a otra si constantemente debe recordar los detalles de configuración de las distintas instancias)