V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
helee9199
V2EX  ›  问与答

疯了 docker 中的 sqlserver 始终无法导入数据

  •  
  •   helee9199 · 2022-03-29 20:04:07 +08:00 · 990 次点击
    这是一个创建于 979 天前的主题,其中的信息可能已经有所发展或是发生改变。

    docker 中拉了最新的的 sqlserver 版本号显示 15.0.4198.2 下称版本 A (也尝试过 2017 也不行) Microsoft SQL Server Express 版本 15.0.2000.5 下称版本 B 目前想把版本 B 资料库导入到版本 A 的资料库 导出版本 B 的 bak 文件以后 导入到 docker 容器下 使用 MSSMS 导入时却报错

    ===================================
    
    还原数据库“aers”时失败。 (Microsoft.SqlServer.Management.RelationalEngineTasks)
    
    ------------------------------
    程序位置:
    
      在 Microsoft.SqlServer.Management.RelationalEngineTasks.RestoreDatabaseTaskFormComponent.PerformTask(ITaskExecutionContext context)
      在 Microsoft.SqlServer.Management.RelationalEngineTasks.RestoreDatabaseTaskFormComponent.Perform(ITaskExecutionContext context)
      在 Microsoft.SqlServer.Management.TaskForms.TaskExecutionManager.ExecuteTaskSequence(ISfcScriptCollector collector)
    
    ===================================
    
    System.Data.SqlClient.SqlError: Directory lookup for the file "C:\Program Files\Microsoft SQL Server\MSSQL15.SQLEXPRESS\MSSQL\DATA\aers.mdf" failed with the operating system error 2(The system cannot find the file specified.). (Microsoft.SqlServer.SmoExtended)
    
    ------------------------------
    有关帮助信息,请单击: https://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=16.100.44091.28+(SMO-master-A)&LinkId=20476
    
    ------------------------------
    程序位置:
    
      在 Microsoft.SqlServer.Management.Smo.RestorePlan.Execute()
      在 Microsoft.SqlServer.Management.RelationalEngineTasks.RestoreDatabaseTaskFormComponent.PerformTask(ITaskExecutionContext context)
    
    
    于是找又找其他方式导入
    但是依然报错
    
     ➜  ~ docker exec -it mssql /opt/mssql-tools/bin/sqlcmd -S localhost \
       -U sa -P '1234' \
       -Q 'RESTORE FILELISTONLY FROM DISK = "/var/opt/mssql/backup/ares.bak"' \
       | tr -s ' ' | cut -d ' ' -f 1-2
    Msg 3201,
    Cannot open
    Msg 3013,
    RESTORE FILELIST
    

    报错代码也无法搜到有用的信息 有大佬知道这是怎么回事么

    7 条回复    2023-02-03 10:09:03 +08:00
    disk
        1
    disk  
       2022-03-29 21:36:27 +08:00
    可以尝试用 SSMS 连接后,能不能用图形化操作。
    disk
        2
    disk  
       2022-03-29 21:43:02 +08:00
    第一条报错说明导入的路径不对,你直接选择本地的文件,但是在容器里是找不到的。
    第二条需要先把备份拷贝进去,然后通过交互式运行指令便于排错,参考 https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-migrate-restore-database?view=sql-server-ver15
    helee9199
        3
    helee9199  
    OP
       2022-03-30 08:41:00 +08:00
    @disk emm 第一个报错就是我已经把备份文件拷贝到 docker 的 sqlserver 容器目录下了 然后使用 ssms 连接了 也选择了文件 点导入 然后就报这个错

    第二个是我搜的命令导入 然后报的这个错
    disk
        4
    disk  
       2022-03-30 10:36:56 +08:00
    @helee9199 有检查过容器内文件的权限吗?导入好像需要允许读写。
    DCCooper
        5
    DCCooper  
       2022-03-30 15:34:00 +08:00 via iPhone
    1. 容器内查看文件在不在
2. 把挂载进去试试看,-v
    julyclyde
        6
    julyclyde  
       2022-03-30 15:58:38 +08:00
    不明白
    docker 里还能运行 windows 吗?
    jeffw
        7
    jeffw  
       2023-02-03 10:09:03 +08:00
    @julyclyde sqlserver 可以运行在 linux 上!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5880 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 03:12 · PVG 11:12 · LAX 19:12 · JFK 22:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.