test19

如何恢复删除并且commit后的数据

1、现象、问题描述

经常会发生误删除数据,并且commit了。恍然醒悟!
但如何恢复呢?Oracle 9以前的版本如果在你删除之前没有对数据库完整备份的话,想恢复删除的数据比登天还难。
Oracle9 以后提供了数据库闪回功能,可以将数据库恢复到之前的某个合适的时间点。
而且提供了flashback query 功能,可以查询某个表在某个时间点的状态,即使这个表中的数据已经删除,并且commit了。
这就是用flashback恢复误删除并且commit后数据的原理。
测试如下场景:
SQL> create table t as select OBJECT_ID,object_name from dba_objects where rownum < 5;
 
Table created.
 
Elapsed: 00:00:00.42
SQL> select object_id,substr(object_name,1,15) from t;
 
 OBJECT_ID SUBSTR(OBJECT_N
---------- ---------------
        20 ICOL$
        44 I_USER1
        28 CON$
        15 UNDO$
 
Elapsed: 00:00:00.00
现在将其全部删除,并且commit:
SQL> delete from t;
 
4 rows deleted.
 
Elapsed: 00:00:00.00
SQL> commit;
 
Commit complete.
 
Elapsed: 00:00:00.01
SQL> select * from t;
 
no rows selected
 
Elapsed: 00:00:00.00

现在用flashback操作将其恢复,方法如下:
SQL> insert into t select * from t as of timestamp (systimestamp - 2/24/60);
 
4 rows created.  
SQL> select object_id,substr(object_name,1,15) from t;
 
 OBJECT_ID SUBSTR(OBJECT_N
---------- ---------------
        20 ICOL$
        44 I_USER1
        28 CON$
        15 UNDO$
 
Elapsed: 00:00:00.00

但是,有个问题是:flashback利用的是回滚段机制,将脏(已经删除)数据从回滚段中重新读出。
而回滚段是可重复利用的,所以当经过了很多事务以后,可能存放需要的脏数据的回滚段被重复利用,这样flashback对此就不再奏效了。

本项目采用C++编程语言结合ROS框架构建了完整的双机械臂控制系统,实现了Gazebo仿真环境下的协同运动模拟,并完成了两台实体UR10工业机器人的联动控制。该毕业设计在答辩环节获得98分的优异成绩,所有程序代码均通过系统性调试验证,保证可直接部署运行。 系统架构包含三个核心模块:基于ROS通信架构的双臂协调控制器、Gazebo物理引擎下的动力学仿真环境、以及真实UR10机器人的硬件接口层。在仿真验证阶段,开发了双臂碰撞检测算法和轨迹规划模块,通过ROS控制包实现了末端执行器的同步轨迹跟踪。硬件集成方面,建立了基于TCP/IP协议的实时通信链路,解决了双机数据同步和运动指令分发等关键技术问题。 本资源适用于自动化、机械电子、人工智能等专业方向的课程实践,可作为高年级课程设计、毕业课题的重要参考案例。系统采用模块化设计理念,控制核心与硬件接口分离架构便于功能扩展,具备工程实践能力的学习者可在现有框架基础上进行二次开发,例如集成视觉感知模块或优化运动规划算法。 项目文档详细记录了环境配置流程、参数调试方法和实验验证数据,特别说明了双机协同作业时的时序同步解决方案。所有功能模块均提供完整的API接口说明,便于使用者快速理解系统架构并进行定制化修改。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
你提供的代码有几个问题需要修正: --- ### 问题分析: 1. **文件打开模式错误**: - 在 `sava_datas` 方法中,使用了 `with open('Test19-01.txt') as f:`,这会以只读模式打开文件。 - `json.dump(self.count, f)` 需要写入权限,因此会抛出异常。 2. **拼写错误**: - `sava_datas` 应该是 `save_datas`,拼写错误会导致调用不到正确的方法。 3. **load_datas 方法的返回值未使用**: - `load_datas` 方法中虽然返回了 `self.count`,但 `__init__` 中调用了 `self.load_datas()`,却未使用返回值。 - 实际上,`self.count` 已经在方法内部赋值,因此无需返回。 4. **文件读取时的潜在问题**: - 如果文件存在但为空或格式不正确(非 JSON),`json.load(f)` 会抛出异常。 --- ### 修正后的代码如下: ```python import json import os class Counter: def __init__(self): self.count = 0 self.load_datas() def run(self): while True: try: value = int(input("输入数字(输入0结束):")) if value == 0: return self.count += value self.save_datas() except ValueError: print("请输入有效的整数!") def load_datas(self): if os.path.exists('Test19-01.txt'): try: with open('Test19-01.txt', 'r') as f: self.count = json.load(f) except (json.JSONDecodeError, FileNotFoundError): print("文件读取失败,使用默认值 0") self.count = 0 else: self.count = 0 def save_datas(self): with open('Test19-01.txt', 'w') as f: json.dump(self.count, f) # 实例化并运行 c = Counter() c.run() ``` --- ### 改进说明: - 使用 `try-except` 捕获输入错误和文件读取错误,使程序更健壮。 - `save_datas` 方法中使用 `'w'` 模式打开文件,确保可以写入数据。 - 拼写错误 `sava_datas` 已更正为 `save_datas`。 - 增加了用户提示信息,提高交互体验。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值