一。SqlSever 的 恢复模式
1. FUll 模式,,Full模式的旧称叫”Checkpoint without truncate log“,这种情况的日志,会大量记录。在数据完整备份后仍然不会截断日志,只有进行日志备份后才会把日志截断。
tip1:完整备份需要主意的时,备份的数据,会是以结束时间为准(即备份了到结束为止的所有数据).12:00:01分开始=>12:01:59分,并这个区间的数据以事务日志的方式 呈现。
2.BULK_LOGGED 模式,这种模式基本与Full模式一致。唯一的不同是针对以下Bulk操作,会产生尽量少的log
1) Bulk load operations (bcp and BULK INSERT).
2) SELECT INTO.
3) Create/drop/rebuild index
众所周知,通常bulk操作会产生大量的log,对SQL Server的性能有较大影响,bulk-logged模式的作用就在于降低这种性能影响,并防止log文件过分增长,但是它的问题是无法point-in-time恢复到包含bulk-logged record的这段时间。
Bulk-logged模式的最佳实践方案是在做bulk操作之前切换到bulk-logged,在bulk操作结束之后马上切换回full模式。
3.Simple模式。
Simple模式的旧称叫”Checkpoint with truncate log“,其实这个名字更形象,在Simple模式下,SQL Server会在每次checkpoint或backup之后自动截断log,也就是丢弃所有的inactive log records,仅保留用于实例启动时自动发生的instance recovery所需的少量log,这样做的好处是log文件非常小,不需要DBA去维护、备份log,但坏处也是显而易见的,就是一旦数据库出现异常,需要恢复时,最多只能恢复到上一次的备份,无法恢复到最近可用状态,因为log丢失了。
Simple模式主要用于非critical的业务,比如开发库和测试库,但是道富这边的SQL Server(即使是生产库)大都采用Simple模式,是因为这边的SQL Server大都用于非critical的业务(critical的数据库大都采用Oracle和DB2),可以忍受少于1天的数据丢失(我们的job每天都会定时备份全库)。
ALTER DATABASE test SET RECOVERY BULK_LOGGED WITH NO_WAIT --大容量日志
二.用户模式:
1.Single_User 一个在单用户(SINGLE_USER)模式下的数据库一次只能有一个连接。
2.RESTRICTED_USER 在限制用户(RESTRICTED_USER) 模式下的数据库只能接受被认为是“合格”用户的连接
——这些用户属于 dbcreator 或 sysadmin 服务器角色,或者是那个数据库的db_owner角色的成员。
3.Multi_User 数据库在默认时处于多用户模式(MULTIPLE_USER),这意味着所有具有一个数据库中有效用户名的用户都可以连接该数据库。
sp_dboption test,"single user",true sp_dboption test,"single user",false
alter database [test] set multi_user WITH ROLLBACK IMMEDIATE
三.数据日志
1.查看大小方式
exec sp_helpdb test db_size(kB)
select * from sys.database_files Size=db_size/8 (DBCC SHRINKDATABSE和DBCC SHINKFILE都是以一个区(8个页为一个区)为单位进行数据文件收缩的,)
2.备份,
backup log test1 TO db_bk_dev
backup database test1 to disk='mydb_bak'
3.收缩文件
dbcc shrinkfile(N'test_log',1)--收缩至1M=1024KB =1024/8=128(size)
dbcc shrinkfile(N'test_log') --不指定大小则压缩到最小(可以不用同时压缩数据文件)
dbcc shrinkfile(test_log)
dbcc ShrinkDatabase(test) --压缩数据文件及日志文