我正在考虑在 SQL Server 上恢复数据库,但我不了解与 LSN 相关的内容。这是我创建的示例数据库的 Management Studio 中“还原数据库”对话框的屏幕截图。

您会注意到有两个差异备份。如果每个差异备份都包含之前所有差异备份的事务数据,为什么第二个差异备份的 FirstLSN (22000000041800004) 会高于第一个差异备份的 FirstLSN (22000000039800037)?如果它涵盖相同的交易,为什么 LSN 不会重叠?
如果您查看有关此内容的Microsoft 文档,它会指出
对于数据和差异备份,第一个 LSN 标识使用此备份执行恢复所需的最早日志记录。
因此,如果我要使用第二个差异备份来恢复数据库,那么第二个差异备份的 FirstLSN 将从完整备份停止的地方开始 (22000000038800001) 是否合理?恢复第二个差异将应用创建完整备份后发生的所有事务,不是吗?
我不明白系统如何解释完整备份和第二个差异之间的 LSN 差距。
在测试、开发和生产环境中,我经常收到更改存储过程的请求。
我想要一种简单的方法来在更改之前将存储过程的当前代码保存到我的“ tablebackups ”数据库中的一个表中- 这是一个我在更新或删除记录之前保存记录的数据库。
我在想这样的事情:
sp_helptext 'sp_myprocedure'
Run Code Online (Sandbox Code Playgroud)
使用的想法是这样的:
select * into tablebackups.dbo.my_procedure_20150827_1220
from ss_save_my_procedure 'my_procedure'
Run Code Online (Sandbox Code Playgroud)
有人已经为此开发了解决方案吗?
我将 VB6 与 SQLOLEDB 和 MSDASQL 一起使用。通过切换提供程序,我注意到一次查询得到了不同的结果。
我的查询检查一些服务器设置并执行两个 BACKUP 语句之一。
当我使用 SQLOLEDB 时,一切正常并且备份被创建。如果我使用的是 MSDASQL,则不会发生错误,但不会创建备份。
这是同一个服务器、同一个用户和同一个语句。
我使用过 SQL Profiler,它显示 100% 执行了相同的命令。即使我复制 MSDASQL 命令并在 SSMS 中执行它,也会创建备份,但不会使用 VB6。
我的声明:
DECLARE @s varchar(1000), @ver int
SET @ver = 10
SELECT @s = case
WHEN
@ver > 9
THEN
'BACKUP DATABASE [DB] TO DISK = ''C:\SQL Backup\Backup.dat'' WITH COMPRESSION, NOFORMAT, NOINIT, SKIP, REWIND, NOUNLOAD, STATS = 10'
ELSE
'BACKUP DATABASE [DB] TO DISK = ''C:\SQL Backup\Backup.dat'' WITH NOFORMAT, NOINIT, SKIP, REWIND, NOUNLOAD, STATS = 10;' …Run Code Online (Sandbox Code Playgroud) 对于 SQL Server 2012 可用性组,您只能COPY_ONLY对副本进行完整备份。您可以定期制作BACKUP LOG.
由于可以在从COPY_ONLY转储恢复数据库后恢复日志备份,我们真的需要进行完整(非COPY_ONLY)备份吗?
是的,它创建了一个新的 LSN 序列,但如果我们不做DIFFERENTIAL备份,我们需要考虑一下吗?
通过仅使用COPY_ONLY备份,我希望能够在只读副本上执行所有备份。我的 AG 是异步的,因此备份可能在主服务器之后,但这是可以接受的风险。
我做日志备份。根据我的测试,COPY_ONLY只要日志备份 LSN 比完整备份更新,我就能够恢复数据库上的任何日志备份(无论是否从 a 恢复)。完整备份会更改database_backup_lsn,COPY_ONLY不会更改,但似乎不会影响日志还原。似乎我无法恢复 DIF 备份,但我不需要那个。
dba.se Q&A里面有很好的解释:
SQL Server 2008 R2 使用事务日志还原 COPY_ONLY 完整备份
...但它没有回答我的问题。目前,我的结论是:除了第一次备份(没有它您将无法进行日志备份),COPY_ONLY如果我们不使用差异,我们只能使用备份。
我的(一般)问题是:COPY_ONLY如果我们不采取差异,我们是否真的需要非备份,如果是,为什么?
我正在尝试这个新的 Jetbrains IDE,但我不知道如何加载 SQL Server 2008 R2 .bak 文件。也许我在看错误的菜单。是否可以?
长话短说,我们在www.hostforlife.eu上有一个托管计划(顺便说一句,即使是更昂贵的套餐,服务也很糟糕,而且他们丢失了服务器上的所有文件,我们不得不恢复我们的备份,因为他们也丢失了这些文件)和 db备份我们正在开票,所以他们会为我们手动取票。
当我们移动到另一台主机(hostforlife 的计划已过期)并尝试恢复 SQL Server 2014 备份时,我们无法做到(实际上是我们的主机)。
备份没有扩展名,我们不确定它是什么类型的备份(尝试了几种方法但没有奏效)。
我们为此联系了他们的支持,但因为我们没有积极的计划,他们甚至拒绝告诉我们备份是如何进行的。
我们可以支付 3 个月的托管费用,但我不想再给这家蹩脚的公司更多的钱。
所以,我的问题是,我们如何识别备份类型来恢复它?
我正在将数据库从 SQL Server 企业版还原到标准版服务器上。我不断收到一条错误消息:
在此版本的 SQL Server 中无法启动数据库“MyDatabase”,因为部分或全部对象“containedmemebersnapshots”启用了数据压缩或 vardecimal 存储格式。只有 SQL Server 企业版支持数据压缩和 vardecimal 存储格式。
结果,我的数据库处于可疑模式。
是否有任何解决方案,以便我可以将此数据库还原到 SQL Server 标准版?
我使用下面的 T-SQL 查询来确定上次完整数据库备份的日期,并返回备份文件的大小和位置。我的问题是,对于没有备份或没有备份历史记录的数据库,它根本不会返回任何数据。理想情况下,我想修改查询以便返回所有数据库,无论它们是否有任何备份历史记录。任何人都可以建议如何修改以下查询以适应此情况?
WITH LastBackUp AS
(
SELECT bs.database_name,
bs.backup_size,
bs.backup_start_date,
bmf.physical_device_name,
Position = 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
)
SELECT
database_name AS [Database],
CAST(backup_size / 1048576 AS DECIMAL(10, 2) ) AS [BackupSizeMB],
backup_start_date AS [Last Full DB Backup Date],
physical_device_name AS [Backup File Location]
FROM LastBackUp
WHERE Position = …Run Code Online (Sandbox Code Playgroud) 我正在与一位更有经验的数据库管理员合作,他希望我将我创建的数据库发送给他。但是,我无法弄清楚数据库在磁盘上的存储位置。我正在使用 Microsoft SSMS。
备份数据库时创建的 .bak 文件与仅复制 .mdf 文件并按照此处所述进行恢复与创建 BACPAC 文件之间的区别是什么。
在这种情况下,日志本身并不重要,.bak 文件远大于实际数据库。(2GB 数据库上的 20GB 备份)。
对于这种备份策略(自己复制数据库文件),我会每天分离数据库,将 mdf 文件复制到外部媒体,然后重新连接数据库。每个数据库将有 3 个备份(在创建新备份时删除旧备份):
我意识到 MS SQL 提供了它自己的备份机制,这几乎肯定比我概述的要好。然而,即使是差异备份造成的膨胀对于我们所需要的和我们可用的空间量来说似乎太多了。