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