Está en la página 1de 5

use master

ALTER DATABASE [ventas_test] SET RECOVERY FULL


GO
=====================================================================
-- historial de backuos
select * from msdb..backupset where database_name='ventas_test'
-- eliminar el historial de backups de una base de datos
EXEC msdb.dbo.sp_delete_database_backuphistory @database_name =
N'ventas_test'
=====================================================================
--EJECUTAR MULTIPLES BACKUPS (FULL and T-LOG)
=====================================================================
--fULL BACKUP
BACKUP DATABASE [ventas_test] TO DISK = N'c:\APP\DB_FULL.bak'
WITH NOFORMAT, NOINIT, NAME = N'SAMPLE_DB-Full Database Backup', SKIP, NOREWIND
, NOUNLOAD, STATS = 10
GO
--Crear una tabla de prueba
Use [ventas_test]
GO
CREATE TABLE dbo.Table_1
(
Name varchar(50) NULL
) ON [PRIMARY]
GO
--Insertar primer registro en esta tabla
Insert into dbo.Table_1 values ('Rob')
GO
--Hacer Primer T-LOG backup.
BACKUP LOG [ventas_test] TO DISK = N'c:\app\SAMPLE_DB-TLog1.trn'
WITH NOFORMAT, NOINIT, NAME = N'SAMPLE_DB-Transaction Log Backup', SKIP, NOREW
IND, NOUNLOAD, STATS = 10
GO
--Insertar segundo registro en esta tabla
Insert into dbo.Table_1 values ('Bob')
GO
--Hacer Segundo T-LOG backup.
BACKUP LOG [ventas_test] TO DISK = N'C:\app\SAMPLE_DB-TLog2.trn'
WITH NOFORMAT, NOINIT, NAME = N'SAMPLE_DB-Transaction Log Backup', SKIP, NOREW
IND, NOUNLOAD, STATS = 10
GO
--Insertar tercer registro en esta tabla
Insert into dbo.Table_1 values ('Marry')
GO
--Hacer Segundo Full backup
BACKUP DATABASE [ventas_test] TO DISK = N'C:\app\DB_FULL_2.bak'
WITH NOFORMAT, NOINIT, NAME = N'SAMPLE_DB-Full Database Backup', SKIP, NOREWIND
, NOUNLOAD, STATS = 10
GO
--Insertar cuarto registro en esta tabla
Insert into dbo.Table_1 values ('Suzanne')
GO

--Hacer Segundo T-LOG backup. (Este backup es despues del segungo full backup)
BACKUP LOG [ventas_test] TO DISK = N'c:\app\SAMPLE_DB-TLog3.trn'
WITH NOFORMAT, NOINIT, NAME = N'SAMPLE_DB-Transaction Log Backup', SKIP, NOREW
IND, NOUNLOAD, STATS = 10
GO
--Verificar la informacion en la tabla creada (cuatro registros)
Use [ventas_test]
GO
Select * from dbo.Table_1
GO
=====================================================================
--RESTORE MULTIPLE BACKUPS (HEADER ONLY) TO VERIFY THE Log Chain
=====================================================================
--RESTORE primer FULL database backup con HEADERONLY
RESTORE HEADERONLY FROM DISK = 'c:\app\DB_FULL.bak'
FirstLSN
CheckpointLSN
----------------------------------------------------------------------------49000000010000142
1
49000000001600137 0

LastLSN
DatabaseBackupLSN BeginsLogChain
------------------------------------------------------- -------------4900000001600000
49000000010000142

-->Para el primer FULL Backup, FirstLSN is 49000000010000142 y LastLSN is 490000


00016000001. Tambien BeginsLogChain es 0.
--RESTORE primer T-Log backup con HEADERONLY
RESTORE HEADERONLY FROM DISK = 'c:\app\SAMPLE_DB-TLog1.trn'
FirstLSN
CheckpointLSN
----------------------------------------------------------------------------49000000008300001
1
49000000010000142 0

LastLSN
DatabaseBackupLSN BeginsLogChain
------------------------------------------------------- -------------4900000001800000
49000000010000142

-- PARA EL PRIMER T-LOG Backup, FirstLSN is 49000000008300001, LastLSN is 490000


00018000001. BeginsLogChain bit is 1, which indicates that this is first in log
chain
--RESTORE segundo T-Log backup con HEADERONLY
RESTORE HEADERONLY FROM DISK = 'C:\APP\SAMPLE_DB-TLog2.trn'
FirstLSN
CheckpointLSN
----------------------------------------------------------------------------49000000018000001
1
49000000010000142 0

LastLSN
DatabaseBackupLSN BeginsLogChain
------------------------------------------------------- -------------4900000001840000
49000000010000142

-- para el segundo T-LOG Backup, FirstLSN es 49000000018000001, este es el LastL


SN del primer T-Log backup y puede ser aplicado sobre el primer T-lOG backup

-- RESTORE segundo FULL Backup con HEADERONLY


RESTORE HEADERONLY FROM DISK = 'c:\app\DB_FULL_2.bak'
FirstLSN
CheckpointLSN
----------------------------------------------------------------------------49000000019000147
1
49000000010000142 0

LastLSN
DatabaseBackupLSN BeginsLogChain
------------------------------------------------------- -------------4900000002510000
49000000019000147

-- para el segundo FULL Backup, FirstLSN es 49000000019000147. Este FULL backup


no interrumple los lsn Chain del T-LOG Backup
--RESTORE 3rd T-Log backup with HEADERONLY
RESTORE HEADERONLY FROM DISK = 'c:\app\SAMPLE_DB-TLog3.trn'
FirstLSN
CheckpointLSN
----------------------------------------------------------------------------49000000018400001
1
49000000019000147 0

LastLSN
DatabaseBackupLSN BeginsLogChain
------------------------------------------------------- -------------4900000002600000
49000000019000147

--para el tercer T-LOG Backup, FirstLSN is 49000000018400001 el cual es el LastL


SN del segundo T-LOG backup y puede ser aplicado despues del segundo T-lOG back
up.
=====================================================================
--RESTORE MULTIPLE BACKUPS (THIS TIME DOING IT ACTUALLY!!)
=====================================================================
-- Restore primer FULL Backup con NORECOVERY
RESTORE DATABASE [ventas_restore] FROM DISK = N'c:\app\DB_FULL.bak'
WITH FILE = 1,
MOVE N'Ventas2015' TO N'c:\app\SAMPLE_RESTORED.mdf',
MOVE N'Ventas2015_log' TO N'c:\app\SAMPLE_RESTORED_1.ldf',
NORECOVERY, NOUNLOAD, STATS = 10
GO
-- Restore primer T-Log Backup con NORECOVERY
RESTORE LOG [ventas_restore] FROM DISK = N'c:\app\SAMPLE_DB-TLog1.trn'
WITH FILE = 1, NORECOVERY, NOUNLOAD, STATS = 10
GO
-- Restore segundo T-Log Backup con NORECOVERY
RESTORE LOG [ventas_restore] FROM DISK = N'c:\app\SAMPLE_DB-TLog2.trn'
WITH FILE = 1, NORECOVERY, NOUNLOAD, STATS = 10
GO
-- NOTE: Aqui , Estamos ignorando el segundo FULL BACKUP
-- Restore tercer T-Log Backup with RECOVERY (as this is the last T-Log backup i
n the chain)
RESTORE LOG [ventas_restore] FROM DISK = N'c:\app\SAMPLE_DB-TLog3.trn'
WITH FILE = 1, RECOVERY, NOUNLOAD, STATS = 10
GO
--- Moment of Truth, Lets check the number of rows in TEST table

Use [ventas_restore]
GO
Select * from dbo.Table_1
GO
-------------------------------------------------------------------------Casos prcticos 1.:
Backup log <BaseDatos_Name> with no_log -->> borra la parte no activa del log, p
ero no reduce el log.
Backup log <BaseDatos_Name> with truncate_only -->> Borra todo el log, pero n
o reduce el log.
Desde SQL Server 2008, ya no se puede truncar el log, realizando un backup, con
las opciones no_log y truncate_only, no funcionan.
Luego, lo importante es saber qu impide que el log de transacciones se reduzca o
se recicle, para lo cual, lo ms fcil es mirarlo en sys.databases, en la columna l
og_reuse_wait_desc. Aqu tienes su explicacin: http://msdn.microsoft.com/es-es/libr
ary/ms345414.aspx. En funcin de lo que marque esa columna, el modelo de recuperac
in que tengas y para la base de datos que quieres reducir, tendrs que tomar una ac
cin u otra, a continuacin, como realizar una reduccin con un shrink:
DBCC SHRINKFILE(<NombreLogico_log>, 512) -->> Reduce el log a n Mb
--Casos prcticos 2.:
Si no se deja comprimir o borrar el log por que no tiene sus trasacciones como
distribuidas ha que ponerlas, de la forma:
EXEC sp_repldone @xactid = NULL, @xact_segno = NULL, @numtrans = 0,
0, @reset = 1

@time =

--->Ver el tamao de los log y el % de ocupacion de las bbdd de una instacia:


dbcc sqlperf (logspace)
--->"esto tarda mucho..." Mostrar informacin de espacio actualizada acerca de una
base de datos
EXEC sp_spaceused @updateusage = N'TRUE';
GO
--Casos prcticos 3.:
Recomendaron para SQL Server 2008, con problemas de reduccin del log de transacci
ones:
Ejecuta dos o tres veces la instruccin CHECKPOINT. Esto asegurar que todas las pgin
as de memoria se han escrito en el fichero de datos:
CHECKPOINT
BACKUP LOG NombreBaseDeDatos TO DISK = '<Ruta y unidad>triton1.trn'
DBCC SHRINKFILE (N'Nombre_logico_Log' , 0, TRUNCATEONLY)
GO
--Casos prcticos 4.:
Comprueba qu valor muestra el campo "log_reuse_wait" de sys.databases para esa ba

se de datos en cuestin. Si ese campo indica efectivamente que el problema es que


hay transacciones activas, puedes revisarlas con el comando DBCC OPENTRAN (http:
//msdn.microsoft.com/es-es/library/ms182792.aspx)
alter database BBDD_Name set recovery simple
go
checkpoint
go
checkpoint
go
checkpoint
go
checkpoint
go
alter database BBDD_Name set recovery full
go
--Recomendable, para comenzar secuencia, para posterior backup del log.:
backup database BBDD_Name to disk = '<Ruta y unidad>.bak' with init
go
DBCC SHRINKFILE(pubs_log, 2)
Go
--Casos prcticos 5.:
La operacin de reduccin est bloqueada
Es posible bloquear las operaciones de reduccin mediante una transaccin que se eje
cuta con un nivel de aislamiento basado en el control de versiones de filas. Por
ejemplo, si se est ejecutando una operacin de eliminacin grande con un nivel de ai
slamiento basado en el control de versiones de filas cuando se ejecuta una opera
cin DBCC SHRINK DATABASE, la operacin de reduccin esperar a que la operacin de elimin
acin se haya completado antes de reducir los archivos. Cuando esto sucede, las op
eraciones DBCC SHRINKFILE y DBCC SHRINKDATABASE imprimen un mensaje informativo
(5202 en el caso de SHRINKDATABASE y 5203 para SHRINKFILE) en el registro de err
ores de SQL Server cada cinco minutos durante la primera hora, y cada hora suces
ivamente. Por ejemplo, si el registro de errores contiene el siguiente mensaje
de error:
DBCC SHRINKFILE for file ID 1 is waiting for the snapshot
transaction with timestamp 15 and other snapshot transactions linked to
timestamp 15 or with timestamps older than 109 to finish.
Esto significa que la operacin de reduccin est bloqueada por transacciones de insta
ntnea que tienen marcas de tiempo anteriores a 109, que es la ltima transaccin que
ha completado la operacin de reduccin. Tambin indica que las columnas transaction_s
equence_num o first_snapshot_sequence_num de la vista de administracin dinmica sys
.dm_tran_active_snapshot_database_transactions contienen el valor 15. Si la colu
mna transaction_sequence_num o first_snapshot_sequence_num contiene un nmero infe
rior al de la ltima transaccin completada mediante una operacin de reduccin (109), l
a operacin de reduccin esperar a que las transacciones finalicen.
Para resolver el problema, puede llevar a cabo una de las tareas siguientes:

Finalizar la transaccin que est bloqueando la operacin de reduccin.

Finalizar la operacin de reduccin. Si finaliza la operacin de reduccin, se c


onservar todo el trabajo completado.

No hacer nada y permitir que la operacin de reduccin espere a que finalice


la transaccin que la est bloqueando.

También podría gustarte