• SQL Server 2008无日志文件附加数据库


    1、新建一个同名数据库。

    2、停止数据库服务,覆盖新建的数据库主文件(小技巧:最好放在同一个磁盘里面,把新建的数据库主文件删掉或移开,再把要恢复的数据库主文件剪切过去,这样就可以节省时间。)

    3、启动数据库服务,数据库变为置疑或可疑状态。然后在查询分析器中运行:

    alter database 无日志文件的数据库名称 set emergency

    设置为紧急状态。

    4、再运行:

    alter database 无日志文件的数据库名称 set single_user

    或者:

    Sp_dboption '无日志文件的数据库名称', 'single user', 'true'

    设置为单用户模式。

    5、检查并重建日志文件,运行:

    dbcc checkdb('无日志文件的数据库名称',REPAIR_ALLOW_DATA_LOSS)

    这个时间比较长。耐心等待!如果有错误提示,再运行:

    dbcc checkdb('无日志文件的数据库名称',REPAIR_REBUILD)

    进行修复。如果没有错误,可以跳过。

    6、恢复成多用户模式

    alter database 无日志文件的数据库名称 set multi_user

    或者:

    Sp_dboption '无日志文件的数据库名称', 'single user', 'false'

    刷新数据库,你就可以看到已经修复好的数据库了。

    缩小 SQL Server 数据库日志文件

    2010-12-20 07:05

    -- 缩小SQL Server数据库日志文件
    -- 修改其中的3个参数(数据库名,日志文件名,和目标日志文件的大小)
    Set NoCount On
    Declare @LogicalFileName sysname
    Declare @MaxMinutes Int
    Declare @NewSize Int
    Use mm -- 要操作的数据库名
    Select @LogicalFileName = 'mm_log' -- 日志文件名
    Select @MaxMinutes = 10 -- Limit On Time allowed To Wrap Log.
    Select @NewSize = 8 -- 你想设定的日志文件的大小(M)
    -- Setup / initialize
    Declare @OriginalSize Int
    Select @OriginalSize = Size
    From sysfiles
    Where Name = @LogicalFileName
    Select 'Original Size of ' + db_name() + ' LOG is ' +
    CONVERT(Varchar(30),@OriginalSize) + ' 8K pages or ' +
    CONVERT(Varchar(30),(@OriginalSize*8/1024)) + 'MB'
    From sysfiles
    Where Name = @LogicalFileName
    Create Table DummyTrans (DummyColumn Char (8000) Not Null)
    Declare @Counter Int,
    @StartTime Datetime,
    @TruncLog Varchar(255)
    Select @StartTime = GETDATE(),
    @TruncLog = 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY'
    DBCC SHRINKFILE (@LogicalFileName, @NewSize)
    Exec (@TruncLog)
    -- Wrap the Log If necessary.
    While @MaxMinutes > DATEDIFF(mi, @StartTime, GETDATE()) -- Time has Not expired
    And @OriginalSize = (Select Size From sysfiles Where Name = @LogicalFileName)
    And (@OriginalSize * 8 /1024) > @NewSize
    Begin -- Outer Loop.
    Select @Counter = 0
    While ((@Counter < @OriginalSize / 16)
    And (@Counter < 50000))
    Begin -- Update
    Insert DummyTrans Values ('Fill Log')
    Delete DummyTrans
    Select @Counter = @Counter + 1
    End
    Exec (@TruncLog)
    End
    Select 'Final Size of ' + db_name() + ' LOG is ' +
    CONVERT(Varchar(30),Size) + ' 8K pages or ' +
    CONVERT(Varchar(30),(Size*8/1024)) + 'MB'
    From sysfiles
    Where Name = @LogicalFileName
    Drop Table DummyTrans
    Set NoCount Off

  • 相关阅读:
    Uva 1636 决斗
    数论初步
    Gym 100169A 最短路
    Uva 12169 不爽的裁判 模运算
    Uva 11582 巨大的斐波那契数 模运算
    Uva 10791 最小公倍数的最小和 唯一分解定理
    Uva 10375 选择与除法 唯一分解定理
    poj 3485 区间选点
    第二届团体程序设计天梯赛
    Uva 12657 双向链表
  • 原文地址:https://www.cnblogs.com/miralce/p/5102001.html
Copyright © 2020-2023  润新知