Oracle11g R2学习系列 之五回闪
2013-07-08 22:51
127 查看
Oracle里面有一个回闪的操作,这个貌似sql server是没有的。要使用这个功能,需要用到两个时间内部函数
TIMESTAMP和TO_TIMESTAMP。其中,函数TO_TIMESTAMP的语法格式为:
TO_TIMESTAMP('timepoint', 'format')
另外我发现Oracle里的所有操作,如果不使用commit;的话,都是没起实际作用的。另起一个操作窗口就会发现数据还是完好的。如下图示,我依次输入的是:
View Code
请注意,我这个时间还没有敲commit;然后我用Oracle SQL Developer连接,再次输入select * from rollxsb;发现照样可以看到那三条记录,于是我再次返回SQL*PLUS并输入commit;这一次之后,我在SQLDevelper里面只能输入
select * from rollxsb as of timestamp to_timestamp('2013-7-8 21:51:34','yyyy-mm-dd hh24:mi:ss');才能查询到那三条记录了。
既然能够查询到,那么我想理所当然的可以用insert into 插回来了。sql server都支持的insert into 操作,作为数据库中的王牌Oracle没有道理没有这种语法,于是输入:
insert into rollxsb select * from rollxsb as of timestamp to_timestamp('2013-7-8 21:51:34','yyyy-mm-dd hh24:mi:ss');
发现数据已插回了rollxsb表了。这里同样的需要按F11或图示中的红圈以提交改动,才能在SQL*PLUS里面用select * from rollxsb看到那三条结果。
感觉Oracle这里必须手动commit;才能提交改动的设计确认很高,防止很多人的误操作delete,不过千万记住,truncate是不支持这一操作的。如果你不幸在SQL*PLUS中执行了
truncate table rollxsb;的话,那么很悲剧的告诉你,是无法回滚回来的,而且这个也无须commit;就立即生效了。最后,我用了表回滚也没有成功。
alter table rollxsb enable row movement;
flashback table rollxsb of timestamp to_timestamp('2013-7-8 21:51:34','yyyy-mm-dd hh24:mi:ss');
所以truncate这一权限,慎开慎放为妙。
另外我使用上面的语句在delete from rollxsb;之后执行,发现显示是执行成功,但数据是没有找回来。这说明表闪回,只是对表结构的回滚操作,对找回数据是没有用的。
TIMESTAMP和TO_TIMESTAMP。其中,函数TO_TIMESTAMP的语法格式为:
TO_TIMESTAMP('timepoint', 'format')
另外我发现Oracle里的所有操作,如果不使用commit;的话,都是没起实际作用的。另起一个操作窗口就会发现数据还是完好的。如下图示,我依次输入的是:
set time on select * from rollxsb; delete from rollxsb; select * from rollxsb; select * from rollxsb as of timestamp to_timestamp('2013-7-8 21:51:34','yyyy-mm-dd hh24:mi:ss');
View Code
请注意,我这个时间还没有敲commit;然后我用Oracle SQL Developer连接,再次输入select * from rollxsb;发现照样可以看到那三条记录,于是我再次返回SQL*PLUS并输入commit;这一次之后,我在SQLDevelper里面只能输入
select * from rollxsb as of timestamp to_timestamp('2013-7-8 21:51:34','yyyy-mm-dd hh24:mi:ss');才能查询到那三条记录了。
既然能够查询到,那么我想理所当然的可以用insert into 插回来了。sql server都支持的insert into 操作,作为数据库中的王牌Oracle没有道理没有这种语法,于是输入:
insert into rollxsb select * from rollxsb as of timestamp to_timestamp('2013-7-8 21:51:34','yyyy-mm-dd hh24:mi:ss');
发现数据已插回了rollxsb表了。这里同样的需要按F11或图示中的红圈以提交改动,才能在SQL*PLUS里面用select * from rollxsb看到那三条结果。
感觉Oracle这里必须手动commit;才能提交改动的设计确认很高,防止很多人的误操作delete,不过千万记住,truncate是不支持这一操作的。如果你不幸在SQL*PLUS中执行了
truncate table rollxsb;的话,那么很悲剧的告诉你,是无法回滚回来的,而且这个也无须commit;就立即生效了。最后,我用了表回滚也没有成功。
alter table rollxsb enable row movement;
flashback table rollxsb of timestamp to_timestamp('2013-7-8 21:51:34','yyyy-mm-dd hh24:mi:ss');
所以truncate这一权限,慎开慎放为妙。
另外我使用上面的语句在delete from rollxsb;之后执行,发现显示是执行成功,但数据是没有找回来。这说明表闪回,只是对表结构的回滚操作,对找回数据是没有用的。
相关文章推荐
- Oracle11g R2学习系列 之九 PL/SQL语言
- Oracle11g R2学习系列 之二基本概念和环境介绍
- Oracle11g R2学习系列 之十 解决EM不能用
- Oracle11g R2学习系列 之六数据库链接,快照及序列
- Oracle11g R2学习系列 之七安全性
- Oracle11g R2学习系列 之一安装篇
- Oracle11g R2学习系列 之三教程选择
- Oracle11g R2学习系列 之八高级数据类型
- Oracle11g R2学习系列 之四Maven+Struts+Spring实验
- oracle11g r2 学习记录
- [21]Window PowerShell DSC学习系列---- 在Window 2012 R2 安装DSC 5.0 Pull服务器报错的解决方案
- Deep Learning(深度学习)学习笔记整理系列之(七)
- (转)蜜果私塾:http协议学习和总结系列 ——协议详解篇
- C#2.0类和对象学习系列之this关键字
- SpringMVC学习系列-后记 解决GET请求时中文乱码的问题
- Dynamics AX 2012 R2 窗体系列 - 在窗体上修改字段时所触发的方法及其顺序
- Redis系列学习笔记3 散列
- 学习SpringMVC系列教程(一)Spring MVC入门
- amdroid源码学习系列之--建立android系统开发环境
- Java中Annotation(注释)系列学习笔记(1)