目录
一、恢复要点
1、当DM数据库在联机时由于误删数据文件需要恢复,此时数据库不能重启,必须联机!
2、DM在linux表空间文件失效检查说明
在 dm.ini 中参数 FIL_CHECK_INTERVAL 的值指定 DM 系统检查数据文件是否仍存在的时间间隔,将其设为 0 表示不进行检查;或是用SP_FILE_SYS_CHECK()来手动的进行检查,系统一旦检测出某个表空间内的数据文件被删除,则与该表空间所有的操作都将会失败,并报错该表空间内有数据文件被删除。
3、表空间失效文件恢复过程说明
先SP_TABLESPACE_PREPARE_RECOVER ,再SP_TABLESPACE_RECOVER。
二、开始测试
说明:误删数据文件,其实是表空间失效对文件进行恢复并联机的过程。
第一步:环境准备
select * from v$parameter where name like 'FIL_CHECK_INTERVAL%';--0
drop table y;
create tablespace ts6 datafile '/dm/data/db1/ts6.dbf' size 70;
create table y (i int) STORAGE (on ts6);
select tablespace_name from dba_tables where table_name='Y';
insert into y values(1),(2),(3);
commit;
select * from y;
未删除之前:
模拟 /dm/data/db1/ts6.dbf 被删除!
删除之后:
数据库对此表空间做事务,仍然可以,因为虽然文件被删除了,但句柄没有被关闭(库没有重启),所以可以。但在后边执行了call SP_FILE_SYS_CHECK();则不可以再做事务了,见下:
insert into y values(4);
commit;
现在手工检查一下:
call SP_FILE_SYS_CHECK();
--查询一下数据文件与表空间状态:现在可以看到数据文件是不合法的!表空间脱机!
select tablespace_name,status from dba_data_files where tablespace_name=upper('TS6');
select vts.name,vdf.status$,vdf.path from v$datafile vdf, V$TABLESPACE vts where VDF.GROUP_ID(+)=vts.id;
第二步:恢复
现在来恢复,此时数据库不能关。
[dmdba@dm11 ~]$ cp /proc/55424/fd/49 /dm/data/db1/ts2.dbf
[dmdba@dm11 ~]$ ls -l /dm/data/db1/ts2.dbf
-rw-r--r-- 1 dmdba dinstall 378535936 May 11 16:07 /dm/data/db1/ts2.dbf
SQL> call SP_TABLESPACE_PREPARE_RECOVER('TS6');
SQL> call SP_TABLESPACE_RECOVER('TS6');
第三步:核实
不会报错了,也可以正常做事务了,或重启后,都正常 OK!!!
更多学习内容参考:达梦数据库 - 新一代大型通用关系型数据库 | 达梦云适配中心 https://eco.dameng.com