
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 回滚语句等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)