SQLSERVER备份和对日志的处理

发表于:2007-05-25来源:作者:点击数: 标签:
SQLSERVER备份和对日志的处理在网上看到许多关于数据日志文件太大如何处理的问题,也看到了许多不合实际的做法,也有人因为错误的操作但是没有日志而急得焦头烂额, 其实数据库的日志文件是记录数据库 UPDATE,DELETE 操作的踪迹,也是当数据库发生意外(如黑客攻

SQLSERVER备份和对日志的处理 在网上看到许多关于数据日志文件太大如何处理的问题,也看到了许多不合实际的做法,也有人因为错误的操作但是没有日志而急得焦头烂额,
其实数据库的日志文件是记录数据库 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.几种备份策略
上面的的内容可以在BOOKON 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 键。文件名旁出现十字光标,表明将删除此文件。


说明 只能删除空文件


呵呵,俺先在这儿抛几块砖头,有玉的尽管拿来:)

原文转自:http://www.ltesting.net