达梦8误删表空间数据文件恢复实操(vmware凝思磐石6.0)

6 篇文章 0 订阅
1 篇文章 0 订阅

目录

 

一、说明

1.1、表空间文件失效检查

1.2、表空间失效文件恢复

二、实操

2.1、环境准备

2.2、删除表空间数据文件

2.3、恢复表空间数据文件


一、说明

1.1、表空间文件失效检查

LINUX 操作系统中,被进程打开的文件仍可以在 OS 系统中被删除,因此存在 DM 数据文件可能被误删的风险。如果数据文件被删除,DM8 数据库能够及时检测出来,并立刻停止对其继续使用并通知用户。在 dm.ini 中参数 FIL_CHECK_INTERVAL 的值指定 DM8 数据库检查数据文件是否仍存在的时间间隔,将其设为 0 表示不进行检查。也可以通过系统过程 SP_FILE_SYS_CHECK() 来手动的进行检查。系统一旦检测出某个表空间内的数据文件被删除,则与该表空间所有的操作都将会失败,并报错该表空间内有数据文件被删除。

1.2、表空间失效文件恢复

达梦官方手册提供的恢复方法如下:

LINUX 系统中被删除的文件,只要其句柄没有被关闭,可以在/proc/<pid>/fd 中找到其对应的文件副本。其中<pid>指打开该文件的进程 id。利用该方法,结合 OS 命令,DM 提供失效文件的恢复方案如下:
1、 调用系统过程 SP_TABLESPACE_PREPARE_RECOVER(tablespace_name)准备进行恢复;
2、 如果使用过程中 DM 报错表空间数据文件被删除,通过操作系统的 ps 命令找到当前dmserver 的 PID:ps –ef|grep dmserver; 
3、 使用操作系统 ls 命令查看被删除文件对应的副本:ls /proc/<PID>/fd–l,会发现被删除的文件后有(deleted)字样; 
4、 使用操作系统的 cp 命令将文件复制到原位置:cp bak_fildata_file_path_dir; 
5、 复制成功后,调用系统过程 SP_TABLESPACE_RECOVER(ts_name)完成表空间失效文件的恢复。
注意,要保证数据文件正确修复,需要保证在 SP_TABLESPACE_PREPARE_RECOVER后进行数据文件的复制。

二、实操

2.1、环境准备

1.创建表空间

dmdba@dmdsc01:~/dmdbms/bin$ ./disql sysdba/SYSDBA

服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 28.147(ms)
disql V8
SQL> create tablespace test datafile '/home/dmdba/dbdata/dmdata/TEST.DBF' size 32;
操作已执行
已用时间: 258.774(毫秒). 执行号:14700.
SQL> select tablespace_name, file_name, status from dba_data_files;

行号     TABLESPACE_NAME FILE_NAME                                STATUS   
---------- --------------- ---------------------------------------- ---------
1          SYSTEM          /home/dmdba/dbdata/dmdata/OMS/SYSTEM.DBF AVAILABLE
2          TEST            /home/dmdba/dbdata/dmdata/TEST.DBF       AVAILABLE
3          MAIN            /home/dmdba/dbdata/dmdata/OMS/MAIN.DBF   AVAILABLE
4          TEMP            /home/dmdba/dbdata/dmdata/OMS/TEMP.DBF   AVAILABLE
5          ROLL            /home/dmdba/dbdata/dmdata/OMS/ROLL.DBF   AVAILABLE

已用时间: 85.315(毫秒). 执行号:14701

2.创建用户指定表空间并授权

SQL> create user test identified by test_1234 default tablespace test;
操作已执行
已用时间: 53.491(毫秒). 执行号:14702.
SQL> grant dba to test; 
操作已执行
已用时间: 9.860(毫秒). 执行号:14703.

3.切换新用户创建表并插入数据

SQL> conn test/test_1234;

服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 9.534(ms)
SQL> create table test(id int, name varchar2(32)); 
操作已执行
已用时间: 21.311(毫秒). 执行号:14800.
SQL> insert into test values(1,'lilv');
影响行数 1

已用时间: 1.581(毫秒). 执行号:14801.
SQL> commit;
操作已执行
已用时间: 2.377(毫秒). 执行号:14802.
SQL> select * from test;

行号     ID          NAME
---------- ----------- ----
1          1           lilv

已用时间: 2.065(毫秒). 执行号:14803.

2.2、删除表空间数据文件

1.删除数据文件

dmdba@dmdsc01:~/dbdata/dmdata$ ls -lrth TEST.DBF 
-rw-r--r-- 1 dmdba dinstall 32M 4月  26 00:43 TEST.DBF
dmdba@dmdsc01:~/dbdata/dmdata$ rm -rf TEST.DBF 
dmdba@dmdsc01:~/dbdata/dmdata$ ls -lrth TEST.DBF 
ls: 无法访问TEST.DBF: 没有那个文件或目录

2.验证

SQL> select * from test;

行号     ID          NAME
---------- ----------- ----
1          1           lilv

已用时间: 0.761(毫秒). 执行号:14804.
SQL> call SP_FILE_SYS_CHECK();
DMSQL 过程已成功完成
已用时间: 1.216(毫秒). 执行号:14805.
SQL> select * from test;
select * from test;
[-3430]:表空间[TEST]中文件[/home/dmdba/dbdata/dmdata/TEST.DBF]已被删除.
已用时间: 0.912(毫秒). 执行号:0.

2.3、恢复表空间数据文件

1.执行准备恢复过程

SQL> call sp_tablespace_prepare_recover('TEST');
DMSQL 过程已成功完成
已用时间: 1.270(毫秒). 执行号:14807.

2.查看达梦进程,根据进程好查找被删除的文件,然后还原数据文件到原始目录

dmdba@dmdsc01:~/dmdbms/bin$ ps -ef|grep dmser
dmdba      1763      1  0 4月25 ?       00:01:10 /home/dmdba/dmdbms/bin/dmserver /home/dmdba/dbdata/dmdata/OMS/dm.ini -noconsole
dmdba     10574   4586  0 00:55 pts/1    00:00:00 grep dmser
dmdba@dmdsc01:~/dmdbms/bin$ ls /proc/17
17/   170/  1763/ 
dmdba@dmdsc01:~/dmdbms/bin$ ls /proc/1763/fd -l
总用量 0
lr-x------ 1 dmdba dinstall 64 4月  25 22:55 0 -> /dev/null
l-wx------ 1 dmdba dinstall 64 4月  25 22:55 1 -> /home/dmdba/dmdbms/log/DmServiceDMSERVER.log
lrwx------ 1 dmdba dinstall 64 4月  26 00:56 50 -> /home/dmdba/dbdata/dmdata/TEST.DBF (deleted)

dmdba@dmdsc01:~/dmdbms/bin$ cp /proc/1763/fd/50 /home/dmdba/dbdata/dmdata/TEST.DBF

3.执行恢复过程并检查

SQL> call sp_tablespace_recover('TEST');
DMSQL 过程已成功完成
已用时间: 5.500(毫秒). 执行号:14808.
SQL> call SP_FILE_SYS_CHECK();
DMSQL 过程已成功完成
已用时间: 0.995(毫秒). 执行号:14809.

4.验证

SQL> select tablespace_name, file_name, status from dba_data_files;

行号     TABLESPACE_NAME FILE_NAME                                STATUS   
---------- --------------- ---------------------------------------- ---------
1          SYSTEM          /home/dmdba/dbdata/dmdata/OMS/SYSTEM.DBF AVAILABLE
2          TEST            /home/dmdba/dbdata/dmdata/TEST.DBF       AVAILABLE
3          MAIN            /home/dmdba/dbdata/dmdata/OMS/MAIN.DBF   AVAILABLE
4          TEMP            /home/dmdba/dbdata/dmdata/OMS/TEMP.DBF   AVAILABLE
5          ROLL            /home/dmdba/dbdata/dmdata/OMS/ROLL.DBF   AVAILABLE

已用时间: 27.772(毫秒). 执行号:14810.
SQL> select * from test;

行号     ID          NAME
---------- ----------- ----
1          1           lilv

已用时间: 0.951(毫秒). 执行号:14811.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值