我试图使用 SQL Server Management Studio 2008 Express 为我的 SQL Server 数据库创建备份。我已经创建了备份,但它被保存在我无法找到的某个路径上。我将它保存在我的本地高清上,我签入Program Files>Microsoft SQL Server>MSSQL 1.0>MSSQL>DATA>
但它不存在。
这个 DB .bak 的默认保存路径是什么?
我试图使用 SQL Server Management Studio 2008 Express 为我的 SQL Server 数据库创建备份。我已经创建了备份,但它被保存在我无法找到的某个路径上。我将它保存在我的本地高清上,我签入Program Files>Microsoft SQL Server>MSSQL 1.0>MSSQL>DATA>
但它不存在。
这个 DB .bak 的默认保存路径是什么?
应该在
Program Files>Microsoft SQL Server>MSSQL 1.0>MSSQL>BACKUP>
就我而言,它是
C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Backup
如果您使用 gui 或 T-SQL,您可以指定您想要的位置 T-SQL 示例
BACKUP DATABASE [YourDB] TO DISK = N'SomePath\YourDB.bak'
WITH NOFORMAT, NOINIT, NAME = N'YourDB Full Database Backup',
SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
使用 T-SQL,您还可以获取备份的位置,请参阅此处获取 SQL Server 数据库的物理设备名称和备份时间
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 = 'YourDB'
ORDER BY backup_finish_date DESC
如果未在默认位置创建备份,则可以使用此 T-SQL(在 SSMS 中运行)查找 SQL Server 实例上所有 DB 的最新备份的文件路径:
SELECT DatabaseName = x.database_name,
LastBackupFileName = x.physical_device_name,
LastBackupDatetime = x.backup_start_date
FROM ( SELECT bs.database_name,
bs.backup_start_date,
bmf.physical_device_name,
Ordinal = ROW_NUMBER() OVER( PARTITION BY bs.database_name ORDER BY bs.backup_start_date DESC )
FROM msdb.dbo.backupmediafamily bmf
JOIN msdb.dbo.backupmediaset bms ON bmf.media_set_id = bms.media_set_id
JOIN msdb.dbo.backupset bs ON bms.media_set_id = bs.media_set_id
WHERE bs.[type] = 'D'
AND bs.is_copy_only = 0 ) x
WHERE x.Ordinal = 1
ORDER BY DatabaseName;
正如 Faiyaz 所说,要获取实例的默认备份位置,您无法将其放入 msdb,但您必须查看注册表。您可以使用 xp_instance_regread 存储过程在 T-SQL 中获取它,如下所示:
EXEC master.dbo.xp_instance_regread
N'HKEY_LOCAL_MACHINE', N'SOFTWARE\Microsoft\\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQLServer',N'BackupDirectory'
双反斜杠 (\\) 是因为空格进入该键名部分 (Microsoft SQL Server)。“MSSQL12.MSSQLSERVER”部分是 SQL 2014 的默认实例名称。您必须适应放置自己的实例名称(查看注册表)。
为您的服务器实例设置注册表项。例如:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.2\MSSQLServer\BackupDirectory
使用下面的脚本,然后切换DatabaseName
您已备份的数据库的名称。在 physical_device_name 列上,您将拥有备份数据库的完整路径:
select a.backup_set_id, a.server_name, a.database_name, a.name, a.user_name, a.position, a.software_major_version, a.backup_start_date, backup_finish_date, a.backup_size, a.recovery_model, b.physical_device_name
from msdb.dbo.backupset a join msdb.dbo.backupmediafamily b
on a.media_set_id = b.media_set_id
where a.database_name = 'DatabaseName'
order by a.backup_finish_date desc
我不认为默认备份位置存储在 SQL 服务器本身中。设置存储在注册表中。查找“BackupDirectory”键,您将找到默认备份。
“ msdb.dbo.backupset”表包含备份列表,如果没有备份数据库,它不会显示任何内容
你有没有尝试过:
C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\Backup
获取上周所有备份的脚本可以在以下位置找到:
http://wraithnath.blogspot.com/2010/12/how-to-find-all-database-backups-in.html
我也有更多的备份 SQL 脚本
...\Program Files\Microsoft SQL Server\MSSQL 1.0\MSSQL\Backup
所以最终在 SQL Server 2019 上,您可以调用内置的 SERVERPROPERTY 函数来查询默认备份文件夹:
select serverproperty('InstanceDefaultBackupPath')
你可能想看看这里,这个工具将 BAK 文件从远程 SQL Server 保存到本地硬盘:FIDA BAK to local