SQL SERVER 在启动数据库的时候,会自动通过日志文件来同步更新数据文件。所以当突然断电的时候然后启动实例,你会发现SQL SERVER 启动将会比较慢,特别是在繁忙的数据库服务器上。
举下面的例子说明BEGIN TRANSACTION INSERT INTO a INSERT INTO b COMMIT TRANSACTIONBEGIN TRANSACTION INSERT INTO c --时间点A 断电 INSERT INTO d COMMIT TRANSACTION如果时间点A 断电,下次SQL 重启的时候会首先检查日志,把已经完成的事物保存到数据库中.即a,b数据插入到数据库而c,d的数据不会插入到数据库,因为c所处的事物没有完成. 如果没有日志,而直接插入数据库,那么c的数据插入到数据库,而d没有插入,违反了事物的原子性
MSQL也有几种隔离级别,最高级别的可串行读可以做到防止以上错误,但会影响数据库的性能。其他隔离级别是不能完全防止这些情况的,俣可以通过事务和锁控制来实现。
没读懂,这两天也被日志文件备份困扰,
日志文件的能够用来还原数据库的数据。
学习
如果写了日志文件,没写数据库,如何恢复,那日志文件不是有错么?
INSERT INTO a
INSERT INTO b
COMMIT TRANSACTIONBEGIN TRANSACTION
INSERT INTO c
--时间点A 断电
INSERT INTO d
COMMIT TRANSACTION如果时间点A 断电,下次SQL 重启的时候会首先检查日志,把已经完成的事物保存到数据库中.即a,b数据插入到数据库而c,d的数据不会插入到数据库,因为c所处的事物没有完成.
如果没有日志,而直接插入数据库,那么c的数据插入到数据库,而d没有插入,违反了事物的原子性
你可以想像一下,如果有一个要 更新多张表、并且要执行半一个小时的事务。
如果没有一个日志来记录这个事务 更新过的数据,那如果断电、或事务回滚。
就没有办法保证事务完整性了。有了日志文件之后,sql系统自动就可以根据日志内容,回滚或前滚。
sql server自动为日志生成 检查点。 检查点也就是 系统把内存更新的数据 刷新到硬盘的时间点。
检查点上有 记录着这个时间点未完成的事务。
恢得数据库的型式 有三种:
1.大容量日志
日志文件不记录大量更新的记录。比如 一条update语句更新1000条记录,这时日志文件不会有记录。
2.简单
不管你做任何数据操作,日志文件都不会有记录。比如temp数据库。
3.完全
日志文件完全记录。