我不得不将几个 SQL Server 2008 数据库移动到我们的新 db 服务器,所以我将它们全部备份(到 .bak 文件),将这些文件复制到新盒子并恢复它们(全部使用 SQL Management Studio 完成)。
一切顺利,但现在我发现我无法使用继续在旧 RDBMS 上工作的 SQL Server 帐户登录任何数据库。顺便说一句,我的 Windows 身份验证登录仍然可以正常工作。
我有这个想法,用户和权限都将无缝复制到新的数据库服务器上,但似乎某处出了问题。我将不胜感激评论/建议/提供帮助;-)
我们刚刚有了一台新服务器,所以我需要从旧的 db 框中复制现有的 SQL Server 2008 实例。
我通常通过复制 .mdf 和日志文件并附加它们来做到这一点,但我无法将 dbs 离线,因为它们 24/7 使用,所以我备份了数据库并在新的数据库上恢复它们机器。但是,我最终遇到了一些问题,其中之一与孤儿用户有关。所以我正在寻找的是一个故障安全的过程,以最小的大惊小怪/麻烦/头痛来移动一切。我是一名 .Net 开发人员,拥有相当多的 SQL,但 SQL Server 的内部工作原理对我来说在很大程度上是个谜,我发现 MS 文档很难浏览。
请帮忙。
是的,我将在他们两个上运行 strace ......但是,我想知道......
我刚刚备份了一个 SQL Server 数据库。MDF 和 LDF 文件总共大约 29 GB,但 .bak 文件只有 23 GB,小了大约 20%。
当一组数据的一个版本小于包含相同数据的另一个版本时,我的第一个猜测是数据压缩,但压缩通常会产生比 20% 更好的压缩率,特别是对于高度有序的数据(例如数据库表。 ) 此外,压缩数据不容易进一步压缩,但我知道 .bak 文件可以压缩。
因此,如果数据没有被压缩,并且没有任何东西被丢弃,(因为进行备份的重点是能够在之后将其恢复到相同的状态),那么下落不明的 20% 是多少?
我目前有一个计划任务,它在每晚凌晨 2 点触发,调用 SQLCMD.exe 并将其传递给 .sql 脚本以运行备份(如下所示)。我们是一家非常小的公司,由于业务方面的重大增长,需求不断增长。此时丢失 1 天的数据将花费数万美元,而去年此时则为几百美元。在我可以将这个数据库平台迁移到一个不同的解决方案,其中数据镜像发生在 SQL Azure 等主要冗余的情况下,我能做的最好的事情是获得更频繁的备份吗?下面的这个脚本是否强制数据库脱机?我可以在用户与数据库交互的情况下运行此脚本吗?
USE CompanyCRM;
GO
BACKUP DATABASE CompanyCRM
TO DISK = 'D:\CRMBackups\CompanyCRMCRM.Bak'
WITH FORMAT,
MEDIANAME = 'CompanyCRM_Backup',
NAME = 'Full Backup of CompanyCRM';
GO
Run Code Online (Sandbox Code Playgroud)
哇,显然这里有一个比 SO 更专注的 DBA 社区。感谢您到目前为止的反馈。唯一缺少的是“如何”。我已经展示了上面我用来做每日备份的 SQL 命令,但增量日志备份示例是 MIA。这不是一个大型数据库,它目前在 SQLExpress 上运行。当我说 HA 或 SQL Azure 时,我特别指的是我们作为小型企业没有的现有架构。此实例目前正在我们唯一的服务器上运行。如果该服务器崩溃,我们的恢复时间将成为一个症结所在。这就是 SQL Azure 变得有吸引力的原因。
所以我有那个复杂的 MySQL 转储作为备份。不幸的是,备份很复杂,我们使用了邪恶的触发器。
我们的一些邪恶触发器有一个以 # 字符开头的注释行。
当我备份数据库时,生成的转储会保存 # 行。问题是当我进行恢复时。以# 开头的行被替换为空行。
所以我正在寻找一种方法来恢复以英镑开头的行的转储。
我正在尝试运行 mysqldump 来创建数据库快照,我发现它会在中途随机停止,而不会报告任何错误。我的数据库相对较小(大约 100MB)并且使用的是 InnoDB。
我正在运行它:
mysqldump --force --single-transaction --quick --user myuser --password=mypass -h mydatabasehost mydb > /tmp/snapshot.sql
Run Code Online (Sandbox Code Playgroud)
检查退出代码报告 0。
我的版本是:mysqldump Ver 10.13 Distrib 5.1.52, for redhat-linux-gnu (i386)
我看过一些类似的帖子,甚至是官方的错误报告,但两种解决方案似乎都不适用。
如何让 mysqldump 获取完整的数据库快照?
编辑:我的数据库目前驻留在亚马逊的 RDS 上。
我一直在想办法完全备份我的 PostgreSQL 数据库。我还没有看到任何解释如何进行完整备份的资源。
我知道 pg_dump 和 pg_dumpall 实用程序。语法很简单,但细节不是很清楚。
看来 pg_dump 只支持特定数据库的“一些”表,而不支持任何类型的配置信息。我猜测诸如权限之类的东西和许多其他东西都没有备份。因此,在完全重新安装 PostgreSQL 数据库的情况下,如果没有大量的手动配置和设置,转储备份将无法工作。
pg_dumpall 备份的内容比 pg_dump 多,但 Postgres 文档中没有提供明确的信息,说明备份转储中还有哪些内容被遗漏了,需要备份。
我需要备份所有 PostgreSQL 配置信息、表、索引、权限、方案等。 如果发生完全灾难,只要我重新安装相同版本的 PostgreSQL,我就不必重新配置任何东西。
例如,我不在乎索引是否是从头开始重新构建的,或者备份是否已经存储了索引......像这样的东西对我来说并不重要......我只希望数据库完全相同还原后的状态与备份时的状态相同。
如果有人可以列出需要备份的内容以实现完整备份,我将不胜感激。当然,如果您能推荐一些工具以及针对列表中各种内容的一些程序,我将不胜感激。请解释您推荐的工具和程序涵盖的总清单上的哪些项目。
我们正在使用具有完全恢复模式的 SQL Server。给定完整备份和一系列日志备份,我们希望能够检查从上次完整备份到当前尾日志的日志链是否完整。(没有实际恢复这些备份;这里的目的是测试备份的一致性。)
我已经知道如何对现有备份执行此操作:使用 RESTORE HEADERONLY 我获得每个文件的 FirstLSN 和 LastLSN,可以对连续文件进行比较,以确定它们是否兼容。
但是,我不知道如何检查尾部日志是否遵循上次日志备份。
如果我有尾日志的 FirstLSN,我可以将它与上次日志备份的 LastLSN 进行比较。但是如何获取尾日志的 FirstLSN 呢?
我需要一个适用于 SQL Server 2005 以上的解决方案(最好使用 t-sql)。到目前为止,我已经搜索过谷歌无济于事。顺便提一句。我首先在 stackoverflow 上发布了这篇文章;但是将它迁移到这里,因为它在那里被标记为离题。
编辑
我在一个小例子(SQL Server 2005,9.0.5057)上尝试了两个提供的解决方案:
BACKUP DATABASE TestDb TO DISK = 'C:\temp\backup test\Full.bak'
-- fire some update queries
BACKUP LOG TestDb TO DISK = 'C:\temp\backup test\Log1.bak'
-- fire both queries from the provided answers:
-- Martin Smith's answer yields: 838886656088920652852608
-- Shawn Melton's answer yields: 46000000267600001
RESTORE HEADERONLY FROM DISK = 'C:\temp\backup test\Log1.bak'
-- yields: 46000000267600001 …Run Code Online (Sandbox Code Playgroud) 我一直在对压缩和存储 SQL Server 备份的不同方法进行一些测试(使用 SQL Server 2008 R2 企业版),我想知道最有效的压缩算法是在 SQL 之外长期存储这些备份内部压缩算法。
我不担心物理存储或磁带驱动器或任何东西,只是试图将我们的 3TB 数据和日志文件变成最小的单个文件。
那么,例如,是 .zip 还是 .7z?或者我的数据库中有太多变量无法准确估计什么是最有效的,而我只需要做一些测试?或者 SQL Server 的内部压缩是我能得到的最好的吗?
backup ×10
sql-server ×5
mysql ×3
mysqldump ×2
restore ×2
compression ×1
innodb ×1
migration ×1
percona ×1
permissions ×1
postgresql ×1