数据是不是每次都写入日志文件,但是并不一定写入到数据文件呀?
-------------------------
通过看书,好象是这个意思,不知对不对。
如果最近的数据操作没有写入数据文件mdf,只是写入了日志文件ldf,假如此时关机了,下次开机时,sql服务器启动后,会将日志中的信息写入到数据文件mdf中,是这样吗?另外,活动日志,是不是就是指还没有写入到mdf文件中的信息呢?如果这样的话,这意味着,日志文件比数据文件更重要呀。
-------------------------
通过看书,好象是这个意思,不知对不对。
如果最近的数据操作没有写入数据文件mdf,只是写入了日志文件ldf,假如此时关机了,下次开机时,sql服务器启动后,会将日志中的信息写入到数据文件mdf中,是这样吗?另外,活动日志,是不是就是指还没有写入到mdf文件中的信息呢?如果这样的话,这意味着,日志文件比数据文件更重要呀。
将用要写入数据库的记录放入到文本文件中,然后用bcp导入.可以加快写入的速度另外转点高手的东西:
完全不记录日志是不可能的,但可以尽量少记录日志:
转小黑的
一 sql中列出的最小日志记录操作:
SELECT INTO
大容量装载操作(bcp 和 BULK INSERT)
CREATE INDEX(包括索引视图)
text 和 image 操作(WRITETEXT 和 UPDATETEXT)
二 三种恢复模型对这些操作记录日志情况比较
1 简单恢复模型
use master
go
create database test
on ( name='test',
filename='f:\test.mdf',
size=5MB)
log on
( name='test_log',
filename='f:\test_log.ldf',
size=3MB)
go
use test
go
alter database test set recovery simple
select top 10000 a.* into testtable from master..sysobjects a , master..syscolumns b
select count(*) from ::fn_dblog(null,null)
--一个未公开的table-valued funtion 可以看日志文件的记录数
--result :406
dbcc sqlperf(logspace)
--
--Databasename LogSize(MB) Log Space Used(%)
--test 2.9921875 12.5
use master
go
drop database test
2 大容量日志记录恢复模型
这些大容量复制操作的数据丢失程度要比完全恢复模型严重,
不允许恢复部分的BULK操作,只能全部恢复
use master
go
create database test
on ( name='test',
filename='f:\test.mdf',
size=5MB)
log on
( name='test_log',
filename='f:\test_log.ldf',
size=3MB)
go
use test
go
alter database test set recovery BULK_LOGGED
select top 10000 a.* into testtable from master..sysobjects a , master..syscolumns b
select count(*) from ::fn_dblog(null,null)
--result :422
dbcc sqlperf(logspace)
--
--Databasename LogSize(MB) Log Space Used(%)
--test 2.9921875 12.548956
use master
go
drop database test
3 完全恢复模型
记录的日志数要比大容量日志记录恢复模型多,
将记录每一条BCP or BULK insert,create index 的每一条index row,
对image,text字段 WRITETEXT or UPDATETEXT的所有操作
use master
go
create database test
on ( name='test',
filename='f:\test.mdf',
size=5MB)
log on
( name='test_log',
filename='f:\test_log.ldf',
size=3MB)
go
use test
go
alter database test set recovery full
select top 10000 a.* into testtable from master..sysobjects a , master..syscolumns b
select count(*) from ::fn_dblog(null,null)
--result: 582
dbcc sqlperf(logspace)
--
--Databasename LogSize(MB) Log Space Used(%)
--test 2.9921875 57.996082
三 总结
以上语句在不同模式下的比较
FULL模式 BULK_LOGGED 模式
速度 慢 快
日志大小 大 小
如果在提交事务时被中止,数据未写入数据页码,这时数据库重启并运行恢复,事务检查点之前写入数据,检查点后面事务进行分析->重做->撤销。