mco_db_load
接口适用于实时数据库 RT 。
从外部文件加载数据库映像。
此函数通过调用内部方法 mco_db_open_dev()
并传递指定参数,加载并打开先前保存的数据库图像。应用程序需确保以适当的模式打开输入流以读取二进制数据,并保证有足够内存容纳数据库。
请参阅有关控制结构 stream_reader
的更多信息。
自版本 7.1 起,SmartEDB 简化了API,之前使用的变体如 mco_inmem_save()
、mco_inmem_load()
、mco_disk_save()
、mco_disk_load()
和 mco_disk_load_file()
已被弃用。简化后的 mco_db_save()
和 mco_db_load()
函数允许应用程序将数据库内容流式传输到持久存储介质文件、套接字或管道,并支持 CRC 校验、二进制模式演变(BSE)以及缓冲功能,以便中断和重新启动流传输过程。此外,如果数据库快照文件由 mco_db_save()
函数加密,则在调用 mco_db_load()
时需设置 mco_db_params_t::cipher_key
字段以解密这些文件。
请注意,在保存和加载加密快照时必须使用完全相同的加密密钥。
MCO_RET mco_db_load(
/*IN*/ void *stream_handle,
/*IN*/ mco_stream_read input_stream_reader,
/*IN*/ const char * dbname,
/*IN*/ mco_dictionary_h dict,
/*IN*/ mco_device_t *devices,
/*IN*/ uint2 n_devices,
/*IN*/ mco_db_params_t * db_params
);
参数
stream_handle
void *
输出流的句柄。
input_stream_reader
mco_stream_read
运行时调用的用于读取输入的处理函数。
dbname
const char *
传递给 mco_db_open_dev()
的数据库名称。
dict
mco_dictionary_h
传递给 mco_db_open_dev()
的数据库字典句柄。
devices
mco_device_t
传递给 mco_db_open_dev()
的设备结构数组。
n_devices
uint2
传递给 mco_db_open_dev()
的设备结构数量。
db_params
mco_db_params_t *
传递给 mco_db_open_dev()
的数据库参数。
返回
MCO_S_OK
已成功保存数据库镜像。
MCO_E_NOINSTANCE
指定的数据库未打开。
示例
/* 应用程序代码片段 */
const char * db_name = "backupdb";
mco_size_sig_t file_reader( void *stream_handle /* FILE * */, /* OUT */void *to, mco_size_t max_nbytes )
{
FILE *f = (FILE *)stream_handle;
mco_size_sig_t nbs;
nbs = fread( to, 1, max_nbytes, f );
return nbs;
}
int main(int argc, char** argv)
{
MCO_RET rc;
sample_memory_t dbmem;
mco_db_h db;
mco_db_params_t db_params;
…
FILE * fbak;
…
rc = mco_db_load( (void *)fbak, file_reader, dbname, backupdb_get_dictionary(), dbmem.dev, dbmem.n_dev, &db_params );
fclose( fbak );
sample_rc_check( "\t Load database", rc );
if ( MCO_S_OK == rc )
{
/* 连接到数据库 */
rc = mco_db_connect( dbname, &db );
sample_rc_check( "\t Connect to database", rc );
}
}
文件
- 头文件:
mco.h
- 源文件:
mcoseri.c
- 库:
libmcoseri.a