在网上看到许多关于数据日志文件太大如何处理的问题,也看到了许多不合实际的做法,也有人因为错误的操作但是没有日志而急得焦头烂额, 其实数据库的日志文件是记录数据库 UPDATE,DELETE 操作的踪迹,也是当数据库发生意外(如黑客攻击,系统数据库发生破坏破坏等)时我们能够让数据库恢复至特定时刻的保证, 所以它很重要!!我们应该对数据库进行日志备份! 我们现在来分析一下数据库故障的种类: 一:事务内部的故障 也就是我们不能够保证事务的一致性状态,举个例子来说,您有两个银行帐户,由于某种原因,您现在需要从一个银行帐户上取出100万存到另一个银行帐户上, 但是由于银行数据库的故障,您的一个银行帐户确实少了100万,但是另一个帐户没有相应的增加100万,您现在会怎么做:( 当然我们可以在相应事务中加入ROLLBACK来强抽回滚 二:系统故障(软件故障-SOFT CRASH) 系统故障是指造成系统停止运转的任何事件,舍不得系统要重新启动.如特定类型的硬件故障(CPU故障),操作系统故障,DBMS代码故障,突然停电等,这类故障影响正在运行的事务, 但是不破坏数据库.这时所有内存的数据全部丢失,所有事务非正常终止,一些没有完成的事务的结果可能已经送给了物理数据库,从而数据库中的数据处于不正确状态,为保证数据的一致 性,需要清除这些事务对数据库的篡改! 这时系统重新启动后,对所有已经提交的事务REDO,对所有非正常终于的事务UNDO来强行撤消所有未完成的事务! 三:介质故障(硬件故障--HARD CRASH) 这是一种外存故障,如磁盘损坏,磁头碰撞,瞬时强磁场干扰等.这类故障可能性最小,但是破坏性最大. 四:计算机病毒 上述故障数据库进行恢复的原理十分简单,就是两个字"冗余"现在我们就说一下如何建立"冗余"技术!
备份 我们现在来看一下SQL SERVER 的备份技术,所有数据库的备份目的都是一样的,SQL SERVER也一样,防止数据丢失! 本章主要包括下面几个方面的内容: 1.在SQL SERVER 中我们可以设置数据库的恢复模型为完全恢复模型,大容量插入模型和简单模型, 2.什么时候需要我们进行数据库的备份 3,有几种数据库备份方法 4.0,演示几种备份方法(用备份前的准备工作) 5.几种备份策略 上面的的内容可以在BOOK ON LINE 里找到非常好的答复,如果需要,我再写:) 练习:example:
0.首先要有一个完全备份(不然的话您是不能够成功的备份日志文件的:) )呵呵 backup database Northwind to nwbakup1,nwbakup2 with init --查看备份信息 RESTORE FILELISTONLY FROM nwbakup1,nwbakup2 也可以在企业管理器中SQL服务器-Northwind-右键-所有任务-备份数据库, 然后在图形界面下进行相应的操作,这是非常简单的
1.use northwind insert employees(lastname,firstname) values('aaa','aaa') delete from employees where lastname='aaa' 记下这时的时间 23:33 2.过3分钟输入 use northwind insert employees(lastname,firstname) values('bbb','bbb')
3.此时select * from employees 将能看到这两条记录
4.进行日志备份,选中northwind数据库,所有任务,backup database 在对话框中,选择事务日志备份为备份类型,选择已有的备份设备,和追加到媒体 单击ok进行备份.这样生成了两个新纪录的日志备份 backup log Northwind to nwlogbakup
5.以下演示恢复 所有任务 restore database 对话框中选择时点还原,输入刚才记录的时间,单击ok恢复 restore database Northwind from nwbakup1,nwbakup2 with norecovery
use Northwind 服务器: 消息 927,级别 14,状态 2,行 1 无法打开数据库 'Northwind'。该数据库正处于还原操作中途。 这是因为我们指定了选项" with norecovery"
6.现在恢复事务日志至23:35 restore log Northwind from nwlogbakup with recovery, stopat=񟭃-08-02 23:35'
6.执行select * from employees ,此时只能看到第一个新插入的记录
--查看备份信息 RESTORE FILELISTONLY FROM DISK ='C:\Program Files\Microsoft SQL Server\MSSQL\BACKUP\db1_backup' DBCC SQLPERF (LOGSPACE) --查看日志空间
1*你应该备份日志 BACKUP LOG 数据库名 TO DISK='c:\aalogbak' WITH INIT,NO_TRUNCATE
这样你的日志清空也备份了,日志也清空了,你可以压缩了 在维护日志备份序列时,调度 BACKUP LOG 语句按间隔发生,以使事务日志不致增长到超过预期的大小。
如果不想要日志或者是日志已没有什么作用时,可以考虑以下的实现方案:
1. backup log DBNAME with [no_log|truncate_only][no_truncate] /* NO_LOG | TRUNCATE_ONLY
无须备份复制日志即删除不活动的日志部分,并且截断日志。该选项会释放空间。因为并不保存日志备份,所以没有必要指定备份设备。NO_LOG 和 TRUNCATE_ONLY 是同义的。
使用 NO_LOG 或 TRUNCATE_ONLY 备份日志后,记录在日志中的更改不可恢复。为了恢复,请立即执行 BACKUP DATABASE。
NO_TRUNCATE
允许在数据库损坏时备份日志。 */
2. 收缩数据库文件 select fileid,filename from sysfiles
USE DBNAME DBCC SHRINKFILE (2,10) -- 把fileid=2 的文件收缩到 10 MB OR 企业管理器-右键你要压缩的数据库-所有任务-收缩数据库-收缩文件-选择日志文件-在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
3: 删除LOG 1:分离数据库 2:删除log文件 3:附加数据库 此法生成新的LOG,大小只有500多K
4.你可以先配置你的RECOVERY MODEL 为SIMPLE ALTER DATABASE DB_NAME SET RECOVERY SIMPLE
5.exec sp_dboption 'test2','autoshrink','on'
5 展开服务器组,然后展开服务器。
展开"数据库"文件夹,右击要从中删除数据或日志文件的数据库,然后单击"属性"命令。
若要删除数据文件,单击"常规"选项卡。若要删除日志文件,单击"事务日志"选项卡。
在"文件名"列中,单击要删除的文件名旁边的箭头,再按 DELETE 键。文件名旁出现十字光标,表明将删除此文件。
说明 只能删除空文件
呵呵,俺先在这儿抛几块砖头,有玉的尽管拿来:)
|