数据导出与导入
SmartEDB 数据库的备份和恢复功能由 Connection 类的方法 CreateBackup() 和 RestoreBackup() 实现。有关实现细节,请参阅 SDK 示例 IncBackup。
CreateBackup()
CreateBackup() 方法有两种形式:
public virtual void CreateBackup(String fileName, String label, Database.BackupType type);
public virtual void CreateBackup(String fileName, String label, Database.BackupType type,
int compressionLevel, String cipher);
其中backup type和compressionLevel定义如下:
public enum BackupType {
Auto, Snapshot, Incremental
};
public const int BACKUP_FLAG_COMPRESSED = 1;
public const int BACKUP_FLAG_ENCRYPTED = 2;
RestoreBackup()
同样,RestoreBackup() 方法可以在有或没有加密密钥的情况下被调用:
public virtual void RestoreBackup(String fileName, String label);
public void RestoreBackup(String fileName, String label, String cipher);
ListBackup()
此外,还可以调用方法 ListBackup() 从以下结构的备份文件中检索信息:
public virtual Database.BackupInfo [] ListBackup(String fileName);
public static class BackupInfo
{
public int ProtocolVersion;
public BackupType Type;
public int Flags;
public int BackupNo;
public long Timestamp;
public long Size;
public long Offset;
public int Crc;
public long T ransNo;
public int MemPageSize;
public int DiskPageSize;
public long NPagesTotal;
public String DbName;
public String Label;
}
其他备份参数
在“Database”中可以指定更多备份参数。用于Open()
方法的参数:
/// <summary
/// size of backup counters array, bytes, power of two, ignored if disk_max_database_size set. Default is 0 - disable backup feature
/// </summary>
public long BackupMapSize;
/// <summary>
/// number of pages for last exclusive pass of backup procedure, set to zero to disable treshold. Default is 0
/// </summary>
public int BackupMinPages;
/// <summary>
/// Max number of passes before exclusive pass of backup procedure. Default is 10
/// </summary>
public int BackupMaxPasses;
/// <summary>
/// Name of a file will be used to store backup temporary data on mco_db_close() call.
/// Optional, set to null for default "<persistent-storage>.bmap" file locate at the same location as persistent storage file
/// </summary>
public String BackupMapFile;
这些参数对应于 C API 中 struct mco_db_params_t 结构体里的 backup_map_size、backup_min_pages、backup_max_passes 和 backup_map_filename。
数据库快照
为了将内存数据库(瞬态对象)的图像保存到指定文件,Connection 类提供了 SaveSnapshot() 方法。此快照稍后可以通过 Database 方法 open() 加载,前提是 Database.Parameters 属性 DatabaseSnapshotFilePath中指定了相应的文件路径。(始终会创建文件,如果文件已存在则会覆盖)。如果成功保存快照,该方法返回 true;如果无法打开指定文件,则返回 false。方法签名如下:
public bool SaveSnapshot(String databaseSnapshotFilePath)
保存和加载单个类
有时可能只想导出/导入单个数据库类的数据。为此,Connection 类提供了以下方法:
public bool SaveClass(String filePath, Type cls)
public bool LoadClass(String filePath, Type cls, bool doMerge)
请注意,如果 doMerge 参数为 false,则在从图像文件加载之前,会清除此类现有的数据内容。如果为 true,则加载的对象将“添加”到此类中。这些方法在对象成功保存或加载时返回 true,在无法打开指定文件时返回 false。
保存数据库元数据
可以保存数据库元数据(以 xSQL 配置文件格式(JSON)呈现的数据布局信息,适合加载到 xSQL 中,以便作为客户端应用程序连接到数据库)。Connection 类提供了 SaveMetadata() 方法。该方法的签名是:
public void SaveMetadata(String databaseMetadataFilePath, boolean saveDefaults)
保存数据库模式
可以将数据库模式保存到外部文件中。Connection 类提供了 SaveDictionary() 方法。
public void SaveDictionary(String databaseDictionaryFilePath)