如何在 Docker 上的 SQL Server 中从数据库备份中查看 .bak 文件

Posted

技术标签:

【中文标题】如何在 Docker 上的 SQL Server 中从数据库备份中查看 .bak 文件【英文标题】:How to view .bak file from DATABASE BACKUP in SQL Server on Docker 【发布时间】:2020-10-15 20:44:54 【问题描述】:

当他们编写备份命令时如何查看 .bak 文件?例如,当我运行包含此 SQL 的脚本时:

DECLARE @database NVARCHAR(75) = 'MyDatabase';
DECLARE @filename NVARCHAR(75) = 'C:\temp\MyDatabase.bak';
BACKUP DATABASE @database
TO DISK = @filename;

我收到一条消息说备份已完成,但是我无法前往该位置并查看 .bak 文件。当我从设备 > 文件恢复时,SSMS 可以拾取它的存在,但我无法在窗口资源管理器或 PowerShell 提示符中查看该文件。如何查看正在创建的备份文件?

编辑

数据库是在 docker 容器内运行的本地 MS SQL Server Express。我认为这仍然应该像普通的 SQL Server 实例一样,但也许有人可以解释它的不同之处。

【问题讨论】:

数据库在你本地吗?还是远程数据库服务器? 备份文件是在运行 SQL Server 的计算机上创建的 - 因此,如果您连接到远程 SQL Server - 它位于该计算机的 `C:` 驱动器上。 ... 数据库在我正在使用的机器上,所以它是本地的,不会备份到任何地方的远程服务器。 List hidden sub-directories and sizes 有帮助吗? @HABO 根本没有,它也没有显示出来。似乎只有 SSMS 知道它的存在...... 【参考方案1】:

您无法看到备份文件,因为它是在 Docker 容器中运行的 SQL 实例中获取的。当您运行脚本进行备份时,备份存储在可用于 SQL 实例(而不是 SSMS)的存储中。 在此处查看如何访问:Accessing Docker container files from Windows 或如何在此处从/向 docker 容器复制文件:https://www.youtube.com/watch?v=ht4gqt4zSyw。

【讨论】:

既然文件实际上存在于 Docker 容器中,那么 SSMS 是如何在 Windows 上的文件系统中查看实际上并不存在的文件的呢? 您确定SSMS的实例不属于SQL Server安装吗?将来自 SSMS 的查询保存为文件进行测试,并尝试使用文件资源管理器查找该文件。 是的,100%,它按预期将 .sql 文件保存到本地磁盘。我将 SQLQuery1.sql 保存到 Documents > SQL Server Management Studio,保存后它会出现在那里。【参考方案2】:

如果您有权访问最初运行备份的 SQL Server 实例,您应该能够查询 msdb:

SELECT * FROM  msdb.dbo.backupset  
WHERE database_name = 'MyDBname' AND type = 'D' 

这是一个查询,它将给我物理设备名称、备份开始日期、备份完成日期和备份大小。

SELECT physical_device_name, backup_start_date,
    backup_finish_date, backup_size/1024.0 AS BackupSizeKB
FROM msdb.dbo.backupset b
JOIN msdb.dbo.backupmediafamily m ON b.media_set_id = m.media_set_id
WHERE database_name = 'YourDBname'
ORDER BY backup_finish_date DESC

【讨论】:

我也这样做了,但是该文件对于命令提示符、Power Shell 终端或文件资源管理器是不可见的,即使它显示在该查询结果中也是如此。如何在结果中的位置查看文件?

以上是关于如何在 Docker 上的 SQL Server 中从数据库备份中查看 .bak 文件的主要内容,如果未能解决你的问题,请参考以下文章

Docker SQL Server 2017 上的 Linux 连接问题

无法连接到 Docker 上的 SQL 数据库

通过 SQL Operations Studio 连接到 MAC OSX 上的 Docker SQL Server 2017 容器

无法从同一主机上的Web应用程序泊坞窗访问docker托管的SQL Server

Docker 中的 web api 无法连接到主机上的 SQL Server,出现登录前握手错误

如何在 Docker 中从 Docker 连接到 SQL Server 服务?