copy_only option for backup
Its a useful feature but
very few are aware of this option .
As we all are aware of
backups and its different types
We are aware of backup strategies
which include backup chain of full,differential and log backups
But some
times we need to go
out of box and need a separate backup.
Lets say we need a copy of live db to test servers but if we take a full backup it will break
the sequence
of backup. Lets see the
example
FULL-1
Diff1
Diff2
FULL-2
Diff3
Full-3 (we need this full backup to restore db on test server)
If not specify as copy_only this will break current sequence and
will work as differential
base for next differential backup
Diff4
But if
we specify as copy_only
for FULL-3 full backup , it will not update bitmap for differential
and will not work as differential base. Diff4 will have all changed data after Full-2 instead of Full-3
Here we have database backup_test_db
we take
first its full backup
SELECT *
FROM sys.database_files
Here differential_base_guid,differential_base_lsn,differential_base_time values are null
DISK = N'C:\Program
Files\Microsoft SQL
Server\MSSQL10.MSSQLSERVER\MSSQL\Backup\backup_test_db_1.bak'
WITH NOFORMAT, NOINIT, NAME = N'backup_test_db-Full Database
Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10
Here differential_base_guid,differential_base_lsn,differential_base_time values are updated
SELECT FILE_ID,
name,
differential_base_guid,
differential_base_lsn,
differential_base_time
FROM sys.database_files
Now we will add another table
CREATE TABLE test
(
id INT
)
Now again we
will take full backup
Here differential_base_guid,differential_base_lsn,differential_base_time
will be changed as database
is changed
BACKUP DATABASE [backup_test_db] TO
DISK = N'C:\Program
Files\Microsoft SQL
Server\MSSQL10.MSSQLSERVER\MSSQL\Backup\backup_test_db_2.bak'
WITH NOFORMAT, NOINIT, NAME = N'backup_test_db-Full Database
Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10
SELECT FILE_ID,
name,
differential_base_guid,
differential_base_lsn,
differential_base_time
FROM sys.database_files
Now again we
will add new table
CREATE TABLE test1
(
id INT
)
Now we want to take full backup again but
its for purpose of
restoring on test server
and don't want to break backup sequence with
new backup .
Here we will specify copy_only option , so value of differential_base_guid, differential_base_lsn,
differential_base_timewill not be changed.
BACKUP DATABASE [backup_test_db] TO
DISK = N'C:\Program
Files\Microsoft SQL
Server\MSSQL10.MSSQLSERVER\MSSQL\Backup\backup_test_db_3.bak'
WITH COPY_ONLY , NOFORMAT, NOINIT, NAME = N'backup_test_db-Full
Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10
SELECT FILE_ID,
name,
differential_base_guid,
differential_base_lsn,
differential_base_time
FROM sys.database_files
So here if we take differential backup
again it will behave like copy_only backup does not exist
and backup
all data since second
backup
No comments:
Post a Comment