当前位置: 首页 > news >正文

Oracle的CURRENT REDO丢失,数据丢失风险分析

这一:问题说明: Oracle数据库 和 达梦数据库,每天都有定时物理备份,如果分别将Oracle和达梦的所有REDO LOG FILE删除,并关闭实例,为什么Oracle有数据丢失风险,而达梦没有?


Oracle数据库 和 达梦数据库,每天都有定时物理备份,如果分别将Oracle和达梦的所有REDO LOG FILE删除,并关闭实例,为什么Oracle有数据丢失风险,而达梦没有?

二:原因分析:
因为Oracle和达梦在 REDO、归档 处理机制上有根本区别:
达梦数据库:采用“边写边归档”的策略,日志在写入在线日志的同时,也被实时写入归档日志。
Oracle数据库:采用“写满切换再归档”的策略,归档完全依赖于在线日志文件成功切换,是异步进行的。

这就导致了:
达梦:归档日志包含至故障发生前最后一刻的所有事务,可实现零数据丢失。
Oracle:当前在线日志文件损坏,其内容直接丢失,其中记录的所有事务数据永 久丢失。

三:实验验证:
1.达梦数据库启动归档:
SQL> select PARA_NAME,PARA_VALUE,DEFAULT_VALUE from v$dm_ini where para_name LIKE ‘%ARCH_INI%’;
行号 PARA_NAME PARA_VALUE DEFAULT_VALUE


1 ARCH_INI 0 0
已用时间: 7.122(毫秒). 执行号:603.
SQL> Select * from varchstatus;未选定行已用时间:0.809(毫秒).执行号:604.SQL>ALTERDATABASEMOUNT;操作已执行已用时间:2.126(毫秒).执行号:0.SQL>ALTERDATABASEARCHIVELOG;操作已执行已用时间:7.726(毫秒).执行号:0.SQL>ALTERDATABASEADDARCHIVELOG′DEST=/dm8/arch,TYPE=LOCAL,FILESIZE=200,SPACELIMIT=10240′;操作已执行已用时间:1.377(毫秒).执行号:0.SQL>ALTERDATABASEOPEN;操作已执行已用时间:10.472(毫秒).执行号:0.SQL>Select∗fromvarch_status; 未选定行 已用时间: 0.809(毫秒). 执行号:604. SQL> ALTER DATABASE MOUNT; 操作已执行 已用时间: 2.126(毫秒). 执行号:0. SQL> ALTER DATABASE ARCHIVELOG; 操作已执行 已用时间: 7.726(毫秒). 执行号:0. SQL> ALTER DATABASE ADD ARCHIVELOG 'DEST=/dm8/arch, TYPE=LOCAL, FILE_SIZE=200, SPACE_LIMIT=10240'; 操作已执行 已用时间: 1.377(毫秒). 执行号:0. SQL> ALTER DATABASE OPEN; 操作已执行 已用时间: 10.472(毫秒). 执行号:0. SQL> Select * from varchstatus;未选定行已用时间:0.809(毫秒).执行号:604.SQL>ALTERDATABASEMOUNT;操作已执行已用时间:2.126(毫秒).执行号:0.SQL>ALTERDATABASEARCHIVELOG;操作已执行已用时间:7.726(毫秒).执行号:0.SQL>ALTERDATABASEADDARCHIVELOGDEST=/dm8/arch,TYPE=LOCAL,FILESIZE=200,SPACELIMIT=10240;操作已执行已用时间:1.377(毫秒).执行号:0.SQL>ALTERDATABASEOPEN;操作已执行已用时间:10.472(毫秒).执行号:0.SQL>Selectfromvarch_status;
行号 ARCH_TYPE ARCH_DEST ARCH_STATUS ARCH_SRC


1 LOCAL /dm8/arch VALID CJC
已用时间: 1.014(毫秒). 执行号:605.
2.检查REDO信息:
SQL> select GROUP_ID,FILE_ID,PATH from v$rlogfile;
行号 GROUP_ID FILE_ID PATH


1 2 0 /dm8/redo/dm_redo01.log
2 2 1 /dm8/redo/dm_redo02.log
已用时间: 1.034(毫秒). 执行号:601.
SQL> host ls -lrth /dm8/redo/
total 512M
-rw-r–r-- 1 dmdba dinstall 256M May 22 10:19 dm_redo02.log
-rw-r–r-- 1 dmdba dinstall 256M May 22 10:58 dm_redo01.log
3.备份数据库
启动DMAP

[root@cjc-db-11 ~]# /dm8/dbms/bin/service_template/DmAPService start
Starting DmAPService: Last login: Fri May 22 10:59:21 CST 2026 on pts/2
[ OK ]
备份:

SQL> backup database backupset ‘/dm8/bak/full/20260522’;
操作已执行
已用时间: 00:02:39.236. 执行号:615.
4.创建测试数据
SQL> create table cjc.t0522(id int,name varchar(10));
操作已执行
已用时间: 8.151(毫秒). 执行号:616.
SQL> insert into cjc.t0522 values(1,‘x’);
影响行数 1
已用时间: 0.868(毫秒). 执行号:617.
SQL> commit;
操作已执行
已用时间: 1.036(毫秒). 执行号:618.
SQL> select * from cjc.t0522;
行号 id name


1 1 x
已用时间: 0.897(毫秒). 执行号:619.
5.模拟误删除
[dmdba@cjc-db-11 redo]$ ls -lrth
total 512M
-rw-r–r-- 1 dmdba dinstall 256M May 22 10:19 dm_redo02.log
-rw-r–r-- 1 dmdba dinstall 256M May 22 14:30 dm_redo01.log
[dmdba@cjc-db-11 redo]$ rm -f dm_redo0*.log
6.影响范围
短时间内,还可以正常读写数据。

SQL> select * from cjc.t0522;
行号 id name


1 1 x
已用时间: 0.897(毫秒). 执行号:619.
SQL> select * from cjc.t0522;
行号 id name


1 1 x
已用时间: 0.527(毫秒). 执行号:620.
SQL> insert into cjc.t0522 values(2,‘y’);
影响行数 1
已用时间: 0.517(毫秒). 执行号:621.
SQL> commit;
操作已执行
已用时间: 1.017(毫秒). 执行号:622.
SQL> select * from cjc.t0522;
行号 id name


1 1 x
2 2 y
已用时间: 0.293(毫秒). 执行号:623.
检查文件

SQL> sp_file_sys_check();
DMSQL 过程已成功完成
已用时间: 4.271(毫秒). 执行号:624.
告警日志:

2026-05-22 14:32:56.335 [ERROR] database P0000002785 T0000000000000003338 [EID:49]fil_sys check file [/dm8/redo/dm_redo01.log] fail, Can’t find file
2026-05-22 14:32:56.335 [ERROR] database P0000002785 T0000000000000003338 [EID:49]fil_sys check file [/dm8/redo/dm_redo02.log] fail, Can’t find file
此时仍然可以读写数据

SQL> select * from cjc.t0522;
行号 id name


1 1 x
2 2 y
已用时间: 0.264(毫秒). 执行号:626.
SQL> insert into cjc.t0522 values(3,‘z’);
影响行数 1
已用时间: 0.530(毫秒). 执行号:627.
SQL> commit;
操作已执行
已用时间: 1.081(毫秒). 执行号:628.
SQL> select * from cjc.t0522;
行号 id name


1 1 x
2 2 y
3 3 z
已用时间: 0.311(毫秒). 执行号:629.
如果实例没有关闭,可以使用文件句柄进行恢复:

[dmdba@cjc-db-11 redo]$ ps -ef|grep dms|grep -v grep
dmdba 2785 1 0 12:08 pts/0 00:00:10 /dm8/dbms/bin/dmserver path=/dm8/data/CJC/dm.ini -noconsole
[dmdba@cjc-db-11 redo]$ ls -lrth /proc/2785/fd|grep dele
lrwx------ 1 dmdba dinstall 64 May 22 10:19 9 -> /dm8/redo/dm_redo02.log (delted)
lrwx------ 1 dmdba dinstall 64 May 22 10:19 8 -> /dm8/redo/dm_redo01.log (delted)
本次主要讲解,实例已经关闭,并且无法启动,通过备份进行恢复

关闭数据库

SQL> shutdown immediate;
操作已执行
已用时间: 1.038(毫秒). 执行号:0.
启动数据库,启动失败

[dmdba@cjc-db-11 ~]$ DmServiceCJC start
Starting DmServiceCJC: [ FAILED ]
后台报错:

026-05-22 14:38:16.108 [FATAL] database P0000005274 T0000000000000005274 /dm8/redo/dm_redo01.log not exist,can not startup
7.恢复:
覆盖前,备份

[dmdba@cjc-db-11 dm8]$ cp -r data/ data_bak
还原

RMAN> restore database ‘/dm8/data/CJC/dm.ini’ from backupset ‘/dm8/bak/full/20260522’;
restore database ‘/dm8/data/CJC/dm.ini’ from backupset ‘/dm8/bak/full/20260522’;
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL [Percent:100.00%][Speed:0.00M/s][Cost:00:00:53][Remaining:00:00:00]
restore successfully.
time used: 00:00:53.936
可以看到 restore database会将redo文件还原回来,也就是达梦的backup database会备份redo log file:

[dmdba@cjc-db-11 ~]$ ls -lrth /dm8/redo/
total 512M
-rw-r–r-- 1 dmdba dinstall 256M May 22 15:12 dm_redo01.log
-rw-r–r-- 1 dmdba dinstall 256M May 22 15:12 dm_redo02.log
8.恢复,这里是完全恢复,和Oracle不同:
RMAN> recover database ‘/dm8/data/CJC/dm.ini’ with archivedir ‘/dm8/arch’;
recover database ‘/dm8/data/CJC/dm.ini’ with archivedir ‘/dm8/arch’;
Database mode = 2, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[770990721], file_lsn[770990721] [Percent:100.00%][Speed:0.00PKG/s][Cost:00:00:00][Remaining:00:00:00]
recover successfully!
time used: 655.023(ms)
更新db_magic:

RMAN> recover database ‘/dm8/data/CJC/dm.ini’ update db_magic;
recover database ‘/dm8/data/CJC/dm.ini’ update db_magic;
Database mode = 2, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[770996956], file_lsn[770996956]
recover successfully!
time used: 00:00:01.181
9.启动数据库:启动成功
[dmdba@cjc-db-11 ~]$ DmServiceCJC start
Starting DmServiceCJC: [ OK ]
10.检查数据:数据没有丢失
[dmdba@cjc-db-11 ~]$ sh conn.sh
服务器[LOCALHOST:5238]:处于普通打开状态
登录使用时间 : 6.457(ms)
disql V8
SQL> select * from cjc.t0522;
行号 id name


1 1 x
2 2 y
3 3 z
已用时间: 1.297(毫秒). 执行号:501.里写自定义目录标题)

quenceDiagram.html

http://www.zskr.cn/news/1462068.html

相关文章:

  • python学习第十四天(自用)
  • Jetson_Pixhawk局域网UDP连接QGC
  • SU(3)格点规范理论的量子基态制备与优化策略
  • Gemma-4B:轻量级大模型的工程平衡术与中文落地实践
  • 如何彻底解决国内GitHub访问速度慢的问题:Fast-GitHub完全指南
  • 广东ge优化领跑者,广东谋根文化传媒【AI 实战】对话什么才是优质且合规的GEO优化?应该如何全维度构建全新得geo立体闭环
  • 弯板流量计选型深度解析:实力厂家对比与务实选择建议(2026) - 品牌推荐大师1
  • 大模型应用落地:基于Agent拓扑设计模式实现多Agent博弈与决策的工程路径
  • 系统级硬件指纹伪装工具:EASY-HWID-SPOOFER深度技术解析
  • HC-05/HC-06/JDY-31蓝牙模块实战:电平转换、AT命令配置与选型指南
  • 零基础必存!2026 网安全套学习路线,从入门到就业一步到位
  • RStudio下载安装教程|RStudio 官网下载+免费安装包
  • 2026年国内工程管道配套采购参考:整合防火阀/调节风阀资源,综合实力出众的阀门厂家推荐名录 - 栗子测评
  • 【AI档案智能整合实战指南】:20年档案专家亲授5大落地陷阱与3步自动化升级路径
  • 2026年5月哈尔滨口碑好的钟点工哪家强?本地实测靠谱选择 - 奔跑123
  • 发票识别准确率99.8%≠真智能——AI报销落地失败的6个隐性技术断点(附审计级检测清单)
  • 张量、矢量、矩阵傻傻分不清?一张图带你理清PyTorch/TensorFlow中的核心数据结构
  • BetterNCM Installer:一站式插件管理革命,让网易云音乐焕然新生
  • AutoJs Pro 7.0.4-1 实战:手把手教你写一个防封禁的快手极速版自动化脚本(附完整源码)
  • 手把手教你用WPS表格+PPT,把COD数据库的晶体数据变成可视化模型
  • YOLO26车辆碰撞识别检测系统(项目源码+YOLO数据集+模型权重+UI界面+python+深度学习+远程环境部署)
  • 混合换相换流器(HCC)技术:从原理到应用,根治高压直流输电换相失败
  • 第09篇:列表三种形态
  • 一站式全案落地,让大型文旅场馆长效稳赚
  • 从航拍照片到标准地图:手把手教你根据成图比例尺(如1:500)反推航摄参数与无人机飞行方案
  • 终极指南:如何一键下载番茄小说并永久离线阅读
  • AI大模型技术书籍推荐:10本爆款书籍助你成为AI时代顶尖人才!
  • 别再硬啃论文了!用Python+Gurobi手把手实现Benders分解算法(附完整代码)
  • 从零开始DIY电脑:硬件选型、组装实战与问题排查全指南
  • 【C++sizeof与strlen】C++sizeof与strlen底层原理精讲:计算规则、指针数组特例、字符串内存坑点、笔试真题全方位复盘