SQLSERVER备份和对日志的处理

来源:互联网 发布:大赢家炒股软件 编辑:程序博客网 时间:2024/05/17 23:59

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.几种备份策略
上面的的内容可以在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 键。文件名旁出现十字光标,表明将删除此文件。


说明 只能删除空文件 

原创粉丝点击