在我们使用 SQL Server 数据库时经常会遇到 “存储空间不足”的问题。那么我们来分析一下此问题,并提出对应的解决方案。
![abba3b8b5ef081fbcd89279d88f82f54.png](https://i-blog.csdnimg.cn/blog_migrate/d48353bd520426e056071e8800bfb074.jpeg)
关于此问题需要首先查看SQL Server 的版本然后对应的来解决。因为针对不同的 SQL Server 版本它的最大内存,数据库大小,CPU核心数使用都是有限制的,我们以 SQL Server 2017 为例:
![1347d6978a04363d82ce3e8694769466.png](https://i-blog.csdnimg.cn/blog_migrate/53f749e59e83ba6c72cccbd4bd6ed80c.jpeg)
SQL Server 2017 版本对比
从上图中可以看出不同的版本都是有区别的,如果你使用的是 免费的SQL Server Express 版本,那么它的最大数据库大小被限制为:10GB,也就是说当你的数据库存储的数据高于10GB的时候就不会再向数据库中存储数据了。如果是这种情况那么需要将数据库文件进行分离,备份,然后才可以继续存储。关于如何分离,备份操作我们再下面会讲解。
如果不是使用的SQL Server Express 版本那么需要检查的内容较多,我们一步一步进行分析。
第1, 检查数据库文件所在磁盘是否存满;
首先登陆SSMS(SQL Server Management Studio),选择数据库后,选择"属性",然后选择"Files",可以在"Path"中看到当前数据库文件的存储路径。那么我们就要检查 C 盘是否已经被存满,当然也有可能是其他盘。一般我们在建立数据库时,需要修改此处的存储路径。
![9308866f8186e59c420d055c4d764209.png](https://i-blog.csdnimg.cn/blog_migrate/e71b16d5c7d25d30bb66aa1dba0ff56c.jpeg)
数据库文件路径
查看磁盘空间剩余大小可以使用 T-SQL 命令:
Exec master.dbo.xp_fixeddrives;
结果如下:
![e667305ab2f0c0e75ec6266827f04320.png](https://i-blog.csdnimg.cn/blog_migrate/63ff14711037ed5217c5e4b27eda544a.jpeg)
磁盘剩余空间查询
第2, 检查数据库文件是否被限制大小;
按照第一步打开"Files"属性,在"Autogrowth/Maxsize"中检查下图中文件是否有"Limited to"的文字,如果有,那么有可能是对应的文件已经达到此大小,无法写入数据了。可以在第一步中查看对应的文件是否已经达到限制的大小。
![5ef751f9fdc6b48ab4a3f4a20423f606.png](https://i-blog.csdnimg.cn/blog_migrate/69e5d0cdc3ffc63a5ead2968ac51ebd7.jpeg)
数据库文件是否限制大小
第3, 未限制情况下,对对应的数据库文件进行空间扩展;
重点:进行此操作前对数据库进行完整备份。
完整备份步骤:
1) 选择需要备份的数据库,点击"Tasks(任务)---Back Up(备份)"
![f382b91f7fbd3d2a6d34573052da217e.png](https://i-blog.csdnimg.cn/blog_migrate/4d3730e725ce8a36ed68f1f1c8e2e271.jpeg)
数据库备份
2) 选择备份类型为"完整",选择备份路径到其他盘,文件名为:文件名.bak,参考下图
![ad2f8e8041b9c4078d91c0995e2003e8.png](https://i-blog.csdnimg.cn/blog_migrate/199443a8d2a014d692765cfcc0fdcf34.jpeg)
完整模式及路径选择
![65bf3ccf2ffabf2c770795edc8fc392f.png](https://i-blog.csdnimg.cn/blog_migrate/57e4199698fa73325581a425a276f16b.jpeg)
文件名设置
完成备份后就是进行空间扩展。此处空间扩展分为多种情况。
如果是磁盘空间不足,且不想增加硬盘,如果以前的数据不需要查看,可以将当前的数据库删除,或者表删除,然后新建数据库,万事大吉,非常清爽。不过这种情况是不可能的。请看下一步。
如果磁盘空间不足,可以增加磁盘,那么有两种方法。
· 需要中断当前业务,对数据库进行分离/附加操作,具体步骤:
1. 对数据库进行分离;分离数据库就是将某个数据库从SQL Server数据库列表中删除,使其不再被SQL Server管理和使用,但该数据库的文件(.MDF)和对应的日志文件(.LDF)完好无损。分离成功后,就可以把该数据库文件(.MDF)和对应的日志文件(.LDF)拷贝到其它磁盘中保存。
1.1 分离之前,设置数据库为单个用户,并记住该数据库所在路径。
![81112698be870441c8c8aef112ee17ba.png](https://i-blog.csdnimg.cn/blog_migrate/aef0e79ec940b239aa74a47c77fbacd1.jpeg)
单用户设置
1.2 数据库分离,选择需要分离数据库,然后选择"Tasks(任务)---Detach(分离)",然后分离数据库页面选中"更新统计信息"复选框。若"消息"列中没有显示存在活动连接,则"状态"列显示为"就绪";否则显示"未就绪",此时必须勾选"删除连接"列的复选框。分离后资源管理器中数据库消失。
![8edb286d145b953757d9e49a388341fc.png](https://i-blog.csdnimg.cn/blog_migrate/580b1a7075a708fcdde3443912010077.jpeg)
数据库分离
![ce4429289c0c248f12b5d7a45eef515f.png](https://i-blog.csdnimg.cn/blog_migrate/ee9bed952b24e0030c5975c12423a78a.jpeg)
状态设置
1.2 数据库分离后拷贝到其他大容量的磁盘,然后进行数据库的附加,在数据库上右键,选择"Attach(附加)",在弹出的画面点击"添加",找到存储刚才分离后的文件的路径,选择其中的后缀名称是" .mdf "文件,附加后检查文件的路径是否正确。可以修改。
![7b05c6aca8abf5988f73e2a7b611b9f7.png](https://i-blog.csdnimg.cn/blog_migrate/906f828036f17fd663fa8eb1d2c5ecfa.jpeg)
数据库附加
![bdec62ddbccfbce5ab168ede51d0d8dc.png](https://i-blog.csdnimg.cn/blog_migrate/5636f0dac5712574dc7d79329cba4b12.jpeg)
选择MDF文件
![00a83dbb61210a1fa36b04955bf37b89.png](https://i-blog.csdnimg.cn/blog_migrate/37f8db575dea0bd154ce091feb4b86b6.jpeg)
附加
以上步骤就可以实现将现有的数据库文件转移到大容量的磁盘的方法。
而对于无需中断当前业务,对数据库进行扩展操作,以及在数据库被限制大小的情况如何对数据库进行扩展请关注我的专栏,我们会有更加详细的讲解和操作方法。