sql-server – 重建事务日志
我们有一个非常大的数据库(~6TB),其事务日志文件被删除(SQL Server被关闭.我们尝试过:
>分离和重新附加数据库;和 ……但到目前为止还没有任何工作. 我们目前正在运行: ALTER DATABASE <dbname> REBUILD LOG ON (NAME=<dbname>,FILENAME='<logfilepath>') …但考虑到数据库的大小,这可能需要几天时间才能完成. 问题 >上面的命令和下面的命令之间有区别吗? DBCC CHECKDB ('<dbname>',REPAIR_ALLOW_DATA_LOSS) >我们应该执行REPAIR_ALLOW_DATA_LOSS吗? 值得注意的是,数据来自其他来源,因此可以重建数据库,但是我们怀疑修复数据库要比重新插入所有数据快得多. 更新 对于那些保持得分:ALTER DATABASE / REBUILD LOG命令在大约36小时后完成并报告:
然后我们运行了一个DBCC CHECKDB(花了大约13小时),这是成功的.让我们说,我们都已经了解了数据库备份的重要性(并授予项目经理访问服务器的权限……). 解决方法永远不要分离Suspect数据库.无论如何,如何在分离数据库后附加数据库?您使用CREATE DATABASE和FOR ATTACH_REBUILD_LOG选项?这些命令应该可以解决这个问题: ALTER DATABASE recovery_test_2 SET EMERGENCY; ALTER DATABASE recovery_test_2 SET SINGLE_USER; DBCC CHECKDB (recovery_test_2,REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS,ALL_ERRORMSGS; 我写了一篇关于这种情况的帖子: SQL 2005/2008 Database Recovery Procedure – Log File Deleted (Part 3) 你问过两者之间的区别: > DBCC CHECKDB(‘< dbname>‘,REPAIR_ALLOW_DATA_LOSS)和 问题是您可以同时运行这两个来重建日志文件,但是使用CHECKDB重建日志并检查数据库是否存在完整性错误. 如果在日志文件丢失时存在活动事务(未写入磁盘),则第二个(alter database)将不起作用.在启动或附加时,SQL Server将希望从不存在的日志文件执行恢复(回滚和前滚).当磁盘崩溃或服务器意外关闭并且数据库未完全关闭时,就会发生这种情况.我想这不是你的情况,而且一切都很适合你. > DBCC CHECKDB(DBNAME,REPAIR_ALLOW_DATA_LOSS)在紧急状态下运行数据库检查数据库是否存在不一致错误,首先尝试使用日志文件从任何不一致中恢复.如果缺少此选项,则会重建事务日志.> ALTER DATABASE REBUILD LOG ON …是一个未记录的过程,需要后续的DBCC CHECKDB来修复任何错误. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |