有次同事将测试库数据进行了修改但是忘记了加where条件 导致所有数据都会变更。

首先你需要知道你操作update,的时间。

其实Oracle提交数据是分两步操作的,第一步execute执行,第二步commit提交。对应的PL\SQL也是要先点execute执行,执行后再点commit提交。
但是 commit提交后 可以用闪回查询恢复原来的数据 因为oracle会将近期的数据保存到快照中 如:
```
SELECT * FROM tab AS OF TIMESTAMP TO_TIMESTAMP('20191223 20:00:00','YYYYMMDD HH24:MI:SS');
```
这里'20130506 20:00:00'就是你想恢复数据到哪个时间状态 tab是数据库的表名 这样查询到的数据就是执行更新操作之前的数据
```
create table tab_bak as SELECT * FROM tab AS OF TIMESTAMP TO_TIMESTAMP('20191223 20:00:00','YYYYMMDD HH24:MI:SS');
```
这样就把这个时间段的数据放到了 tab_bak表中了。

再把表重命名 即可:
```
alter table tab_bak rename to tab;
```

有次同事将测试库数据进行了修改但是忘记了加where条件 导致所有数据都会变更。首先你需要知道你操作update,的时间。其实Oracle提交数据是分两步操作的,第一步execute执行,第二步commit提交。对应的PL\SQL也是要先点execute执行,执行后再点commit提交。但是 commit提交后 可以用闪回查询恢复原来的数据 因为oracle会将近期的数据保存到快照中 如:```SELECT * FROM tab AS OF TIMESTAMP TO_TIMESTAMP('20 DDL( 数据 定义语言) - Create、Alter、Drop 这些语句自动提交,无需用Commit提交。 DQL( 数据 查询语言) - Select 查询语句不存在是否提交问题。 DML( 数据 操纵语言) - Insert、Update、Delete 这些语句需要Commit才能提交。 DTL(事务控制语言) - Commit、Rollback 事务提交与回滚语句。 DCL( 数据 控制语言) - Grant、Revoke 授予权限与回收权限语句。 1.commit 在 数据
正在看的 ORACLE 教程是: Oracle 7.X 回滚表空间 数据 文件误删除处理方法。 —- 一、 引言: —- 回滚段是 数据 库的一部分,它记录 数据 库变更的信息。使用这些信息实现 数据 库的读一致性及其恢复。若回滚段出现故障,则 数据 库不能正常启动,导致 数据 库瘫痪,用户无法读写 数据 。若能将回滚段的故障排除,则不会影响用户的实际 数据 。笔者最近在实际工作中遇到一个问题:用户将回滚段表空间(r
Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1 在保存 数据 时候出现这个异常,网上很多答案说是主键问题,查了主键也没有发现问题,新增也设置主键了, 后面发现是重复 更新 数据 了,在同一个事务中查到的 数据 直接set值后面又进行了save保存 数据 ,导致了重复 更新 了。
得益于自己的好习惯,每次 更新 数据 都是在测试库把sql先跑一遍,才敢到线上库执行。其实即使出错了,还有恢复的余地。步骤如下。 SELECT * FROM js_gkb_unit AS OF TIMESTAMP TO_TIMESTAMP('20201223 14:30:00','YYYYMMDD HH24:MI:SS') 看下这条sql,js_gkb_unit就是你要回滚的表名,后面的时间戳就是你想回滚到的时间点。执行这条语句,查看 数据 ,确定此时间点就是想回滚到的那个点。 create t
Batch update returned unexpected row count from update [0]; actual row count: 2; expected: 1; 字面意思就是 更新 字段的时候,只想 更新 一条,结果有两条 我的错误情况是 数据 库表中没有设置主键,但我在hbm配置文件中将code 和date设置为联合主键 然后在 更新 操作的时候一直报错,看了网上很多,猜测...
有时候我们在操作 ORACLE 数据 库的时候,可能由于SQL写错了导致把 数据 update错了,或者delete删除掉了,那么这时候如何去恢复之前的 数据 呢? 莫着急,我们可以采用 oracle 的基于时间查询as of timestamp的办法进行恢复 数据 。下面以具体例子进行讲解用法。 1、比如,我的wl_notify_task表目前有三条 数据 ,大家重点关注PARAMETER字段。
2022年最新前端面试题 热门题目 (面经最全版)(蛋糕)...持续维护中,HTML和Css部分vue部分,Null,undefined,Boolean,Number,String,BigInt 、BigInt 、Object、1. **解构赋值、扩展运算符、class类、模块化 import export、箭头函数、generator函数、promise let cosnt ......
可以使用 MySQL Connector/NET 提供的 Transaction 对象来实现事务回滚。以下是一个使用 vb.net 和 MySQL Connector/NET 实现事务回滚的示例: Imports MySql.Data.MySqlClient Dim connectionString As String = "server=localhost;user id=root;password=yourpassword;database=yourdatabase" Dim sql As String = "INSERT INTO mytable (column1, column2) VALUES ('value1', 'value2')" Dim sql2 As String = "INSERT INTO mytable (column1, column2) VALUES ('value3', 'value4')" Using conn As New MySqlConnection(connectionString) conn.Open() ' Start the transaction. Dim tx As MySqlTransaction = conn.BeginTransaction() ' Execute the first SQL statement. Using cmd As New MySqlCommand(sql, conn, tx) cmd.ExecuteNonQuery() End Using ' Execute the second SQL statement. Using cmd As New MySqlCommand(sql2, conn, tx) cmd.ExecuteNonQuery() End Using ' Commit the transaction. tx.Commit() Catch ex As Exception ' Rollback the transaction if an exception occurs. tx.Rollback() Console.WriteLine("Error: " & ex.Message) End Try End Using 在以上代码中,我们首先创建了一个 MySqlConnection,然后使用 BeginTransaction 方法创建了一个事务对象 tx。在 Try 块中,我们可以执行一系列 SQL 语句,如果所有的 SQL 语句都执行成功,则调用 tx.Commit() 方法提交事务;如果其中任何一个 SQL 语句执行失败,则调用 tx.Rollback() 方法回滚事务。注意:在回滚事务后,所有执行过的 SQL 语句的效果都会被撤销, 数据 将回到之前的状态。