注册
数据库表空间dbf文件设置最大上限空间撑满100%后,掉电或异常宕机后回滚文件无法写入dbf空间无法正常启动服务问题探索
专栏/技术分享/ 文章详情 /

数据库表空间dbf文件设置最大上限空间撑满100%后,掉电或异常宕机后回滚文件无法写入dbf空间无法正常启动服务问题探索

DM_myysp 2024/03/12 1296 2 0
摘要

前言:

在一些项目中,很多使用达梦数据库,会在数据库中对某些指定用户的模式的表空间大小进行了最大大小限制。如果后期数据库将这个表空间的dbf全部撑满100%的时候,如果这个时候恰好数据库异常宕机,回滚roll文件比较大,存在大量回滚段,那么数据库在回滚的时候如果还要写入这些表空间dbf的数据,那么就会造成数据库无法写入被限制表空间dbf数据,而无法正常启动恢复服务。 目前能处理的办法可以将数据库先修改端口,然后将ctl控制文件里的跳过回滚文件参数屏蔽掉,同时修改所有dbf文件的限制大小为全部不限制。然后再重启数据库,然后再新添加表空间。然后在修改回端口,再恢复应用。
**** 特别注意:以上方法供学习测试环境使用,如果是生产环境,请联系达梦数据库工程师进行处置,以避免发生不可知风险。****

分析日志及问题处理措施:

如某项目中使用的数据库系统是一套DM的国产的HA系统,数据库从前一天晚上到第二天上午一直再进行重启,应用无法连上。查看日志报错如下:
故障截图和日志如下:
20XX-10-13 09:54:30 database T 140581912135456 DM Database Server x64 V7.1.3.132-Build(2014.08.20-47641trunc) startup…
20XX-10-13 09:54:34 database T 140581912135456 ep 0 set rac status to 1
20XX-10-13 09:54:34 database T 140581912135456 begin redo pwr log collect, last ckpt lsn: 40633582905 …
20XX-10-13 09:54:34 database T 140581912135456 redo pwr log collect finished
20XX-10-13 09:54:34 database T 140581912135456 arch file recv begin: arch_lsn: 40633783952, clsn: 40633783953
20XX-10-13 09:54:37 database T 140581912135456 rafil_file_create [/arch/dmarch/ARCHIVE_LOCAL1_20171013095434401.log] success
20XX-10-13 09:54:37 database T 140581912135456 arch file recv end: arch_lsn: 40633783953, clsn: 40633783953
20XX-10-13 09:54:37 database T 140581912135456 begin redo log recover, last ckpt lsn: 40633582905 …
20XX-10-13 09:54:37 database T 140581912135456 Apply redo log ok, 203066 ptx, begin_lsn: 40633582905, end_lsn: 40633783953
20XX-10-13 09:54:37 database T 140581912135456 redo log recover finished
20XX-10-13 09:54:37 database T 140581912135456 total redo 776353 rrec, 199843 rrec opt by pwr
20XX-10-13 09:54:37 database T 140581912135456 redo rrec used 249ms
20XX-10-13 09:54:37 database T 140581912135456 trx: 881517595 rollbacking…
20XX-10-13 09:54:38 database T 140581912135456 Tablespace [HA2_SPC] reserve free extents fail, check disk space or autoextend option!
20XX-10-13 09:54:54 database T 139984258774816 DM Database Server x64 V7.1.3.132-Build(2014.08.20-47641trunc) startup…
20XX-10-13 09:54:57 database T 139984258774816 ep 0 set rac status to 1
20XX-10-13 09:54:57 database T 139984258774816 begin redo pwr log collect, last ckpt lsn: 40633582905 …
20XX-10-13 09:54:57 database T 139984258774816 redo pwr log collect finished
20XX-10-13 09:54:58 database T 139984258774816 arch file recv begin: arch_lsn: 40633783953, clsn: 40633783954
20XX-10-13 09:55:01 database T 139984258774816 rafil_file_create [/arch/dmarch/ARCHIVE_LOCAL1_20171013095458156.log] success
20XX-10-13 09:55:01 database T 139984258774816 arch file recv end: arch_lsn: 40633783954, clsn: 40633783954
20XX-10-13 09:55:01 database T 139984258774816 begin redo log recover, last ckpt lsn: 40633582905 …
20XX-10-13 09:55:01 database T 139984258774816 Apply redo log ok, 203067 ptx, begin_lsn: 40633582905, end_lsn: 40633783954
20XX-10-13 09:55:01 database T 139984258774816 redo log recover finished
20XX-10-13 09:55:01 database T 139984258774816 total redo 776354 rrec, 199843 rrec opt by pwr
20XX-10-13 09:55:01 database T 139984258774816 redo rrec used 248ms
20XX-10-13 09:55:01 database T 139984258774816 trx: 881517595 rollbacking…
20XX-10-13 09:55:02 database T 139984258774816 Tablespace [HA2_SPC] reserve free extents fail, check disk space or autoextend option!

处理步骤:

通过以上日志看出,数据库回滚时已经无法再进行写入。此时可按如下步骤进行处理
1、首先停止ha系统,service openais stop,停止主备机ha系统,停止数据,然后修改主机dm.ini文件里port_num,把5236修改成5246。
2、备份好数据库控制文件dm.ctl,然后使用dmctlcvt工具,将dm.ctl文件转换成dm.txt文件。然后打开编辑,修改dm.txt文件里AUTOEXTEND=1,打开自动扩展。 同时修改maxsize属性为0,不限制。 然后在使用dmctlctv工具,将dm.txt转换成dm.ctl文件。
image.png
image.png
image.png
将受限表空间最大上限file_max_size暂时改为0,不限制
3、然后重启DM数据库,看数据库是否能够正常回滚后启动,然后检查表数据正常后,然后添加两个新的对应表空间dbf文件。
4、最后再将数据库停止,然后将dm.ini里port_num端口号改回5236,然后重启数据库,检查应用。
5、最后,可以通过客户端工具设置表空间,重新进行表空间上限设置恢复即可。

小结

通过以上不难看出,使用数据库的表空间限制时,我们应当及时做好表空间的数据文件的规划和及时定期的添加dbf文件,以防止类似问题。同时达梦也支持进行表空间等告警,可以设置告警阈值等提前进行处理,也不乏是一种方法。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服