none
关于恢复模式的问题 RRS feed

  • 问题

  • 简单模式下和完全模式下有什么区别?

    从日志角度看,大小都是一样的。怎么能说明简单模式日志内容少

    2010年8月18日 12:33

答案

  • -- FULL 模式
    CREATE DATABASE __test
    GO
    ALTER DATABASE __test
    SET RECOVERY FULL
    GO
    
    SELECT TOP(5000)
    	col = CONVERT(char(8000), '')
    INTO __test.dbo.tb
    FROM sys.columns C1,
    	sys.columns C2
    ;
    DELETE FROM __test.dbo.tb
    ;
    GO
    
    SELECT
    	size * CONVERT(float,8) AS [Size],
    	CAST(FILEPROPERTY(name, 'SpaceUsed') AS float)* CONVERT(float,8) AS [UsedSpace]
    FROM sys.master_files 
    WHERE database_id = DB_ID(N'__test')
    	AND type = 1
    ;
    GO
    
    DROP DATABASE __test;
    GO
    
    -- SIMPLE 模式
    CREATE DATABASE __test
    GO
    ALTER DATABASE __test
    SET RECOVERY SIMPLE
    GO
    
    SELECT TOP(5000)
    	col = CONVERT(char(8000), '')
    INTO __test.dbo.tb
    FROM sys.columns C1,
    	sys.columns C2
    ;
    DELETE FROM __test.dbo.tb
    ;
    
    SELECT
    	size * CONVERT(float,8) AS [Size],
    	CAST(FILEPROPERTY(name, 'SpaceUsed') AS float)* CONVERT(float,8) AS [UsedSpace]
    FROM sys.master_files 
    WHERE database_id = DB_ID(N'__test')
    	AND type = 1
    ;
    GO
    
    DROP DATABASE __test;
    
    
    2010年8月19日 4:59

全部回复

  • Sql will truncate committed transactions from log if db is in simple recovery mode. If in full recovery mode, have to backup log to truncate committed transactions. If you never backup db, sql will treat it as in simple recovery mode. Books online has details.
    2010年8月18日 13:41
  • 对于增删改这些操作,简单恢复模式和完全恢复模式都会记录日志,不同之处在于简单恢复模式下,inactive的日志在checkpoint命令发出之后会被截断,这样日志文件的大小会相对小一些.

    对于大批量操作(bulk operation),简单恢复模式是minimum loging的,而完全恢复模式是全部记录


    有dba的职位吗(北京的),请联系我 stswordman#hotmail.com
    2010年8月18日 13:50
    版主
  • I guess you mean bulk-logged mode for minimum logging of bulk operations.
    2010年8月18日 13:53
  • 对于增删改这些操作,简单恢复模式和完全恢复模式都会记录日志,不同之处在于简单恢复模式下,inactive的日志在checkpoint命令发出之后会被截断,这样日志文件的大小会相对小一些.

    对于大批量操作(bulk operation),简单恢复模式是minimum loging的,而完全恢复模式是全部记录


    有dba的职位吗(北京的),请联系我 stswordman#hotmail.com

    怎么能证明小一些。都说小。我的实验结果是一样大。

    挺郁闷的 

    2010年8月18日 21:37
  • 对于增删改这些操作,简单恢复模式和完全恢复模式都会记录日志,不同之处在于简单恢复模式下,inactive的日志在checkpoint命令发出之后会被截断,这样日志文件的大小会相对小一些.

    对于大批量操作(bulk operation),简单恢复模式是minimum loging的,而完全恢复模式是全部记录


    有dba的职位吗(北京的),请联系我 stswordman#hotmail.com

    怎么能证明小一些。都说小。我的实验结果是一样大。

    挺郁闷的 


    怎么证明的,可以给出代码吗
    有dba的职位吗(北京的),请联系我 stswordman#hotmail.com
    2010年8月19日 1:07
    版主
  • -- FULL 模式
    CREATE DATABASE __test
    GO
    ALTER DATABASE __test
    SET RECOVERY FULL
    GO
    
    SELECT TOP(5000)
    	col = CONVERT(char(8000), '')
    INTO __test.dbo.tb
    FROM sys.columns C1,
    	sys.columns C2
    ;
    DELETE FROM __test.dbo.tb
    ;
    GO
    
    SELECT
    	size * CONVERT(float,8) AS [Size],
    	CAST(FILEPROPERTY(name, 'SpaceUsed') AS float)* CONVERT(float,8) AS [UsedSpace]
    FROM sys.master_files 
    WHERE database_id = DB_ID(N'__test')
    	AND type = 1
    ;
    GO
    
    DROP DATABASE __test;
    GO
    
    -- SIMPLE 模式
    CREATE DATABASE __test
    GO
    ALTER DATABASE __test
    SET RECOVERY SIMPLE
    GO
    
    SELECT TOP(5000)
    	col = CONVERT(char(8000), '')
    INTO __test.dbo.tb
    FROM sys.columns C1,
    	sys.columns C2
    ;
    DELETE FROM __test.dbo.tb
    ;
    
    SELECT
    	size * CONVERT(float,8) AS [Size],
    	CAST(FILEPROPERTY(name, 'SpaceUsed') AS float)* CONVERT(float,8) AS [UsedSpace]
    FROM sys.master_files 
    WHERE database_id = DB_ID(N'__test')
    	AND type = 1
    ;
    GO
    
    DROP DATABASE __test;
    
    
    2010年8月19日 4:59