增量备份与恢复
可以使用下面描述的 C++ McoSqlEngine 方法在数据库正常活动不受干扰的情况下执行增量在线备份。
或者,
C++ 应用程序可以调用标准的 C API 增量备份和恢复 函数。
McoSqlEngine 类中:
backupCreate()
和backupRestore()
方法执行增量备份和恢复操作。backupInfo()
方法可用于列出备份文件的内容。
请注意
对于持久化数据库,可以通过调用 fileBackup() 方法执行文件备份。
备份功能
backupCreate()
方法调用必须将 BackupKind 指定为以下之一:
- Snapshot - 快照,为整个数据库创建备份记录;
- Incremental (partial) - 增量部分,仅记录自上次备份以来的数据库修改内容;
- Auto - 自动,根据备份文件的内容创建快照或增量备份记录:如果文件中尚无快照,备份过程将创建一个;否则创建部分备份记录。
该语句还可以指定一个选项 label
。例如:
{
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);
/* 备份数据库 */
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);
在成功执行增量备份之前,必须至少执行一次快照备份。
恢复备份
要恢复数据库,backupRestore()
需指定备份文件以及一个label
选项(仅还原到该标签为止的数据库内容)。
例如:
{
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();
}
...
}
列出备份内容
backupInfo()
方法可用于列出备份文件的内容。
例如:
{
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();
}
...
}