Library tutorials & articles

Using SQL-DMO To Backup and Verify a Database

Getting Started

SQLDMO.SQLServer

The code for the SQLDMO.SQLServer object should look very familiar. It allows you to connect to a given SQL server using either SQL Server on Windows NT authentication. Take a look at the snippet below.

  <%
  
    Dim
   srv
  Set srv = Server.CreateObject("SQLDMO.SQLServer")
  srv.LoginTimeout = 15
  srv.Connect "servername", "username", "password"
%>

This code creates a connection to SQL Server using SQL Server authentication. To login using NT authentication set the LoginSecure property to TRUE. This will cause the username and password parameters to be ignored and your NT login information will be used.

SQLDMO.Database

We will use the SQLDMO.Database object to get a list of databases from the server. This information is used to complete a backup request form in the sample application. The snippet below demonstrates using this object to populate a combo box.

  <%
  
    Dim
   srv
  Dim objDB
  Set srv = Server.CreateObject("SQLDMO.SQLServer")
  srv.LoginTimeout = 15 
  srv.Connect "servername", "username", "password"
  Set objDB = Server.CreateObject("SQLDMO.Database")
%><SELECTname="fdatabase"><%For Each objDB In srv.Databases
    If objDB.SystemObject = FalseThen%><OPTION><%=objDB.Name%></OPTION><%End IfNext%></SELECT>

Comments

  1. 06 Jun 2005 at 11:11

    here  the solution for Backup the database in VC++:




    int backup::OnButton1()


    {
       HRESULT hr;
       if FAILED(hr = CoInitialize (NULL))
       {
           //_tprintf(TEXT("CoInitialize Failed\n"));
           return (0);
       }


       LPSQLDMOSERVER pSQLServer = NULL;


       if FAILED(hr = CoCreateInstance(
           CLSIDSQLDMOServer,
           NULL,
           CLSCTX
    INPROCSERVER,
           IID
    ISQLDMOServer,
           (LPVOID*)&pSQLServer))
       {
           //_tprintf(TEXT("CoCreateInstance Failed\n"));
           return (0);
       }


       pSQLServer->SetLoginTimeout(10);
       pSQLServer->SetLoginSecure(TRUE);
       
       if FAILED(hr = pSQLServer->Connect((L"ws-45"),(L"sa"),(L"")))
       {
           AfxMessageBox("Backup connection Failed");
           return DisplayError();
       }


       else
       {
           LPSQLDMODATABASES    pDatabases = NULL;
           LPSQLDMODATABASE    pDatabase = NULL;
           LPSQLDMOFILEGROUPS  pFileGroups = NULL;
           LPSQLDMOFILEGROUP    pFileGroup = NULL;
           LONG                lCount = 0;
           LPSQLDMODBFILE        ppDBFile = NULL;
           LPLONG                pRetVal = NULL;
           long    mdatasize;
           CString temp;
           
           float  m
    datasizeMB;
           CString datasize;


           SQLDMOBSTR        strDB;
       //    long *strDB;
       
    //        char* m
    str = new char[100];


           //pSQLServer->GetDatabaseCount(&lCount);


           hr = pSQLServer->GetDatabases(&pDatabases);


           for (LONG i = 0; i < 1; i++)
           {
               pDatabases->GetItemByOrd(i, &pDatabase);


               pDatabase->GetName(&strDB);
               
               pDatabase->Release();
               pDatabase->GetSpaceAvailableInMB(&m_datasizeMB);
               pDatabase->GetFileGroups(&pFileGroups);


           
               pDatabase->GetSize(&m_datasize);


           //    pDatabase->GetFileGroupByName(_T("DOTS"),&pFileGroup);
           //    pFileGroup->GetDBFileByOrd(0,&ppDBFile);


           //    temp = mdatasize;
               datasize.Format("%d",m
    datasize);
               temp.Format("%d",mdatasizeMB);
               SetDlgItemText(IDC
    EDIT1,datasize);
               //AfxMessageBox(datasize);
               
               //AfxMessageBox(temp);
               
               //    sprintf(mstr,"%lf",msize);


           
           
           //    wprintf(T("database %s"), strDB);
           //    wprintf(
    T(" Total size  %i \n"), msize);
           //    wprintf(
    T("Free space %lf \n"), m_sizeMB);
           }
           
                       
    }


       LPSQLDMOBACKUP pSQLBackup = NULL;


       if FAILED(hr = CoCreateInstance(
           CLSIDSQLDMOBackup,
           NULL,
           CLSCTX
    INPROCSERVER,
           IID
    ISQLDMOBackup,
           (LPVOID*)&pSQLBackup))
       {
       //    _tprintf(TEXT("CoCreateInstance Failed\n"));
           return (0);
       }


       LPCONNECTIONPOINTCONTAINER pMyConnectionPointContainer;
       LPCONNECTIONPOINT pMyConnectionPoint;


       CMyBackupSink* pMyBackupSink = new CMyBackupSink();
       pMyBackupSink->AddRef();
       
       if (!pMyBackupSink)
       {
           return(0);
       }


       DWORD dwCookie;


       // ask the connectable object (pSQLBackup) about its outgoing interface,
       // by using QI on IIDIConnectionPointContainer. If fails, this object
       // does not support outgoing interface
       //
       if FAILED(pSQLBackup->QueryInterface(
           IID
    IConnectionPointContainer,
           (LPVOID FAR*) &pMyConnectionPointContainer))
       {
           return DisplayError();
       }


       // find the specific outgoing interface IID_ISQLDMOBackupSink and retrieve
       // a pointer to the connectionpoint object. If fails, the object does not
       // support this outgoing interface


       if FAILED(pMyConnectionPointContainer->FindConnectionPoint(
           IID_ISQLDMOBackupSink,
           (LPCONNECTIONPOINT FAR*)&pMyConnectionPoint))
       {
           return DisplayError();
       }


       // establish the connection between the Sink and the ConnectionPoint object.
       // Retrieve a key (cookie) value for terminating the connection later. If
       // this fails, the Sink and ConnectionPoint object do not support the same interface
       
       if (S_OK != (hr = pMyConnectionPoint->Advise((LPUNKNOWN)pMyBackupSink, &dwCookie)))
       {
           return DisplayError();
       }


       if FAILED(hr = pSQLBackup->SetFiles((L"e:\test123.dmp") ))
       {
           return DisplayError();
       }


       if FAILED(hr = pSQLBackup->SetDatabase((L"dots")))
       {
           return DisplayError();
       }


    //    hr = pSQLBackup->EXEC sp_spaceused ;


       if FAILED(hr = pSQLBackup->SetTruncateLog(SQLDMOBackupLogTruncateOnly))
       {
           return DisplayError();
       }



     

  2. 29 Jan 2005 at 14:28

    Hi


    I tried your code, seems it is not working for remote database backup.
    do u have any update version for taking backups.


    thanks

  3. 01 Jan 1999 at 00:00

    This thread is for discussions of Using SQL-DMO To Backup and Verify a Database.

Leave a comment

Sign in or Join us (it's free).

Carvin Wilson
AddThis

Related podcasts

  • Stack Overflow: Podcast #28

    This is the twenty-eighth episode of the StackOverflow podcast, where Joel and Jeff discuss Windows Azure, SQL Server 2008 full text search, Bayesian filtering, porn detection, and project management &mdash; among other things. Jeff met the inestimable Joey DeVilla aka Accordion Guy...

Events coming up

  • Nov 19

    SQLBits V

    Newport, United Kingdom

    SQLBits is Europe's largest SQL Server conference, and SQLBits V will be the biggest and best yet. On November 19th we are holding a day of pre-conference seminars; on November 20th we have a pay-to-attend day of SQL Server 2008 and R2 content; and on Saturday November 21st we have our usual free community conference.

We'd love to hear what you think! Submit ideas or give us feedback