You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用RavenDB Smuggler克隆同服务器数据库时无响应且无异常

RavenDB 同服务器克隆数据库操作停滞无响应问题

在同一服务器(相同DocumentStore地址)下,指定已创建的源数据库名和目标数据库名克隆数据库时,操作无任何反应且未抛出异常。控制台应用执行ExportAsync函数时停滞,使用最新版RavenDB及RavenDB.Client,运行环境为.NET 6,预期将源数据库所有内容复制到目标数据库。

相关代码:

Console.WriteLine("start");
var exportOperation =  await store
    .Smuggler
    .ForDatabase(name)
    .ExportAsync(
        new DatabaseSmugglerExportOptions(),
        store.Smuggler.ForDatabase(target));
await exportOperation.WaitForCompletionAsync();
Console.WriteLine("ends");

排查与解决建议

  • 确认目标数据库状态:确保target对应的数据库已在RavenDB服务器上成功创建,无锁定、异常等不可用情况。
  • 显式配置导出选项:默认的DatabaseSmugglerExportOptions可能缺少必要配置,明确指定导出内容避免默认逻辑遗漏:
    var exportOptions = new DatabaseSmugglerExportOptions
    {
        IncludeDocuments = true,
        IncludeIndexes = true,
        IncludeTimestamps = true,
        IncludeAttachments = true
    };
    
  • 改用本地文件中转的导入导出方式:避免直接跨数据库传输可能的阻塞,先导出到本地文件再导入目标库:
    // 导出到本地文件
    var exportPath = "./temp_export.ravendb";
    var exportOp = await store.Smuggler.ForDatabase(name)
        .ExportAsync(new DatabaseSmugglerExportOptions(), exportPath);
    await exportOp.WaitForCompletionAsync();
    
    // 导入到目标数据库
    var importOp = await store.Smuggler.ForDatabase(target)
        .ImportAsync(new DatabaseSmugglerImportOptions(), exportPath);
    await importOp.WaitForCompletionAsync();
    
  • 检查服务器日志:查看RavenDB服务器端日志,排查是否存在客户端未捕获的错误,比如权限不足、资源耗尽等问题。
  • 避免异步死锁:确保控制台应用的主入口方法使用async Task而非void,防止同步等待导致的死锁:
    static async Task Main(string[] args)
    {
        // 数据库操作逻辑
    }
    

内容的提问来源于stack exchange,提问作者Umair Javed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 09:50:01