代码之家  ›  专栏  ›  技术社区  ›  Peter Di Cecco

缩减镜像SQL Server 2005数据库的事务日志

  •  1
  • Peter Di Cecco  · 技术社区  · 17 年前

    this web page

    USE dbname
    GO
    CHECKPOINT
    GO
    BACKUP LOG dbname TO DISK='NULL' WITH NOFORMAT, INIT, NAME = N'dbnameLog Backup', SKIP, NOREWIND, NOUNLOAD
    GO
    DBCC SHRINKFILE('dbname_Log', 2048)
    GO
    

    如何在不禁用镜像的情况下缩小事务日志文件?

    11 回复  |  直到 17 年前
        1
  •  5
  •   Jay D    14 年前

    use [DATABASE_NAME]
    checkpoint
    BACKUP LOG [DATABASE_NAME] TO DISK =  'C:\LOG_BACKUPS\DATABASE_NAME'
    dbcc shrinkfile(DATABASE_NAME_Log,1)
    

    这是我们目前维护计划的一部分,大约2年来一直没有出现任何问题。

        2
  •  1
  •   ajdams    17 年前

    exec sp_dboption DBName,'trunc。登录chkpt。',真的 检查点 DBCC SHRINKFILE(DBNameFileName,500); exec sp_dboption DBName,'trunc。登录chkpt。错误的

    希望这能有所帮助。

        3
  •  1
  •   Peter Di Cecco    17 年前

    我想我应该回答这个问题,因为它被遗忘了。

    如果我错了,请纠正我,但我没有找到有效的解决方案!

    如果您只有两台服务器,则日志传送是可行的方法。如果没有见证服务器,镜像几乎毫无意义,因为故障转移的唯一方法是从主体进行。..如果主体崩溃时无法进行故障转移,则有点违背了拥有镜像的目的。

    如果有人愿意分享更多关于这件事的信息或建议,我很乐意听取他们的意见。

        4
  •  1
  •   Jay D    14 年前
    1. ALTER [DatabaseName] SET PARTNER OFF
    2. 对主体进行事务日志备份。。 BACKUP LOG [DatabaseName] TO DISK='Drive:\DatabaseName_log_datetime.trn'
    3. DatabaseName_log_datetime.trn
    4. 使用还原此事务日志 NoRecovery 选项。在镜像数据库上。 RESTORE LOG [DatabaseName] FROM DISK ='Drive:\DatabaseName_log_datetime.trn'
    5. 缩小主体和对象的日志文件;镜像服务器。
    6. 再次对主体进行事务日志备份。.并使用“无恢复”选项还原此事务日志。在镜像服务器上的镜像数据库上。
    7. 配置镜像安全。
        5
  •  1
  •   Terry Law    13 年前

    然后,镜像数据库事务日志大小与主体收缩大小同步。

    USE [DATABASE_NAME];
    BACKUP DATABASE [DATABASE_NAME] TO DISK='E:\Backup\DATABASE_NAME_FULL.bak' WITH FORMAT;
    CHECKPOINT;
    WAITFOR DELAY '00:00:02';
    BACKUP LOG [DATABASE_NAME] TO DISK = 'E:\Backup\DATABASE_NAME_TL.trn';
    WAITFOR DELAY '00:00:02';
    DBCC SHRINKFILE('DATABASE_NAME_log', 500);
    

    C:\Program Files\Microsoft SQL Server\100\Tools\Binn\osql.exe -E -S "DATABASE_SERVER" -Q "USE [DATABASE_NAME]; BACKUP DATABASE [DATABASE_NAME] TO DISK='E:\Backup\DATABASE_NAME_FULL.bak' WITH FORMAT;"
    

    我认为不同的备份也应该工作,但不进行测试。下面的diff-backup命令将附加数据而不是覆盖。

    BACKUP DATABASE [DATABASE_NAME] TO DISK='E:\Backup\DATABASE_NAME_DIFF.bak' WITH DIFFERENTIAL;
    
        6
  •  0
  •   Georges LAURET Georges LAURET    17 年前

    1) 停止镜像 2) 收缩主体上的文件 4) 停止镜像服务器,删除镜像数据库的mdf和ldf 5) 启动mirrorser并删除mirrorDatabase 7) 重新安装镜像 哎哟!

        7
  •  0
  •   Sam Strachan    16 年前

    确实,一旦数据库日志太大,你就无法缩小它——在那一点上,我认为你唯一的选择就是打破镜像,缩小并重新创建。此外,尽管您是否 应该 如果只在两台服务器上使用镜像,我可以说,如果你这样做,那么会定期备份事务日志。空间将从中释放出来,从而允许MSSQL重新使用日志文件中的死空间。这不会缩小任何东西,但它确实满足了阻止其生长的要求。

    然后,您需要做的就是定期删除文件备份。例如,您可以这样做:

    USE your_database
    GO
    BACKUP LOG your_database TO DISK = 'x:\your_backup_filepath\your_database.tlog'
    GO
    

    如果可以的话,在几个小时之外做。

        8
  •  0
  •   Oliver    16 年前

    我不知道这为什么有效,只知道它确实有效。我在查询窗口中将其作为一个块运行。请自行决定使用。如果微软件能发表评论,那当然很好。

    use my_database
    dbcc shrinkfile ( my_database_log, 1000 )
    use my_database
    dbcc shrinkfile ( my_database_log, 1000 )
    alter database my_database
      modify file ( 
        name = my_database_log, 
        size = 1000MB
      )
    
        9
  •  0
  •   Holger JermDavis    15 年前

    如果不将镜像数据库从镜像中取出,就无法对其进行任何操作,只要它不是主体数据库。

    如果要进行仅收缩事务文件的收缩,可以使用以下T-SQL:

    USE [your_db_name]
    GO
    DBCC SHRINKFILE (N'your_db_name_logfile' , 0, TRUNCATEONLY)
    GO
    

    这应该使主服务器上的日志文件保持较小,从而在辅助/镜像服务器上保持较小。

    我希望这能有所帮助。

    此外,如果问题是许可,您可以使用SQL Express作为见证服务器。它不需要太多的资源,所以如果这是一个web应用程序,你可以使用web服务器。请记住也要查看见证服务器的日志文件。

        10
  •  0
  •   sacha79    15 年前

    可以收缩具有镜像的数据库的事务文件,必须执行备份,因为存在活动的虚拟日志文件: http://www.xoowiki.com/Article/SQL-Server/tronquer-journal-de-log-sur-base-en-miroir-499.aspx

        11
  •  -1
  •   Pete Carter    13 年前

    解决这个问题的方法是备份日志,不进行截断,然后收缩日志文件,或者您甚至可以忽略收缩。如果这不起作用,请在备份日志之前尝试检查点。这应该行得通。。。