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

https://www.cndba.cn/dave/article/3570

https://www.cndba.cn/dave/article/3570

1 理论说明

1)表空间文件失效检查

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

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

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

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

2)表空间失效文件恢复

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

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

指打开该文件的进程 id。https://www.cndba.cn/dave/article/3570

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

https://www.cndba.cn/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)完成表空间失效文件的恢复。https://www.cndba.cn/dave/article/3570

https://www.cndba.cn/dave/article/3570https://www.cndba.cn/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 "www.cndba.cn" default tablespace dave;

操作已执行

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

SQL> grant dba,resource to dave;

操作已执行

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

SQL>

SQL> conn dave/"www.cndba.cn"

服务器[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@www.cndba.cn ~]$ cd /dm/dmdbms/data/cndba/

[dave@www.cndba.cn 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@www.cndba.cn cndba]$ rm -rf DAVE01.DBF

[dave@www.cndba.cn 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@www.cndba.cn 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@www.cndba.cn 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 20041 19947 0 09:28 pts/1 00:00:00 grep dmserver

[dave@www.cndba.cn cndba]$

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

[dave@www.cndba.cn 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@www.cndba.cn cndba]$

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

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

[dave@www.cndba.cn 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 达梦数据库 误删数据文件 恢复方法相关推荐

  1. 达梦数据库DM8数据文件损坏无备份恢复

    无备份数据恢复实验 实验说明 一.开启归档 二.开启记录逻辑操作功能 三.构建测试环境 四.模拟操作业务 五.破坏数据文件 六.尝试重启数据库 6.1 数据库实例无法启动. 6.2 数据库服务无法启动 ...

  2. 达梦数据库更换key文件的方法

    key文件存放于数据库服务器数据库安装目录下的/home/dmdbms/bin目录里,将新的key文件替换掉中的旧key文件. 更新key文件 方法一 重启数据库 将数据库的服务重启后即可完成key文 ...

  3. 达梦数据库DM8-DM数据迁移工具介绍和简单使用

    达梦数据库DM8-DM数据迁移工具介绍和简单使用 系列文章目录 本文环境 1.DM管理工具介绍 2.DM数据迁移工具简单使用 1.打开DM数据迁移工具 2.新建工程 3.新建迁移任务DM到DM 3.新 ...

  4. 【数据库】达梦数据库更新key文件

    达梦数据库更新key文件 情景 当达梦数据库连接报错,显示网络异常连接异常/超时,可能是授权文件dm.key过期了 查看日志文件:/home/dmdba/dmdbms/log/dm_DMSERVER_ ...

  5. 达梦数据库导入.dmp文件标准教程

    达梦数据库导入.dmp文件出现导入对象错误等问题 第1步 改口令 第2步 登录数据库入口 **注意!!!** 第3步 新建数据库 第4步 导入数据库 第5步 导入口令注意 第1步 改口令 第一步,安装 ...

  6. 达梦数据库迁移数据失败,错误码:6002,消息校验异常

    问题描述: 在服务器上新部署了一个国产达梦数据库A,准备将另一个数据库B的数据迁移到A,利用DM自带的迁移工具迁移时报错,如下图示: 查看报错详细信息: 解决方案如下: 导致此问题的原因是,数据库设置 ...

  7. 达梦数据库导出数据表结构为excel或html或文本(写文档用)

    达梦数据库导出数据表结构为excel或html或文本(写文档用) 项目中用的是国产达梦数据库,项目做了一期后应该是要数据库设计文档.其中就有一个需要表结构(字段,字段精度,说明...) 因为是国产数据 ...

  8. php删除sql server 2008,MSSQL_SQL Server2008 数据库误删除数据的恢复方法分享,SQL Server中误删除数据的恢复本 - phpStudy...

    SQL Server2008 数据库误删除数据的恢复方法分享 SQL Server中误删除数据的恢复本来不是件难事,从事务日志恢复即可.但是,这个恢复需要有两个前提条件: 1. 至少有一个误删除之前的 ...

  9. Linux 7中安装达梦数据库DM7

    一安装前准备工作  1.1检查Linux(Unix)系统信息  用户在安装DM前,需要检查当前操作系统的相关信息,确认DM安装程序与当前操作系统匹配,以保证DM能够正确安装和运行.用户可以使用以下命令 ...

最新文章

  1. MapReduce 计数器简介
  2. 【电子信息复试】考研复试常考问题——数据库
  3. 它来了,阿里架构师的“Java多线程+并发编程”知识点详解手册,限时分享
  4. JVM系列之:从汇编角度分析NullCheck
  5. loadrunner性能测试---添加windows多台压力机
  6. 组合数学与数论函数专题
  7. python弹出窗口后卡死_python的tkinter模块GUI编程为啥用了while循环之后就会使得程序出现卡死未响应崩溃?...
  8. 2dpsk差分相干解调matlab,基于systemview和matlab的2DPSK
  9. Inject Dll 过程
  10. python导入xlsx转为csv_Python 拆分工作表为单个工作簿
  11. c语言计算器程序代码有优先级,C语言计算器小程序(源代码+实习报告).doc
  12. 使用微博提供的API接口发送微博
  13. 计算机应用基础上机实验报告怎么写,excel实验报告模板
  14. Python项目实战化:爬取堆糖网研究所美好生活照
  15. iOS 动画之翻页动画实现
  16. python青少年编程比赛_第十一届蓝桥杯大赛青少年创意编程组比赛细则
  17. can和could的用法_can和could情态动词的用法
  18. 【JVM】CMS简述
  19. oracle的product删除不了,Linux下删除Oracle实例
  20. android 新浪微博签名工具,Android 集成新浪微博分享及授权 (上)

热门文章

  1. 如何保存PPT中的gif
  2. “华为30岁以下员工仅占28%”上热搜,网友:说好的35岁天花板呢?
  3. ES6 新增功能点整理
  4. C语言strcpy、strcnpy函数详解
  5. 【Linux】 - Linux中的文件操作
  6. PyTorch 1.12发布,正式支持苹果M1芯片GPU加速,修复众多Bug
  7. android绘制矢量图标和动画
  8. Tsinghua MOOC 祖玛(Zuma)
  9. 计算机音乐数字乐谱生僻字,生僻字钢琴简谱-数字双手-陈柯宇
  10. 苹果6怎么关闭运行程序_苹果推送 iOS 13.6 测试版:终于能关闭系统更新自动下载...