实验说明
测试场景: 某一个非核心表空间使用的数据文件丢失或损坏,无备份,有归档,对其进行恢复。
为什么一定是非核心表空间,因为SYSTEM这种系统表空间一旦损坏必须全库进行恢复,无法通过其他手段进行恢复。
敲重点:备份非常重要、备份非常重要、备份非常重要
一、开启归档
没有备份、也没有归档是无法进行数据恢复的,能够在无备份情况下恢复 一定是开启了归档,并且归档日志保存完整。
SQL> alter database mount;
操作已执行
已用时间: 359.952(毫秒). 执行号:0.
SQL> alter database add archivelog 'type=local,dest=/dm8/arch1,file_size=64,space_limit=0';
操作已执行
已用时间: 0.712(毫秒). 执行号:0.
SQL> alter database archivelog;
操作已执行
已用时间: 0.312(毫秒). 执行号:0.
SQL> alter database open;
操作已执行
已用时间: 373.182(毫秒). 执行号:0.
SQL> select name,status$,arch_mode from v$database;
行号 NAME STATUS$ ARCH_MODE
---------- ---- ----------- ---------
1 PROD 4 Y
已用时间: 0.528(毫秒). 执行号:263982.
SQL>
二、开启记录逻辑操作功能
RLOG_APPEND_LOGIC:(必须大于1才可以使用日志挖掘功能)
是否启用在日志中记录逻辑操作的功能, 取值范围 0、 1、 2、3
0: 不启用; 1、 2、 3 启用。
1: 如果有主键列, 记录 UPDATE 和 DELETE操作时只包含主键列信息,若没有主键列则包含所有列信息;
2:不论是否有主键列, 记录UPDATE 和 DELETE 操作时都包含所有列的信息;
3: 记录 UPDATE 时包含更新列的信息以及ROWID, 记录 DELETE 时只有 ROWID
SQL> sp_set_para_value(1,'RLOG_APPEND_LOGIC',1);
DMSQL 过程已成功完成
已用时间: 2.361(毫秒). 执行号:1403.
SQL> select para_name, para_value from v$dm_ini where para_name in ('ARCH_INI','RLOG_APPEND_LOGIC');
行号 PARA_NAME PARA_VALUE
---------- ----------------- ----------
1 RLOG_APPEND_LOGIC 1
2 ARCH_INI 1
已用时间: 2.443(毫秒). 执行号:1404.
三、构建测试环境
在这一步里,我们要进行以下几步操作:
1、创建了一个名为TC01的表空间,创建一个用户TEST_TC 设置他的默认表空间为TC01。
2、然后在TEST_TC用户下创建一张表,在表里构造一些数据。
3、通过系统视图进行操作确认。
--创建表空间
SQL> create tablespace TC01 datafile '/dm8/data/PROD/TC01.DBF' size 50;
操作已执行
已用时间: 13.068(毫秒). 执行号:263974.
--创建用户,指定默认表空间
SQL> CREATE user TEST_TC IDENTIFIED BY TEST00001 DEFAULT TABLESPACE TC01 DEFAULT INDEX TABLESPACE TC01;
操作已执行
已用时间: 33.409(毫秒). 执行号:263975.
--在新建的用户下创建表
SQL> CREATE TABLE TEST_TC.T1 (ID INT , NAME VARCHAR(50));
操作已执行
已用时间: 51.978(毫秒). 执行号:263976.
--写入一条数据
SQL> INSERT INTO TEST_TC.T1 VALUES (1,'数据文件恢复测试');
影响行数 1
已用时间: 0.519(毫秒). 执行号:263977.
SQL> commit;
操作已执行
已用时间: 0.838(毫秒). 执行号:263978.
--通过视图查询TC01表空间下已经有了T1表
SQL> select tablespace_NAME,segment_name,segment_type from dba_segments where tablespace_name='TC01';
行号 TABLESPACE_NAME SEGMENT_NAME SEGMENT_TYPE
---------- --------------- ------------ ------------
1 TC01 T1 TABLE
已用时间: 87.608(毫秒). 执行号:263979.
--查询TC01表空间的数据文件路径
SQL> select tablespace_name,file_name,round(bytes/1024/1024) mb from dba_data_files where tablespace_name='TC01';
行号 TABLESPACE_NAME FILE_NAME MB
---------- --------------- ----------------------- --
1 TC01 /dm8/data/PROD/TC01.DBF 50
已用时间: 3.026(毫秒). 执行号:263980.
四、模拟操作业务
在这里我们模拟一些业务操作,以便我们验证数据恢复是否成功。
SQL> update TEST_TC.t1 set id=id+1;
影响行数 1
已用时间: 0.547(毫秒). 执行号:263983.
SQL> update TEST_TC.t1 set id=id+1;
影响行数 1
已用时间: 0.547(毫秒). 执行号:263983.
SQL> commit;
操作已执行
已用时间: 0.672(毫秒). 执行号:263984.
SQL> select * from TEST_TC.t1;
行号 ID NAME
---------- ----------- ------------------------
1 3 数据文件恢复测试
已用时间: 0.951(毫秒). 执行号:263985.
五、破坏数据文件
通过控制台调用操作系统命令,使用其他文件覆盖数据文件TC01.DBF
SQL> host cp /dm8/bin/disql /dm8/data/PROD/TC01.DBF
SQL>
六、尝试重启数据库
6.1 数据库实例无法启动。
数据库无法open

本文介绍了一种在无备份情况下对达梦数据库非核心表空间数据文件进行恢复的方法,包括开启归档、记录逻辑操作功能、构建测试环境、模拟业务操作、破坏数据文件、尝试重启数据库、恢复数据库服务及数据恢复的具体步骤。
最低0.47元/天 解锁文章
3784

被折叠的 条评论
为什么被折叠?



