只有mdf文件,怎么恢复SQLSERVER数据库

只有mdf文件,怎么恢复SQLSERVER数据库,第1张

1、开启数据

2、从企业管理器,建一个同名的数据

3、停止sql

server

4、用原mdf文件覆盖新建库的数据库文件

5、重启sql

server(这时数据库应该是置疑)

6、修改服务器设置:允许对系统目录进行直接修改

sp_configure

'allow

updates',1

reconfigure

with

override

7、将数据库置为紧急状态:

update

masterdbosysdatabases

set

status

=

32768

where

name

=

'数据库名'

8、删除新的ldf文件,重建日志:

dbcc

rebuild_log('数据库名',

'f:\数据库名_log_newldf')--假设把新日志在f盘

9、update

masterdbosysdatabases

set

status

=

16

where

name

=

'数据库名'

10、修改服务器设置:取消

允许对系统目录进行直接修改

sp_configure

'allow

updates',

0

reconfigure

with

override

11、再使用检查工具修复错误

use

[数据库名]

alter

database

[数据库名]

set

single_user

with

rollback

immediate

dbcc

checkdb

('数据库名',REPAIR_ALLOW_DATA_LOSS)

alter

database

[数据库名]

set

multi_user

执行完毕之后,如果还有错误,重复执行11,直到没有错误为止。

以下情况可以恢复数据:

1 innodb引擎表开启了事务,执行dml语句,比如delete、update、insert之类,并且没有提交即commit *** 作的话,可以执行rollback进行回滚恢复。如果是ddl *** 作,如drop、create、alter之类的 *** 作时无效的

2 在进行删除 *** 作之前有备份,比如mysqldump,物理备份数据文件之类的 *** 作,那么可以恢复到删除前的数据

3 如果你的删除 *** 作是直接对data下的文件进行删除,注意,不是粉碎文件 *** 作,那么你可以尝试用磁盘恢复软件来找回被误删的数据文件;

除以上情况,其他真的是没法恢复了,不过貌似很多公司号称能够恢复,要收费,具体他们怎么恢复我就不晓得了。

这种情况的数据恢复只能利用事务日志的备份来进行,所以如果你的SQL没有进行相应的全库备份

或不能备份日志(truncate log on checkpoint选项为1),那么就无法进行数据的恢复了,或者

只能恢复到最近一次的备份的数据了。

以下简单说明恢复数据方法:

1,如果误 *** 作之前存在一个全库备份(或已有多个差异备份或增量备份),首先要做的事就是进

进行一次日志备份(如果为了不让日志文件变大而置trunc log on chkpt选项为1那你就死翘了)

backup log dbName to disk='fileName'

2,恢复一个全库备份,注意需要使用with norecovery,如果还有其他差异或增量备份,则逐个恢

restore database dbName from disk='fileName' with norecovery

3,恢复最后一个日志备份即刚做的日志备份,指定恢复时间点到误 *** 作之前的时刻

restore log dbName from disk='fileName'

with stopat='date_time'

以上这些 *** 作都可以在SQL SERVER企业管理器里完成,难度不大。。。

当然,如果误 *** 作是一些不记日志的 *** 作比如truncate table,select into等 *** 作,那么是无法利

用上述方法来恢复数据的

你这个只是备份了日志文件。

备份

backup database [库名] to disk = 'xxxbak'

还原

use [master];--必须处于master库,才能还原数据库

alter database [库名] set offline with rollback immediate;

restore database [库名] from disk = 'xxbak' ' with replace;

alter database [库名] set online with rollback immediate;

use [db_beauty];

通过数据库备份跟binlog日志记录,可能恢复原来的数据

恢复步骤

a)创建新的数据库 create database rollback_db;

b)将数据库备份倒入新创建的rollback_db中

c)找到数据库备份的最后时间点,并将mysqlbinlog中该时间点之后的命令 *** 作记录通过mysqlbinlog工具保存为sql命令文本

d)将sql命令文本倒入数据库,可能rollback_db就是需要恢复的db了

3mysqlbinlog介绍

binlog基本定义:二进制日志,也成为二进制日志,记录对数据发生或潜在发生更改的SQL语句,并以二进制的形式保存在磁盘中;

作用:MySQL的作用类似于Oracle的归档日志,可以用来查看数据库的变更历史(具体的时间点所有的SQL *** 作)、数据库增量备份和恢复(增量备份和基于时间点的恢复)、Mysql的复制(主主数据库的复制、主从数据库的复制)

二进制日志的信息:

文件位置:默认存放位置为数据库文件所在目录下

文件的命名方式: 名称为hostname-binxxxxx (重启mysql一次将会自动生成一个新的binlog)

状态的查看:mysql> show variables like '%log_bin%';

4利用bin_log恢复数据

a)最长用的就是回复指定数据端的数据了,可以直接恢复到数据库中:     mysqlbinlog  --start-date="2012-10-15 16:30:00" --stop-date="2012-10-15 17:00:00" mysql_bin000001 |mysql -uroot -p123456       亦可导出为sql文件,再导入至数据库中:       mysqlbinlog  --start-date="2012-10-15 16:30:00" --stop-date="2012-10-15 17:00:00" mysql_bin000001 >d:\1sql       source d:\1sql         b)指定开始\结束位置,从上面的查看产生的binary log我们可以知道某个log的开始到结束的位置,可以在恢复的过程中指定回复从A位置到B位置的log需要用下面两个参数来指定:     --start-positon="50" //指定从50位置开始     --stop-postion="100"//指定到100位置结束

rollback是针对事务的,你如果没有在执行语句之前开启事务,那么无法rollback,建议你还是想别的办法吧,事务语句如下(sqlserver的给你借鉴):

--开启事务

begin tran

--执行 *** 作

update Accounts_UsersExp set TelPhone=123456 where userid=14

--执行错误事务回滚

rollback

--如果正确进行事务提交

commit

可以勾选一句执行一句,但是commit了就不能rollback

当启动Binlog后,事务会产生Binlog Event,这些Event被看做事务数据的一部分。因此要保证事务的Binlog Event和InnoDB引擎中的数据的一致性。所以带Binlog的CrashSafe要求MySQL宕机重启后能够保证:

- 所有已经提交的事务的数据仍然存在。

- 所有没有提交的事务的数据自动回滚。

- 所有已经提交了的事务的Binlog Event也仍然存在。

- 所有没有提交事务没有记录Binlog Event。

这些要求很好理解,如果重启后数据还在,但是Binlog Event没有了,就没办法复制到其他节点上了。如果重启后,数据没了,但是Binlog Event还在,那么不存在的数据就会被复制到其他节点上,从而导致主从的不一致。

为了保证带Binlog的CrashSafe,MySQL内部使用的两阶段提交(Two Phase Commit)。

2 - MySQL的Two Phase Commit(2PC)

在开启Binlog后,MySQL内部会自动将普通事务当做一个XA事务来处理:

- 自动为每个事务分配一个唯一的ID

- COMMIT会被自动的分成Prepare和Commit两个阶段。

- Binlog会被当做事务协调者(Transaction Coordinator),Binlog Event会被当做协调者日志。

想了解2PC,可以参考文档:

您好,很高兴为您解答。

可以将数据库设置为单用户模式,即可删除:

ALTER DATABASE IpaddrDB SET SINGLE_USER with ROLLBACK IMMEDIATE

GO

DROP DATABASE IpaddrDB

如若满意,请点击右侧采纳答案,如若还有问题,请点击追问

希望我的回答对您有所帮助,望采纳!

~ O(∩_∩)O~

以上就是关于只有mdf文件,怎么恢复SQLSERVER数据库全部的内容,包括:只有mdf文件,怎么恢复SQLSERVER数据库、如何恢复数据库表删除数据 mysql、sql 回滚语句等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9827883.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存