请教各位大侠:
  
  (1)如何在SQLSERVER中设置数据库使用日志?
  
  (2)如何使用日志备份和还原?  谢谢各位大侠:)

解决方案 »

  1.   

    1你可以在企业管理器中,选择数据库,属性,就有日志文件,里面就有你要的设置,2备份一个事务日志:BACKUP LOG { database_name | @database_name_var } 
    {
        TO < backup_device > [ ,...n ]
        [ WITH
            [ BLOCKSIZE = { blocksize | @blocksize_variable } ]
            [ [ , ] DESCRIPTION = { 'text' | @text_variable } ]
            [ [ ,] EXPIREDATE = { date | @date_var }
                | RETAINDAYS = { days | @days_var } ]
            [ [ , ] PASSWORD = { password | @password_variable } ]
            [ [ , ] FORMAT | NOFORMAT ]
            [ [ , ] { INIT | NOINIT } ]
            [ [ , ] MEDIADESCRIPTION = { 'text' | @text_variable } ]
            [ [ , ] MEDIANAME = { media_name | @media_name_variable } ]
            [ [ , ] MEDIAPASSWORD = { mediapassword | @mediapassword_variable } ]
            [ [ , ] NAME = { backup_set_name | @backup_set_name_var } ]
            [ [ , ] NO_TRUNCATE ]
            [ [ , ] { NORECOVERY | STANDBY = undo_file_name } ]
            [ [ , ] { NOREWIND | REWIND } ]
            [ [ , ] { NOSKIP | SKIP } ]
            [ [ , ] { NOUNLOAD | UNLOAD } ]
            [ [ , ] RESTART ]
            [ [ , ] STATS [ = percentage ] ] 
        ] 

      

  2.   

    --创建测试数据库 
    CREATE DATABASE Db 
    GO 
    --对数据库进行备份 
    BACKUP DATABASE Db TO DISK='c:\db.bak' WITH FORMAT 
    GO 
    --创建测试表 
    CREATE TABLE Db.dbo.TB_test(ID int) 
    --延时1秒钟,再进行后面的操作(这是由于SQL Server的时间精度最大为百分之三秒,不延时的话,可能会导致还原到时间点的操作失败) 
    WAITFOR DELAY '00:00:01' 
    GO 
    --假设我们现在误操作删除了 Db.dbo.TB_test 这个表 
    DROP TABLE Db.dbo.TB_test 
    --保存删除表的时间 
    SELECT dt=GETDATE() INTO # 
    GO 
    --在删除操作后,发现不应该删除表 Db.dbo.TB_test 
    --下面演示了如何恢复这个误删除的表 Db.dbo.TB_test 
    --首先,备份事务日志(使用事务日志才能还原到指定的时间点) 
    BACKUP LOG Db TO DISK='c:\db_log.bak' WITH FORMAT 
    GO 
    --接下来,我们要先还原完全备份(还原日志必须在还原完全备份的基础上进行) 
    RESTORE DATABASE Db FROM DISK='c:\db.bak' WITH REPLACE,NORECOVERY 
    GO 
    --将事务日志还原到删除操作前(这里的时间对应上面的删除时间,并比删除时间略早 
    DECLARE @dt datetime 
    SELECT @dt=DATEADD(ms,-20,dt) FROM # --获取比表被删除的时间略早的时间 
    RESTORE LOG Db FROM DISK='c:\db_log.bak' WITH RECOVERY,STOPAT=@dt 
    GO 
    --查询一下,看表是否恢复 
    SELECT * FROM Db.dbo.TB_test 
    /*--结果: 
    ID 
    ----------- 
    (所影响的行数为 0 行) 
    --*/ 
    --测试成功 
    GO 
    --最后删除我们做的测试环境 
    DROP DATABASE Db 
    DROP TABLE # 
      

  3.   

    事务日志备份 
    ------------------------------------------------------------- 
    (1)基于完全备份。 
    (2)为递增备份,即备份从上一次备份以来到备份时所写的事务日志。 
    (3)允许恢复到故障时刻或者一个强制时间点。 
    (4)恢复时,需要应用完全备份和完全备份后的每次日志备份。 
    ------------------------------------------------------------- 
    backup database d3 to bak3 with init,name='d3_full' --日志备份,第一次备份时应做完全备份 
    create table b1(c1 int not null,c2 char(10) not null) 
    backup log d3 to bak3 with 
    insert b1 values(1,'a') 
    backup log d3 to bak3 with 
    insert b1 values(2,'b') 
    backup log d3 to bak3 with 
    insert b1 values(3,'c') 
    backup log d3 to bak3 with 
    restore headeronly from bak3 
    ---------------------------------------------------------------------- 
    create table b1(c1 int not null,c2 char(10) not null)    --Full+Log+Diff 
    backup log d4 to bak4 with 
    insert b1 values(1,'a') 
    backup log d4 to bak4 with 
    insert b1 values(2,'b') 
    backup database d4 to bak4 with differential,name='d4_diff1' 
    insert b1 values(3,'c') 
    backup log d4 to bak4 with 
    insert b1 values(4,'d') 
    backup log d4 to bak4 with 
    insert b1 values(5,'d') 
    backup database d4 to bak4 with differential,name='d4_diff2' 
    restore headeronly from bak4 
    ---------------------------------------------------------------------- 
    日志清除 
    ----------------------------------------- 
    1)如果日志空间被填满,数据库将不能记录修改。 
    2)数据库在做完全备份时日志被截断。 
    3)如果将'Trans log on checkpoint'选项设为TRUE,则结果为不保存日志,即没有日志记录,不建议使用。 
    4)with truncate_only和with no_log设置日志满时清除日志 
    5)with no_truncate则可以完整保存日志,不清除,即使在数据文件已经损坏情况下。主要用于数据库出问题后在恢复前使用。可以将数据还原到出故障的那一时刻。 
    ------------------------------------------- 
    exec sp_dboption d3 
    exec sp_dboption 
    sp_dboption 'd3','trunc. log on chkpt.','true'    --设置自动清除数据库日志 
    sp_dboption 'd3','trunc. log on chkpt.','false'    --将自动清除数据库日志的选项去除 
    ---------------------------------------------------------------------- 
    backup log d4 with truncate_only    --设置D4日志满时清除日志,并做清除记录 
    ---------------------------------------------------------------------- 
    backup log d4 with no_log      --设置D4日志满时清除日志,但不做清除记录 
    ---------------------------------------------------------------------- 
    backup log d4 to bak4 with no_truncate--在D4数据库损坏时马上备份当前数据库日志(DEMO) 
    -------- 
    使用no_truncate 
    完全+修改1+差异+修改2+差异+修改3+停止SQL,删除数据库数据文件+重启SQL 
    backup log no_truncate 
    再还原,可还原到修改3 
    ----------------------------------------------------------------------