• SQL Server清空日志及所有表的数据


    在查询分析器中顺序执行以下三步,其中   databasename   为你的数据库文件名
    1.清空日志:DUMP   TRANSACTION   databasename   WITH   NO_LOG  

    2.截断事务日志:BACKUP   LOG   databasename   WITH   NO_LOG  

    3.收缩数据库:DBCC   SHRINKDATABASE(databasename)  


    --//////////////////////////////////////////////////////////////////

    SQL   Server日志清空方法  
       
    一种方法:清空日志。  
    1.打开查询分析器,输入命令   DUMP   TRANSACTION   数据库名   WITH   NO_LOG  
    2.再打开企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了。

    方法二:

    清空日志:

    ------------------------------------------
      BACKUP   LOG     库名   WITH   NO_LOG

      DBCC   SHRINKFILE(   '日志文件名 ',新的大小数值型如1)

    日志文件名是这样的:

    select   name   from   sysfiles
    如:
    mastlog

    ---------------------------------------------
    backup   log     DATABASENAME
      with   truncate_only
      dbcc   shrinkdatabase   (DATABASENAME,SIZE)  
      若每天有whole   back   up   的话可以设置一job,
      每隔三天或一个星期清空一次
      这样的话日志就不会长大了哦


    -------------------------------------
    1:   删除LOG
    1:分离数据库
    2:删除LOG文件
    3:附加数据库
    此法生成新的LOG,大小只有500多K
          再将此数据库设置自动收缩
    2:清空日志
    DUMP     TRANSACTION     库名     WITH     NO_LOG        

    再:
    企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了

    方法三:  
    第一步:  
    backup   log   database_name   with   no_log  
    或者   backup   log   database_name   with   truncate_only   --no_log和truncate_only是在这里是同义的,随便执行哪一句都可以  
    第二步:  
    1.收缩特定数据库的所有数据和日志文件,执行   dbcc   shrinkdatabase   (database_name,[,target_percent])--database_name是要收缩的数据库名称;target_percent是数据库收缩后的数据库文件中所要的剩余可用空间百分比  
    2.收缩一次一个特定数据库中的数据或日志文件,执行   dbcc   shrinkfile(file_id,[,target_size])   --file_id是要收缩的文件的标识   (ID)   号,若要获得文件   ID,请使用   FILE_ID   函数或在当前数据库中搜索   sysfiles;target_size是用兆字节表示的所要的文件大小(用整数表示)。如果没有指定,dbcc   shrinkfile   将文件大小减少到默认文件大小  

    两个dbcc都可以带上参数notruncate或truncateonly,具体意思看帮助。  


    方法四:  
    (这个方法在sqlserver2000的环境下做一般能成功,在sqlserver7及以下版本就不一定了):  
    第一步:  
    先备份整个数据库以备不测  
    第二步:  
    备份结束后,在Query   Analyzer中执行如下的语句:  
    exec   sp_detach_db   yourDBName,true   --卸除这个DB在MSSQL中的注册信息  
    第三步:  
    到日志的物理文件所在的目录中去删除该日志文件或者将该日志文件移出该目录  
    第四步:  
    在Query   Analyzer中执行如下的语句:  
    exec   sp_attach_single_file_db   yourDBName, 'd:/mssql7/data/yourDBName_data.mdf '  
    --以单文件的方式注册该DB,如果成功则MSSQL将自动为这个DB生成一个500K的日志文件。  

    以上方法在清除log日志中均有效。  
    但,能否让sql   server   不产生log日志呢?以上方法好像均无效。  
    我这儿正好有个case:  
    我客户的sql   server每天都会产生4,500M的log日志,每天都清除一下,非常不便。有没有办法实现不产生log日志呢?  

    我分析了一下客户产生log日志的原因,并且做了相应测试。  
    客户是每天将数据库清空,从总系统中将数据导入到sql   server里。我感决sqlserver在插入时产生log不大,在delete整个库时产生log极大。  
    比如:  
    SELECT   *   into   test_2   from   b_bgxx  
    共45000条记录,产生十几M   log,如果  
    delete   from   test_2  
    产生80多M   log   ,这明显存在问题。  

    虽然可以换成:  
    truncate   table   test_2  


    近来发现数据库过大,空间不足,因此打算将数据库的数据进行全面的清理,但表非常多,一张一张的清空,实在麻烦,因此就想利用SQL语句一次清空所有数据.找到了三种方法进行清空.使用的数据库为MS SQL SERVER.
    1.搜索出所有表名,构造为一条SQL语句

    declare @trun_name varchar(8000)
    set @trun_name=''
    select @trun_name=@trun_name + 'truncate table ' + [name] + ' ' from sysobjects where xtype='U' and status > 0
    exec (@trun_name)

    该方法适合表不是非常多的情况,否则表数量过多,超过字符串的长度,不能进行完全清理.
    2.利用游标清理所有表

    declare @trun_name varchar(50)
    declare name_cursor cursor for
    select 'truncate table ' + name from sysobjects where xtype='U' and status > 0
    open name_cursor
    fetch next from name_cursor into @trun_name
    while @@FETCH_STATUS = 0
    begin
      
    exec (@trun_name)
     
    print 'truncated table ' + @trun_name
     
    fetch next from name_cursor into @trun_name
    end
    close name_cursor
    deallocate name_cursor

    这是我自己构造的,可以做为存储过程调用, 能够一次清空所有表的数据,并且还可以进行有选择的清空表.
    3.利用微软未公开的存储过程

    exec sp_msforeachtable "truncate table ?"

    该方法可以一次清空所有表,但不能加过滤条件.

     

  • 相关阅读:
    Cannot retrieve repository metadata (repomd.xml) for repository: fedora. P、、、
    Fedora 学习总结
    Gnome 高级配置
    [置顶]Fedora 13,14,15安装LAMP
    如何删去Fedora下应用程序菜单中的多余程序启动器?
    运用Telnet在windowsxp中与虚拟机中fedora14互联
    运用Telnet在Windows xp中与虚拟机中fedora14互连
    netstat 的应用
    在 fedora14 下升级 firefox 到 firefox4 的两种方案
    windows 中相关CMD应用
  • 原文地址:https://www.cnblogs.com/samlin/p/Sql_truncate_data.html
Copyright © 2020-2023  润新知