Como generar un script con solo los índices de una base de datos

by Maxi Accotto 19. mayo 2012 21:22

 

Muchas veces necesitamos armar un script con todos los índices de una base de datos. Para ello yo escribí este script en Powershell el cual se encarga de generar dicha salida.

[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') | out-null
$Servidor = Read-Host "Server Name"
$Basededatos = Read-Host "Database Name"
$Filename =  Read-Host "File Name Script"
$Filename = $Filename + ".SQL"
$s = new-object ('Microsoft.SqlServer.Management.Smo.Server')  $Servidor 
$dbs=$s.Databases
foreach ($tables in $dbs[$Basededatos].Tables)
{
    #Generate script for all indexes in the specified table
    foreach($index in $tables.Indexes)
    {
       $index.Script() + "`r GO `r" | out-File $Filename -Append
    }
}   

Para luego ejecutarlo simplemente es necesario entrar a la consola de nuestro Powershell como vemos a continuación

image

Tags: ,

Administracion

Script de PowerShell para scriptiar los Jobs de un servidor

by Maxi Accotto 7. enero 2012 02:50

 

En muchas oportunidades necesitamos hacer un Script de los jobs de producción para llevarlos a otro sitio. Por ejemplo a contingencia.

Para ello podríamos utilizar el siguiente script de Powershell y agregarlo a un step de un job de SQL 2005 / 2008 / R2.

El mismo toma los Jobs que tienen como categoría la palabra producción y genera el script (.sql) de dichos jobs

 

 

[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO')| out-null

$RutaScripts = "\\servername\"
# Create an SMO connection to the instance
$s = new-object ('Microsoft.SqlServer.Management.Smo.Server') "SERVIDORSQL" 

$jobs = $s.JobServer.Jobs


$scrp = new-object ('Microsoft.SqlServer.Management.Smo.Scripter') ($s)

$scrp.Options.FileName = $f
$scrp.Options.AppendToFile = $true


foreach ($job in $s.jobserver.jobs) 
{
$a = $job.category




if ($a.toupper() -eq "PRODUCCION")
           
    {
    
     $filename = $job.name + ".sql"
     
     write-host $filename
     
     $f = [System.IO.Path]::Combine($RutaScripts, $filename)
     out-file -filePath $f -inputobject "USE MASTER `nGO`n"


     out-file -filePath $f -inputobject "DECLARE @jobId binary(16) `n SELECT @jobId = job_id FROM msdb.dbo.sysjobs WHERE (name = N'$job') `n  
     IF (@jobId IS NOT NULL) `n  EXEC msdb.dbo.sp_delete_job @jobid `n  go `n " -append

  
     $scrp.Script($job) >> $f

     out-file -filePath $f -inputobject "`n" -append
  
     out-file -filePath $f -inputobject "`n EXEC msdb.dbo.sp_update_job @job_name=N'$job',@enabled=0 `n GO `n" -append


    }

else
 {

 }
}

 

ScriptJobByPowerShell scriptjobByPowerShell

Tags:

SQL 2008 | SQL 2008 R2 | Administracion | How To

Como detectar problemas de performance con el Management Studio

by Maxi Accotto 28. septiembre 2011 17:01

 

El día 27/9/2011 di un webcast donde muestro como se puede utilizar el SSMS para determinar problemas de performance.

En el mismo se muestra el uso de los reportes del SSMS como así también del Active Monitor.

Aquí les comparto el link

Webcast TechNet: Detectando problemas de performance usando el Management Studio

Tags:

SQL 2008 | SQL 2008 R2 | SQL 2005 | Videos | Comunidad | Administracion

Como instalar SQL Server con su Service Pack o Hotfix incluidos

by Maxi Accotto 20. agosto 2011 19:15

 

Una de las cosas que nos sucede muy a menudo es que cuando instalamos un SQL Server luego de debemos aplicar el ultimo services pack y/o hotfix.

Esto no es una tarea para nada difícil pero son dos pasos en la instalación, esto además de consumirnos mas tiempo en la tarea también puede pasar que nos olvidemos de hacerlo y tengamos nuestro servidor sin los parches adecuados.

En esta guía lo que vamos a ver es como armar un paquete de instalación de SQL Server que incluya además el services pack o hotfix.

La metodología que vamos a utilizar se denomina SlipStreamed, este método apareció en SQL Server 2008 a partir de su primer Service Pack.

Paso 1

Debe copiar el medio de instalación de su SQL server a una carpeta, por ejemplo en mi caso arme una carpeta en el disco D llamada SQL2008R2SP1 entonces copiare el medio de SQL original en D:\SQL2008R2SP1

Aquí le aconsejo que copie todo el medio donde se incluye el instalador de x86 y x64.

Paso 2

Baje el hotfix o service pack, en mi caso baje el service pack 1 de SQL 2008 R2, recuerde que debe bajarlo en el mismo idioma que tiene el medio de instalación, en mi caso es en ingles

Recuerde de bajar tanto el de x86 como el de x64 así luego nos queda un solo medio de instalación para ambas tecnologías

SQLServer2008R2SP1-KB2528583-x64-ENU.exe

SQLServer2008R2SP1-KB2528583-x86-ENU.exe

Paso 3

Debemos extraer los contenidos de los archivos que hemos bajado en el punto 2 a una carpeta interna del paso 1.

En mi caso seria D:\SQL2008R2SP1\SP1.

Para hacer esta operación desde la línea de comandos haremos lo siguiente

D:\>SQLServer2008R2SP1-KB2528583-x64-ENU.exe /x:d:\sql2008r2sp1\sp1
D:\>SQLServer2008R2SP1-KB2528583-x86-ENU.exe /x:d:\sql2008r2sp1\sp1

Paso 4

Copiar los archivos que se descomprimieron en el paso anterior en la carpeta raíz del instalador exceptuando Microsoft.SQL.Chainer.PackageData.dll,

esto se debe hacer por cada una de las plataformas de instalación (x64 y x86)

En el caso del ejemplo deberíamos copiar desde

d:\sql2008r2sp1\sp1\x64 a d:\sql2008r2sp1\x64 y

d:\sql2008r2sp1\sp1\x86 a d:\sql2008r2sp1\x86

Yo voy a utilizar el comando Robocopy que ya viene en mi SO.

D:\>robocopy D:\SQL2008R2SP1\SP1\x86 D:\SQL2008R2SP1\x86 /XF Microsoft.SQL.Chainer.PackageData.dll
D:\>robocopy D:\SQL2008R2SP1\SP1\x64 D:\SQL2008R2SP1\x64 /XF Microsoft.SQL.Chainer.PackageData.dll

Paso 5

Copiar Setup.exe y Setup.rll que se encuentra dentro de la carpeta d:\sql2008r2sp1\sp1 hacia d:\sql2008r2sp1\ reemplazando los que están originales.

D:\>robocopy D:\SQL2008R2SP1\SP1 D:\SQL2008R2SP1 Setup.exe
D:\>robocopy D:\SQL2008R2SP1\SP1 D:\SQL2008R2SP1 Setup.rll

Paso 6

Editar el archivo defaultsetup.ini que se encuentra en cada una de las carpetas del medio original para cada plataforma (x86 y x64), en el caso del ejemplo deberíamos editar los archivos de las siguientes ubicaciones

D:\SQL2008R2SP1\x86\DefaultSetup.ini

D:\SQL2008R2SP1\x64\DefaultSetup.ini

A cada archivos hay que agregarle la siguiente línea

PCUSOURCE=".\SP1"

 

 

Ya tenemos listo el proceso y ahora simplemente ejecutaremos el setup.exe .

Tags: ,

Administracion | SQL 2008 | SQL 2008 R2 | How To

Como resolver problemas de conexión remota hacia SQL Server

by Maxi Accotto 13. agosto 2011 07:09

 

Usted puede presentar problemas de conexión desde una terminal cliente hacia su SQL Server, el error que puede recibir es el 1326 con la siguientes leyendas “Cannot connect to sqlserver”,

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server) (Microsoft SQL Server, Error: 1326)

Pero si puede conectar de forma local.

En este video muestro como se debe resolver este problema

 

Tags:

Videos | Administracion

Como configurar el envió de mails desde SQL Server

by Maxi Accotto 14. julio 2011 19:02

 

En este video muestro cuales son los pasos para poder configurar el correo saliente en SQL Server a partir de la versión 2005 que ya incluye SMTP sin la necesidad de instalar un cliente MAPI como en versiones anteriores.

Además muestro como es la configuración para utilizar el SMTP de gmail o google si es que deseamos salir por ahí.

Tags: , , ,

Videos | How To | SQL 2008 R2 | SQL 2008 | SQL 2005 | Administracion

Como saber que parámetros de configuración se han cambiado y cuales son sus valores por defecto

by Maxi Accotto 8. julio 2011 19:39

 

Nuestro SQL Server dispone de varios parámetros de configuración, en muchos casos es necesario hacerle modificaciones a ellos con el cuidado necesario.

Muchas veces me he encontrado que se tocan parámetros sin medir consecuencias y se puede afectar al buen funcionamiento del servidor en si.

Por ello decidí armar este mini video de como podemos saber que parámetros se han modificado pero además saber cuales son los valores que estos tienen por defecto.

Generar Script automático para hacer Attach de las bases en un servidor

by Maxi Accotto 8. julio 2011 02:09

 

Cuando necesitamos por ejemplo hacer una migración , ya sea a un nuevo equipamiento y/o a una nueva versión, una de las técnicas para pasar las bases de datos de un lugar al otro es el método Attach / Detach.

Ahora bien, si tenemos pocas bases de datos no hay ningún problema porque hacer el Attach no llevaría mucho tiempo.

Ahora que sucede si tenemos muchas bases de datos? es una tarea bastante engorrosa hacer una por una, yo utilizo para esto un script que generar el código de attach con las ubicaciones de los Data y Log de cada base de datos.

Este script es el que utilizo al hacer este tipo de trabajos y la verdad que no solo me hace ahorrar mucho tiempo sino también cometer menos errores cuando hay una cantidad de bases de datos grande en nuestra instancia.

Aquí les dejo el código y el adjunto del script, espero les sea útil como me fue a mi Sonrisa

 

DECLARE @dbid int
 DECLARE @name varchar(50)
 DECLARE @file varchar(150)
 DECLARE @IDFILE INT
 DECLARE @CMD VARCHAR(4000)
 SET @CMD = ''
 SET @IDFILE = 1

DECLARE cAttach CURSOR
 READ_ONLY
 FOR SELECT dbid, name FROM 
 sysdatabases 
 where name not in 
 ('master','tempdb','model','msdb','northwind', 'pubs','distribution' )
 
OPEN cAttach
 
FETCH NEXT FROM cAttach INTO @dbid, @name
 WHILE (@@fetch_status <> -1)
 BEGIN
 IF (@@fetch_status <> -2)
 BEGIN
 
 -- buscamos los archivos
 DECLARE archivos CURSOR
 READ_ONLY FOR
 select [filename] FROM  sysaltfiles 
                   where dbid = @dbid
                   order by fileid 
 
 OPEN archivos
 FETCH NEXT FROM archivos INTO @file
 WHILE (@@fetch_status <> -1)
 begin
 
 BEGIN
   
   SET @CMD = @CMD +  ',@FILENAME' +CONVERT(varchar(10),@IDFILE) + '=' 
   + '''' + rtrim(@file) + '''' + CHAR(13)
   set @IDFILE = @IDFILE + 1
 end
 FETCH NEXT FROM archivos INTO @file
end
 CLOSE archivos
 DEALLOCATE archivos
 
print '';
 print 'EXEC sp_attach_db @dbname = ''' + (@name) + '''' ;

 print @cmd + ';'
 
 SET @CMD = ''
 SET @IDFILE = 1

END
 FETCH NEXT FROM cAttach INTO @dbid, @name
 END
 
CLOSE cAttach
 DEALLOCATE cAttach
 GO

Tags:

How To | Administracion

You cannot specify a provider or any properties for product 'SQL SERVER'.

by Maxi Accotto 29. junio 2011 23:05

 

En una migración de servidores desde SQL2000 a 2005 o 2008 si tenemos servidores vinculados (Linked Server) podemos llegar a tener el siguiente error al querer aplicar el Script en el destino (por ejemplo SQL 20008).

Aquí muestro un ejemplo del script

sp_addlinkedserver 'CASACENTRAL','SQL SERVER',

'SQLOLEDB','SQLPROD','','','SERVICECENTRAL'

go

Al ejecutar este script en un 2008 o 2005 nos encontramos con el siguiente error

Msg 15428, Level 16, State 1, Procedure sp_addlinkedserver, Line 40
You cannot specify a provider or any properties for product 'SQL SERVER'.

El problema se da porque el driver SQLOLEDB no existe en 2008 o 2005, para lo cual deberíamos modificar el script como muestro a continuación

EXEC sp_addlinkedserver

@server='CASACENTRAL', 

@srvproduct='',

@provider='SQLNCLI', 

@datasrc='SQLPROD'

go

Aquí solo se ha modificado el Provider por SQLCLI, ahora si nuestro Script va a funcionar y podemos migrar nuestro Linked Server.

Debo mencionar que esto no sucede con todos los Linked sino que básicamente sobre aquellos que usamos un nombre distinto al del servidor SQL,

como pudimos ver en nuestro ejemplo el servidor se llama SQLPROD y el Linked CASACENTRAL.

Además de esto, muchas veces me preguntan como se migran estos linked server, hay varias opciones, a mi me gusta mucho usar esta tool free.

http://www.codeproject.com/cs/database/ScriptLinkedServers.asp

Tags:

How To | Administracion

Virtualización de SQL Server en ambientes productivos

by Maxi Accotto 23. junio 2011 07:50

 

En el día de hoy he presentado en la comunidad de Argentina de SQL Server como se debe virtualizar SQL en ambientes productivos.

Me lleve la sorpresa que hay mas empresas de las que yo tenía en mente que tienen en producción ya SQL Server (a mí me ha tocado trabajar en algunas cuentas Enterprise donde se ha virtualizado todo incluyendo los SQL Server con muy buenos resultados)

En este post voy a poner una serie de links sobre virtualización productiva de SQL Server tanto en VmWare como Hyper-V, debo comentar que yo trabajo con los dos y en ambos vi excelentes resultados.

Aquí dejo primero la presentación del día de hoy y además una seria de Links útiles sobre virtualización de SQL Server.

 

Curso gratuito de Virtualización en SQL Server

https://www.microsoftelearning.com/eLearning/courseDetail.aspx?courseId=195173&tab=overview

Soporte de SQL Server virtualizados

http://support.microsoft.com/?id=956893

Virtualización de SQL con VMware 

Performance and Scalability of Microsoft® SQL Server® on VMware vSphere™ 4
Microsoft SQL Server and VMware Virtual Infrastructure
Availability Guide for Deploying SQL Server on VMware® vSphere
Microsoft® SQL Server on VMware® Best Practices Guide

Best Practices sobre Hyper-V

http://sqlcat.com/whitepapers/archive/2008/10/03/running-sql-server-2008-in-a-hyper-v-environment-best-practices-and-performance-recommendations.aspx

Consolidación de SQL Server

http://sqlcat.com/whitepapers/archive/2010/02/04/sql-server-consolidation-guidance.aspx

Otros

SQL server y Hyper-V

Alta performance de SQL con Hyper-V

Planning, Implementing, and Supporting SQL Server Virtualization with Windows Server 2008 R2 HV

Consolidating Large Microsoft SQL Server Databases on the IBM System x3850 X5 with Microsoft HV

Sitio oficial de virtualización de Microsoft

http://www.microsoft.com/sqlserver/2008/en/us/virtualization.aspx

Tags: ,

Material | Comunidad | Administracion | SQL 2005 | SQL 2008 | SQL 2008 R2

Como determinar el valor mas optimo para MAXDOP

by Maxi Accotto 30. abril 2011 19:47

 

En el mundo actual disponemos en la mayoría de los servidores con CPU de multicore, ya AMD tiene CPU con 12 cores.

La pregunta es , que valor de MAXDOP es óptimo para nuestro SQL Server?

Si el valor lo ponemos en 0 lo que haremos es usar todos los cores para una misma Query / Proceso y esto puede ser lento dependiendo de la cantidad de cores y la cantidad de veces que lo haga.

El siguiente script nos muestra el valor óptimo de MAxdop que deberíamos tener tomando algunos criterios.

 

select case
 
         when cpu_count / hyperthread_ratio > 8 then 8
 
         else cpu_count / hyperthread_ratio
 
       end as optimal_maxdop_setting
 
from sys.dm_os_sys_info;

El siguiente KB de Microsoft nos da mayor explicación.

http://support.microsoft.com/default.aspx/kb/322385

Tags: ,

Administracion

Se libero la Versión 5 de los migradores de otras bases de datos a SQL Server (SSMA 5.0)

by Maxi Accotto 30. abril 2011 18:30

 

En los últimos días de abril se ha liberado la nueva versión de estas herramientas que cumplen la función de migrar de otras bases de datos hacia SQL Server.

Para los que no conocen estas herramientas, les comento que ya vienen desde hace un tiempo y permiten migrar las siguientes bases de datos a SQL Server (Sybase , Mysql, Oracle y Access).

La herramienta no solo migra datos sino que también y donde pueda hace conversión de código, por ejemplo desde PL-SQL hacia T-SQL.

Yo las he utilizado en algunos proyectos y la verdad que son muy recomendadas para los que están en un proceso de migración.

Que hay de nuevo en esta versión?

Ahora se podrá migrar hacia cualquier edición de SQL Server incluyendo la Express.

  • Soporte para SQL Denali
  • Multi-thread data migration permitiendo un mejor escalamiento y performance
  • Soporte de Globalización para migrar bases de datos que no están en Ingles
  • Soporte para instalar los SSMA Extension Pack en un ambiente clusterizado de SQL Server
  • Mejoras en el migrador de Sybases
    • Soporte para migrar hacia SQL Azure
    • Extension del data access (ASE ADO.net y ASE ODBC)
    • Soporte para convertir bases Case sensitive hacia SQL Server Case Sensitive.
    • Extensión del soporte para la conversión de instrucciones no Ansi JOIN en los DELETE y UPDATE
    • Elimina la dependencia en la base de datos independiente SYSDB en SQL Server de destino
  • Reporte de User Defined Type para Oracle

Links de descarga

SSMA 5.0 para Oracle

SSMA 5.0 para Sysbase

SSMA 5.0 para MySQL

SSMA 5.0 para Access

Algunos casos de éxito de migraciones hacia SQL Server

Dollar Thrifty Auto Group, Eli Lily, Lockheed Martin, CSR Limited, Florida Department of Education, Forest Oil, The Wyoming Department of Health Vital Statistics Services Program, Landratsamt Landshut, Horowhenua District Council, y Volvo Aero

Excelente doc sobre la herramienta de Buenas Prácticas

by Maxi Accotto 11. septiembre 2010 20:38

 

Microsoft dispone de sus distintas herramientas gratuitas para poder detectar malas prácticas en un servidor de base de datos SQL Server 2000 , 2005 y 2008.

Hace unos días salió un documento técnico de como instalar y utilizar el BPA de 2008 R2.

Aquí les dejo el Link que de hecho es muy bueno.

Tags:

Administracion

Herramientas para analizar buenas prácticas en SQL Server.

by Maxi Accotto 21. julio 2010 04:48

 

En toda empresa o proceso hablamos mucho de las buenas prácticas de trabajo.

Para SQL Server hay un número de buenas prácticas que nos permiten asegurar la calidad del código que escribimos sobre la base de datos como así también revisar otros aspectos administrativos (seguridad, backups, etc).

El tema es que analizar todas estas buenas prácticas por lo general es complejo, pero por suerte disponemos de algunas herramientas que nos da el mismo fabricante (En este caso Microsoft)

En los siguientes links les dejare las herramientas disponibles para cada versión de SQL Server.

Estas herramientas se las recomiendo de verdad ya que están muy buenas para analizar cómo estamos trabajando con nuestro SQL Server y así poder establecer que cambios hacer para lograr la mejor práctica

En futuros post y videos estaré mostrando como se utilizan cada una de ellas

 

SQL Server 2000 Best Practices Analyzer

SQL Server 2005 Best Practices Analyzer

Microsoft® SQL Server® 2008 R2 Best Practices Analyzer

Microsoft Baseline Security Analyzer

Tags:

Tuning | SQL 2008 | SQL 2005 | Administracion

Maximiliano Damian Accotto