Share via


You encounter error message "The system cannot find the file specified" when attempting to perform backups using sqlvdi

Symptoms you encounter:

 

SQL Server 2000 SP4 x86 is installed on a Windows 2003 X64 server. You use x64 backup applications to perform backups of databases. These backup applications use sqlvdi to interact with the SQL Server. You installed the sqlvdi.dll from KB 913100 and the x64 backup applications work fine. Later you install KB 935465 or any of the SQL 2000 QFE’s or GDR’s released after this fix. After this you will notice the following messages in the Windows Event log when you attempt to perform backup using the x64 backup applications:

 

Event Type: Error

Event Source: SQLVDI

Event Category: None

Event ID: 1

Date: 2/24/2009

Time: 10:18:02 AM

User: N/A

Description: SQLVDI: Loc=SVDS::Open. Desc=Open(Control). ErrorCode=(2)The system cannot find the file specified. . Process=1808. Thread=1468. Server. Instance=MSSQLSERVER. VD=GlobalSUPERBAK_SQLVDIMemoryName_0.

Event Type: Error

Event Source: MSSQLSERVER

Event Category: (2)

Event ID: 17055

Date: 2/24/2009

Time: 10:18:02 AM

Description: 18210 : BackupVirtualDeviceSet::Initialize: Open failure on backup device 'SUPERBAK'. Operating system error 0x80070002(The system cannot find the file specified.).

Event Type: Error

Event Source: MSSQLSERVER

Event Category: (6)

Event ID: 17055

Date: 2/24/2009

Time: 10:18:02 AM

Description: 3041 : BACKUP failed to complete the command BACKUP DATABASE PUBS TO VIRTUAL_DEVICE='SUPERBAK'

 

What causes this?

 

If you examine the versions of the sqlvdi.dll from the Microsoft SQL Server80COM directories you will notice they are of different versions. The dll in the x86 folder will be of a higher version than the one in the x64 folder. An example from a server which has this problem:

C:Program Files (x86)Microsoft SQL Server80COM version [2000.85.2101.0 NT INTEL X86]

C:Program FilesMicrosoft SQL Server80COM version [2000.85.1054.0 NT AMD64]

 

As a result the name used for the Virtual Device [GlobalSUPERBAK_SQLVDIMemoryName_0] is not the same in both the dll’s. So when you try to take a backup using x64 application that uses the x64 sqlvdi.dll it uses a different name than the one used by the x86 sqlvdi.dll loaded into the sqlservr.exe process. This results in the ErrorCode=(2)The system cannot find the file specified when a call is internally made to kernel32!OpenFileMappingW().

 

How can you fix this?

 

There are two ways you can address this problem.

 

Method 1:

Download the “Microsoft SQL Server 2005 Backward Compatibility Components” from Feature Pack for Microsoft SQL Server 2005.

You can download the SQLServer2005_BC_x64.msi and apply just the SQL VDI component. After applying you will notice that the x86 and x64 file versions match. An example below:

C:Program Files (x86)Microsoft SQL Server80COM [ version 2000.85.2312.0 NT INTEL X86]

C:Program FilesMicrosoft SQL Server80COM [ version 2000.85.2312.0 NT AMD64]

If the files were in use, the setup will request a restart. You should be able to perform backups now.

 

Method 2:

Make a copy of the sqlvdi.dll from the locations: C:Program Files (x86)Microsoft SQL Server80COM and C:Program FilesMicrosoft SQL Server80COM

Download the hotfix package from KB 913100  

Use the command line to extract the contents of this package: sql2000-kb913100-v8.00.1101-x64-enu.exe /X

After the extraction is over, you will find 2 sub-folders: x64 and x86

Copy the sqlvdi.dll file from the x86 folder to C:Program Files (x86)Microsoft SQL Server80COM

Copy the sqlvdi.dll file from the x64 folder to C:Program FilesMicrosoft SQL Server80COM

Register both the dll’s using regsvr32

Now you will be able to perform backups using the backup application. If the sqlvdi.dll is in use you will have to stop the SQL Server service and the backup application that has loaded the sqlvdi.dll. This will prevent the file copy step.

 

Note: You might encounter this problem when attempting to backup databases on SQL Server 2005 and SQL Server 2008 if the backup application uses SQLVDI interfaces and the mismatch exists between the x64 and x86 dll’s.

 

We will add information to this post when we get further updates on this problem. We are in the process of creating a Knowledge Base article to discuss this problem.

 

Thanks

Suresh B. Kandoth

SQL Server Senior Escalation Engineer

Comments

  • Anonymous
    February 25, 2009
    PingBack from http://www.clickandsolve.com/?p=14750

  • Anonymous
    January 19, 2010
    We're experiencing the same problem though with SQL Server 2005. We've seen one reference to a kb 934936.

  • Anonymous
    March 24, 2010
    I am facing the error below SQLVDI: Loc=SignalAbort. Desc=Client initiates abort. ErrorCode=(0). Process=8476. Thread=1028. Client. Instance=PROD_SQL1. VD=GlobalVDI_FB7A53C0-02D2-4469-A676-6868465A1904_0_SQLVDIMemoryName_0. It occurs on using Quest LiteSpeed 5.0.1 SQL Server 2000 Enterprise Edition 32 Bit Windows 2003 Enterprise Edition 64 Bit

  • Anonymous
    August 04, 2010
    This Problem also occurs on Win Server 2008 R2 with SQL Server R2. We backup with NetBackup.

  • Anonymous
    March 20, 2011
    thank you. method 1 has helped to solve a problem

  • Anonymous
    September 15, 2011
    I am also having the exact same problem described above, EXCEPT, I'm running MS SQL Server 2000 SP4 on Windows Server 2003 SP2 (32 bit).  The remote backup device is running on x64 bit OS and software, but my local SQL Server 2000 is 32 bit and running on 32 bit OS.  Also the backup works fine except for one day a week I receive the error as listed above.

  • Anonymous
    April 28, 2013
    The sqlvdi.dll version( 2000.85.2312.0) is same on C:Program Files (x86)Microsoft SQL Server80COM and C:Program FilesMicrosoft SQL Server80COM. Still we receives this error. Do you have any idea, how to fix this?

  • Anonymous
    September 02, 2014
    we are facing issue with sql 2005...do u have info about this. you mention about kb article ,is it ready