达梦单机数据库服务器磁盘空间占满问题

时间:2024-04-03 13:42:00

首先说一下关于达梦数据库中用户表空间数据文件磁盘占用问题,在达梦数据库中,用户表空间是不能回缩的,即使删除掉表空间中的表,对应的数据文件在磁盘中的大小不会变小,但是数据文件中的可用空间会变大。每个数据文件的大小以及可用空间大小可以通过V$DATAFILE查询:

SELECT PATH,TOTAL_SIZE,FREE_SIZE,PAGE_SIZE FROM V$DATAFILE;

其中TOTAL_SIZE和FREE_SIZE的单位为页数,PAGE_SIZE为页大小,单位为BYTE。

达梦系统表空间中,TEMP表空间的大小在每次数据库重启后会回缩。

 

然后开始讲单机情况下,服务器磁盘空间被占满的处理方法,可以分为以下两种情况:

  1. 服务器磁盘空间被占满,但数据库服务还在,执行数据插入操作时报错“磁盘空间不足”;
  2. 服务器磁盘空间被占满,导致数据库服务异常终止;

对于第一种情况,解决方法比较简单:

首先给服务器加存储,存储挂载步骤及开机自动挂载这里不详细展开,需要注意的是,开机自动挂载一定要配置,避免服务器重启后磁盘没挂上导致数据库异常。

存储挂载完成后(假设挂在了/data2目录下),需要修改该目录的所属用户及组信息(注意,如果服务是用root启动则不用修改,但一般建议服务使用dmdba用户启动):

chown -R dmdba:dinstall /data2

然后,使用管理工具连接数据库,右键查看每个表空间的属性,找出空间使用率较高的表空间(我这里是测试环境,空间占用率都不高,一般磁盘满的情况下,会有表空间的使用率达到百分之九十以上):

达梦单机数据库服务器磁盘空间占满问题

达梦单机数据库服务器磁盘空间占满问题

找出空间使用率较高的表空间之后,在对应的表空间上右键、修改、添加数据文件:

达梦单机数据库服务器磁盘空间占满问题

文件路径写新磁盘挂载路径+数据文件名,如:/data2/MAIN_02.DBF,文件大小可以不用修改,自动扩充改为打开,剩下的参数也不用修改。然后点击确定。

对所有使用率较高的表空间重复以上操作即可。操作完成后,去操作系统上检查新创建的数据文件是否存在。

 

对于第二种情况,当数据库服务已经异常退出了,首先查看服务器上有没有可以删除的文件,如冗余的备份、归档文件等(注意,数据库目录下一般会有两个后缀为.log的文件,默认名字是DAMENG01.log和DAMENG02.log,不能删!!不能删!!!),清理出一部分空间后再试着重启数据库服务,看能否正常启动。若能,则转上述情况一处理;若不能,则按以下步骤操作:

首先还是挂载存储、配置开机自动挂载、修改挂载目录的所属用户和组。

然后找到原来的数据库目录,用du -sh *.DBF查看每个数据文件的大小,挑选一到两个较大但又不是特别大的DBF文件,用cp命令拷贝到新挂载的路径下(用cp!不要用mv!),拷贝完成后,再次修改新挂载路径的所属用户和组为dmdba:dinstall。

然后,进入数据库bin目录,使用dmctlcvt工具,将dm.ctl文件(位于数据库目录下,和dm.ini同一目录)转换成文本格式,如:

./dmctlcvt type=1 src=/opt/dameng/data/DAMENG/dm.ctl dest=/opt/dmctl.txt

注意:dmctlcvt工具的用法不同版本可能不一样,可以使用./dmctlcvt help来查看具体用法。

打开转换之后的dmctl.txt文件,找到之前cp的数据文件,修改原路径为cp之后的路径。修改完成之后保存退出。

然后将原来数据库目录下的dm.ctl文件备份一下,如:mv dm.ctl dm_bak.ctl

然后再回到数据库bin目录下,将修改之后的dmctl.txt再使用dmctlcvt工具转换成ctl文件,如:

./dmctlcvt type=2 src=/opt/dmctl.txt dest=/opt/dameng/data/DAMENG/dm.ctl

转换完成后,进入数据库目录,修改新生成的dm.ctl文件的所属用户及组:

chown -R dmdba:dinstall dm.ctl

然后启动数据库服务。这时,服务应该能正常启动了。

使用管理工具连接数据库,查询V$DATAFILE,确认移动之后的数据文件路径准确,这时可以去源路径下删除已经移走的数据文件了(注意不要删错了!!!!

然后可以继续使用情况一中的方式,为其它空间使用率较高的表空间新加数据文件到新路径下。

 

OK,至此圆满解决。