有次同事将测试库数据进行了修改但是忘记了加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 语句的效果都会被撤销,
数据
将回到之前的状态。