sqlserver日志的备份还原笔记

一.备份数据库

BACKUP DATABASE test to disk ='D:/cbmBack/previousDay.bak' with init,name='full backup'

备注:with init表示指针移动文件头部去写。

 

二.备份日志

BACKUP LOG  test to disk ='D:/cbmBack/log.bak' with init

备注:在备份周期开始的时候,要加上with init,表示文件的写指针移动文件头部。

在备份周期内部,就不要加with init了,表示备份的日志附加到原文件之后。

 

三.查看备份文件

restore headeronly from disk='D:/cbmBack/log.bak'

restore headeronly from disk='D:/cbmBack/previousDay.bak'

 

四.备份尾日志

BACKUP LOG test TO  DISK = N'D:/cbmBack/log.bak'

WITH  NO_TRUNCATE ,

NOFORMAT,

NOINIT, 

NAME = N'db_test-事务日志备份',

SKIP,

NOREWIND,

NOUNLOAD, 

NORECOVERY , 

STATS = 10

备注:如果数所据库的备份程序还不到10分钟间隔,而没有备份日志,这个时候要手动备份日志,就用以上语句。

这里有个疑问,就是备份尾日志和备份普通时候的日志有什么不一样?我测试了没什么不同,这可能是因为测试的时候,数据库是好着的,如果遇到数据库已经崩溃了,可能就要用以上的语句才能把尾日志备出来。

 

 

 

五.恢复数据库

1.首先恢复完整备份

 RESTORE DATABASE test FROM  DISK = N'D:/cbmBack/previousDay.bak'

WITH  FILE = 1, 

NORECOVERY, 

NOUNLOAD, 

REPLACE, 

STATS = 10

 

2.恢复非尾日志

RESTORE LOG test FROM  DISK = N'D:/cbmBack/log.bak'

WITH  FILE =1, 

NORECOVERY,

NOUNLOAD,

STATS = 10

 

3.恢复尾日志

RESTORE LOG test FROM  DISK = N'D:/cbmBack/log.bak'

WITH  FILE =2, 

RECOVERY,

NOUNLOAD,

STATS = 10

备注:尾日志恢复的时候,要用RECOVERY

 

 

利用bak恢复数据库,强制还原(REPLACE)
STATS = 10 
每完成10%显示一条记录
DBTest
DBTest_log是上面g:\back.Bak里的逻辑文件
*/

USE master
RESTORE DATABASE DB 
   
FROM DISK = 'g:\back.Bak'
   
WITH MOVE 'DBTest' TO 'E:\Program Files\Microsoft SQL Server2005\Data\DB.mdf'
   MOVE 
'DBTest_log' TO 'E:\Program Files\Microsoft SQL Server2005\Data\DB_log.ldf',
STATS 
= 10REPLACE
GO
++++++++++++++++++++++++++++++++

/**/
/*
备份数据DB .bak文件。然后利用此bak文件恢复一个新的数据库DBTest
*/

USE master
BACKUP DATABASE DB 
  
TO DISK = 'g:\DBBack0930.bak' 
RESTORE FILELISTONLY 
  
FROM DISK = 'g:\DBBack0930.bak' 
RESTORE DATABASE DBTest 
  
FROM DISK = 'g:\DBBack0930.bak' 
  
WITH MOVE 'DBTest' TO 'E:\Program Files\Microsoft SQL Server2005\Data\DBTest.mdf'
  MOVE 
'DBTest_log' TO 'E:\Program Files\Microsoft SQL Server2005\Data\DBTest_log.ldf'
GO 


 

一.线程2select

 

线程1

线程2

条件

结果

Insert多条记录

select

TRANSACTION_READ_UNCOMMITTED

线程2无阻塞,直接取到了线程1中的实时操作,虽然这些操作未提交

Insert多条记录

select

TRANSACTION_READ_COMMITTED

线程2阻塞,直到线程1提交事务,才取到了线程1中的所有操作结果

Insert多条记录

select

TRANSACTION_SERIALIZABLE

内容同

TRANSACTION_READ_UNCOMMITTED

 

 

 

 

如果在事务中应用了select 的串行化事务,则其他事务要等这个select结束

二.线程2update

线程1

线程2

条件

结果

Update某条记录

Update线程1相同的记录

任何条件

线程2阻塞,直到线程1提交事务,接着线程2才执行自己的update操作

Update某条记录

Update线程1不相同的记录

任何条件

线程2无阻塞,直接提交自己的事务

 

三.线程2insert

线程1

线程2

条件

结果

Delete所有记录

Insert一条记录

TRANSACTION_SERIALIZABLE

线程2无阻塞,直接插入并提交,线程1只删除它那个瞬间可以删除的数据

Delete所有记录

Insert一条记录

TRANSACTION_SERIALIZABLE

线程2阻塞,直到线程1结束,然后线程2才插入记录。最后表中看到的记录和上面一项的结果一样

四.线程2delete

线程1

线程2

条件

结果

Insert一条记录

Delete 所有记录

任何条件

线程2阻塞,直到线程1提交事务,接着线程2才执行自己的delete操作

Insert一条记录

Delete 某条记录

任何条件

线程2无阻塞,直接删除并提交

 

 

 

Connection 设置事务级别,是告诉别人我的事务有多高.

 

 

 

1.读已提交

如果另一个事务对本事务的读有影响,并且另一个事务没有结束,则本事务的读操作等另一事务结束

2.update ,delete

update一条记录时,如果另一个事务也在update此记录(包括update set field=value  where条件),则本事务等另一个事务结束

 

3.insert操作

 

 

两个线程开始执行的瞬间,有两个作用域,如果两个作用域存在交集,则后来的线程等待。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bluedest

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值