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:
- RESTORE HEADERONLY – contiene una lista de información de encabezado de copia de seguridad para un dispositivo de copia de seguridad
- RESTORE FILELISTONLY – contiene una lista de los archivos de datos y registro que figuran en la copia de seguridad
- RESTORE LABELONLY – contiene información acerca del medio de la copia de seguridad
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.
Entradas relacionadas