知识大全 无日志恢复数据库

Posted 数据库

篇首语:不读书的人,思想就会停止。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 无日志恢复数据库相关的知识,希望对你有一定的参考价值。

SQL Server:无日志恢复数据库  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

   事情的起因    昨天 系统管理员告诉我 我们一个内部应用数据库所在的磁盘空间不足了 我注意到数据库事件日志文件XXX_Data ldf文件已经增长到了 GB 于是我决意缩小这个日志文件 经过收缩数据库等操作未果后 我犯了一个自进入行业以来的最大最愚蠢的错误:竟然误删除了这个日志文件!后来我看到所有论及数据库恢复的文章上都说道: 无论如何都要保证数据库日志文件存在 它至关重要 甚至微软甚至有一篇KB文章讲如何只靠日志文件恢复数据库的 我真是不知道我那时候是怎么想的?!    这下子坏了!这个数据库连不上了 企业管理器在它的旁边写着 (置疑) 而且最要命的 这个数据库从来没有备份了 我唯一找得到的是迁移半年前的另外一个数据库服务器 应用倒是能用了 但是少了许多记录 表和存储过程 真希望这只是一场噩梦!    数据库日志文件的误删或别的原因引起数据库日志的损坏     方法一     新建一个同名的数据库     再停掉sql server(注意不要分离数据库)     用原数据库的数据文件覆蓋掉这个新建的数据库     再重启sql server     此时打开企业管理器时会出现置疑 先不管 执行下面的语句(注意修改其中的数据库名)     完成后一般就可以访问数据库中的数据了 这时 数据库本身一般还要问题 解决办法是 利用    数据库的脚本创建一个新的数据库 并将数据导进去就行了     USE MASTER    GO    SP_CONFIGURE ALLOW UPDATES RECONFIGURE WITH OVERRIDE    GO    UPDATE SYSDATABASES SET STATUS = WHERE NAME= 置疑的数据库名     Go    sp_dboption 置疑的数据库名 single user true     Go    DBCC CHECKDB( 置疑的数据库名 )    Go    update sysdatabases set status = where name= 置疑的数据库名     Go    sp_configure allow updates reconfigure with override    Go    sp_dboption 置疑的数据库名 single user false     Go     方法二    事情的起因    昨天 系统管理员告诉我 我们一个内部应用数据库所在的磁盘空间不足了 我注意到数据库事件日志文件XXX_Data ldf文件已经增长到了 GB 于是我决意缩小这个日志文件 经过收缩数据库等操作未果后 我犯了一个自进入行业以来的最大最愚蠢的错误:竟然误删除了这个日志文件!后来我看到所有论及数据库恢复的文章上都说道: 无论如何都要保证数据库日志文件存在 它至关重要 甚至微软甚至有一篇KB文章讲如何只靠日志文件恢复数据库的 我真是不知道我那时候是怎么想的?!    这下子坏了!这个数据库连不上了 企业管理器在它的旁边写着 (置疑) 而且最要命的 这个数据库从来没有备份了 我唯一找得到的是迁移半年前的另外一个数据库服务器 应用倒是能用了 但是少了许多记录 表和存储过程 真希望这只是一场噩梦!    没有效果的恢复步骤    附加数据库    _Rambo讲过被删除日志文件中不存在活动日志时 可以这么做来恢复:     分离被置疑的数据库 可以使用sp_detach_db     附加数据库 可以使用sp_attach_single_file_db    但是 很遗憾 执行之后 SQL Server质疑数据文件和日志文件不符 所以无法附加数据库数据文件     DTS数据导出    不行 无法读取XXX数据库 DTS Wizard报告说 初始化上下文发生错误     紧急模式    怡红公子讲过没有日志用于恢复时 可以这么做:     把数据库设置为emergency mode     重新建立一个log文件     把SQL Server 重新启动一下     把应用数据库设置成单用户模式     做DBCC CHECKDB     如果没有什么大问题就可以把数据库状态改回去了 记得别忘了把系统表的修改选项关掉    我实践了一下 把应用数据库的数据文件移走 重新建立一个同名的数据库XXX 然后停掉SQL服务 把原来的数据文件再覆蓋回来 之后 按照怡红公子的步骤走     但是 也很遗憾 除了第 步之外 其他步骤执行非常成功 可惜 重启SQL Server之后 这个应用数据库仍然是置疑!    不过 让我欣慰的是 这么做之后 倒是能够Select数据了 让我大出一口气 只不过 组件使用数据库时 报告说: 发生错误: 未能在数据库 XXX 中运行 BEGIN TRANSACTION 因为该数据库处于回避恢复模式     最终成功恢复的全部步骤    设置数据库为紧急模式    停掉SQL Server服务;    把应用数据库的数据文件XXX_Data mdf移走;    重新建立一个同名的数据库XXX;    停掉SQL服务;    把原来的数据文件再覆蓋回来;    运行以下语句 把该数据库设置为紧急模式;    运行 Use Master    Go    sp_configure allow updates     reconfigure with override    Go     执行结果:    DBCC 执行完毕 如果 DBCC 输出了错误信息 请与系统管理员联系     已将配置选项 allow updates 从 改为 请运行 RECONFIGURE 语句以安装     接着运行 update sysdatabases set status = where name = XXX     执行结果:    (所影响的行数为 行)    重启SQL Server服务;    运行以下语句 把应用数据库设置为Single User模式;    运行 sp_dboption XXX single user true     执行结果:    命令已成功完成     ü 做DBCC CHECKDB;    运行 DBCC CHECKDB( XXX )     执行结果:     XXX 的 DBCC 结果      sysobjects 的 DBCC 结果     对象 sysobjects 有 行 这些行位于 页中      sysindexes 的 DBCC 结果     对象 sysindexes 有 行 这些行位于 页中      syscolumns 的 DBCC 结果     ………    ü 运行以下语句把系统表的修改选项关掉;    运行 sp_resetstatus XXX     go    sp_configure allow updates     reconfigure with override    Go     执行结果:    在 sysdatabases 中更新数据库 XXX 的条目之前 模式 = 状态 = (状态 suspect_bit = )     没有更新 sysdatabases 中的任何行 因为已正确地重置了模式和状态 没有错误 未进行任何更改     DBCC 执行完毕 如果 DBCC 输出了错误信息 请与系统管理员联系     已将配置选项 allow updates 从 改为 请运行 RECONFIGURE 语句以安装     重新建立另外一个数据库XXX Lost;    DTS导出向导    运行DTS导出向导;    复制源选择EmergencyMode的数据库XXX 导入到XXX Lost;    选择 在SQL Server数据库之间复制对象和数据 试了多次 好像不行 只是复制过来了所有表结构 但是没有数据 也没有视图和存储过程 而且DTS向导最后报告复制失败;    所以最后选择 从源数据库复制表和视图 但是后来发现 这样总是只能复制一部分表记录;    于是选择 用一条查询指定要传输的数据 缺哪个表记录 就导哪个;    视图和存储过程是执行SQL语句添加的     维护Sql Server中表的索引    在使用和创建数据库索引中经常会碰到一些问题 在这里可以采用一些另类的方法解决…     第一步:查看是否需要维护 查看扫描密度/Scan Density是否为 %    declare @table_id int    set @table_id=object_id( 表名 )    dbcc showcontig(@table_id)     第二步:重构表索引    dbcc dbreindex( 表名 pk_索引名 )     重做第一步 如发现扫描密度/Scan Density还是小于 %则重构表的所有索引     并不一定能达 %     dbcc dbreindex( 表名 ) cha138/Article/program/SQLServer/201311/22169

相关参考

知识大全 没有备份只有归档日志如何恢复数据文件

  系统环境  操作系统WindowsServer机器内存M  数据库 OracleiR()forNT企业版  安装路径C:\\ORACLE    模拟现象    可通过重建数据文件来恢复前提是归档日

知识大全 oracle联机日志文件恢复

  SQL>shutdownimmediate  ORA:数据库未打开  已经卸载数据库  ORACLE例程已经关闭  SQL>startup  ORACLE例程已经启动  TotalSy

知识大全 丢失归档日志文件后数据库应当如何恢复[2]

  这里是Oracle使用其硬线路的位置由于转储的数据文件不能恢复到与其他文件一致的位置所以可能存在中断的数据并且Oracle不允许正常打开数据库  第步设置未文档化的实例参数并打开数据库  在初始化

知识大全 MySql通过二进制日志文件恢复数据

MySql通过二进制日志文件恢复数据  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Mysql配

知识大全 如何使用归档日志进行完全恢复

  系统环境  操作系统WindowsServer机器内存M  数据库 OracleiR()forNT企业版  安装路径C:\\ORACLE    模拟现象      先将数据库设置为归档模式    

知识大全 如何使用归档日志进行完全恢复

  系统环境  操作系统WindowsServer机器内存M  数据库 OracleiR()forNT企业版  安装路径C:\\ORACLE    模拟现象  先将数据库设置为归档模式    SQL*

知识大全 丢失归档日志文件后数据库应当如何恢复[1]

  本文主要介绍了如何从一个不能正常打开的数据库(由于一个/多个数据库文件与其他文件不一致)中提取数据的具体示例详细内容请大家参考下文  具体案例  一个磁盘损坏了并且丢失了一个数据库文件从一周前的热

知识大全 旧数据文件,旧控制文件,新日志,怎样恢复

  步骤  修改trc文件(或者编写)你的createcontrolfile的脚本(或sql语句)  类似下面的例如保存到aaasql  CREATECONTROLFILEREUSEDATABASES

知识大全 oracle数据库备份与恢复apieceofcake(4)

  oracle数据库日志备份(windows平台)  本片是接上次的数据库在线备份进行数据库全备份后需要备份归档的日志文件  建立数据库备份的脚本  在上面建立的目录下建立如下的两个脚本  建立执行

知识大全 Oracle重做日志文件损坏或丢失后的恢复

Oracle重做日志文件损坏或丢失后的恢复  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  很多网