加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

MSSQL清理日志\删除数据\收缩数据库

发布时间:2023-05-09 13:14:00 所属栏目:MsSql教程 来源:
导读: 首先解释一下数据库的版本是sql Server 2012。清除的数据库800多G,磁盘空间就剩10多G,数据量最多的表有2亿。目的就是清楚去年的数据(2017年之前),遇到了一些问题,总结起来就是三方面问题:

  1.如何清理
 首先解释一下数据库的版本是sql Server 2012。清除的数据库800多G,磁盘空间就剩10多G,数据量最多的表有2亿。目的就是清楚去年的数据(2017年之前),遇到了一些问题,总结起来就是三方面问题:

  1.如何清理日志文件。

  2.删除千万级别的数据。

  3.数据库的收缩操作。

一、清除日志文件

   刚开始直接用delete语句删除给报了两次错误:“The transaction log for database 'DB' is full due to 'ACTIVE_TRANSACTION'. ”。我看了一下原来是数据库磁盘空间不足了(还剩9M),数据库日志文件的空间是不够的,所以要先清一下日志文件,腾出来点空间。

  1.分离数据库,在数据库上右键-【任务】-【分离】,将数据库删除连接。

  2.找到数据库DB的所对应的文件日志--DB_log.ldf,之后把这个文件删掉。

  3.附加数据库,在数据库上右击-【附加】。

       4.假如直接选择数据库文件附加上去,就会直接报上图的错误。

use master;
exec sp_detach_db @dbname='DB';
exec sp_attach_single_file_db @dbname='DB',@physname='C:\Program Files (x86)\Microsoft sql Server\MSsql11.MSsqlSERVER\MSsql\DATA\DB.mdf'
至此,数据库就能附加上去了,这样节省出来空间20多个G。

--方法一、通过top方法
WHILE 1 = 1
BEGIN
  DELETE TOP (5000) FROM Orders
  WHERE orderdate < '20170101';
  
  IF @@rowcount < 5000 BREAK

--方法二
--①先读取需要的数据到临时表
 Select * into  ordersnew from Orders Where orderdate>='2017-01-01'
 
--②先清空,后删除。Truncate这个不会有日志记录。或者直接用图形界面删。
Truncate table Orders 
delete from Orders
 
--③对ordersnew 表进行重命名
exec  sp_rename 'ordersnew' ,'Orders'
 

(编辑:汽车网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章