达梦数据库DM8表空间失效文件恢复

一、以下内容摘自《DM8系统管理员手册》

表空间文件失效检查
LINUX 操作系统中,被进程打开的文件仍可以在 OS 系统中被删除,因此存在 DM 数据文件可能被误删的风险。如果数据文件被删除,DM 系统能够及时检测出来,并立刻停止对其继续使用并通知用户。
在 dm.ini 中参数 FIL_CHECK_INTERVAL 的值指定 DM 系统检查数据文件是否仍存在的时间间隔。将其设为 0 表示不进行检查。
也可以通过系统过程 SP_FILE_SYS_CHECK()来手动的进行检查。系统一旦检测出某个表空间内的数据文件被删除,则与该表空间所有的操作都将会失败,并报错该表空间内有数据文件被删除。
 
表空间失效文件恢复
LINUX 系统中被删除的文件,只要其句柄没有被关闭,可以在 /proc/<pid>/fd 中找到其对应的文件副本。其中 <pid> 指打开该文件的进程 id
利用该方法,结合 OS 命令, DM 提供失效文件的恢复方案如下:
1 、 调用系统过程 SP_TABLESPACE_PREPARE_RECOVER(tablespace_name)准备进行恢复;
2 、 如果使用过程中 DM 报错表空间数据文件被删除,通过操作系统的 ps 命令找到当前
dmserver PID ps –ef|grepdmserver
3 、 使用操作系统 ls 命令查看被删除文件对应的副本: ls /proc/<PID>/fd–l,会发现被删除的文件后有 (deleted) 字样;
4、 使 用 操 作 系 统 的 cp 命 令 将 文 件 复 制 到 原 位 置 cpbak_fildata_file_path_dir
5 、 复制成功后,调用系统过程 SP_TABLESPACE_RECOVER(ts_name)完成表空间失效文件的恢复。
注意,要保证数据文件正确修复,需要保证在 SP_TABLESPACE_PREPARE_RECOVER后进行数据文件的复制。

二、实验过程

1、创建测试表空间、测试表

--创建测试表空间
SQL> create tablespace tbs datafile '/dm8/data/DAMENG/tbs.DBF' size 32;
操作已执行
已用时间: 175.973(毫秒). 执行号:507.

--检查数据文件状态
SQL> select path, STATUS$ from v$datafile;
行号     PATH                        STATUS$    
---------- --------------------------- -----------
1          /dm8/data/DAMENG/SYSTEM.DBF 1
2          /dm8/data/DAMENG/ROLL.DBF   1
3          /dm8/data/DAMENG/TEMP.DBF   1
4          /dm8/data/DAMENG/MAIN.DBF   1
5          /dm8/data/DAMENG/tbs.DBF    1
已用时间: 2.458(毫秒). 执行号:509.

--创建测试表
SQL> create table t1 tablespace tbs as select * from dba_objects;
操作已执行
已用时间: 00:00:01.411. 执行号:4.

2、查看dmserver 的 PID、查看测试表空间的数据文件的副本

--查看dmserver 的 PID
[dmdba@localhost DAMENG]$ ps -ef | grep dmserver
dmdba      1122      1  2 09:26 ?        00:00:17 /dm8/bin/dmserver /dm8/data/DAMENG/dm.ini -noconsole

--查看测试表空间的数据文件的副本
[dmdba@localhost DAMENG]$ ll -li /proc/1122/fd | grep tbs
30879 lrwx------ 1 dmdba dinstall 64 8月   3 09:40 12 -> /dm8/data/DAMENG/tbs.DBF

3、删除测试表空间的数据文件、查看测试表空间的数据文件的副本

--删除测试表空间的数据文件
[dmdba@localhost DAMENG]$ rm -rf /dm8/data/DAMENG/tbs.DBF

--查看测试表空间的数据文件的副本,被删除的文件后多了(deleted)字样
[dmdba@localhost DAMENG]$ ll -li /proc/1122/fd | grep tbs
30879 lrwx------ 1 dmdba dinstall 64 8月   3 09:40 12 -> /dm8/data/DAMENG/tbs.DBF (deleted)

--检查数据文件状态,数据文件已提示不存在
SQL> select path, STATUS$ from v$datafile;

行号     PATH                                               STATUS$    
---------- -------------------------------------------------- -----------
1          /dm8/data/DAMENG/SYSTEM.DBF                        1
2          /dm8/data/DAMENG/ROLL.DBF                          1
3          /dm8/data/DAMENG/TEMP.DBF                          1
4          /dm8/data/DAMENG/MAIN.DBF                          1
5          文件或目录[/dm8/data/DAMENG/tbs.DBF]不存在 NULL
已用时间: 2.292(毫秒). 执行号:6.

4、表空间文件失效检查

--尝试创建表,执行正常
SQL> create table t2 tablespace tbs as select * from dba_objects;
操作已执行
已用时间: 198.690(毫秒). 执行号:8.

--表空间文件失效检查
SQL> SP_FILE_SYS_CHECK();
DMSQL 过程已成功完成
已用时间: 2.253(毫秒). 执行号:11.

--尝试创建表,已提示失败
SQL> create table t3 tablespace tbs as select * from dba_objects;
create table t3 tablespace tbs as select * from dba_objects;
[-3430]:表空间[TBS]中文件[/dm8/data/DAMENG/tbs.DBF]已被删除.
已用时间: 24.652(毫秒). 执行号:0.


5、调用系统过程 SP_TABLESPACE_PREPARE_RECOVER(tablespace_name)准备进行恢复

SQL> call SP_TABLESPACE_PREPARE_RECOVER('TBS');
DMSQL 过程已成功完成
已用时间: 0.701(毫秒). 执行号:13.

6、使用操作系统的 cp 命令将文件复制到原位置

[dmdba@localhost DAMENG]$ cp /proc/1122/fd/12 /dm8/data/DAMENG/tbs.DBF

7、复制成功后,调用系统过程 SP_TABLESPACE_RECOVER(ts_name)完成表空间失效文件的恢复

SQL> call SP_TABLESPACE_RECOVER('TBS');
DMSQL 过程已成功完成
已用时间: 20.831(毫秒). 执行号:14.

8、表空间文件失效检查、建立测试表

--表空间文件失效检查
SQL> SP_FILE_SYS_CHECK();
DMSQL 过程已成功完成
已用时间: 1.615(毫秒). 执行号:16.

--检查数据文件状态,数据文件已存在,状态正常
SQL> select path, STATUS$ from v$datafile;

行号     PATH                        STATUS$    
---------- --------------------------- -----------
1          /dm8/data/DAMENG/SYSTEM.DBF 1
2          /dm8/data/DAMENG/ROLL.DBF   1
3          /dm8/data/DAMENG/TEMP.DBF   1
4          /dm8/data/DAMENG/MAIN.DBF   1
5          /dm8/data/DAMENG/tbs.DBF    1
已用时间: 1.112(毫秒). 执行号:17.

--建立表,执行正常
SQL> create table t3 tablespace tbs as select * from dba_objects;
操作已执行
已用时间: 221.506(毫秒). 执行号:18.

三、分析

1、表空间的数据文件删除后,不能重启dmserver,需要先进行数据文件的恢复后才能重启dmserver;

2、参数FIL_CHECK_INTERVAL默认值为0,如没有进行表空间文件失效检查,dmserver重启前,表空间仍旧能正常读写。

SQL> select name, value from V$PARAMETER where name = 'FIL_CHECK_INTERVAL';  

行号     NAME               VALUE
---------- ------------------ -----
1          FIL_CHECK_INTERVAL 0

已用时间: 19.943(毫秒). 执行号:21.

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值