29 diciembre, 2009

Rendimiento de XML en SQL Server 2005

Este es un artículo que escribí hace algún tiempo y que había perdido. Ahora que lo encontré, lo dejo público. El documento se titula "Rendimiento de XML en SQL Server 2005" y consiste en un benchmark que realicé para analizar el rendimiento de búsquedas en columnas de tipo XML.

Este es el artículo original publicado en el sitio de Microsoft
Esta es una copia de respaldo en Google Docs
Este es el archivo en formato PDF

26 diciembre, 2009

Windows PowerShell 2.0 Software Development Kit (SDK)

Este SDK contiene los ensamblados y ejemplos para mostrar cómo se usan las bibliotecas de PowerShell 2.0 Para usarlo se requiere .NET Framework Version 2.0 SP1 (o superior).

Descargar el SDK del sitio de Microsoft.

10 diciembre, 2009

Windows 7 USB/DVD Download Tool

La herramienta Windows 7 USB/DVD Download permite poner una copia del archivo .ISO de Windows 7 en un DVD o en un flashdrive USB. Para crear un DVD o un drive USB booteable para hacer una instalación de Windows 7.

Descargar en: http://wudt.codeplex.com

09 diciembre, 2009

Microsoft SharedView

Microsoft SharedView es una herramienta gratuita que permite conectar hasta 15 personas de diferentes ubicaciones y mostrarles el contenido de su pantalla. Comparta, revise y actualice documentos con diferentes personas en tiempo real. Se necesita un Id. de Windows Live ID (de Passport, Hotmail o MSN) para iniciar sesiones, pero no para unirse a otras sesiones.

Recomiendo esta utilidad para asistir a un usuario que requiere soporte técnico a distancia.

Descargar Microsoft SharedView del sitio de descargas de Microsoft

02 diciembre, 2009

Las virtudes y maldades del SQL dinámico, de Erland Sommarskog

El artículo "Las virtudes y maldades del SQL dinámico", por el MVP Erland Sommarskog es un clásico que siempre es recomendado en los foros de SQL Server. He guardado una copia de la traducción que hizo Simon Hayes, por aquello de tener los datos espejados :-)

Link 1 a formato PDF
Link 2 a formato PDF

El artículo original en inglés está en este otro link: The Curse and Blessings of Dynamic SQL

01 diciembre, 2009

SQL Server 2008 R2 CTP Noviembre

Tomando como base SQL Server 2008, la versión R2 (Release 2) proporciona una plataforma de datos incluso más escalable, con completas herramientas para administrar las bases de datos y las aplicaciones, que permite mejorar la calidad de los datos y facilitar a los usuarios la creación de análisis e informes variados mediante las herramientas que ya saben utilizar.

PARA DESCARGAR:

Community Technology Preview (CTP) de noviembre para SQL Server 2008 R2
http://www.microsoft.com/downloads/details.aspx?FamilyId=fe0c6a31-5ad6-4eea-a865-73bbe2608bd1&displaylang=es

SQL Server 2008 R2 de Community Technology Preview (CTP) de noviembre - Express Edition
http://www.microsoft.com/downloads/details.aspx?displaylang=es&FamilyID=c772467d-e45b-43e1-9208-2c7b663d7ad1

17 noviembre, 2009

Cómo detectar y matar procesos huérfanos

Cuando una aplicación cliente desconecta de un servidor SQL Server, el proceso de conexión debe borrarse en el servidor. Si los procesos de conexión no se borran por cualquier motivo, éstos se convierten en procesos "huérfanos". Estos procesos o sesiones inactivas pueden utilizar recursos valiosos, como bloqueos y conexiones de usuario.

¿Cuánto tiempo tarda o cuándo es que SQL Server limpia una sesión huérfana? No lo hace. SQL Server termina una conxión cuando la aplicación cliente o el sistema operativo lo solicita. A nivel de sistema operativo, las conexiones que usan named pipes sobre NETBEUI suelen tener un timeout bastante rápido. Las conexiones basadas en named pipes sobre IP tienen un timeout un poco mayor. Pero las sesiones basadas en sockets TCP/IP por omisión no tienen timeout. Por lo tanto el administrador de SQL Server debe identificar las sesiones huérfanas y matarlas usando el comando KILL.

Una forma posible de identificar una sesión huérfana se logra filtrando en SysProcesses por las columnas Status y Last_Batch. Si el Status indica que la sesión está a la espera de un comando y la diferencia entre GetDate() y Last_Batch es grande, todo indica la presencia de una sesión huérfana a la que se podría aplicar el KILL.

Por ejemplo:

--
-- SQL Server 2005/2008
-- Matar sesiones inactivas de mas de X minutos
--
-- Ejemplo: 8 hrs (480 minutos)
DECLARE @mm INT
SET @mm = 480

DECLARE @SPIDS TABLE(SPID INT)
DECLARE @SPID INT
DECLARE @KILLCMD VARCHAR(200)

INSERT @SPIDS (SPID)
SELECT SPID
FROM sysprocesses
WHERE SPID <> @@SPID
AND status = 'sleeping'
AND DATEDIFF(MINUTE, last_batch, getdate()) > @mm

SELECT @SPID = MIN(SPID) FROM @SPIDS
WHILE @SPID IS NOT NULL
BEGIN
SELECT @KILLCMD = 'KILL ' + CONVERT(VARCHAR(100),@SPID)
EXEC(@KILLCMD)
SELECT @SPID = MIN(SPID) FROM @SPIDS WHERE SPID > @SPID
END


La ejecución del ejemplo no elimina procesos del sistema. Cuando KILL intenta hacerlo, se verá el mensaje de error:

Msg 6107, Level 14, State 1, Line 1
Only user processes can be killed.


sys.sysprocesses contiene información sobre los procesos que se ejecutan en una instancia de SQL Server. Estos procesos pueden ser procesos del cliente o procesos del sistema.
Esta tabla del sistema se incluye como vista para la compatibilidad con versiones anteriores a 2005/2008. En su lugar, se recomienda el uso de las vistas del sistema de SQL Server actual. Esta característica se quitará en una versión futura de Microsoft SQL Server.

12 noviembre, 2009

Entendiendo y usando el soporte de PowerShell en SQL Server 2008

He traducido a español este excelente artículo del MVP Allen White:

Understanding and Using PowerShell Support in SQL Server 2008
http://msdn.microsoft.com/en-us/library/dd938892.aspx

Mi versión traducida está disponible públicamente: Entendiendo y Usando el Soporte de PowerShell en SQL Server 2008. También puede obtenerse en este otro link.

Espero que sea de utilidad a la comunidad hispanoparlante. Todos los comentarios son siempre bienvenidos.

02 noviembre, 2009

Instalar AdventureWorks2008 es más que una aventura

En los buenos viejos tiempos, instalar las bases de datos de ejemplo de SQL Server era tan simple como ejecutar algunos scripts T-SQL. Pero los tiempos han cambiado y ahora para instalar AdventureWorks en SQL Server 2008 requiere varios pasos algo complejos, empezando con que existen varios requisitos previos y además las bases AdventureWorks usan un instalador bastante sofisticado. Veremos en este artículo cómo instalar AdventureWorks 2008 en un SQL Server 2008 sobre Windows Server 2008 (en mi caso, la edición Standard).

Primero veamos cómo es la forma oficial de hacer la instalación de AdventureWorks2008, cómo la forma oficial tiene fallas y finalmente cómo instalar exitosamente las bases de ejemplo con un método alternativo.

1. La manera oficial de instalar AdventureWorks

Primero que nada hay que instalar los pre-requisitos necesarios:

Microsoft .NET Framework 3.5 Service Pack 1
http://download.microsoft.com/download/2/0/e/20e90413-712f-438c-988e-fdaa79a8ac3d/dotnetfx35.exe

Windows Installer 4.5 Redistributable
http://www.microsoft.com/downloads/details.aspx?FamilyId=5A58B56F-60B6-4412-95B9-54D056D6F9F4&displaylang=en

Para Windows Server 2008 elegir uno de los siguientes instaladores acorde a la plataforma:

x86: Windows6.0-KB942288-v2-x86.msu
x64: Windows6.0-KB942288-v2-x64.msu
IA64: Windows6.0-KB942288-v2-ia64.msu

Windows Powershell

En Windows Server 2008, Windows Powershell viene incluído pero no se instala por omisión. Para instalarlo ejecutar el Server Manager:

%SystemRoot%\system32\CompMgmtLauncher.exe

Seleccionar: Features. Luego clic en "Add Features" y marcar "Windows Powershell".

Luego de instalados los pre-requisitos, podremos instalar SQL Server 2008. Si se ha optado por la edición Express, hay que instalar SQL Server 2008 Express with Advanced Services debido a que las bases de ejemplo AdventureWorks requieren el servicio Full-Text Search incluido en dicha edición de Express. Entonces es recomendable instalar lo siguiente:

Microsoft SQL Server 2008 Express with Advanced Services
http://download.microsoft.com/download/e/9/b/e9bcf5d7-2421-464f-94dc-0c694ba1b5a4/SQLEXPRADV_x86_ENU.exe

Microsoft SQL Server 2008 Express with Tools
http://download.microsoft.com/download/7/9/4/794bfafa-aea7-45d4-a6ea-4e92f09918e3/SQLEXPRWT_x86_ENU.exe

Lo anterior es para instalar el Management Studio Express 2008. Observar que si previamente en la máquina existe el Management Studio Express 2005, hay que desinstalarlo desde Start / Control Panel.

Antes de instalar AdventureWorks usando los paquetes de instalación .msi, asegurarse que el SQL Server 2008 ya tiene todo lo siguiente: Full-Text Search instalado, el servicio SQL Full-text Filter Daemon Launcher iniciado y FILESTREAM habilitado. Veamos cada uno:

Cómo instalar el servicio Full-Text Search

Si el servicio Full-Text Search ya está instalado, pero el servicio SQL Full-text Filter Daemon Launcher no está iniciado, la instalación va a fallar indicando que falta dicho servicio.

Para instalar Full-Text Search, ejecutar el instalador de SQL Server (si es la edición Express, hay que usar el instalador de SQL Server 2008 Express With Advanced Services). En el instalador, elegir la opción "New SQL Server stand-alone installation or add features to an existing installation".

En la ventana "Installation Type" seleccionar "Add features to an existing instance of SQL Server 2008", seleccionar la instancia de la lista desplegable y pulsar "Next". Al llegar a la ventana "Feature Selection" bajo el nodo "Instance Features/Database Engine Services", marcar "Full-Text Search", puslar "Next" y completar el asistente de instalación.

Cómo habilitar el servicio SQL Full-text Filter Daemon Launcher

En el menú de inciio de Windows: Start / All Programs / Microsoft SQL Server 2008 / Configuration Tools / SQL Server Configuration Manager. En el panel izquierdo pulsar "SQL Server Services". En la lista de servicios, clic-derecho en "SQL Full-text Filter Daemon Launcher" para la instancia que se está configurando y clic en "Properties". Luego clic en la pestaña "Service", junto a "Start Mode" clic en "Disabled" y en "Automatic". Luego hacer clic-derecho en "SQL Full-text Filter Daemon Launcher" y pulsar "Start".

Cómo habilitar FILESTREAM
http://msdn.microsoft.com/es-es/library/cc645923.aspx


Las bases de datos AdventureWorks se descargan de: Sample Databases (http://msftdbprodsamples.codeplex.com/ ). El instalador es el siguiente:

SQL2008.AdventureWorks_All_Databases.x86.msi
http://msftdbprodsamples.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=34032#DownloadId=86538

Este instalador a mucha gente, incluido yo, le ha fallado. Cuando aparece la ventana "Database setup", aparece una lista desplegable donde hay que seleccionar la instancia de SQL Server en la que se va a instalar AdventureWorks. Pero sorpresivamente el botón "Next" no se habilita. Para hacer peor las cosas, si se pulsa el botón "Back" y se vuelve a pulsar "Next", volvemos a la ventana y ahora sí está activo el botón "Next". Lo pulsamos y sopresa! La instalación termina indicando que hubo una falla. Trsitemente, no se indica cuál es la falla exactamente.


2. La manera alternativa de instalar AdventureWorks que funciona

2.1. No usar los programas de instalación .msi y descargar las bases de ejemplo en el formato zipeado, que están en:

SQL2008.AdventureWorks_All_Databases.zip
http://msftdbprodsamples.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=34032#DownloadId=86540

/* UPDATE 2010-02-28:

El link fue movido, ahora está en http://msftdbprodsamples.codeplex.com/releases/view/37109#DownloadId=106391

*/




2.2. Expandir el zip en una carpeta, por ejemplo D:\SQL2008.AdventureWorks_All_Databases. Dentro de esa carpeta hay una subcarpeta para cada base de datos. Así, la base AdventureWorksLT2008 está en la subcarpeta:

D:\SQL2008.AdventureWorks_All_Databases\Tools\Samples\AdventureWorks 2008 LT

2.3. Luego abrir una ventana de query en el Management Studio y abrir el archivo del script de creación de la base AdventureWorksLT2008:

D:\SQL2008.AdventureWorks_All_Databases\Tools\Samples\AdventureWorks 2008 LT\instawltdb.sql

2.4. Cuando el script fué cargado en la ventana de comandos, poner a la ventana en "modo SQLCMD" (en el menú del Management Studio: Query / SQLCMD mode).

2.5. Modificar las variables SqlSamplesDatabasePath y SqlSamplesSourceDataPath que aparecen en las líneas 34 y 35 para que contengan los valores adecuados, y descomentar. Las líneas quedarán así (prestar atenció que las rutas terminan en retrobarras \ ) como s ve a continuación:

:setvar SqlSamplesDatabasePath "D:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS2008\MSSQL\DATA\"
:setvar SqlSamplesSourceDataPath "D:\SQL2008.AdventureWorks_All_Databases\Tools\Samples\"


2.6. Ejecutar el script y la base de datos AdventureWorksLT2008 se creará exitosamente.

Finalmente hacer los mismos pasos para la base AdventureWorks 2008 OLTP.



28 octubre, 2009

Libro: Mastering Powershell

El libro "Mastering Powershell" (idioma: Inglés) de Tobias Weltner, Microsoft MVP, puede leerse online en esta página del sitio Powershell.com y también puede descargarse en formato PDF desde este otro link.

Es una guía muy detallada y completa de 20 capítulos (más de 500 páginas).

Script: Cómo saber qué instancias hay de SQL Server

Para detectar qué instancias hay instaladas de SQL Server (y de qué versión es cada una) se puede usar el siguiente script de Windows Scripting Host:

strKeyPath = "SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL"

Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")

objReg.EnumValues &H80000002, strKeyPath, arrEntryNames, arrValueTypes

For count=0 To UBound(arrEntryNames)

objReg.GetStringValue &H80000002, strKeyPath, arrEntryNames(count), strInstance

objReg.GetStringValue &H80000002, "SOFTWARE\Microsoft\Microsoft SQL Server\" & strInstance & "\Setup", "Version", strVersion

Wscript.Echo arrEntryNames(count) & " - " & strVersion

Next

Para probarlo, hacer lo siguiente:

1. Copiar el script en un editor de texto y grabarlo en un archivo con extensión .vbs, por ejemplo: VerInstancias.vbs

2. Abrir una ventana de línea de comandos Windows.

3. Ejecutar en la línea de comandos: cscript VerInstancias.vbs

20 octubre, 2009

Cómo habilitar xp_cmdshell en SQL Server 2008

Antes de SQL Server 2008 podíamos habilitar al xp_cmdshell usando la herramienta Surface Area Configuration (SAC), pero dicha herramienta fué sustituida en SQL Server 2008 por SQL Server Configuration Manager. El siguiente scriptlet puede hacer la tarea:



USE master
GO
EXECUTE sp_configure 'show advanced options', 1
RECONFIGURE WITH OVERRIDE
GO
EXECUTE sp_configure 'xp_cmdshell', '1'
RECONFIGURE WITH OVERRIDE
GO
EXECUTE sp_configure 'show advanced options', 0
RECONFIGURE WITH OVERRIDE
GO





18 octubre, 2009

Los permisos para BACKUP y RESTORE

Cuando se ejecuta un respaldo de base de datos mediante el comando BACKUP, hay que considerar los siguientes permisos:

  • Permisos para poder ejecutar el comando BACKUP.
  • Permisos para escribir en los archivos físicos.

Para poder ejecutar el comando BACKUP, de forma predeterminada, los permisos para ejecutar los comandos BACKUP DATABASE y BACKUP LOG corresponden a los usuarios miembros del rol de servidor SysAdmin y de roles de base de datos Db_Owner y Db_BackupOperator.

Para poder escribir en los archivos físicos, los privilegios corresponden al servicio SQL que es quién hace la tarea. El servicio SQL Server debe poder leer y escribir en el dispositivo y la cuenta en la que se ejecuta el servicio SQL Server debe tener permisos de escritura. Observar que los privilegios del usuario que ejecutó el comando BACKUP no interesan: Una vez que el BACKUP pudo ejecutarse, los privilegios de escritura los tiene el servicio SQL.

Ejemplo:

-- Respaldo completo de una base de datos
BACKUP DATABASE MiBase
TO DISK = 'Z:\Respaldos\Sql\MiRespaldoDeBase1.bak'
GO

Para que este comando sea exitoso, los permisos deben ser así:

1. El usuario que ejecuta el BACKUP debe pertenecer al rol SysAdmin o Db_Owner o Db_BackupOperator.

2. La cuenta de inicio de SQL Server debe tener permiso de Lectura y Escritura sobre la carpeta Z:\Respaldos\Sql

Para hacer un RESTORE, las consideraciones son:

Si la base de datos que se va a restaurar no existe, el usuario debe tener permisos CREATE DATABASE para poder ejecutar RESTORE. Si la base de datos existe, los permisos RESTORE corresponden de forma predeterminada a los miembros de las funciones fijas de servidor sysadmin y dbcreator, y al propietario (dbo) de la base de datos (para la opción FROM DATABASE_SNAPSHOT, la base de datos siempre existe).

Los permisos RESTORE se conceden a funciones en las que la información acerca de los miembros está siempre disponible para el servidor. Debido a que los miembros de una función fija de base de datos sólo se pueden comprobar cuando la base de datos es accesible y no está dañada, lo que no siempre ocurre cuando se ejecuta RESTORE, los miembros de la función fija de base de datos db_owner no tienen permisos RESTORE.

Ejemplo:

RESTORE DATABASE MiBaseNueva
FROM DISK = 'Z:\Respaldos\Sql\MiRespaldoDeBase1.bak'

La cuenta de inicio de SQL Server debe tener permisos de lectura sobre los archivos físicos involucrados en el comando RESTORE (en el ejemplo: 'Z:\Respaldos\Sql\MiRespaldoDeBase1.bak').

16 octubre, 2009

SQL Powershell básico: 1. Ejecutar la consola y ver instancias

Powershell es una utilidad Windows para ejecución de comandos de línea y scripting basada en .NET Framework. Powershell está disponible nativamente en Windows 7 y Windows Server 2008, es opcional en versiones anteriores de Windows (se puede descargar e instalar).

SQL Server 2008 instala Windows PowerShell y un conjunto de complementos de SQL Server que exponen la funcionalidad de SQL Server en Windows PowerShell. La utilidad de línea de comandos SQLPS se emplea para ejecutar sesiones de Windows PowerShell que incluyen los complementos de SQL Server.


Para iniciar SQL Powershell, abrir una línea de comandos y ejecutar:


sqlps


Poweshell inicia y nos muestra un prompt PS SQLSERVER:\> que queda listo para recibir los comandos que ingresemos. El proveedor de SQL Server Windows PowerShell expone la jerarquía de objetos de SQL Server en rutas de acceso similares a las rutas de acceso al sistema de archivos.


La jerarquía se puede explorar con comandos usuales de DOS o UNIX, como: dir, cd, ls.


En la figura vemos cómo recorrer la jerarquía hasta llegar a una instancia de SQL Server 2008 Express que se llama GLARRIERA3W7\SQLEXPRESS2008. Observar cómo con 'ls' listamos los objetos disponibles en cada "carpeta".




Sitio Microsoft de Windows Powershell (en inglés)
http://www.microsoft.com/windowsserver2003/technologies/management/powershell/default.mspx

Información general de PowerShell de SQL Server
http://msdn.microsoft.com/es-es/library/cc281954.aspx


How to Download Windows PowerShell 1.0
http://www.microsoft.com/windowsserver2003/technologies/management/powershell/download.mspx

15 octubre, 2009

Diagnóstico de problemas de conexión a SQL Server 2005/2008

/*
Este artículo está basado en el artículo:

SQL Server 2005 Remote Connectivity Issue TroubleShoot
http://blogs.msdn.com/sql_protocols/archive/2006/09/30/SQL-Server-2005-Remote-Connectivity-Issue-TroubleShooting.aspx

publicado en el blog del equipo de SQL Protocols, firmado por Ming Lu
*/


A diferencia de lo que sucedía con SQL Server 2000, conectarse a SQL Server 2005/2008 cuando está instalado en un XP, Windows 2003/2008, Vista o Windows 7 atrás de un firewall, suele presentar ciertas dificultades en el diagnóstico del problema. Los principales motivos son que, desde SQL Server 2005, se aplicaron dos cambios importantes respecto a la versión 2000: Apagado de protocolos de red y el servicio SQL Browser.

Para hacer más seguro al producto, la conectividad fué reducida por omisión. Durante la instalación de una edición Express o Developer, el servicio SQL solamente escucha via Shared Memory (SM) y Named-pipe (NP) local (TCP, NP remoto y VIA están desactivados). Si se está instalando una edición Enterprise, Standard o Workgroup, SM, NP local y TCP están habilitados.
Entonces, para hacer una conexión remota primero hay que asegurarse que NP o TCP están habilitados en la instancia remota de SQL Server.

El servicio SQL Browser es un servicio Windows que inicia y solicita el puerto UDP 1434. Cuando una aplicación cliente quiere conectarse, envía un mensaje UDP al servidor por el puerto 1434. El SQL Browser responde al mensaje indicando cuál es el puerto TCP/IP o el NP en el que la instancia solicitada está atendiendo.

Ahora es necesario que el SQL Browser esté iniciado para cuando un cliente intenta conectarse a una instancia de SQL Server. Si la instancia remota es una instancia sin nombre, no es requerido tener iniciado al SQL Browser ya que los clientes van a intentar usar el puerto TCP 1433 y el NP "\\pipe\sql\query".

La lista de problemas que puede aparecer se relacionan entonces con:

1. Falla de conexión sobre TCP/IP o NP, si el protocolo usado no está habilitado.

2. Falla de conexión sobre TCP/IP o NP si hay un firewall intermedio y están bloqueados los puertos necesarios o no se ha agregado a la lista de excepciones del firewall a "File and Printer Sharing".

3. Falla de conexión a la instancia SQL remota si el SQL Browser no está iniciado o si el puerto TCP 1434 (donde escucha el SQL Browser) no está abierto en el firewall.

Veamos ahora cómo hacer el tratar un problema de conectividad a una instancia remota. Asumiremos que la instancia de SQL server está iniciada en un servidor remoto y que el cliente ha especificado correctamente el nombre de la instancia remota.

EN EL SERVIDOR SQL:

1. Habilitar TCP y/o NP remoto:

SS2005: Usar SQL Server Surface Area Configuration / Configuration for Services and Connections / Remote Connections.

SS2008: Usar Management Studio / Object Explorer / Seleccionar instancia, clic-derecho, propiedades, Connections y marcar "Allow connections to this server".

2. Verificar el log de errores del servidor SQL, determinar en qué puerto TCP y/o NP está escuchando.

3. Cuando se usa TCP, usar el comando de línea NETSTAT para ver si el servidor está escuchando en el puerto correcto.

netstat -noa findstr NumeroPuerto

4. Verificar el servicio SQL Browser:

Ejecutar en línea de comandos SERVICES.MSC, buscar el servicio "SQL Server Browser", habilitarlo y reiniciarlo. También ir a la utilidad SQL Server Configuration Manager, revisar las propiedades del SQL Browser, en la sección "Advanced" y confirmar que está activo.

5. Habilitar "File and Printer Sharing" en la lista de excepciones del firewall.

6. Agregar el puerto TCP y/o SQLSERVR.EXE (..\Binn\sqlservr.exe) a la lista de excepciones del firewall.

7. Agregar SQLBROWSER.EXE (..\Shared\sqlbrowser.exe) a la lista de excepciones del firewall o agregar el puerto UDP 1434.

8. Confirmar si la instancia remota SQL es la instancia por omisión (sin nombre)

En este caso debe escuchar en el puerto TCP 1433 y en el NP "\\pipe\sql\query"


EN LA ESTACION CLIENTE:

1. Probar PING:

ping IPservidorSql

2. Probar TELNET:

telnet IPservidorSql\NombreInstancia NumeroPuerto

Si la consola de comandos queda totalmente negra sin mensajes, el TELNET ha sido exitoso. Falla cuando aparece un mensaje de error indicando que no pudo conectarse al servidor.

3. Probar \\IpServidorSql

4. Verificar los protocolos del cliente:

Usar SQL Server Configuration Manager / SQL Native Client Configuration / Client Protocols. Confirmar que NP o TCP están habilitados; clic en las propiedades de los protocolos cliente, ver que NP o TCP están habilitados. Se recomienda poner a TCP al comienzo de la lista de protocolos.

5. Configurar MDAC:

Si se usa MDAC (Driver={SQL Server} o SQLOLEDB.x) en la aplicación cliente, en línea de comandos ejecutar CLICONFG.EXE, habilitar NP y TCP (poner TCP primero en la lista).

6. Probar conexión con OSQL.EXE o SQLCMD.EXE:

osql /S servidor\instancia /E
osql /S servidor\instancia /U usuario /P password

7. Revisar string de conexión

Revisar la sintaxis y los valores del string de conexión de la aplicación cliente, es frecuente cometer errores en el string de conexión.

8. Revisar alias

Si la aplicación cliente se conecta al servidor remoto usando un alias: Si se usa MDAC ejecutar CLICONFG.EXE, ver la solapa "Alias". Si se usa el SQL Native Client, ejecutar SQL Server Configuration Manager y revisar "Aliases".

Si todo lo anterior está revisado y correcto, ver en los siguientes links información de diagnóstico acorde a los distintos mensajes de error recibidos:

Diagnóstico de problemas de conexión a SQL Server 2005/2008, Parte 2
http://ascii164.blogspot.com/2010/02/diagnostico-de-problemas-de-conexion.html

Troubleshoot Connectivity Issue in SQL Server 2005 - Part II
http://blogs.msdn.com/sql_protocols/archive/2005/10/29/486861.aspx

Troubleshoot Connectivity Issue in SQL Server 2005 - Part III
http://blogs.msdn.com/sql_protocols/archive/2005/12/22/506607.aspx

Troubleshoot Connectivity Issue with SQL Server Express 2005
http://blogs.msdn.com/sql_protocols/archive/2006/03/23/558651.aspx

14 octubre, 2009

SqlMonitoring: Monitoreo de SQL Server

SqlMonitoring es un proyecto open-source que produjo una herramienta de monitoreo para SQL Server 2000/2005/2008. La herramienta, que puede e usarse como una opción económica (es gratis :-)) de SCOM o BMC Patrol, permite definir alertas y monitorizarlos.

Para descargar SqlMonitoring:
http://www.codeplex.com/sqlmonitoring

Importar y exportar datos en SQL Server Express 2008

En los foros técnicos de SQL Server son muy frecuentes las prguntas acerca de cómo importar y exportar datos de SQL Server 2008 Express. En las versiones "mayores" (no Express) de SQL Server, los Integration Services son los servicios adecuados para este tipo de tareas. En la edición Express también hay opciones interesantes.

Para importar/exportar de una base de datos de SQL Server 2008 Express, el Management Studio tiene los asistentes de importación y exportación. En la imágen adjunta se puede ver cómo acceder a los asistentes. Recordar que en SQL Server Express, no existe la opción para guardar el paquete creado por el asistente, cosa que sí es posible en las ediciones no-Express.

Por ejemplo, en el siguiente video se muestra cómo exportar datos a una planilla Excel.

Otras alternativas posibles:
  • Usar la herramienta BCP.EXE
  • Usar consultas con OPENROWSET
  • Usar BULK INSERT
Más información en los Books Online:

Importar o exportar datos con el Asistente para importación y exportación de SQL Server
http://msdn.microsoft.com/es-es/library/ms141209.aspx

Cómo ejecutar el Asistente para importación y exportación de SQL Server
http://msdn.microsoft.com/es-es/library/ms140052.aspx

Acerca de las operaciones de importación y exportación masivas
http://msdn.microsoft.com/es-es/library/ms187042.aspx

08 octubre, 2009

Datos espaciales

En SQL Server 2008 podemos almacenar datos espaciales o georeferenciados en tipos nativos implementados a tal fin. Tales tipos de datos se utilizan en aplicaciones basadas en mapas.

Se proporcionan dos tipos de datos espaciales, GEOGRAPHY y GEOMETRY, que permiten almacenar datos espaciales directamente sin necesidad de transformarlos en otros formatos de almacenamiento estándares.

Ejemplo:

-- SQL Server 2008 Express
USE Master;
GO
CREATE DATABASE DemoEspacial;
GO
USE DemoEspacial;
GO


CREATE TABLE Demo_TablaEspacial(
EspacialID int IDENTITY (1,1),
EspacialInputCol geography,
EspacialOutputCol AS EspacialInputCol.STAsText()
)
GO

INSERT INTO Demo_TablaEspacial (EspacialInputCol)
VALUES (geography::STGeomFromText('LINESTRING(47.656 -22.360, 47.656 -22.343)', 4326));
GO

SELECT * FROM Demo_TablaEspacial


En los Books Online hay información detallada:
Trabajar con datos espaciales (motor de base de datos)
http://msdn.microsoft.com/es-es/library/bb933876.aspx

En este artículo hay una comparación de las funcionalidades espaciales de SQL Server 2008, MySQL 5.1/6 y PostgreSQL 8.3/PostGIS 1.3/1.4.

Cómo configurar accesos remotos en SQL Server 2008 Express


En SQL Server 2008 Express ya no se dispone de la vieja herramienta Surface Configuration que usábamos en la versión 2005. Si ahora, por ejemplo, deseamos permitir los accesos remotos, debemos usar el Management Studio:


1. Ejecutar el Management Studio localmente y conectarse con un usuario SysAdmin.


2. En el Object Explorer seleccionar la instancia de SQL Server, clic-derecho, Propiedades.


3. En la hoja de propiedades ir a Connections / Remote server connections.


06 octubre, 2009

Planes de mantenimiento para el DBA pobre

Buscando un poco encontré en el sitio de descargas de Microsoft un conjunto muy útil de scripts de mantenimiento. Según dice en la documentación incluida, estos scripts son usados por el equipo de operaciones de bases de datos de Microsoft.

Se incluyen los siguientes scripts:

  • SQLBackupAll – Performs Full database backup for non-excluded databases by SQL native or Litespeed backup commands. The job has parameters to specify the desired backup location and compress (SQL Litespeed backup) or nocompress (SQL native backup) , whether to backup or not to backup read only database etc.
  • SQLBackupDiffAll - Performs Differential database backup for non-excluded databases by SQL native or Litespeed backup commands. This job is disabled by default. This can be enabled based on the customer’s needs for the recovery requirements.
  • SQLBackupTranAll – Performs Transaction Log backup for non-excluded databases by SQL native or Litespeed backup commands. The job has parameters to specify the desired backup location and compress (SQL Litespeed backup) or nocompress (SQL native backup)
  • SQLBackupChecker – Checks for backups that have not occurred in more than the specified number of hours in the job. There is a parameter to specify the desired number of hours to specify for the alert.
  • SQLDBCCAll - Performs database consistency checks on all system and user databases.
  • SQLIndexDefragAll – Performs Index defrag maintenance for non-excluded SQL 2000 databases. This job is disabled by default. It can be enabled based on the customer’s needs. This job helps to run the index defrag for all the databases in the SQL instance or any particular database or any particular table in a database.
  • SQLUpdateStatistics - Runs Update Statistics maintenance for non-excluded databases.This job is disabled by default. This job is disabled by default. It can be enabled based on the customer’s needs. This job helps to run the update statistics for all the databases in the SQL instance or any particular database or any particular table in a database.
  • SQLCleanupMsdbBackupHistory – Cleans up the backup history information from msdb database.
  • SQLCycleErrorLog - Cycle the SQL Error log periodically so the size is manageable for viewing through SQL tools.

En el paquete se incluye un documento Word con las instrucciones y detalles. Brevemente:

1. Expandir el paquete en una carpeta C:\AITSCRIPTS

2. En dicha carpeta ejecutar el script de línea de comandos: jobsinstall servidor\instancia

EJEMPLO:

C:\AITScripts>jobsinstall (LOCAL)\SQLEXPRESS2008
C:\AITScripts>C:\AITScripts\CMDS\JOBSinstall.cmd (LOCAL)\SQLEXPRESS2008
C:\AITScripts>REM **********************************
C:\AITScripts>REM Pass the server name as a parameter, this proc will install procedures and jobs on a sql server
C:\AITScripts>REM then execute each job for the first run.
C:\AITScripts>REM **********************************
C:\AITScripts>REM ****** INSTALL PROCEDURES and OBJECTS **************
C:\AITScripts>osql -S(LOCAL)\SQLEXPRESS2008 -E -dmaster -n -i"C:\Aitscripts\PROCS\SQLDBExclusions.sql"
C:\AITScripts>osql -S(LOCAL)\SQLEXPRESS2008 -E -dmaster -n -i"C:\Aitscripts\PROCS\SQLDBDBCCExclusions.sql"
C:\AITScripts>osql -S(LOCAL)\SQLEXPRESS2008 -E -dmaster -n -i"C:\Aitscripts\PROCS\SQLDBTranExclusions.sql"
C:\AITScripts>osql -S(LOCAL)\SQLEXPRESS2008 -E -dmaster -n -i"C:\Aitscripts\PROCS\SQLSpecifyDBExclusions.sql"
C:\AITScripts>osql -S(LOCAL)\SQLEXPRESS2008 -E -dmaster -n -i"C:\Aitscripts\PROCS\SQLSpecifyDBTranExclusions.sql"
C:\AITScripts>osql -S(LOCAL)\SQLEXPRESS2008 -E -dmaster -n -i"C:\Aitscripts\PROCS\SQLSpecifyDBDBCCExclusions.sql"
C:\AITScripts>osql -S(LOCAL)\SQLEXPRESS2008 -E -dmaster -n -i"C:\Aitscripts\PROCS\SQLSpecifyDBIndexDefragExclusions.sql"
C:\AITScripts>osql -S(LOCAL)\SQLEXPRESS2008 -E -dmaster -n -i"C:\Aitscripts\PROCS\SQLSpecifyDBUpdateStatsExclusions.sql"
C:\AITScripts>osql -S(LOCAL)\SQLEXPRESS2008 -E -dmaster -n -i"C:\Aitscripts\PROCS\SQLDBUpdateStatsExclusions.sql"
C:\AITScripts>osql -S(LOCAL)\SQLEXPRESS2008 -E -dmaster -n -i"C:\Aitscripts\PROCS\SQLMostRecentBackup.sql"
C:\AITScripts>osql -S(LOCAL)\SQLEXPRESS2008 -E -dmaster -n -i"C:\Aitscripts\PROCS\SQLBackupChecker.sql"
C:\AITScripts>osql -S(LOCAL)\SQLEXPRESS2008 -E -dmaster -n -i"C:\Aitscripts\PROCS\SQLBackupAll01.sql"
C:\AITScripts>osql -S(LOCAL)\SQLEXPRESS2008 -E -dmaster -n -i"C:\Aitscripts\PROCS\SQLBackupAll02.sql"
C:\AITScripts>osql -S(LOCAL)\SQLEXPRESS2008 -E -dmaster -n -i"C:\Aitscripts\PROCS\SQLBackupAll03.sql"
C:\AITScripts>osql -S(LOCAL)\SQLEXPRESS2008 -E -dmaster -n -i"C:\Aitscripts\PROCS\SQLBackupDiffAll01.sql"
C:\AITScripts>osql -S(LOCAL)\SQLEXPRESS2008 -E -dmaster -n -i"C:\Aitscripts\PROCS\SQLBackupDiffAll02.sql"
C:\AITScripts>osql -S(LOCAL)\SQLEXPRESS2008 -E -dmaster -n -i"C:\Aitscripts\PROCS\SQLRenameTlogBackupFile.sql"
C:\AITScripts>osql -S(LOCAL)\SQLEXPRESS2008 -E -dmaster -n -i"C:\Aitscripts\PROCS\SQLBackupTranAll01.sql"
C:\AITScripts>osql -S(LOCAL)\SQLEXPRESS2008 -E -dmaster -n -i"C:\Aitscripts\PROCS\SQLBackupTranAll02.sql"
C:\AITScripts>osql -S(LOCAL)\SQLEXPRESS2008 -E -dmaster -n -i"C:\Aitscripts\PROCS\SQLDbccAll.sql"
C:\AITScripts>osql -S(LOCAL)\SQLEXPRESS2008 -E -dmaster -n -i"C:\Aitscripts\PROCS\SQLIndexDefragAll_SQL2000.sql"
C:\AITScripts>osql -S(LOCAL)\SQLEXPRESS2008 -E -dmaster -n -i"C:\Aitscripts\PROCS\SQLIndexDefragAll_SQL2005.sql"
C:\AITScripts>osql -S(LOCAL)\SQLEXPRESS2008 -E -dmaster -n -i"C:\Aitscripts\PROCS\SQLIndexDefragAll.sql"
C:\AITScripts>osql -S(LOCAL)\SQLEXPRESS2008 -E -dmaster -n -i"C:\Aitscripts\PROCS\SQLUpdateStatsAll.sql"
C:\AITScripts>osql -S(LOCAL)\SQLEXPRESS2008 -E -dmaster -n -i"C:\Aitscripts\PROCS\SQLRODBStatus.sql"
C:\AITScripts>osql -S(LOCAL)\SQLEXPRESS2008 -E -dmaster -n -i"C:\Aitscripts\PROCS\SQLMostRecentBackup_RODB.sql"
C:\AITScripts>osql -S(LOCAL)\SQLEXPRESS2008 -E -dmaster -n -i"C:\Aitscripts\PROCS\SQLfncsvtodatabase.sql"
C:\AITScripts>osql -S(LOCAL)\SQLEXPRESS2008 -E -dmaster -n -i"C:\Aitscripts\PROCS\SQLfncsvtotable.sql"
C:\AITScripts>REM ****** INSTALL JOBS **************
C:\AITScripts>osql -S(LOCAL)\SQLEXPRESS2008 -E -dmaster -n -i"C:\Aitscripts\JOBS\JOB_SQLBackupAll.sql"SQLServerAgent is not currently running so it cannot be notified of thisaction.
C:\AITScripts>osql -S(LOCAL)\SQLEXPRESS2008 -E -dmaster -n -i"C:\Aitscripts\JOBS\JOB_SQLBackupDiffAll.sql"SQLServerAgent is not currently running so it cannot be notified of thisaction.
C:\AITScripts>osql -S(LOCAL)\SQLEXPRESS2008 -E -dmaster -n -i"C:\Aitscripts\JOBS\JOB_SQLBackupTranAll.sql"SQLServerAgent is not currently running so it cannot be notified of thisaction.
C:\AITScripts>osql -S(LOCAL)\SQLEXPRESS2008 -E -dmaster -n -i"C:\Aitscripts\JOBS\JOB_SQLDBCCAll.sql"SQLServerAgent is not currently running so it cannot be notified of thisaction.
C:\AITScripts>osql -S(LOCAL)\SQLEXPRESS2008 -E -dmaster -n -i"C:\Aitscripts\JOBS\JOB_SQLIndexDefragAll.sql"SQLServerAgent is not currently running so it cannot be notified of thisaction.
C:\AITScripts>osql -S(LOCAL)\SQLEXPRESS2008 -E -dmaster -n -i"C:\Aitscripts\JOBS\JOB_SQLUpdateStatsAll.sql"SQLServerAgent is not currently running so it cannot be notified of thisaction.
C:\AITScripts>osql -S(LOCAL)\SQLEXPRESS2008 -E -dmaster -n -i"C:\Aitscripts\JOBS\JOB_SQLBackupChecker.sql"SQLServerAgent is not currently running so it cannot be notified of thisaction.
C:\AITScripts>osql -S(LOCAL)\SQLEXPRESS2008 -E -dmaster -n -i"C:\Aitscripts\JOBS\JOB_SQLCleanupMsdbBackupHistory.sql"SQLServerAgent is not currently running so it cannot be notified of thisaction.
C:\AITScripts>osql -S(LOCAL)\SQLEXPRESS2008 -E -dmaster -n -i"C:\Aitscripts\JOBS\JOB_SQLCycleErrorLog.sql"SQLServerAgent is not currently running so it cannot be notified of thisaction.
C:\AITScripts>osql -S(LOCAL)\SQLEXPRESS2008 -E -dmaster -n -i"C:\Aitscripts\JOBS\JOB_SQLBackupSingleDBwithCompression.sql"SQLServerAgent is not currently running so it cannot be notified of thisaction.C:\AITScripts>

Finalizada la instalación, los procedimientos fueron creados en la base de sistema MsDb.

NOTA: Observar los errores al tratar de configurar al SQLServerAgent en un Express 2008.

Descargar los scripts de mantenimiento de bases de datos.

Cómo hacer un respaldo automatizado en SQL Server Express

Como todos saben, SQL Server 2005 Express no dispone de un agente para automatizar tareas ni tiene wizards para hacer planes de mantenimiento de las bases de datos. En este caso, la solución pasa por escribir scripts que hagan el trabajo y agendarlos para que se ejecuten con el Windows Task Scheduler (o cualquier otra cosa similar).

Por ejemplo, si deseo hacer un respaldo agendado de una base de datos, los pasos a seguir serán:

1. Escribir el comando BACKUP adecuado:

osql.exe -S MiServidorsql -U MiUsuario -P MiContraseña -Q " BACKUP DATABASE MiBase TO DISK = 'C:\bkp\MiBase.bak' "

2. Agendar dicho comando usando el Windows Task Scheduler. En Windows 7, para iniciar el Task Scheduler se debe ejecutar:

%windir%\system32\taskschd.msc /s

La utilidad osql permite especificar archivos de scripts, procedimientos de sistema e instrucciones Transact-SQL. Esta herramienta utiliza ODBC para comunicarse con el servidor y puede usarse stand-alone.

La utilidad sqlcmd también permite escribir instrucciones Transact-SQL, procedimientos del sistema y archivos de script en el símbolo del sistema. Esta utilidad utiliza OLE DB para ejecutar lotes de Transact-SQL.

osql (utilidad)
http://msdn.microsoft.com/es-es/library/ms162806.aspx

sqlcmd (utilidad)
http://msdn.microsoft.com/es-es/library/ms162773.aspx

Tutorial: utilidad sqlcmd
En este tutorial se proporciona una breve introducción a la utilidad sqlcmd para los usuarios sin experiencia en la utilización de una utilidad de línea de comandos.
http://msdn.microsoft.com/es-es/library/ms170207.aspx

Bases de datos de ejemplo para SQL Server 2008

Las bases de datos de ejemplo AdventureWorks, en sus distintos sabores, están disponibles para descargar en el sitio Codeplex. Las bases de ejemplo Pubs y Northwind clásicas también pueden usarse en SQL Server 2008, para descargarlas ir al sitio de descargas de Microsoft en este otro link.

Recomiendo tener a mano la base Pubs pues ocupa poco lugar, es simple de entender y además mucha documentación de SQL Server (incluyendo libros y artículos famosos) ejemplifica usando dicha base.

Instalación y Configuración de SQL Server Express 2005

Esta documentación tiene como objetivo describir paso a paso el proceso de instalación de SQL Server Express 2005. Es especialmente recomendado para quienes se introducen en el uso del producto.

Este documento cubre el proceso de instalación y configuración de SQL Server Express, y la comunicación entre SQL Server Express y sus aplicaciones. Este documento está dirigido a aficionados y otros profesionales que no sean desarrolladores, asi también como a desarrolladores, administradores y otros especialistas.

UPDATE 1:

El artículo original fue publicado en MTJ.NET de MSDN pero el link original fue movido, ahora está en este link. Una copia del artículo en formato PDF la he salvado en este link del portal de Solid Quality. Otra copia (por eso de tener respaldos redundantes J) la puse en este otro link.

http://msdn.microsoft.com/es-ar/library/bb972190.aspx