Script en dos pasos para respaldar todas las bases de usuario, FULL + DIFF

Una vez por semana…

Modificar: SET @path = ‘C:\ARPETA\FULL\’ a lo que corresponda

/*============================================================================
 Script: Backup_User_databases
 Objetivo: Realiza un backup de todas las bases de datos de user
============================================================================*/

-- Declara Variables
DECLARE @db_name VARCHAR(50) -- database name  
DECLARE @path VARCHAR(256) -- path for backup files  
DECLARE @fileName VARCHAR(256) -- filename for backup  
DECLARE @fileDate VARCHAR(20) -- used for file name
DECLARE @commandLine char(500)

-- Seteo de variables
SET @path = 'C:\ARPETA\FULL\'
SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112) 

-- Comienzo --

------------------------------------
--PRINT 'Cargando el cursor...'
------------------------------------
DECLARE db_cursor CURSOR FOR  
SELECT LTRIM(RTRIM(name))
FROM sys.databases 
WHERE name NOT IN ('master','model','msdb', 'tempdb')
and state = 0 --Status is Online

OPEN db_cursor   
FETCH NEXT FROM db_cursor INTO @db_name   

WHILE @@FETCH_STATUS = 0   
BEGIN   
		SET @fileName = @path + @db_name + '_' + @fileDate + '.BAK'  
		SET @commandLine = 'BACKUP DATABASE [' + @db_name + '] to disk = ''' 
                      + @fileName + ''' WITH FORMAT'
		------------------------------------
		--PRINT 'Backup de DB: ' + @db_name
		------------------------------------
		--print @commandLine
		exec(@commandLine)

       FETCH NEXT FROM db_cursor INTO @db_name   
END   

CLOSE db_cursor   
DEALLOCATE db_cursor
			-- final --

Diariamente…

Modificar: SET @path = ‘C:\ARPETA\DIFF\’

/*============================================================================
 Script: Backup_User_databases
 Objetivo: Realiza un backup de todas las bases de datos de user (diferencial)
 ============================================================================*/

-- Declara Variables
DECLARE @db_name VARCHAR(50) -- database name  
DECLARE @path VARCHAR(256) -- path for backup files  
DECLARE @fileName VARCHAR(256) -- filename for backup  
DECLARE @fileDate VARCHAR(20) -- used for file name
DECLARE @commandLine char(500)

-- Seteo de variables
SET @path = 'C:\ARPETA\DIFF\'
SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112) 

			-- Comienzo --

------------------------------------
--PRINT 'Cargando el cursor...'
------------------------------------
DECLARE db_cursor CURSOR FOR  
SELECT LTRIM(RTRIM(name))
FROM sys.databases 
WHERE name NOT IN ('master','model','msdb', 'tempdb')
and state = 0 --Status is Online

OPEN db_cursor   
FETCH NEXT FROM db_cursor INTO @db_name   

WHILE @@FETCH_STATUS = 0   
BEGIN   
		SET @fileName = @path + @db_name + '_diff_' + @fileDate + '.BAK'  
		SET @commandLine = 'BACKUP DATABASE [' + @db_name + '] to disk = ''' 
                      + @fileName + '''' + ' WITH DIFFERENTIAL'
		------------------------------------
		--PRINT 'Backup de DB: ' + @db_name
		------------------------------------
		--print @commandLine
		exec(@commandLine)

       FETCH NEXT FROM db_cursor INTO @db_name   
END   

CLOSE db_cursor   
DEALLOCATE db_cursor
			-- final --

Y para hacerla completa, el respaldo de los logs…, cada hora o dos.
Modificar: SET @path = ‘C:\ARPETA\LOG\’

/*============================================================================
 Script: Backup_log_User_databases
 Objetivo: Realiza un backup log de todas las bases de datos de usuario 
============================================================================*/

-- Declara Variables
DECLARE @db_name VARCHAR(50) -- database name  
DECLARE @path VARCHAR(256) -- path for backup files  
DECLARE @fileName VARCHAR(256) -- filename for backup  
DECLARE @fileDate VARCHAR(20) -- used for file name
DECLARE @commandLine char(500)

-- Seteo de variables
SET @path = 'C:\ARPETA\LOG\'
SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112) 

			-- Comienzo --

------------------------------------
--PRINT 'Cargando el cursor...'
------------------------------------
DECLARE db_cursor CURSOR FOR  
SELECT LTRIM(RTRIM(name))
FROM sys.databases 
WHERE name NOT IN ('master','model','msdb', 'tempdb')
and state = 0 --Status is Online
and recovery_model_desc like 'FULL'

OPEN db_cursor   
FETCH NEXT FROM db_cursor INTO @db_name   

WHILE @@FETCH_STATUS = 0   
BEGIN   
		SET @fileName = @path + @db_name + '_' + @fileDate + '.TRN'  
		SET @commandLine = 'BACKUP LOG [' + @db_name + '] to disk = ''' 
                       + @fileName + '''' + 'WITH FORMAT'
		------------------------------------
		--PRINT 'Backup de DB: ' + @db_name
		------------------------------------
		--print @commandLine
		exec(@commandLine)

       FETCH NEXT FROM db_cursor INTO @db_name   
END   

CLOSE db_cursor   
DEALLOCATE db_cursor
			-- final --

Actualizacion 2012-07-06: Los scripts antes mencionados, tuneados y en scripts que generan los jobs de SQL Back Up SQL

-- Buscando en la msdb, la tabla RestoreHistory y sus dependientes
use msdb;
go
select
      DBRestored  = destination_database_name,
      RestoreDate = restore_date,
      SourceDB    = b.database_name,
      SourceFile  = physical_name,
      BackupDate  = backup_start_date
from RestoreHistory h
inner join BackupSet b
      on h.backup_set_id = b.backup_set_id
inner join BackupFile f
      on f.backup_set_id = b.backup_set_id
order by RestoreDate
go

Resultado:

 
DBRestored  RestoreDate             SourceDB    SourceFile
CopyOfpubs  2011-11-02 10:03:46.717 pubs        F:\DATA\db\pubs.mdf
CopyOfpubs  2011-11-02 10:03:46.717 pubs        F:\DATA\db\pubs_log.LDF

Fuente: sqlusa.com

Table Difference es una herramienta, de línea de comando, que te permite descubrir y reconciliar diferencias entre dos tablas. Tablediff identifica diferencias en el esquema y en los datos contenidos. Siendo la función más popular el hecho de poder generar un script que se puede ejecutar en el destino para reconciliar las diferencias entre las tablas.
TableDiff.exe posee dos parámetros de entrada:

  • Conectividad – Provee el acceso al origen y al destino de la comparación.
  • Opciones de comparación:
    – Comparar schemas, Regulares o estrictos
    – Comparar utilizando Rowcounts, Hashes o Columnas
    – Generar script por las diferencias con I/U/D para sincronizar el destino con el origen.

TableDiff fue concebido originalmente para la replicación de objetos, pero fácilmente puede aplicarse a cualquier situación en la que se necesite comparar datos y el esquemas.

Se puede encontrar más información acerca de esta herramienta en la Biblioteca Online de SQL Server 2005.

Asi como lo ven 80%

– Correctas
= Mal

1. Para poder realizar Backups en caliente de una máquina virtual de Hyper – V R2, utilizando VSS con Windows Backup ¿Se debe realizar alguna acción?:
=No se debe realizar ninguna acción Windows Server Backup R2 lo hace de forma nativa.
-Se deben agregar valores en el registro HKEY_LOCAL_MACHINE.
Se deben agregar valores en el registro HKEY_CURRENT_CONFIG.
Se deben agregar valores en el registro HKEY_USERS.

2. Que versión de SQL Server requiere Data Protection Manager 2010 RC:
-SQL 2008 SP1 con Reporting Services.
=SQL 2005 SP3 con Reporting Services.
SQL 2000 SP4.
=Todas las anteriores.

3. Existe un Backup del disco de una máquina virtual de Hyper- V R2, realizado en caliente con Windows Server Backup 2008 R2, es necesario volver al estado del ultimo Backup, la maquina se está ejecutando ¿Qué se debe hacer antes de recuperar el disco?:
No se debe realizar ninguna acción.
Se debe volver al estado anterior de la instantánea.
-Se debe apagar la máquina.
Se debe salvar el estado.

4. Si tengo implementado un Cluster de host en Hyper – V R2, no es posible realizar el Backup con Data Protection Manager 2010 RC:
Verdadero
-Falso

5. Resulta cierto afirmar que en Windows Server Backup R2 solo se pueden seleccionar Volúmenes completos:
Verdadero
-Falso

6. Se realiza una copia de seguridad con Windows Server Backup R2, se selecciona el disco D: del equipo donde se realiza ¿en qué carpeta se guarda el Backup?:
-%SYSTEMROOT%\ImageBackup.
=%SYSTEMROOT%\WindowsImageBackup.
D:\ WindowsImageBackup.
=D:\ImageBackup.

7. Para poder respaldar un servidor con Hyper – V R2 con System Center Data Protection Manger 2010 RC, desde donde se debe realizar la instalación del agente:
En la solapa Autodeployment.
-En la solapa de Management.
=En la solapa Protection.
En la solapa Reports.

8. En Windows 2008 R2 desde donde se instala Windows Server Backup 2008 R2:
Windows Server Backup R2 viene instalado de forma predeterminada.
Se debe descargar desde internet.
=Es un rol, en Server Manager.
-Es una característica (feature), en Server Manager.

9. Que es System Center Data Protection Manager 2010 RC:
=Es el complemento de System Center Virtual Machine Manager 2008 R2 para realizar Backups de un entorno virtual.
-Es la solución de Backup de Microsoft que soporta trabajar con discos (corto plazo) y cintas (largo plazo) en Servidores y Clientes Windows.
Es una nueva funcionalidad de Hyper – V R2.
Una herramienta de instantáneas de servidores Windows.

10. En Data Protection Manager 2010 RC ya no es necesaria una granja de recuperación para recuperar un elemento individual de Sharepoint:
-Verdadero
Falso

11. Cual es el comando utilizado para realizar backups con Windows Server Backup 2008 R2 desde la línea de comando:
Wbadm.exe.
BackupAdmin.exe.
-Wbadmin.exe.
No existe una herramienta de línea de comandos.

12. Resulta cierto afirmar que el Backup de una máquina virtual de Hyper – V R2 respaldada con Data Protection Manager 2010 RC puede ser restaurada en otro host con Hyper – V R2:
-Verdadero
Falso

13. Para poder respaldar un servidor con Hyper – V R2 con DPM 2010 RC ¿Qué operación debo realizar?:
-No se debe realizar ninguna acción.
Instalar el agente de DPM.
Se debe apagar la máquina.
-Descargar e instalar hotfixs para Windows 2008 R2.

14. Son entornos de Virtualización soportados por System Center Data Protection Manager 2010 RC:
-Virtual Server 2005 R2.
Virtual PC 2007.
-Hyper – V Server 2008 y 2008 R2.
-Windows Server 2008 R2 con Hyper – V.

15. Para poder realizar backups con DPM 2010 RC, que se debe hacer si se cuenta con una instalación predeterminada de Windows 2008 R2 en una máquina virtual en Hyper – V R2, sin reiniciar el equipo:
–Agregar un nuevo disco a la máquina virtual en una controladora SCSI.
No se puede realizar esta acción para agregar un disco es necesario apagar la máquina virtual.
–Poner el disco online e inicializarlo y sumarlo desde Management en la consola de administración de DPM 2010 RC.
-Poner el disco online, inicializarlo crear el volumen y sumarlo desde Management en la consola de administración de DPM 2010 RC.

Hace unos dias uno de los miembros de mi equipo quería obtener la lista de bases de datos que se han configurado en mirror en un server para omitirlas de los back ups. Y asi nacio este script.

The easiest approach is to query the sys.database_mirroring DMV. The output of this DMV has a column named mirroring_state, which has different values for the Mirroring State. This column will have a value of NULL, if a database is not mirrored or is inaccessible. Based on this logic, I wrote the following script to check the mirroring status of all the databases on a given instance.

El enfoque más sencillo es consultar la sys.database_mirroring. La salida tiene una columna llamada mirroring_state, que tiene valores diferentes para cada estado del mirror. Esta columna tendrá un NULL, si una base de datos no esta espejada o es inaccesible. basado en esta logica, escribí el siguiente script para comprobar el estado de mirrroring de todas las bases de datos en una instancia determinada.

SELECT
A.name,
CASE
    WHEN B.mirroring_state is NULL THEN 'Mirroring not configured'
    ELSE 'Mirroring configured'
END as MirroringState
FROM
sys.databases A
INNER JOIN sys.database_mirroring B
ON A.database_id=B.database_id
WHERE a.database_id > 4
ORDER BY A.NAME

Lo que muestra algo asi:

Basado en la nota de sqldbadiaries.com

Una de las ventajas de utilizar el servicio de Mirroring de SQL 2005 es que al perderse la conectividad a un nodo, el segundo toma la posta y continua trabajando pero… ¿Cómo hacemos que nuestra aplicación no pierda conectividad?
Muy fácil, hay que hacer un toque mágico en la cadena de conexión:

“Data Source=A;Failover Partner=B;Initial Catalog=AdventureWorks;Integrated Security=True;”

En caso que la aplicación no pueda acceder al nodo A, intentara con el B.