as oforacle as timestampp可以回滚插入数据前吗

已知要闪回的大致时间使用基于as of scn的闪回查询 - moonfans - 博客园
基本判断出要恢复误操作的dml的时间可以使用如下的方法进行数据的恢复:
  一、创建test表
  -------create table flashback_asof------
  create table flashback_of(
    id varchar2(5) primary key,
    name varchar2(20),
    desc1 varchar2(20),
    desc2 varchar2(20)
  二、insert值
  ------insert values-----  insert into flashback_of values('01','name1','desc11','desc21');  insert into flashback_of values('02','name2','desc12','desc22');  insert into flashback_of values('03','name3','desc13','desc23');  insert into flashback_of values('04','name4','desc14','desc24');
  三、获得当前日期下对应的scn值
  1、select to_char(sysdate,'yyyy-mm-dd hh24;mi:ss') time ,to_char(dbms_flashback.get_system_change_number)
  获取当前日期下对应的scn码。
  2、另外可以通过数据字典v$database中的 current_scn获得当前的scn码
  select name,current_scn from v$
  scn是oracle数据库系统提供的标识时间和系统改变码之间的一种映射关系(sys.smon_scn_time)。在10g中,系统平均每3秒产生一次系统时间与SCN的匹配并存入     SYS.SMON_SCN_ TIME表。因此10g版本如果使用AS OF TIMESTAMP查询UNDO中的数据,实际获取的数据是以指定的时间对应的SCN时的数据为基准。
  使用scn查询更加准确,因为scn对应的timestamp是时间的一个区间,scn对应一段区间值,并且在低版本 中timestamp和scn的值是每隔5分钟才真正映射到         &&smon_scn_time表中的,所以在闪回查询中尽量使用基于scn的闪回查询。
  使用SCN查询会比TIMESTAMP更加精确,事实上,即使执行Flashback Query时指定的是AS OF TIMESTAMP,Oracle也会将其转换成SCN,这是由于Oracle内部都是通   过SCN来标记操作而不是时间。
  select to_char(time_dp,'yyyy-mm-dd hh24:mi:ss') time,scn from smon_scn_
  查看时间和scn的对应关系。
  要查询指定范围的时间和scn的的映射关系可以使用函数timestamp_to_scn();或者scn_to_timestamp()函数
  select timestamp_to_scn(sysdate-30/1440)----查询半小时之前的scn码
  select scn_to_timestamp()-----查询指定scn码对应的timestamp
  四、修改数据值(dml误操作)
  update flashback_of set desc1='update1' ,desc2='update1' where id='01';
  commit;
  五、获得dml误操作之前指定的scn的全部数据值
    -----------------get before update---------------
   select * from flashback_of as of scn ;
  六、获得误操作之前的记录保存到指定表中待处理
  ------------get original values &for dml opertations---------  create table destination_table
    as select * from flashback_of as of scn ;
  1、在确定了要闪回的大致时间以后可以使用如下sql确定scn
  select timestamp_to_scn(sysdate-30/1440)---获取半小时之前的scn码
  select * from tablename as of scn scn_------获得指定表在半小时之前的记录快照
  实现根据要闪回的大致时间获得要恢复的数据。
  2、避免直接使用 as of timestamp的方式获得闪回数据(timestamp的方式较scn不是非常的准确)
  最好是根据timestamp获得scn,然后利用scn直接获得目标闪回数据。
推荐使用,由于中,因为与时间点的同步需要分钟,如果最近分钟之内的数据需要查询,可能会查询丢失,而则不存在这个问题。中这个问题已修正(与时间点的大致关系,可以通过分析归档日志获得)。
查询的局限:
不能到天以前的数据。
闪回查询无法恢复到表结构改变之前,因为闪回查询使用的是当前的数据字典。
受到参数的影响,对于之前的数据,不保证能成功。
对等不记录回滚的操作,不能恢复。
普通用户使用包,必须通过管理员授权。命令如下oracle(3)
ORACLE恢复删除表或表记录
一:表的恢复
& & &对误删的表,只要没有使用PURGE永久删除选项,那么从flash back区恢复回来希望是挺大的。一般步骤有:
1、从flash back里查询被删除的表
& & select * from recyclebin
2.执行表的恢复
& &flashback table &tb &to before drop,这里的tb代表你要恢复的表的名称。
二:表数据恢复
& & 对误删的表记录,只要没有truncate语句,就可以根据事务的提交时间进行选择恢复,一般步骤有:
& & &1、先从flashback_transaction_query视图里查询,视图提供了供查询用的表名称、事务提交时间、UNDO_SQL等字段。
& & &如:select * from flashback_transaction_query where table_name='TEST';
& & &2、执行表记录恢复
& & &一般先根据时间进行查询,查询语句模式为select * from tb as of timestamp to_timestamp(time,'yyyy-mm-dd hh24:mi:ss'); tb指表名称,time指某个时间点
& & & 如select * from scott.test as of timestamp to_timestamp(' 20:53:57','yyyy-mm-dd hh24:mi:ss');
& & 若有数据,恢复极为简单了,语句为flashback table tb to timestamp to_timestamp(time,'yyyy-mm-dd hh24:mi:ss');
& &如flashback table scott.test to timestamp to_timestamp(' 20:47:30','yyyy-mm-dd hh24:mi:ss');
注意:alter table testvarchar
& & 这个命令的作用是,允许&修改分配给行的rowid。在Oracle 中,插入一行时就会为它分配一个rowid,而且这一行永远拥有这个rowid。闪回表处理会对EMP 完成DELETE,并且重新插入行,这样就会为这些行分配一个新的rowid。要支持闪回就必须允许Oracle
执行这个操作
select 'insert into '|| t.original_name ||'
select * from ( '
'select * from &'|| t.object_name
as of timestamp to_timestamp(' || t.droptime || ', yyyy-mm-dd hh24:mi:ss) minus
select * from ' || t.original_name || ')'
from recyclebin t where t.ts_name = 'EPAYDB'
and t.droptime & ':12:20:35' and t.can_undrop = 'YES'
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:95706次
积分:2022
积分:2022
排名:第13420名
原创:99篇
转载:51篇
评论:26条
(1)(3)(2)(1)(4)(2)(4)(2)(1)(1)(1)(1)(1)(4)(7)(2)(8)(7)(1)(1)(9)(10)(5)(4)(14)(21)(3)(1)(3)(1)(9)(4)(6)(4)(7)(1)sqlplus中插入timestamp类型_百度知道
sqlplus中插入timestamp类型
就是用复合格式的字符串插入Timestamp类型的字段.数据库中的Timestamp类型不包含上面的毫秒部分。所以用DefaultFormat类将日期编程符合格式的字符串,然后直接用这个字符串插入这个字段。不过要注意的是,由于插入的是字符串,所以SQL语句中要带''--单引号。
其他类似问题
为您推荐:
提问者采纳
55') FROM DUAL; 2SELECT to_timestamp(&#39:MI;;你可以把双引号改成单引号;YYYY-MM-DD HH24:34:SS&#39,把表示分钟的MM改成MI,&#39
提问者评价
之前都试过了的,因为着急,改了前面的mm
第2个mm没改成mi 。符号 我也改过了的。自己不耐心。谢谢
timestamp的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁数据库(19)
SELECT * FROM TABLE_1 AS OF TIMESTAMP TO_TIMESTAMP(':00:00','YYYYMMDD HH24:MI:SS');
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:68451次
积分:1810
积分:1810
排名:第15307名
原创:106篇
转载:84篇
(1)(3)(2)(7)(11)(2)(1)(8)(3)(1)(7)(11)(21)(3)(5)(7)(8)(15)(74)1.1--闪回查询之As of timestamp_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
1.1--闪回查询之As of timestamp
上传于||暂无简介
大小:4.78KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢}

我要回帖

更多关于 select as timestamp 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信