如何在 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 连接问题
通过 SQL Operations Studio 连接到 MAC OSX 上的 Docker SQL Server 2017 容器
无法从同一主机上的Web应用程序泊坞窗访问docker托管的SQL Server