Incremental Backup and Restore in C++

Incremental online backup can be performed while normal database activity proceeds uninterrupted using the C++ McoSqlEngine methods described below. Alternatively, C++ applications can call the C API functions described in the Incremental Backup and Restore in C page.

The McoSqlEngine methods backupCreate() and backupRestore() perform incremental backup and restore operations; and backupInfo() can be called to list the contents of a backup file. (Also note that file backup can be performed for persistent databases by calling method fileBackup().)

BACKUP

The backupCreate() method call must specify the BackupKind as one of the following:

The statement and can also specify an optional label. For example:

     
    {
        MCO_RET rc;
        mco_device_t       dev[4];
        McoSqlEngine engine;
        McoSqlOpenParameters params;
        char * backup_file = "SimpleDb_backup.dbs";
        char label[MAX_LABEL_SIZE];
        int duration_msec = 1000;
        int msec;
         
        ...
        do
        {
            rc = engine.open(params);
            if ( MCO_S_OK == rc )
            {
                msec = (int)MCO_SYSTEM_GET_CURRENT_TIME_MSEC();
                sprintf(label, "Backup at %d msec", msec);
 
                /* backup the database */
                rc = engine.backupCreate( backup_file, label, Auto, 0, NULL);
                sleep_msec(duration_msec);
                engine.close();
            }
        } while (rc == MCO_S_OK && !stop);
        ...
    }
     
    void backupRestore(McoSql::String* file, McoSql::String* label, McoSql::String* cipherKey);
     
    void backupInfo(McoSql::String* file, McoSql::SyntheticTable* backupInfo, McoSql::Allocator* allocator);
     

Note that a Snapshot backup must be done at least once before an Incremental backup can be done successfully.

RESTORE a backup

To restore the database the backupRestore() method specifies the backup file and an optional label (to restore the database contents up to that label only). For example:

 
    {
        MCO_RET rc;
        mco_device_t       dev[4];
        McoSqlEngine engine;
        McoSqlOpenParameters params;
        char * backup_file = "SimpleDb_backup.dbs";
        char * label = "";
         
        ...
        rc = engine.open(params);
        if ( MCO_S_OK == rc )
        {
            rc = engine.backupRestore( backup_file, label, NULL);
            engine.close();
        } 
        ...
    }
 

List the backup contents

The backupInfo() method can be used to list the contents of a backup file. For example:

     
    {
        MCO_RET rc;
        mco_device_t       dev[4];
        McoSqlEngine engine;
        McoSqlOpenParameters params;
        char * backup_file = "SimpleDb_backup.dbs";
        SyntheticTable * table = SyntheticTable();
        Allocator * allocator = Allocator();
         
        ...
        rc = engine.open(params);
        if ( MCO_S_OK == rc )
        {
            rc = engine.backupInfo( backup_file, table, allocator);
            engine.close();
        } 
        ...
    }