【问题标题】:How to view .bak file from DATABASE BACKUP in SQL Server on Docker如何在 Docker 上的 SQL Server 中从数据库备份中查看 .bak 文件
【发布时间】: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:` 驱动器上。 ...
  • 数据库在我正在使用的机器上,所以它是本地的,不会备份到任何地方的远程服务器。
  • @HABO 根本没有,它也没有显示出来。似乎只有 SSMS 知道它的存在......

标签: sql-server docker tsql database-backups sql-scripts


【解决方案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 终端或文件资源管理器是不可见的,即使它显示在该查询结果中也是如此。如何在结果中的位置查看文件?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-25
  • 1970-01-01
  • 2015-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多