El rincón de JMACOE

¿Que hay dentro de los archivos de Backup Sql Server?

A veces te encuentras con archivos de backups SQL Server almacenados en tu sistema de archivos y es difícil determinar lo que contiene el archivo. Del nombre de archivo puedes ser capaz de descifrar que es una copia de seguridad completa, copia de seguridad diferencial o de copia de seguridad del registro de transacciones, pero ¿cómo decir lo que realmente está en el archivo? Afortunadamente SQL Server ofrece algunos comandos adicionales que puedes utilizar con los archivos de copia de seguridad de base de datos para determinar su contenido. Estas opciones incluyen HEADERONLY, FILELISTONLY y LABELONLY.

Junto con funcionalidad de copia de seguridad y restaurar de los comandos BACKUP y RESTORE existen otras opciones de restauración que le permiten determinar lo que se almacena en el archivo de copia de seguridad. Estos comandos son útiles si escribes varias copias de seguridad en el mismo archivo físico o tal vez si tienes copias de seguridad de base de datos de otro sistema y no estás seguro de lo que se almacena en el archivo. Los comandos que puede utilizar para ver el contenido del archivo de copia de seguridad son los siguientes:


A continuación presento los ejemplos de resultados de cada uno de los comandos. Estas tres salidas muestran el resultado completo de ejecutar los comandos con un archivo de copia de seguridad contiene una copia de seguridad completa de la base de datos AdventureWorks. Como puedes ver, hay mucha más información en los archivos que puede ser o no útil para ti.

RESTORE HEADERONLY FROM DISK='C:\Backup\Adv_Full.bak'
BackupName AdventureWorks-Full Database Backup
BackupDescription NULL
BackupType 1
ExpirationDate NULL
Compressed 0
Position 1
DeviceType 2
UserName EDGENB2\Sysadmin
ServerName EDGENB2\TEST1
DatabaseName AdventureWorks
DatabaseVersion 611
DatabaseCreationDate 38985.72449
BackupSize 173091840
FirstLSN 41000000054400000
LastLSN 41000000056800000
CheckpointLSN 41000000054400000
DatabaseBackupLSN 41000000041600000
BackupStartDate 1/3/2007 8:15:41 PM
BackupFinishDate 1/3/2007 8:15:41 PM
SortOrder 52
CodePage 0
UnicodeLocaleId 1033
UnicodeComparisonStyle 196609
CompatibilityLevel 90
SoftwareVendorId 4608
SoftwareVersionMajor 9
SoftwareVersionMinor 0
SoftwareVersionBuild 1399
MachineName EDGENB2
Flags 512
BindingID 5956B629-86DF-4000-BAC0-52194A773D3B
RecoveryForkID B935AAC8-BB1A-4C10-AD0B-014DFEF2FC72
Collation SQL_Latin1_General_CP1_CI_AS
FamilyGUID B935AAC8-BB1A-4C10-AD0B-014DFEF2FC72
HasBulkLoggedData 0
IsSnapshot 0
IsReadOnly 0
IsSingleUser 0
HasBackupChecksums 0
IsDamaged 0
BeginsLogChain 0
HasIncompleteMetaData 0
IsForceOffline 0
IsCopyOnly 0
FirstRecoveryForkID B935AAC8-BB1A-4C10-AD0B-014DFEF2FC72
ForkPointLSN NULL
RecoveryModel FULL
DifferentialBaseLSN NULL
DifferentialBaseGUID NULL
BackupTypeDescription Database
BackupSetGUID 1389292F-F593-425D-BD36-325FCEA0E02A
RESTORE FILELISTONLY FROM DISK='C:\Backup\Adv_Full.bak'
LogicalName AdventureWorks_Data AdventureWorks_Log
PhysicalName C:\Program Files\Microsoft SQLServer\MSSQL.1\MSSQL\Data\ AdventureWorks_Data.mdf C:\Program Files\Microsoft SQLServer\MSSQL.1\MSSQL\Data\ AdventureWorks_Log.ldf
Type D L
FileGroupName PRIMARY NULL
Size 188678144 2097152
MaxSize 35184372080640 2199023255552
FileId 1 2
CreateLSN 0 0
DropLSN 0 0
UniqueId 94EDC99D-D0E0-4146-95DA-1756D6C92348 EB9DB2B3-BE70-4F76-8345-7FF07FB705C7
ReadOnlyLSN 0 0
ReadWriteLSN 0 0
BackupSizeInBytes 172163072 0
SourceBlockSize 512 512
FileGroupId 1 0
LogGroupGUID NULL NULL
DifferentialBaseLSN 41000000041600000 0
DifferentialBaseGUID 6493F201-EBBA-47DD-BBDA-83A2772A8DA3 00000000-0000-0000-0000-000000000000
IsReadOnly 0 0
IsPresent 1 1
RESTORE LABELONLY FROM DISK='C:\Backup\Adv_Full.bak'
MediaName NULL
MediaSetId 23979995-927B-4FEB-9B5E-8CF18356AB39
FamilyCount 1
FamilySequenceNumber 1
MediaFamilyId 86C7DF2E-0000-0000-0000-000000000000
MediaSequenceNumber 1
MediaLabelPresent 0
MediaDescription NULL
SoftwareName Microsoft SQL Server
SoftwareVendorId 4608
MediaDate 1/3/07 8:15 PM
MirrorCount 1

Si tenemos un archivo de copia de seguridad que contiene varias copias de seguridad, utilizando la opción HEADERONLY nos muestra la información para cada una de las copias de seguridad. A continuación se presenta una visión condensada de la salida de RESTORE HEADERONLY. Como puedes ver existen tres copias de seguridad en este archivo, una copia de seguridad completa y dos copias de seguridad del registro de transacciones. Esta información puede ser determinada por el Tipo de Copia (BackupType).

BackupName AdventureWorks-Full Database Backup AdventureWorks-Transaction Log Backup AdventureWorks-Transaction Log Backup
BackupDescription NULL NULL NULL
BackupType 1 2 2
Position 1 2 3
BackupSize 173091840 74752 8192
FirstLSN 41000000054400000 41000000054400000 41000000059200000
LastLSN 41000000056800000 41000000059200000 41000000059200000
CheckpointLSN 41000000054400000 41000000054400000 41000000054400000
DatabaseBackupLSN 41000000041600000 41000000054400000 41000000054400000
BackupStartDate 1/3/07 8:15 PM 1/3/07 8:39 PM 1/3/07 8:40 PM
BackupFinishDate 1/3/07 8:15 PM 1/3/07 8:39 PM 1/3/07 8:40 PM
BackupTypeDescription Database Transaction Log Transaction Log
BackupSetGUID 1389292F-F593-425D-BD36-325FCEA0E02A 1DAB6FAA-14AD-4C3C-8081-6A15CB170782 285DC2A1-1E89-44A5-B9ED-373821C94054

Entonces, ¿cómo ayudará esta información a restaurar las bases de datos?

Cuando los archivos de copia de seguridad contiene varias copias de seguridad en un solo archivo, tiene que especificar la posición del archivo que está restaurando. Esta opción para el comando RESTORE es el archivo, pero este número se corresponde con el valor de posición. Así que si queremos restaurar estos archivos utilizando el comando RESTORE que emitiría los siguientes tres comandos, uno para cada una de las copias de seguridad utilizando el valor que está en la posición de la salida HEADERONLY ..

RESTORE DATABASE AdventureWorks FROM DISK='C:\Backup\Adv_Full.bak' WITH FILE = 1, NORECOVERY

RESTORE LOG AdventureWorks FROM DISK='C:\Backup\Adv_Full.bak' WITH FILE = 2 , NORECOVERY

RESTORE LOG AdventureWorks FROM DISK='C:\Backup\Adv_Full.bak' WITH FILE = 3, RECOVERY

Además de ser capaz de restaurar las copias de seguridad múltiples a partir de un archivo de respaldo, también podemos utilizar la salida de FILELISTONLY para determinar donde podrían estar las ubicaciones por defecto para los archivos de datos y de registro. Si echas un vistazo a la salida (arriba) del comando FILELISTONLY y miras los valores de LogicalName y PhysicalName podrás ver el directorio donde se almacena la base de datos que estaba en el directorio «C:\Program Files\Microsoft SQLServer\MSSQL.1\MSSQL\Data\». Si acabas de restaurar los archivos de datos y de registro se crearán en este directorio. Si el directorio no existe o si deseas especificar otro directorio o nombre de archivo, necesitas utilizar la opción WITH MOVE del comando RESTORE. Esto se puede hacer de la siguiente manera:

RESTORE DATABASE AdventureWorks FROM DISK='C:\Backup\Adv_Full.bak'
WITH FILE = 1,
RECOVERY,
MOVE 'AdventureWorks_Data' TO 'J:\SQLdata\AdventureWorks_Data.mdf',
MOVE 'AdventureWorks_Log' TO 'X:\SQLlog\AdventureWorks_Log.ldf'

Una gran cantidad de lo que ha comentado arriba se puede hacer mediante el uso de la GUI, pero con el uso de los comandos T-SQL puede ser mucho más rápido

Mantén estos comandos a mano para saber qué opciones tienes para determinar el contenido de los archivos de copia de seguridad.

Comparte y diviertete: