暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【干货攻略】达梦数据库LINUX下误删数据文件如何进行数据恢复

达梦E学 2022-03-31
855

c

-----正文-----



在linux系统当中,达梦数据库是以数据文件的方式保存在操作系统中,当你删除数据文件,只要是操作系统和数据库未重启,文件的句柄是未释放的。此时当你删除了数据文件的时候,数据库和操作系统未重启,又没有数据备份的时候,我们还有机会将数据文件进行恢复。本文提供两种数据恢复的方式。


将删除的数据文件找回进行恢复

1.1 创建测试用的表空间、数据文件、用户、表。

    SQL> create tablespace TEST_RM datafile '/dm8/data/DAMENG/TEST_RM01.DBF' size 128 ;
    SQL> create user TEST_RM identified by Dameng123 default tablespace TEST_RM;
    SQL> grant "PUBLIC","RESOURCE","SOI","VTI" to TEST_RM;
    SQL> create table TEST_RM.T1 as select * from dba_objects;
    SQL> select count(*) from TEST_RM.T1;
    复制

    1.2 删除对应的表空间的数据文件进行模拟

      [dmdba@localhost ~]$ cd dm8/data/DAMENG/
      复制

        [dmdba@RH6 DAMENG]$ mv TEST_RM01.DBF tmp
        复制

        1.3 查询表空间和表空间状况

        查询表数据和表空间状况,你会发现数据一样能查询(是由于未做数据文件校验,如果做了数据文件校验将会查询不到数据),但是查看系统视图数据文件路径已经不存在。

          SQL> select count(*) from TEST_RM.T1;
          复制


            SQL> select * from dba_data_files;
            复制


              SQL> SELECT GROUP_ID,PATH,CLIENT_PATH FROM "V$DATAFILE";
              复制


              1.4 进行数据文件检查

                SQL> call SP_FILE_SYS_CHECK();
                SQL> select count(*) from TEST_RM.T1;
                复制

                上面看得到如果未做数据文件检查的话,被删除的数据文件上的表和对象是可以正常访问的,在做了数据文件校验之后将无法正常访问。

                1.5 恢复数据文件

                1.5.1 先执行恢复前的准备工作

                  SQL> call sp_tablespace_prepare_recover('TEST_RM');
                  复制

                  1.5.2 查看数据库进程号,找到未释放的文件句柄号和被删除的数据文件(重启之后文件句柄将会消失)

                    [dmdba@localhost DAMENG]$ ps -ef|grep dmserver
                    复制

                      [dmdba@localhost 1359]$ cd proc/1359/fd
                      [dmdba@RH6 fd]$ ls -ltr
                      复制

                      1.5.3 将数据文件复制回去,(注意需要用dmdba的用户复制文件!!!!)

                        [dmdba@localhost fd]$  cp 49 dm8/data/DAMENG/TEST_RM01.DBF
                        复制

                        1.5.4 然后执行数据文件恢复过程

                          SQL> call sp_tablespace_recover('TEST_RM');
                          SQL> call SP_FILE_SYS_CHECK();
                          复制

                          1.5.5 查询数据和表空间进行数据验证

                            SQL> select count(*) from TEST_RM.T1;
                            复制


                              SQL> SELECT GROUP_ID,PATH,CLIENT_PATH FROM "V$DATAFILE";
                              复制

                                已用时间: 0.450(毫秒). 执行号:53315.
                                SQL> select tablespace_name, file_name, status from dba_data_files;
                                复制

                                至此恢复完成,恢复完成之后立即做一个整库的备份;如果未做数据定时备份的赶紧做任务。恢复过程中需要注意的点:1.数据库和操作系统不能重启 ;2.复制数据文件的时候需要用dmdba用户进行复制,其他账户复制文件需要将文件用户和组权限设置为dmdbadinstall


                                总结:以上方法是在数据库未开启归档也未做备份的情况下使用的办法,如果有备份的话可以直接使用备份和归档将数据完整恢复出来,同时恢复的速度和数据的完整性都有保障。所以切记生产环境务必要做备份!!!同时在遇到不熟悉的环境需要做数据软件升级或者关闭重启的时候,最好检查下数据文件的状态。


                                更多资讯请上达梦技术社区了解: https://eco.dameng.com

                                >>> THE END <<<

                                好,以上是本期干货分享内容,希望能给大家带来帮助。



                                 
                                 


                                相关推荐

                                干货 | 达梦数据库的几种模式及状态说明
                                干货 | DM8系统包-DBMS_ALERT使用小技巧
                                开班 | DM8-DAE认证培训班招生中,4月18日开始培训!
                                公开课丨超基础的达梦系列公开课,报名进行中!
                                动态 | 达梦认证证书可以退税?!速收2021年退税指南~

                                内容丨伍铁波
                                审核丨林夕
                                编辑丨Hh

                                文章转载自达梦E学,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                评论