达梦数据库表空间损坏问题处理

测试数据库重启报如下的错:

[dmdba@dsc3 bin]$ ./DmServiceDMSERVER start

Starting DmServiceDMSERVER: ./DmServiceDMSERVER: line 413:  2834 Floating point exception(core dumped) eval exec "\"$EXEC_PROG_FULL_PATH\"" "$STARTUP_PARAMS" -noconsole $TMP_START_MODE > "$SERVICE_LOG_FILE" 2>&1
                                                           [ FAILED ]
file dm.key not found, use default license!
version info: develop
DM Database Server x64 V8 1-2-38-21.07.09-143359-10018-ENT  startup...
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
Database mode = 0, oguid = 0
License will expire on 2022-07-09
file lsn: 24388
ndct db load finished

查看日志

2021-11-10 09:58:22.421 [FATAL] database P0000002834 T0000000000000002834  fil_io try to R file(5, 0) beyond size. path:/dmdata/DAMENG/hiv_01.dbf size:16 offset:16
2021-11-10 09:58:22.421 [FATAL] database P0000002834 T0000000000000002834  code = -2, dm_sys_halt now!!!
2021-11-10 09:58:22.421 [INFO] database P0000002834 T0000000000000002834  total 2 rfil opened!

从日志发现,表空间/dmdata/DAMENG/hiv_01.dbf出现了问题,导致数据库启动校验数据库一致性时出错。

在数据库没有备份的情况恢复数据库

1.将控制文件转换成文本文件
切换到数据安装路径 ,执行 ./dmctlcvt help 可以查看到 dmctlcvt 工具的具体情况,如下所示:
[dmdba@dsc3 bin]$ ./dmctlcvt help

DMCTLCVT V8

格式: ./dmctlcvt KEYWORD=value
注意: 控制文件名称必须指定为dm.ctl、dmmpp.ctl、dss.ctl

关键字              说明
--------------------------------------------------------------------------------
TYPE                1 转换控制文件为文本文件(源文件路径中控制文件名称必须是dm.ctl或dmmpp.ctl或dss.ctl)
                    2 转换文本文件为控制文件(目标文件路径中控制文件名称必须是dm.ctl或dmmpp.ctl或dss.ctl)
SRC                 源文件路径
DEST                目标文件路径
DCR_INI             dmdcr.ini文件路径
DFS_INI             dmdfs.ini文件路径
HELP                打印帮助信息

示例:
./dmctlcvt TYPE=1 SRC=/opt/dmdbms/data/dameng/dm.ctl DEST=/opt/dmdbms/data/dameng/dmctl.txt
./dmctlcvt TYPE=2 SRC=/opt/dmdbms/data/dameng/dmctl.txt DEST=/opt/dmdbms/data/dameng/dm.ctl

转化控制文件为文本文件

[dmdba@dsc3 bin]$ ./dmctlcvt TYPE=1 SRC=/dmdata/DAMENG/dm.ctl

DEST=/dmdata/DAMENG/dmctl.txt
DMCTLCVT V8
convert ctl to txt success!

在文本文件中删除hiv表空间的路径信息:

在这里插入图片描述

[dmdba@dsc3 bin]$ ./DmServiceDMSERVER start
Starting DmServiceDMSERVER:                                [ OK ]
[dmdba@dsc3 bin]$ 
已用时间: 17.339(毫秒). 执行号:0.
SQL> alter tablespace hiv add datafile '/dmdata/DAMENG/hiv_02.dbf' size 512 autoextend on;
操作已执行
已用时间: 24.455(毫秒). 执行号:601.
SQL> 
SQL> 
SQL> select path from v$datafile;

行号     PATH                     
---------- -------------------------
1          /dmdata/DAMENG/SYSTEM.DBF
2          /dmdata/DAMENG/ROLL.DBF
3          /dmdata/DAMENG/TEMP.DBF
4          /dmdata/DAMENG/MAIN.DBF
5          /dmdata/DAMENG/MAIN.DBF
6          /dmdata/DAMENG/hiv_02.dbf

6 rows got

已用时间: 0.439(毫秒). 执行号:602.
SQL> 

使用user1用户,测试在hiv表空间建表,插入数据。

[dmdba@dsc3 bin]$ ./disql user1/user11234

服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 3.168(ms)
disql V8
SQL> desc t1;       

行号     NAME TYPE$       NULLABLE
---------- ---- ----------- --------
1          ID   INTEGER     Y
2          NAME VARCHAR(40) Y
3          AGE  INTEGER     Y

已用时间: 64.130(毫秒). 执行号:700.
SQL> 
SQL> insert into t1 values(1,'CHENLINLONG',20);
连接丢失

在表空间写入数据时,导致数据服务宕机,数据库中任然存在不一致问题。

继续处理存在的问题

查看用户默认的表空间
SQL> select username,default_tablespace from dba_users;

行号     USERNAME   DEFAULT_TABLESPACE
---------- ---------- ------------------
1          SYSSSO     SYSTEM
2          USER1      HIV
3          SYSDBA     MAIN
4          SYS        SYSTEM
5          SYSAUDITOR SYSTEM


已用时间: 24.271(毫秒). 执行号:503.

删除hiv表空间上对应的用户及hiv表空间

SQL> drop user user1 cascade;
SQL> drop tablespace hiv;

重新创建hiv表空间 及创建用户等

SQL> create tablespace hiv datafile '/dmdata/DAMENG/hiv_01.dbf' size 512 autoextend on;
操作已执行
已用时间: 48.577(毫秒). 执行号:508.
SQL> 
重新创建用户,并指定用户默认表空间为hiv
SQL> create user user1 identified by user11234 default tablespace hiv;
操作已执行
已用时间: 19.690(毫秒). 执行号:509.
SQL> 

使用user1用户,测试在hiv表空间建表,插入数据。


[dmdba@dsc3 bin]$ ./disql user1/user11234

服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 2.719(ms)
disql V8
SQL> create table t1(id int,name varchar(40),age int);
操作已执行
已用时间: 29.895(毫秒). 执行号:600.
SQL> insert into t1 values(1,'XIANMING',20);
影响行数 1

已用时间: 3.766(毫秒). 执行号:601.
SQL> select * from t1;

行号     ID          NAME     AGE        
---------- ----------- -------- -----------
1          1           XIANMING 20

已用时间: 1.901(毫秒). 执行号:602.
SQL> commit;
操作已执行
已用时间: 1.158(毫秒). 执行号:603.
SQL> 

表空间损坏问题处理完成,但是这样操作会造成数据丢失,数据丢失是企业不能接受的,因此,数据备份,是dba的重中之重。

更多资讯请上达梦技术社区了解:https://eco.dameng.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值