我在Windows服务器上具有64位SQL Server 2016(v13.0.4001.0)。该数据库由7个表组成,其中6个表非常小(带有配置的几行)和一个包含数据的主表,未与其他表映射。
昨天我遇到了错误
- 无法为数据库'dbname'中的对象'dbo.table'。'PK_table'分配空间,因为'PRIMARY'文件组已满。
因此,我正在寻找解决该问题的最简单方法(对此我是个新手,这将是找到简单解决方案的好方法。)
我的期望:我需要将db(或我的主表)的大小减小2-3 GB。这个地方足够我的应用程序工作1-2年。
我发现的选项:
MS共享开发人员。版本的SQL Server https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-clean-db-free-space-transact-sql?view=sql-server-2017,并且没有10gb的限制。这有点困难,因为我必须在8台计算机上手动安装和设置它。我已经尝试过了,但这并不容易,因为我遇到了这个错误。
使用收缩。我不能完全确定对主数据是否安全,因为我仅将其用于较早的日志。但据我所知,它对我有用,因为我的数据库可以工作数年,无需任何外部操作。我的意思是没有人使用它\清除它\等。
我也不确定,但是我发现了sp_clean_db_free_space
(https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-clean-db-free-space-transact-sql?view=sql-server-2017)。通过描述,我知道它可以用于我的问题。也许我错了。
关于我的主表:
exec sp_spaceused <table_name>
来自ssms的表的通用报告结果:
答案 0 :(得分:0)
@SeanLange谢谢,您是对的。删除一些数据后,该文件夹中db的物理大小没有变化,但是异常消失了。因此,没有使用缩小和其他方法。但是psysicall分配的磁盘空间在尝试过程中让我有些困惑。