SQL Server 自动增长过大

一、背景

我们遇到的问题如下图所示:自动增长无端端就按照这样的比例进行增长;

(Figure1:问题所在)

尝试使用SSMS修改自动增长值,就会出现下面的错误:

(Figure2:错误信息)

遇到上面的问题,我们需要解决两个问题:

1. 把数据文件收缩到一定范围内的值,腾出磁盘空间;

2. 重新设置自动增长的值,可以按照百分比,也可以使用指定的空间大小,我个人倾向使用n*1024M这样的值,仅供参考;

3. 如果有需要你也可以进行日志文件的收缩;

二、解决过程

1. 使用下面的脚本修改自动增长的值:

--1024ALTER DATABASE [DataBaseName]MODIFY FILE ( NAME = N‘FileName‘, FILEGROWTH = 1024MB )GO

(图3:效果)

上面是执行了按照1024MB的空间执行的效果,如果你想用百分比的可以使用下面的SQL:

--10%ALTER DATABASE [DataBaseName]MODIFY FILE ( NAME = N‘FileName‘, FILEGROWTH = 10%)GO

2. 使用下面的脚本收缩数据:(默认是是以MB作为单位的)

--12000MBUSE [DataBaseName]GODBCC SHRINKFILE (N‘FileName‘ , 12000)GO

(Figure4:效果)

(Figure5:效果)

3. 如果有需要你也可以进行日志文件的收缩:(需要简单模式,如果在完整模式下,你需要进行的是日志文件的备份)

--sql server 2005BACKUP LOG [DataBaseName] WITH NO_LOGDBCC SHRINKDATABASE ([DataBaseName],TRUNCATEONLY)--sql server 2008ALTER DATABASE [DataBaseName] SET RECOVERY SIMPLEGO-- 收缩DBCC SHRINKFILE (2,30)  --30单位为M,日志文件的大小GO -- 更改模式为FULL ,再改回来,如果本身就已是simple,那就不必要了ALTER DATABASE [DataBaseName] SET RECOVERY FULLGO

时间: 2024-10-13 05:34:10

SQL Server 自动增长过大的相关文章

【Transact-SQL】SQL Server自动把left join自动转化为inner join、以及关联时的数据重复问题

原文:[Transact-SQL]SQL Server自动把left join自动转化为inner join.以及关联时的数据重复问题 1.SQL Server自动把left join自动转化为inner join的问题: 下面的两个语句都是left join的,但是一个却转化成了 inner join drop table a,B go create table a(id int) insert into a select 1 union all select 2 create table b

SQL Server 自动重建出现碎片的索引

1.索引碎片的产生? 由于在表里大量的插入.修改.删除操作而使索引页分裂.如果索引有了高的碎片,有两种情况,一种情况是扫描索引需要花费很多的时间,另一种情况是在查询的时候索引根本不使用索引,都会导致性能降低. 2.碎片类型分为: 2.1 内部破碎 由于索引页里的数据插入或修改操作而发生,以数据作为稀疏矩阵的形式的分布而结束,这将导致数据页的增加,从而增加查询时间. 2.2外部破碎 由于索引/数据页的数据插入或修改而发生,以页码分离和在文件系统里不连贯的新的索引页的分配而结束,数据库服务器不能利用

SQL Server自增长列插入指定值 -- SET IDENTITY_INSERT ON|OFF(转)

想要将值插入到自动编号(或者说是标识列,IDENTITY)中去,需要设定 SET IDENTITY_INSERT 示例: 1.首先建立一个有标识列的表:CREATE TABLE products (id int IDENTITY PRIMARY KEY, product varchar(40)) 2.尝试在表中做以下操作:INSERT INTO products (id, product) VALUES(3, 'garden shovel') 结果会导致错误:“当 IDENTITY_INSERT

SQL Server日志文件过大 大日志文件清理方法 不分离数据库

SQL Server日志文件过大    大日志文件清理方法 ,网上提供了很多分离数据库--〉删除日志文件-〉附加数据库 的方法,此方法风险太大,过程也比较久,有时候也会出现分离不成功的现象.下面的方式是不需要做数据库分离和附加操作的. SQL 2008收缩清空日志方法: 1.在SQL2008中清除日志就必须在简单模式下进行,等清除动作完毕再调回到完整模式,一定必务要再改回完整模式,不然数据库就不支持时间点备份了.1).选择数据库–属性-选项-恢复模式–选择简单.2).收缩数据库后,再调回完整.2

Entity Framewrok 7beta7中不同版本sql server自动生成分页sql语句的问题

在EF中,使用linq进行分页是很方便的,假如我们有一个EMP表,结构如下: public class Emp { [Key] public Guid No { get; set; } public int Age { get; set; } [Required] [StringLength(50)] public string Name { get; set; } } 如果我们进行分页的话,一般使用Skip和Take方法,这里一行最简单的代码如下: mContext.Emp.OrderBy(e

SQL的自动增长

Auto-increment 会在新记录插入表中时生成一个唯一的数字. AUTO INCREMENT 字段 我们通常希望在每次插入新记录时,自动地创建主键字段的值. 我们可以在表中创建一个 auto-increment 字段. 用于 MySQL 的语法 下列 SQL 语句把 "Persons" 表中的 "P_Id" 列定义为 auto-increment 主键: CREATE TABLE Persons ( P_Id int NOT NULL AUTO_INCREM

SQL Server自动备份脚本

SQL Server备份脚本: 脚本周三全备份,其他时间差异备份. declare @device varchar(30); declare @filename varchar(50); declare @datetime varchar(50); declare @weekname varchar(50); declare @weeknametmp varchar(4); declare @weekday int; set @weekname=datename(weekday,getdate(

SQL Server 自增长清除

1.删除表中的所有的数据的同时,将自动增长清零. (   truncate table TableName   ) 2.不删除表的数据,直接重置自动增长的值.(   DBCC CHECKIDENT('TableName', RESEED, 0)   )  

SQL SERVER 自增长标识列(Auto Increment Identity)的标识种子复位

DBCC CHECKIDENT('TableName', RESEED, 0) http://stackoverflow.com/questions/16971/how-do-i-reset-an-increment-identitys-starting-value-in-sql-server