达梦数据库插入数据失败及其表空间操作示例

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

428 16:08:20 gchsrv12 systemd[1]: Starting DM Instance Service...
428 16:08:35 gchsrv12 DmServicedmserver[273978]: [39B blob data]
428 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;
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值