newuser1234 Asked: 2023-11-02 20:29:01 +0800 CST2023-11-02 20:29:01 +0800 CST 2023-11-02 20:29:01 +0800 CST 如果数据库恢复,数据库连接是否会自动重新连接? 772 我不是 DBA/SQL 专家,所以如果这是发帖的论坛,请原谅。 我们的生产数据库存在一个问题,日志文件没有以 LDF 格式存储。DBA 希望删除我们的生产数据库并恢复完整备份来解决问题,这是最佳实践吗?应用程序有多个到该数据库的活动连接,当数据库恢复时这些连接是否会自动重新连接? sql-server 2 个回答 Voted Best Answer John K. N. 2023-11-02T21:15:46+08:002023-11-02T21:15:46+08:00 您的问题的措辞存在一些误解,但我会给您一个快速的解释。 如果数据库恢复,数据库连接是否会自动重新连接?(问题标题) 这取决于应用程序的构建/编程方式。如果现有连接在服务器端被终止,并且在查找断开连接的应用程序中实施了错误处理,那么您的应用程序可能会成功重新连接到数据库(服务器)。 我们的生产数据库存在一个问题,日志文件没有以 LDF 格式存储。(不是问题,而是错误的观察) 数据库的事务日志将始终使用“LDF”格式存储。文件本身可能没有将其表示为*.ldf文件的扩展名。或者换句话说:SQL Server 数据库引擎始终将与事务相关的信息写入事务日志文件,无论文件的名称如何。 DBA 希望删除我们的生产数据库并恢复完整备份来解决问题,这是最佳实践吗? 最佳实践是首先使用具有所需文件名的数据库创建。 备份数据库并在更改文件名时恢复它可能是“重命名”相关文件的最简单方法。 第二个最佳选择是分离数据库,然后重命名文件,并使用CREATE DATABASE .... FOR ATTACH此答案中提到的语法重新命名数据库重命名 SQL 日志和主数据库文件 SQL Server 文档中的计划重定位过程详细介绍了重命名或移动用户数据库文件的另一种方法。总之, ... ALTER DATABASE...用,重命名数据库文件 ...使数据库脱机使用ALTER DATABASE...SET OFFLINE, ...重命名文件系统上的文件,最后 .... ALTER DATABASE...SET ONLINE_ 但是,使用哪种解决方案并不重要,因为数据库在任何情况下都将不可用。 应用程序有多个到该数据库的活动连接,当数据库恢复时这些连接是否会自动重新连接? 请参阅我对您最初问题的第一个回答。 Phill W. 2023-11-03T19:03:59+08:002023-11-03T19:03:59+08:00 当数据库恢复时,这些连接会自动重新连接吗? 一定不行! 也许令人惊讶的是,恢复数据库是一个破坏性的过程。 当它发生时,您的表可能存在也可能不存在,并且其中可能包含也可能不包含[完整]数据。 因此,必须在过程开始时切断所有[应用程序]连接,并且在恢复过程完成并对恢复的数据进行检查之前不允许建立新连接。 这不是一项可以掉以轻心的活动(您的 DBA 应该知道这一点)。 我们的生产数据库存在问题,日志文件没有以 LDF 格式存储...... 它们可能不会存储在以.LDF扩展名命名的文件中,但绝对会以正确的内部格式存储。如果不是这种情况,您的数据库根本无法工作(除非它在没有任何日志记录的情况下运行,这对于生产系统来说是“悬而未决”,在我的书中)。 ... DBA 想要删除我们的生产数据库并恢复完整备份来解决问题... 我非常确定 SqlServer 日志文件在数据库运行时无法重命名,因此恢复备份不会纠正“文件命名问题”,正如我之前所说,这根本不是一个问题。 如果日志子系统确实存在问题,那么这是一个需要紧急解决的更大问题,但同样,销毁自上次备份以来存储的所有事务数据也不是答案。 事实上,如果事务日志确实没有正确记录,那么他们能够恢复的唯一备份将是最后一个“完整”备份,无论它是在多久以前进行的! 停止数据库、立即备份它、更改日志记录模式并重新启动数据库就足够了。
您的问题的措辞存在一些误解,但我会给您一个快速的解释。
这取决于应用程序的构建/编程方式。如果现有连接在服务器端被终止,并且在查找断开连接的应用程序中实施了错误处理,那么您的应用程序可能会成功重新连接到数据库(服务器)。
数据库的事务日志将始终使用“LDF”格式存储。文件本身可能没有将其表示为
*.ldf
文件的扩展名。或者换句话说:SQL Server 数据库引擎始终将与事务相关的信息写入事务日志文件,无论文件的名称如何。最佳实践是首先使用具有所需文件名的数据库创建。
备份数据库并在更改文件名时恢复它可能是“重命名”相关文件的最简单方法。
第二个最佳选择是分离数据库,然后重命名文件,并使用
CREATE DATABASE .... FOR ATTACH
此答案中提到的语法重新命名数据库重命名 SQL 日志和主数据库文件SQL Server 文档中的计划重定位过程详细介绍了重命名或移动用户数据库文件的另一种方法。总之, ...
ALTER DATABASE
...用,重命名数据库文件ALTER DATABASE...SET OFFLINE
,ALTER DATABASE...SET ONLINE
_但是,使用哪种解决方案并不重要,因为数据库在任何情况下都将不可用。
请参阅我对您最初问题的第一个回答。
一定不行!
也许令人惊讶的是,恢复数据库是一个破坏性的过程。
当它发生时,您的表可能存在也可能不存在,并且其中可能包含也可能不包含[完整]数据。
因此,必须在过程开始时切断所有[应用程序]连接,并且在恢复过程完成并对恢复的数据进行检查之前不允许建立新连接。
这不是一项可以掉以轻心的活动(您的 DBA 应该知道这一点)。
它们可能不会存储在以.LDF扩展名命名的文件中,但绝对会以正确的内部格式存储。如果不是这种情况,您的数据库根本无法工作(除非它在没有任何日志记录的情况下运行,这对于生产系统来说是“悬而未决”,在我的书中)。
我非常确定 SqlServer 日志文件在数据库运行时无法重命名,因此恢复备份不会纠正“文件命名问题”,正如我之前所说,这根本不是一个问题。
如果日志子系统确实存在问题,那么这是一个需要紧急解决的更大问题,但同样,销毁自上次备份以来存储的所有事务数据也不是答案。
事实上,如果事务日志确实没有正确记录,那么他们能够恢复的唯一备份将是最后一个“完整”备份,无论它是在多久以前进行的!
停止数据库、立即备份它、更改日志记录模式并重新启动数据库就足够了。