失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > linux还原dm7 DM7 达梦数据库 误删数据文件 恢复方法

linux还原dm7 DM7 达梦数据库 误删数据文件 恢复方法

时间:2019-09-01 15:58:57

相关推荐

linux还原dm7 DM7 达梦数据库 误删数据文件 恢复方法

在之前的博客里我们看了DM7 表空间的管理,如下:

/dave/article/3570

/dave/article/3570

1 理论说明

1)表空间文件失效检查

LINUX 操作系统中,被进程打开的文件仍可以在 OS 系统中被删除。如果数据文件被删除,DM7 系统能够及时检测出来,并立刻停止对其继续使用并通知用户。

在 dm.ini 中参数 FIL_CHECK_INTERVAL 的值指定 DM7 系统检查数据文件是否仍存在的时间间隔。将其设为 0 表示不进行检查。

也可以通过系统过程 SP_FILE_SYS_CHECK()来手动的进行检查。

系统一旦检测出某个表空间内的数据文件被删除,则与该表空间所有的操作都将会失败,并报错该表空间内有数据文件被删除。

2)表空间失效文件恢复

LINUX 系统中被删除的文件,在操作系统没有重启的情况下,文件的句柄都没有关闭,可以在/proc/

/fd 中找到其对应的文件副本。其中

指打开该文件的进程 id。/dave/article/3570

利用该方法,结合 OS 命令,在DM7 中可以通过以下方法恢复被删除的数据文件:

/dave/article/3570

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

2、 如果使用过程中 DM 报错表空间数据文件被删除,通过操作系统的 ps 命令找到当前dmserver 的 PID:ps –ef|grep dmserver;

3、 使用操作系统 ls 命令查看被删除文件对应的副本:ls /proc/

/fd -l,会发现被删除的文件后有(deleted)字样; 4、 使用操作系统的 cp 命令将文件复制到原位置cpbak_fildata_file_path_dir;

5、 复制成功后,调用系统过程 SP_TABLESPACE_RECOVER(ts_name)完成表空间失效文件的恢复。/dave/article/3570

/dave/article/3570/dave/article/3570

注意,要保证数据文件正确修复,需要保证在 SP_TABLESPACE_PREPARE_RECOVER后进行数据文件的复制。

2 操作示例

2.1 准备测试环境

SQL> create tablespace dave datafile '/dm/dmdbms/data/cndba/DAVE01.DBF' size 32, '/dm/dmdbms/data/cndba/DAVE02.DBF' size 32;

操作已执行

已用时间: 54.834(毫秒). 执行号:2177.

SQL> select tablespace_name, file_name, status from dba_data_files order by 1;

行号 TABLESPACE_NAME FILE_NAME STATUS

---------- --------------- ---------------------------------- ---------

1 BOOKSHOP /dm/dmdbms/data/cndba/BOOKSHOP.DBF AVAILABLE

2 DAVE /dm/dmdbms/data/cndba/DAVE02.DBF AVAILABLE

3 DAVE /dm/dmdbms/data/cndba/DAVE01.DBF AVAILABLE

4 DMHR /dm/dmdbms/data/cndba/DMHR.DBF AVAILABLE

5 MAIN /dm/dmdbms/data/cndba/MAIN.DBF AVAILABLE

6 ROLL /dm/dmdbms/data/cndba/ROLL.DBF AVAILABLE

7 SYSTEM /dm/dmdbms/data/cndba/SYSTEM.DBF AVAILABLE

8 TEMP /dm/dmdbms/data/cndba/TEMP.DBF AVAILABLE

8 rows got

已用时间: 7.133(毫秒). 执行号:2178.

SQL>

SQL> create user dave identified by "" default tablespace dave;

操作已执行

已用时间: 4.983(毫秒). 执行号:2179.

SQL> grant dba,resource to dave;

操作已执行

已用时间: 2.897(毫秒). 执行号:2180.

SQL>

SQL> conn dave/""

服务器[LOCALHOST:5236]:处于普通打开状态

登录使用时间: 10.927(毫秒)

SQL> create table dave as select * from dba_data_files;

操作已执行

已用时间: 21.781(毫秒). 执行号:2181.

SQL> select count(1) from dave;

行号 COUNT(1)

---------- --------------------

1 8

已用时间: 1.336(毫秒). 执行号:2182.

SQL>

2.2 OS级别删除数据文件

[dave@ ~]$ cd /dm/dmdbms/data/cndba/

[dave@ cndba]$ ls

bak DAVE01.DBF dmdcr_example.ini dminst.sys dmtimer_example.ini MAIN.DBF SYSTEM.DBF

BOOKSHOP.DBF DAVE02.DBF DMHR.DBF dmmal_example.ini dmwatcher_example.ini rep_conflict.log TEMP.DBF

cndba01.log dmarch_example.ini dm.ini dmmonitor_example.ini dmwatch_example.ini ROLL.DBF trace

cndba02.log dm.ctl dminit20290223224934.log dmmpp_example.ini dmwmon_example.ini sqllog_example.ini

ctl_bak dmdcr_cfg_example.ini dminit_example.ini dm_service.prikey HMAIN sqllog.ini

[dave@ cndba]$ rm -rf DAVE01.DBF

[dave@ cndba]$ ls

bak DAVE02.DBF DMHR.DBF dmmal_example.ini dmwatcher_example.ini rep_conflict.log TEMP.DBF

BOOKSHOP.DBF dmarch_example.ini dm.ini dmmonitor_example.ini dmwatch_example.ini ROLL.DBF trace

cndba01.log dm.ctl dminit20290223224934.log dmmpp_example.ini dmwmon_example.ini sqllog_example.ini

cndba02.log dmdcr_cfg_example.ini dminit_example.ini dm_service.prikey HMAIN sqllog.ini

ctl_bak dmdcr_example.ini dminst.sys dmtimer_example.ini MAIN.DBF SYSTEM.DBF

[dave@ cndba]$

在此查询之前创建的表:

SQL> select count(1) from dave;

行号 COUNT(1)

---------- --------------------

1 8

已用时间: 0.697(毫秒). 执行号:2184.

#使用SP_FILE_SYS_CHECK()过程检查后报错:

SQL> select SP_FILE_SYS_CHECK();

select SP_FILE_SYS_CHECK();

第1 行附近出现错误[-4015]:无效的SELECT项.

已用时间: 1.131(毫秒). 执行号:0.

SQL> call SP_FILE_SYS_CHECK();

DMSQL 过程已成功完成

已用时间: 1.253(毫秒). 执行号:2185.

SQL> select count(1) from dave;

select count(1) from dave;

[-3430]:表空间[DAVE]中文件[/dm/dmdbms/data/cndba/DAVE01.DBF]已被删除.

已用时间: 1.518(毫秒). 执行号:0.

SQL>

2.3 恢复数据文件

#执行准备恢复过程:

SQL> call sp_tablespace_prepare_recover('DAVE');

DMSQL 过程已成功完成

已用时间: 0.994(毫秒). 执行号:2187.

SQL>

#查找DM 进程ID:

[dave@ cndba]$ ps -ef|grep dmserver

dmdba 6857 1 0 Aug26 pts/3 00:00:14 /dm/dmdbms/bin/dmserver /dm/dmdbms/data/cndba/dm.ini -noconsole

dmdba 1 19947 0 09:28 pts/1 00:00:00 grep dmserver

[dave@ cndba]$

#查找被删除的文件:这里对应的的文件号是51

[dave@ cndba]$ ls /proc/6857/fd -l

总用量 0

lr-x------ 1 dmdba dinstall 64 2月 24 2029 0 -> /dev/null

l-wx------ 1 dmdba dinstall 64 2月 24 2029 1 -> /dm/dmdbms/log/DmServicedave.log

lrwx------ 1 dmdba dinstall 64 2月 24 2029 10 -> /dm/dmdbms/data/cndba/ROLL.DBF

lrwx------ 1 dmdba dinstall 64 2月 24 2029 11 -> /dm/dmdbms/data/cndba/MAIN.DBF

lrwx------ 1 dmdba dinstall 64 2月 24 2029 46 -> /dm/dmdbms/data/cndba/BOOKSHOP.DBF

lrwx------ 1 dmdba dinstall 64 2月 24 2029 47 -> /dm/dmdbms/data/cndba/DMHR.DBF

......

lrwx------ 1 dmdba dinstall 64 2月 24 2029 51 -> /dm/dmdbms/data/cndba/DAVE01.DBF (deleted)

lrwx------ 1 dmdba dinstall 64 2月 24 2029 52 -> /dm/dmdbms/data/cndba/DAVE02.DBF

lrwx------ 1 dmdba dinstall 64 2月 24 2029 6 -> /dm/dmdbms/data/cndba/SYSTEM.DBF

lrwx------ 1 dmdba dinstall 64 2月 24 2029 7 -> /dm/dmdbms/data/cndba/TEMP.DBF

lrwx------ 1 dmdba dinstall 64 2月 24 2029 8 -> /dm/dmdbms/data/cndba/cndba01.log

lrwx------ 1 dmdba dinstall 64 2月 24 2029 9 -> /dm/dmdbms/data/cndba/cndba02.log

[dave@ cndba]$

#复制文件到原来的位置:

[dave@ cndba]$ cp /proc/6857/fd/51 /dm/dmdbms/data/cndba/DAVE01.DBF

[dave@ cndba]$

#执行恢复过程:

SQL> call sp_tablespace_recover('DAVE');

DMSQL 过程已成功完成

已用时间: 11.210(毫秒). 执行号:2188.

#验证恢复,正常:

SQL> call SP_FILE_SYS_CHECK();

DMSQL 过程已成功完成

已用时间: 0.980(毫秒). 执行号:2189.

SQL> select count(1) from dave;

行号 COUNT(1)

---------- --------------------

1 8

已用时间: 0.813(毫秒). 执行号:2190.

SQL>

SQL> select tablespace_name, file_name, status from dba_data_files order by 1;

行号 TABLESPACE_NAME FILE_NAME STATUS

---------- --------------- ---------------------------------- ---------

1 BOOKSHOP /dm/dmdbms/data/cndba/BOOKSHOP.DBF AVAILABLE

2 DAVE /dm/dmdbms/data/cndba/DAVE02.DBF AVAILABLE

3 DAVE /dm/dmdbms/data/cndba/DAVE01.DBF AVAILABLE

4 DMHR /dm/dmdbms/data/cndba/DMHR.DBF AVAILABLE

5 MAIN /dm/dmdbms/data/cndba/MAIN.DBF AVAILABLE

6 ROLL /dm/dmdbms/data/cndba/ROLL.DBF AVAILABLE

7 SYSTEM /dm/dmdbms/data/cndba/SYSTEM.DBF AVAILABLE

8 TEMP /dm/dmdbms/data/cndba/TEMP.DBF AVAILABLE

8 rows got

版权声明:本文为博主原创文章,未经博主允许。

如果觉得《linux还原dm7 DM7 达梦数据库 误删数据文件 恢复方法》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。