While performing a backup of a SQL Server using a backup software which uses SQLVDI, you might encounter a failure which reports the following failure hex code: 0x080070005. This is basically an Access Denied error message. If your backup software logs all the VDI API calls that are made, then you might even know which function call failed.
If you are using SQL Server Backup Simulator to simulate a VDI backup of the any SQL Server database with the same account that raised the error, you will find the following message in the Backup Simulator logs.
Trying to perform VDI test on a default instance
Error: VDS::Create fails: 0x80070005
The above message tells me that the IClientVirtualDeviceSet2::CreateEx function call failed. Now the important question here is why did the CreateEx function fail. If you look into the application event log, you will find an Error reported by SQLVDI (source) with the following text:
SQLVDI: Loc=CVDS::CreateEx. Desc=Create Memory. ErrorCode=(5)Access is denied.. Process=24456. Thread=13984. Client. Instance=. VD=Global\SQLBackupSim_SQLVDIMemoryName_0.
The above message tells me that I am creating a Global Shared Memory Object but I currently do not have the necessary privilege to create the object. Check the output of whoami /priv for the account that is running the Backup Simulator or the backup software and see if the following privilege is listed: SeCreateGlobalPrivilege. This privilege is granted by default to administrators, services, and the local system account. In case you are trying to use Backup Simulator on a Windows version which has UAC, then you need to run Backup Simulator using “Run as Administrator” option to avoid this issue. If the account trying to create this global memory object doesn’t have this privilege, then you can grant the privilege to this account using the following steps:
-
On the Start menu, click Run. In the Open box, type gpedit.msc.
The Group Policy dialog box opens.
-
On the Group Policy console, expand Computer Configuration, and then expand Windows Settings.
-
Expand Security Settings, and then expand Local Policies.
-
Select the User Rights Assignment folder.
The policies will be displayed in the details pane.
-
In the pane, double-click Create global objects.
-
In the Local Security Policy Setting dialog box, click Add.
-
In the Select Users or Groups dialog box, add an account with privileges to run backup software or the Backup Simulator application.
Once this is done, you need to re-launch Backup Simulator or re-start the backup using the Backup Software as the security privilege will not modify the token that is currently being used by the backup software or Backup Simulator.
Another issue that you can run into even if you have the above mentioned security privilege is if you have multiple backups trying to create the same global shared memory object. In such scenarios, you would want to create a unique virtual device name. More information about the same is mentioned in the KB Article below:
903646 An application that uses the Virtual Device Interface feature of SQL Server 2000 to back up a SQL Server 2000 database may not back up the database
http://support.microsoft.com/default.aspx?scid=kb;EN-US;903646
Great article. It helped me solve my problem. I was getting the same error in the even viewer however i could not get this to work by allowing the user to “create global objects”. I looked at the GP and the user was infact there. What helped me was the whoami /priv command – i could see that the privilege was NOT assigned. I simply had to log out and back in and the privilege was applied. Backups succeeded.
LikeLike
Good to know it helped! However any change to security privileges will not affect the tokens already created. Which is why you needed to login and logout for the new privilege to take effect.
LikeLike
This can also happen if you try and backup a virtual sql instance from a virtual IP address that does not match the corresponding instance name, as the VDI device requires the instance name when creating it.
LikeLike