公司购买了一套内部使用的 MES 系统。使用后,隔一段时间就会出现系统卡顿的情况,需要开发商进行远程解决。 他们每次都是执行了几个 Oracle 数据库的操作命令,然后系统就恢复了。
由于我只有 MySQL 的使用经验,对 Oracle 数据库完全不了解,所以记录一下,方便以后参考。
奇怪的 alter 语句
alter tablespace SOME_DATA_1 add datafile 'E:\some_path\some_file.dbf' size 3000m;
alter tablespace SOME_DATA_2 add datafile 'E:\some_path\another_file02.DBF' size 1000M AUTOEXTEND ON NEXT 500M MAXSIZE 2000M;
tablespace 的概念
表空间(Tablespace)是 Oracle 数据库中最核心的存储逻辑结构,它是组织和管理数据库存储的逻辑容器,将物理存储(数据文件)与逻辑存储(数据库对象)连接起来。
我是数据库小白,第一次听说表空间这个概念🥲。
使用表空间的好处包括,仅仅是我的理解:
- 添加表空间文件时,可以指定文件的路径和大小,非常方便进行服务器磁盘的扩容。例如,一个表空间可以包含多个数据文件,分布在不同的磁盘上,以后添加新硬盘时,可以直接将新的数据文件添加到现有的表空间中。省去了迁移数据的麻烦。
- 预分配存储空间,减少碎片化,提高性能。
当然,总感觉这是开发商给预留的一个坑,等以后系统数据量大了,再来收取一笔维护费用😏
扩容表空间的方案有哪些
因为这套 MES 系统的免费维护期只有两年,过了这个时间段后,开发商就不再提供免费的远程支持服务了。所以,需要能够自己动手解决这种表空间扩容的问题。
于是我问了一下 DeepSeek:
如果表空间使用一段时间后,达到了文件大小上限,该如何处理。以上面两个文件为例
有三种解决方案:
- 扩展现有文件
- 添加新文件
- 重建表空间
方案一:扩展现有文件 (未采用)
使用场景是,磁盘空间充足,单文件管理。
- 优点是,操作简单,快速。
- 缺点是,单文件可能会变得非常大,管理和备份变得复杂。
所以,我没有采用这个方案。
方案二:添加新文件 (采用)
使用场景是,磁盘空间分布在多个磁盘上。即需要分布I/O,多磁盘。
- 优点是,分布I/O,提高性能;灵活利用多个磁盘空间。
- 缺点是,文件数量增加,管理多个文件可能增加复杂性。
但是,我觉得这个是最适合我这种小白用户的方案。只需要复制上面的 alter 语句,给文件名添加一个新的编号即可。例如:
alter tablespace SOME_DATA_1 add datafile 'E:\some_path\some_file_02.dbf' size 3000m;
执行命令 ALTER TABLESPACE ADD DATAFILE 之后,还需要执行其他操作才能生效么?不需要执行其他额外操作,该命令会立即生效。
添加数据文件是 oracle 自动创建文件,还是执行命令前需要我手动在系统里创建?Oracle 会自动创建数据文件,不需要手动预先在操作系统中创建文件。
这个心智负担最低,唯一的问题是,如何做成自动化呢?
第一步还是,先做成每日自动监控表空间使用率的脚本,当使用率达到某个阈值时,发送邮件通知管理员比较好。
或者直接集成到二次开发的 MES 统计系统中,在报表下方自动缀上“当前表空间使用率 xx%,请及时联系管理员扩展表空间”。
方案三:重建表空间 (未采用)
这个看起来不适合我这种小白用户,只有严重碎片,性能问题时才考虑。所以直接略过。
关于作者 🌱
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式