达梦数据库插入数据失败及其表空间操作示例
武汉达梦数据库数记录插入失败问题排查及其表空间操作简介。
·
1、数据插入失败
武汉达梦数据库存储(插入)一定数量数据记录后,无法再继续存储(插入)新的数据记录。查看数据库实例及服务,其运行均正常,disql
连接查询也正常。
2、故障排查、定位
查看创建表空间建表脚本,发现初始创建的表空间大小和表空间最大大小都特表小、createtablespace.sql
脚本内容如下:
create tablespace hisdb
datafile '/dmdata/data/dmdb/hisdb.dbf'
size 512 /*- 默认大小为512MB -*/
autoextend on
next 1024 maxsize 4096; /*- 最大大小为4096MB -*/
quit;
A、详细分析
上述脚本按实际环境进行调整,至少包含两方面的内容:
- 第一是
"HISDB"
表空间的默认大小及最大大小。 - 第二是 表空间文件
"/dmdata/data/dmdb/hisdb.dbf"
位置很重要,结合磁盘空间划分进行规划。
比如,在搭建的测试环境中,磁盘空间分配情况如下:
[mage@gchsrv12 ~]$ df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 63G 0 63G 0% /dev
tmpfs 63G 0 63G 0% /dev/shm
tmpfs 63G 162M 63G 1% /run
tmpfs 63G 0 63G 0% /sys/fs/cgroup
/dev/sda4 55G 19G 34G 37% /
tmpfs 63G 0 63G 0% /tmp
/dev/sda3 907G 8.9G 852G 2% /home
/dev/sda2 19G 326M 19G 2% /boot
/dev/sda1 9.4G 7.7M 9.3G 1% /boot/efi
/dev/sda5 56G 753M 56G 2% /var
tmpfs 13G 0 13G 0% /run/user/993
tmpfs 13G 0 13G 0% /run/user/1000
tmpfs 13G 0 13G 0% /run/user/0
[mage@srv11 ~]
表空间文件挂载的 "/"
根目录空间为 55GB
,原理上讲不满足历史数据存储空间要求。
如果 扩展 表空间文件 "/dmdata/data/dmdb/hisdb.dbf"
,最大只能扩容到 34GB
剩余空间。
扩展表空间文件大小
通过 DBA
管理员账户登录达梦数据库(disql SYSDBA/passwd@10.16.1.11
),然后进行扩容操作。
① 查看表空间容量及使用率
- 查看所有表空间的名称及大小
SELECT dm_name, dm_size FROM dba_data_files;
- 查看表空间的使用情况
SELECT
df.tablespace_name,
df.file_id,
df.file_name,
df.bytes/1024/1024 AS "Size (MB)",
(df.bytes - free.bytes_free)/1024/1024 AS "Used (MB)",
free.bytes_free/1024/1024 AS "Free (MB)",
round((df.bytes - free.bytes_free)/df.bytes, 2) * 100 AS "Used Percentage"
FROM
(SELECT
tablespace_name,
file_id,
SUM(bytes) AS bytes_free
FROM
dba_free_space
GROUP BY
tablespace_name,
file_id) free
RIGHT JOIN
dba_data_files df
ON
free.tablespace_name = df.tablespace_name
AND free.file_id = df.file_id
ORDER BY
df.tablespace_name;
查询效果如下:
行号 TABLESPACE_NAME FILE_ID FILE_NAME Size (MB) Used (MB) Free (MB) Used Percentage
---------- --------------- ----------- ---------------------------- ----------- --------- --------- -------
1 HISDB 1 /dmdata/data/dmdb/hisdb1.dbf 30000 1 29999 0
2 HISDB 0 /dmdata/data/dmdb/hisdb.dbf 4096 3520 576 86
3 MAIN 0 /dmdata/data/dmdb/MAIN.DBF 128 3 125 2
4 PARADB 0 /dmdata/data/dmdb/paradb.dbf 1600 1402 198 88
5 ROLL 0 /dmdata/data/dmdb/ROLL.DBF 1408 135 1273 10
6 SYSTEM 0 /dmdata/data/dmdb/SYSTEM.DBF 212 134 78 63
7 TEMP 0 /dmdata/data/dmdb/TEMP.DBF 1024 2 1022 0
7 rows got
已用时间: 21.686(毫秒). 执行号:48102.
SQL>
- 查看所有表空间的自动扩展设置
SELECT
df.tablespace_name,
df.file_id,
df.file_name,
df.autoextensible,
df.increment_by
FROM
dba_data_files df;
查询结果如下:
行号 TABLESPACE_NAME FILE_ID FILE_NAME AUTOEXTENSIBLE INCREMENT_BY
---------- --------------- ----------- ---------------------------- -------------- ------------
1 ROLL 0 /dmdata/data/dmdb/ROLL.DBF YES 0
2 PARADB 0 /dmdata/data/dmdb/paradb.dbf YES 0
3 HISDB 1 /dmdata/data/dmdb/hisdb1.dbf YES 0
4 SYSTEM 0 /dmdata/data/dmdb/SYSTEM.DBF YES 0
5 MAIN 0 /dmdata/data/dmdb/MAIN.DBF YES 0
6 HISDB 0 /dmdata/data/dmdb/hisdb.dbf YES 1024
7 TEMP 0 /dmdata/data/dmdb/TEMP.DBF YES 0
7 rows got
已用时间: 17.254(毫秒). 执行号:202601.
SQL>
② 修改表空间大小
修改表空间大小
创建规则:
alter tablespace 表空间名 resize datafile '数据文件路径' to 数据文件大小(单位为mb);
修改TEST表空间数据文件大小为60mb(初始大小为32MB)
alter tablespace TEST resize datafile 'C:\dmdbms\data\TEST\TEST.DBF' to 60;
修改表空间开启自动增长,增长步长,最大表空间
规则如下:
alter tablespace 表空间名 datafile '数据文件路径' autoextend on next 增长步长 maxsize 文件最大值
修改表空间开启自动增长,增长步长为3mb,最大表空间为70mb
alter tablespace TEST datafile 'C:\dmdbms\data\TEST\TEST.DBF' autoextend on next 3 maxsize 70;
③ 增加表空间大小
增加表空间下的数据文件
规则如下:
alter tablespace 表空间名 add datafile '数据文件路径' size 数据文件大小(单位为mb);
在TEST表空间下添加 TEST\TEST_1.DBF 数据文件大小为60mb
alter tablespace TEST add datafile 'C:\dmdbms\data\TEST\TEST_1.DBF' size 60;
④ 案例
测试环境增加表空间操作。
- 先查看磁盘空间:
[mage@gchgsrv12 ~]$ df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 63G 0 63G 0% /dev
tmpfs 63G 0 63G 0% /dev/shm
tmpfs 63G 162M 63G 1% /run
tmpfs 63G 0 63G 0% /sys/fs/cgroup
/dev/sda4 55G 49G 3.8G 93% /
tmpfs 63G 0 63G 0% /tmp
/dev/sda3 907G 8.9G 852G 2% /home
/dev/sda2 19G 326M 19G 2% /boot
/dev/sda1 9.4G 7.7M 9.3G 1% /boot/efi
/dev/sda5 56G 753M 56G 2% /var
tmpfs 13G 0 13G 0% /run/user/993
tmpfs 13G 0 13G 0% /run/user/1000
tmpfs 13G 0 13G 0% /run/user/0
[mage@srv11 ~]$
- 增加表空间文件(增加
100GB
空间):
alter tablespace hisdb add datafile '/home/dmdba/dmdata/data/dmdb/hisdb2.dbf' size 102400;
执行结果如下:
[mage@gchsrv12 home]$ disql SYSDBA/passwd@10.16.1.11
服务器[10.16.1.11:5236]:处于普通打开状态
登录使用时间 : 2.242(ms)
disql V8
SQL>
SQL>
SQL>
SQL> alter tablespace hisdb add datafile '/home/dmdba/dmdata/data/dmdb/hisdb2.dbf' size 102400;
操作已执行
已用时间: 468.543(毫秒). 执行号:278301.
SQL>
再次查询表空间使用率:
数据库服务管理
① 查看服务状态
[root@gchsrv12 home]#
[root@gchsrv12 home]# systemctl status DmServicedmserver.service
● DmServicedmserver.service - DM Instance Service
Loaded: loaded (/usr/lib/systemd/system/DmServicedmserver.service; enabled; vendor preset: disabled)
Active: active (running) since Sun 2024-04-28 16:08:35 CST; 1h 11min ago
Process: 273978 ExecStart=/home/dmdba/dmdbms/bin/DmServicedmserver start (code=exited, status=0/SUCCESS)
Main PID: 273999 (dmserver)
Tasks: 208
Memory: 6.7G
CGroup: /system.slice/DmServicedmserver.service
└─273999 /home/dmdba/dmdbms/bin/dmserver path=/dmdata/data/dmdb/dm.ini -noconsole
4月 28 16:08:20 gchsrv12 systemd[1]: Starting DM Instance Service...
4月 28 16:08:35 gchsrv12 DmServicedmserver[273978]: [39B blob data]
4月 28 16:08:35 gchsrv12 systemd[1]: Started DM Instance Service.
[root@gchsrv12 home]#
② 重启数据库服务
[root@gchsrv12 home]# systemctl restart DmServicedmserver.service
③ 使用SQL命令将数据库实例离线
ALTER DATABASE hisdb OFFLINE;
④ 使用SQL命令将数据库实例恢复为在线状态
ALTER DATABASE hisdb ONLINE;
更多推荐
已为社区贡献7条内容
所有评论(0)