SQL SERVER 收缩数据库与批量收缩详解

存储过程方法

 代码如下 复制代码

DECLARE @name VARCHAR(25)
DECLARE @SQL VARCHAR(1000)
DECLARE @logid INT
DECLARE sysdatabase_name CURSOR FOR SELECT name FROM master.dbo.sysdatabases
OPEN sysdatabase_name
FETCH NEXT FROM sysdatabase_name INTO @name

WHILE @@FETCH_STATUS = 0
BEGIN
IF ( @name NOT IN ('xxx'))
BEGIN
SET @SQL =' DECLARE @logid INT
USE [' + @name+']
SELECT @logid = fileid FROM sysfiles WHERE RIGHT(rtrim(filename),3) = "ldf"
BACKUP LOG [' + @name+'] WITH NO_LOG
DBCC SHRINKFILE (@logid) '
EXEC(@SQL)
END

FETCH NEXT FROM sysdatabase_name INTO @name

END
CLOSE sysdatabase_name
DEALLOCATE sysdatabase_name

另一种办法,这个可能更适合初学者

1.清空日志
  DUMP TRANSACTION 库名 WITH NO_LOG 
2.截断事务日志:
  BACKUP LOG 数据库名 WITH NO_LOG
3.收缩数据库文件(如果不压缩,数据库的文件不会减小
  企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
    --选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这

个数,确定就可以了
    --选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这

个数,确定就可以了
  也可以用SQL语句来完成
  --收缩数据库
  DBCC SHRINKDATABASE(客户资料)
  --收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles
  DBCC SHRINKFILE(1)
4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)
  a.分离数据库:
    企业管理器--服务器--数据库--右键--分离数据库
  b.在我的电脑中删除LOG文件
  c.附加数据库:
    企业管理器--服务器--数据库--右键--附加数据库
  此法将生成新的LOG,大小只有500多K
  或用代码:
  下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。
  a.分离
  E X E C sp_detach_db @dbname = 'pubs'
  b.删除日志文件
  c.再附加
  E X E C sp_attach_single_file_db @dbname = 'pubs',
    @physname = 'c:Program FilesMicrosoft SQL ServerMSSQLDatapubs.mdf'
5.为了以后能自动收缩,做如下设置:
  企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"
  --SQL语句设置方式:
  E X E C sp_dboption '数据库名', 'autoshrink', 'TRUE'
6.如果想以后不让它日志增长得太大
  企业管理器--服务器--右键数据库--属性--事务日志
    --将文件增长限制为xM(x是你允许的最大数据文件大小)
  --SQL语句的设置方式:
  alter database 数据库名 modify file(name=逻辑文件名,maxsize=20)
特别注意:
  请按步骤进行,未进行前面的步骤,请不要做后面的步骤
  否则可能损坏你的数据库.
  一般不建议做第4,6两步
  第4步不安全,有可能损坏数据库或丢失数据
  第6步如果日志达到上限,则以后的数据库处理会失败,在清理日志后才能恢复.

另外提供一种更简单的方法,本人屡试不爽,建议大家使用。
更简单的方法:
   1。右建数据库属性窗口--故障还原模型--设为简单
   2。右建数据库所有任务--收缩数据库
   3。右建数据库属性窗口--故障还原模型--设为大容量日志记录  

时间: 2024-09-18 10:26:01

SQL SERVER 收缩数据库与批量收缩详解的相关文章

SQL Server 2016 Alwayson新增功能图文详解

概述 SQLServer2016发布版本到现在已有一年多的时间了,目前最新的稳定版本是SP1版本.接下来就开看看2016在Alwyson上做了哪些改进,记得之前我在写2014Alwayson的时候提到过几个需要改进的问题在2016上已经做了改进. 一.自动故障转移副本数量 在2016之前的版本自动故障转移副本最多只能配置2个副本,在2016上变成了3个. 说明:自动故障转移增加到三个副本影响并不是很大不是非常的重要,多增加一个故障转移副本也意味着你的作业也需要多维护一个副本.重要程度(一般).

SQL Server 2005升级的十个步骤详解

server|详解 一.证明升级的必要性 找到进行SQL Server 2005升级的关键因素也许很简单,但要说服技术和业务管理人员进行实施却是个难题.调查和教育是良好的开端.要考虑目前的平台遇到过的所有问题,然后确定单单SQL Server 2005(或者连同其他额外产品)会不会解决业务和技术上的难题.把调查结果汇报给上层管理人员. 二.成本和投资回报 升级决策的一个方面免不了归结为将成本与时间跟业务改进与竞争优势进行比较.要找出升级带来的实际成本和效益很难,因为成本和效益都分为有形的和无形的

SQL Server 2005 安装图解(图文详解+全程截图)

去年暑假刚毕业的时候我去了电信实业工作,做了几个月的.NET开发,数据库用的就是SQL Server,不过是SQL Server 2000.说真的我讨厌做开发,那段经历也是我不愿去回想的,没有任何乐趣.SQL Server 2000我安装过好几次,SQL Server 2005我就安装过两次,两个版本的安装过程有很大不同.当然我在安装之前首先是参考了专家的教程.小站已经有网友跟我提过出一个SQL Server 2005安装教程.今天就分享一下安装的方法和过程,以图文的形式,一步一步详细讲解. 一

SQL Server解析XML数据的方法详解_MsSql

本文实例讲述了SQL Server解析XML数据的方法.分享给大家供大家参考,具体如下: --5.读取XML --下面为多种方法从XML中读取EMAIL DECLARE @x XML SELECT @x = ' <People> <dongsheng> <Info Name="Email">dongsheng@xxyy.com</Info> <Info Name="Phone">678945546</

关于SQL Server 事务、异常和游标详解(1/3)

本教程来说一下关于SQL Server 事务.异常和游标的事情下面来看教程,希望对你有帮助. 1. 事务的特点         事务有若干条T-SQL指令组成,并且所有的指令昨晚一个整体提交给数据库教程系统,执行时,这组指令要么全部执行完成,要么全部取消.因此,事务是一个不可分割的逻辑单元.           事务有4个属性:原子性(Atomicity).一致性(Consistency).隔离性(Isolation)以及持久性(Durability),也称作事务的ACID属性.        

SQL Server 2014 数据内存优化表详解

不同于disk-based table,内存优化表驻留在内存中,使用 Hekaton 内存数据库引擎实现.在查询时,从内存中读取数据行:在更新时,将数据的更新直接写入到内存中.内存优化表能够在disk上维护一个副本,用于持久化数据集. Memory-optimized tables reside in memory. Rows in the table are read from and written to memory. The entire table resides in memory.

SQL Server解析XML数据的方法详解

本文实例讲述了SQL Server解析XML数据的方法.分享给大家供大家参考,具体如下: --5.读取XML --下面为多种方法从XML中读取EMAIL DECLARE @x XML SELECT @x = ' <People> <dongsheng> <Info Name="Email">dongsheng@xxyy.com</Info> <Info Name="Phone">678945546</

Navicat远程连接SQL Server并转换成MySQL步骤详解

前言 最近项目中遇到用 SQL Server的程序,以前没用过这个数据库,于是尝试将其转换为 MySQL 的格式,可是不想在本地安装 SQL Server,于是决定在一个远程的 Windows 服务器上安装,并在本地连接它,然而在实现过程中遇到了诸多问题,记录于此.方便自家或者大家在需要的时候参考借鉴,下面来一起看看吧. 环境信息 先说一下环境,服务器的系统是 Windows Server 2016 Datacenter,数据库是 SQL Server 2016 Express. 本地这面是 W

深入sql server 2005 万能分页存储过程的详解

–建立主表临时表CREATE TABLE #temp(rownumber bigint,orderseqno VARCHAR(36),goodsname VARCHAR(50),companyname VARCHAR(100)) –建立子表临 时表CREATE TABLE #detail(orderseqno VARCHAR(36),detailid UNIQUEIDENTIFIER,unitprice DECIMAL(12,2),Qty int) –插入主表数据到主表临时表insert int