Attempt to take Differential or Transaction Log backups using SQL DMO in a job goes for full database backup always
Problem:
You have a VB script to take full database backup and transaction log backup using SQL DMO but when the job is executed it takes full database backup always even if in the code it is specified to take transaction log backup.
The part where full database is specified in the code works fine but the part which takes transaction log backup in fact goes ahead and takes full database backup instead of taking the transaction log backup.
However, the same code when executed from VB interface works as expected and takes transaction log backup when specified.
You may reproduce the problem on your machine by using the following code:
Dim oBackup
Dim oRestore
Dim oBackupFolder
Dim strSQLServer
Dim strSQLBackupFolderPath
strSQLBackupFolderPath = "C:\"
strSQLServer = "T-ASONI-PRI"
Set oServer = CreateObject("SQLDMO.SQLServer2")
oServer.LoginSecure = True
oServer.Connect strSQLServer
Set oBackup = CreateObject("SQLDMO.Backup")
oBackup.Database = "Pubs"
oBackup.Action = SQLDMOBackup_Log
oBackup.Files = "c:\pubs.trn"
oBackup.SQLBackup oServer
oServer.DisConnect
Set oServer = Nothing
Set oDatabaseFile = Nothing
Set oDatabaseFolder = Nothing
Set oBackupFolder = Nothing
If you run the below command to verify the kind of backup taken, you will see a full database backup was taken
RESTORE HEADERONLY FROM DISK='C:\PUBS.TRN'
BackupType
----------
1
No matter what we specify for oBackup.Action we end up taking Full Database Backup.
Eg: Replace oBackup.Action = SQLDMOBackup_Log by oBackup.Action = aaaaaa, it still takes the full database backup
Even attempts to take differential backup goes for a full database backup
Resolution/Workaround:
Replace oBackup.Action = SQLDMOBackup_Log for transaction log backup by oBackup.Action = 3 for transaction log backup
Cause:
No matter what we put in the script it interprets it as 0 and goes for the full database backup so we need to specify the numeric equivalent for taking the backup. So for transaction log backup we specify 3.
Abhishek Soni
Support Engineer, Microsoft SQL Server.
Reviewed By
Sourabh Agarwal
Technical Lead, Microsoft SQL Server