none
SQL2000数据库备份 RRS feed

  • 问题

  • 我现在使用的是SQL2000数据库。。
    1.现在数据库文件MDF有17GB,日志文件 8GB左右。
    2.tempdb数据库文件 tempdb_1_data 文件有50GB大小。
    问题
    1.如何把日志8GB收缩小。缩小以后是不是经过一段时间使用以后还会怎么大。
    2.为什么TEMPDB的文件会怎么大。我只要服务器重新启动下后,tempDB就会吧空间释放。明天再确认的时候tempdb马上回到50GB。这种情况怎么处理?
    2009年10月13日 1:26

答案

  • 1. you can shrink it with 'dbcc shrinkfile'. Should backup log periodically if database is not in simple recovery model.
    2. that means your system needs 50gb tempdb, sql uses tempdb for many things like sorting and join besides temp tables. You can query sysobjects to see what it has.
    2009年10月13日 1:40
  • 1. 先全备份一次数据库,再用下面SQL把ldf文件清理下
       use [DBName];
       select name from sysfiles where groupid=0; --- get Log Name
       
       backup log [DBName] with truncate_only;
       DBCC ShrinkFile ([LogName]);
        使用一段时间后,ldf根据业务还会增长的。(因为ldf纪录了trans)
        可以设置一个job监控下ldf的大小,如果超过设定值(比如1G或2G)就清理下。
    2. tempdb是SQL运行中进行临时内部处理的,所以会根据业务情况而增大。(比如创建了一个临时表,在临时表中插入大量数据,tempdb就会猛增)
        SQL服务重启动后,tempdb中之前的临时应用都会清掉,所以会变小。
        这种情况,建议您检查下数据库对应的应用程式,看看是否有不合理的地方。(可以通过profiler工具分析下sql,再结合应用程序的代码分析)
        同时注意,一定要保证tempdb所在的盘要有足够的空间,否则可能会出现磁盘不够,造成应用程式功能失败。
    2009年10月13日 2:06
  • Should build proper log backup schedule instead of shrinking it time to time, becase:
    1. you'll get double performance hit, and
    2. unable to perform point of time recovery.

    2009年10月13日 2:29
  • 一般来说, 如果不考虑故障恢复, 数据库恢复模型设置为 simple, 这样可以避免日志不断增长
    如果不是 simple 模型, 则要保证有定期的备份, 只有备份之后, 日志空间才会收回

    对于tempdb, 它本来就是 simple 模式的, 所以一般情况下, 只要你不是长期不释放临时表这类的资源, 应该是长到某个程度后就不会现长, 当然, 这个大小取决于你的程序使用临时对象的程度
    2009年10月13日 4:49

全部回复

  • 1. you can shrink it with 'dbcc shrinkfile'. Should backup log periodically if database is not in simple recovery model.
    2. that means your system needs 50gb tempdb, sql uses tempdb for many things like sorting and join besides temp tables. You can query sysobjects to see what it has.
    2009年10月13日 1:40
  • 1. 先全备份一次数据库,再用下面SQL把ldf文件清理下
       use [DBName];
       select name from sysfiles where groupid=0; --- get Log Name
       
       backup log [DBName] with truncate_only;
       DBCC ShrinkFile ([LogName]);
        使用一段时间后,ldf根据业务还会增长的。(因为ldf纪录了trans)
        可以设置一个job监控下ldf的大小,如果超过设定值(比如1G或2G)就清理下。
    2. tempdb是SQL运行中进行临时内部处理的,所以会根据业务情况而增大。(比如创建了一个临时表,在临时表中插入大量数据,tempdb就会猛增)
        SQL服务重启动后,tempdb中之前的临时应用都会清掉,所以会变小。
        这种情况,建议您检查下数据库对应的应用程式,看看是否有不合理的地方。(可以通过profiler工具分析下sql,再结合应用程序的代码分析)
        同时注意,一定要保证tempdb所在的盘要有足够的空间,否则可能会出现磁盘不够,造成应用程式功能失败。
    2009年10月13日 2:06
  • Should build proper log backup schedule instead of shrinking it time to time, becase:
    1. you'll get double performance hit, and
    2. unable to perform point of time recovery.

    2009年10月13日 2:29
  • 一般来说, 如果不考虑故障恢复, 数据库恢复模型设置为 simple, 这样可以避免日志不断增长
    如果不是 simple 模型, 则要保证有定期的备份, 只有备份之后, 日志空间才会收回

    对于tempdb, 它本来就是 simple 模式的, 所以一般情况下, 只要你不是长期不释放临时表这类的资源, 应该是长到某个程度后就不会现长, 当然, 这个大小取决于你的程序使用临时对象的程度
    2009年10月13日 4:49
  • 如果你当前的数据库数据很重要那你的模式最好是FULL模式,这样可以恢复到时间点;如果数据库一般不是很重要你可以将模式设置成:SIMPLE模式。
    Tempdb数据库一般都设置成Simple因为 它是一个临时库,每次启动或者关闭都会重新刷新的。
    如果你选择的是FULL模式 你可以在代理作业写一个SQL语句一段时间内截断日志就可以了。总的来说还是根据你业务的实际情况进行设置
    2009年12月21日 0:38
  • You can't do point of time recovery after truncating log, that makes full recovery model no sense.
    2009年12月21日 1:35