I have many times seen people
specifying something like 3, and expect SQL Server to keep the three most
recent backups in the backup file and overwrite everything which is older than
that. Well, that is not what the option does.
But before we go into details, let's look at an example backup
command which is using this option:
BACKUP DATABASE
sqlmaint
TO
DISK =
'R:\sqlmaint.bak'
WITH
RETAINDAYS
=
3
The RETAINDAYS is also exposed in the backup dialog in SSMS:
"Backup set will
expire: After x days".
It is also exposed in Maintenance Plans, the backup task. The
option is named "Backup
set will expire: After x days". It is only enabled if you
select the "Back up
databases across one or more files" option, which is not the
default option. This makes sense.
The default option is "Create a backup files for every database", which means that every time a backup is performed, a new file is created consisting of the database name, date and time. Since we will see that this option is only relevant when we do append, it makes sense in the RETAINDAYS not being enabled for this choice.
The default option is "Create a backup files for every database", which means that every time a backup is performed, a new file is created consisting of the database name, date and time. Since we will see that this option is only relevant when we do append, it makes sense in the RETAINDAYS not being enabled for this choice.
So what does this option do? All it does is make SQL
Server return an error message of you try to do a backup using the INIT option
(which means overwrite) before the date and time has occurred. In other words,
it tries to help you in not overwriting a backup file, using the INIT option,
before it is time. You can still overwrite earlier by either using the
stronger FORMAT option instead of INIT; or by simply deleting the backup file.
Btw, the RETAINDAYS parameter has a cousin named EXPIREDATE, which does the
same thing but you specify a datetime value instead of number of days.
Backup generationsSo, we have seen that RETAINDAYS do not in any way provide any automatic backup generation handling. There is no such functionality built-in in the BACKUP command. This means that when you are looking for functionality such as "keep backup files three days, and remove older than that", you need to look outside the BACKUP command. I.e., some script or tool of some sort.
No comments:
Post a Comment