楼主: yangtingkun

[精华] Oracle11新特性——撤销事务

[复制链接]
论坛徽章:
226
BLOG每日发帖之星
日期:2010-02-11 01:01:06紫蛋头
日期:2013-01-12 23:45:222013年新春福章
日期:2013-02-25 14:51:24问答徽章
日期:2013-10-17 18:06:40优秀写手
日期:2013-12-18 09:29:10马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:14
21#
 楼主| 发表于 2008-6-24 13:22 | 只看该作者
原帖由 foxmile 于 2008-5-6 17:37 发表
老杨有用过这个特性恢复数据么。


没有11g的正式环境,怎么会用到这个特性呢。

使用道具 举报

回复
论坛徽章:
226
BLOG每日发帖之星
日期:2010-02-11 01:01:06紫蛋头
日期:2013-01-12 23:45:222013年新春福章
日期:2013-02-25 14:51:24问答徽章
日期:2013-10-17 18:06:40优秀写手
日期:2013-12-18 09:29:10马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:14
22#
 楼主| 发表于 2008-6-24 13:23 | 只看该作者
原帖由 yuxuan 于 2008-5-6 23:47 发表
感觉oracle11g许多东西不是很实用
oracle应该在稳定性上下功夫


新功能历来如此,多等几个版本就会稳定下来

使用道具 举报

回复
论坛徽章:
168
马上加薪
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-01-04 11:49:54蜘蛛蛋
日期:2011-12-05 16:08:56ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41设计板块每日发贴之星
日期:2011-07-22 01:01:02ITPUB官方微博粉丝徽章
日期:2011-06-30 12:30:16管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:33
23#
发表于 2008-7-1 09:19 | 只看该作者
不错

使用道具 举报

回复
论坛徽章:
3
itpub13周年纪念徽章
日期:2014-10-08 15:16:50itpub13周年纪念徽章
日期:2014-10-08 15:16:50itpub13周年纪念徽章
日期:2014-10-08 15:16:50
24#
发表于 2008-7-1 16:26 | 只看该作者
新人来学习了

使用道具 举报

回复
论坛徽章:
6
奥运会纪念徽章:花样游泳
日期:2008-06-03 20:39:29行业板块每日发贴之星
日期:2009-01-30 01:01:06生肖徽章2007版:猪
日期:2009-03-16 10:15:58
25#
发表于 2008-7-3 22:53 | 只看该作者
FLASHBACK 是不是一样的效果呢?
不是很明白....sorry

使用道具 举报

回复
论坛徽章:
6
奥运会纪念徽章:花样游泳
日期:2008-06-03 20:39:29行业板块每日发贴之星
日期:2009-01-30 01:01:06生肖徽章2007版:猪
日期:2009-03-16 10:15:58
26#
发表于 2008-7-3 22:54 | 只看该作者
怎么感觉10g就有了呢

使用道具 举报

回复
论坛徽章:
226
BLOG每日发帖之星
日期:2010-02-11 01:01:06紫蛋头
日期:2013-01-12 23:45:222013年新春福章
日期:2013-02-25 14:51:24问答徽章
日期:2013-10-17 18:06:40优秀写手
日期:2013-12-18 09:29:10马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:14
27#
 楼主| 发表于 2008-7-6 23:14 | 只看该作者
10g可以flashback数据库,但是不能将粒度细化到事务上

使用道具 举报

回复
论坛徽章:
249
世界杯纪念徽章
日期:2006-07-20 13:19:202012新春纪念徽章
日期:2012-01-04 11:50:442012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:23马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14
28#
发表于 2008-7-9 16:56 | 只看该作者
原帖由 yangtingkun 于 2008-7-6 23:14 发表
10g可以flashback数据库,但是不能将粒度细化到事务上


1og中可以flashback事务,表,以及drop的表等
楼主的例子在10g中应该也可以操作
本来想试一下,但是没有dba的权限
如果楼主有空试验的话,告诉我一哈结果

使用道具 举报

回复
论坛徽章:
249
世界杯纪念徽章
日期:2006-07-20 13:19:202012新春纪念徽章
日期:2012-01-04 11:50:442012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:23马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14
29#
发表于 2008-7-10 10:56 | 只看该作者
找到了一个数据库SYS用户密码没有变 简单试验了一下
环境ORACLE10G,用户有SYSDBA权限

不用不知道,原来DBA,和SYSDBA不一样吖
一直用一个有DBA权限的用户,怎么也登陆不上

SQL> select * from flashback_test;

C COL2
- ----------
1 TRN1
2 TRN2
3 TRN3
4 TRN3

下边是更新这个表的操作

SQL> --Transaction-(4)
SQL> update flashback_test set col2='TRN4' where col1=4;
1 row updated.
SQL> update flashback_test set col2='TRN4' where col1=1;
1 row updated.
SQL> commit;
Commit complete.
SQL> --Transaction-(5)
SQL> update flashback_test set col2='TRN5' where col1=2;
1 row updated.
SQL> update flashback_test set col2='TRN5' where col1=3;
1 row updated.
SQL> commit;
Commit complete.
SQL> --Transaction-(6)
SQL> update flashback_test set col2='TRN6' where col1=4;
1 row updated.
SQL> update flashback_test set col2='TRN6' where col1=1;
1 row updated.
SQL> commit;
Commit complete.

SQL> --最后结果
SQL> select * from flashback_test;

C COL2
- ----------
1 TRN6
2 TRN5
3 TRN5
4 TRN6

查找更新履历
★★★★★★★这个地方有点问题,总是报错。。。★★★★★★★★★
ORA-01466错误,没有找到原因,谁知道告诉我一下哈  

SQL> SELECT VERSIONS_STARTSCN "Start SCN", VERSIONS_ENDSCN "End SCN",
            VERSIONS_XID "Xid", VERSIONS_OPERATION "Operation", COL1,COL2
     FROM FLASHBACK_TEST
          VERSIONS BETWEEN TIMESTAMP
           SYSTIMESTAMP - INTERVAL '15' MINUTE
           AND
          SYSTIMESTAMP;

----换了一种写法---

SQL> select VERSIONS_STARTSCN "Start SCN", VERSIONS_ENDSCN "End SCN",VERSIONS_XID "Xid", versions_operation "Operation",
COL1 , COL2 from FLASHBACK_TEST
versions between scn minvalue and maxvalue;


结果出来啦,估计是我的SYSTIMESTAMP有问题,可是问题在哪里呢

1 16407081                        02000900501A0000   U 1 TRN6
2 16407081                        02000900501A0000   U 4 TRN6
3 16407065                        090018005B1A0000   U 3 TRN5
4 16407065                        090018005B1A0000   U 2 TRN5
5 16407057     16407081  01001700CD130000   U 1 TRN4
6 16407057     16407081  01001700CD130000   U 4 TRN4
7 16407046     16407057  05000E004E1A0000   I   4 TRN4
8 16407046     16407065  05000E004E1A0000   I   3 TRN3
9 16407046     16407065  05000E004E1A0000   I   2 TRN2
10 16407046   16407057  05000E004E1A0000 I 1 TRN1



SQL> conn / as sysdba
Connected.

SQL> SELECT UNDO_SQL
  2  FROM FLASHBACK_TRANSACTION_QUERY
  3  WHERE XID='02000900501A0000'; ←TRN6 这里指定XID

UNDO_SQL
---------------------------------------------------------------------
update "ORAORA"."FLASHBACK_TEST" set "COL2" = 'TRN4      ' where ROWID = 'AAAMVJAAFAAAAHVAAA';
update "ORAORA"."FLASHBACK_TEST" set "COL2" = 'TRN4      ' where ROWID = 'AAAMVJAAFAAAAHVAAD';

SQL> SELECT UNDO_SQL
     FROM FLASHBACK_TRANSACTION_QUERY
     WHERE XID='090018005B1A0000' ←TRN5 这里指定XID
UNDO_SQL
---------------------------------------------------------------------
update "ORAORA"."FLASHBACK_TEST" set "COL2" = 'TRN3      ' where ROWID = 'AAAMVJAAFAAAAHVAAC';
update "ORAORA"."FLASHBACK_TEST" set "COL2" = 'TRN2      ' where ROWID = 'AAAMVJAAFAAAAHVAAB';


SQL> SELECT UNDO_SQL
     FROM FLASHBACK_TRANSACTION_QUERY
     WHERE XID='05000E004E1A0000'; ←TRN5 这里指定XID

UNDO_SQL
---------------------------------------------------------------------
update "ORAORA"."FLASHBACK_TEST" set "COL2" = 'TRN1      ' where ROWID = 'AAAMVJAAFAAAAHVAAA';
update "ORAORA"."FLASHBACK_TEST" set "COL2" = 'TRN3      ' where ROWID = 'AAAMVJAAFAAAAHVAAD';

。。。。。顺辞取出各个的UNDO_SQL
然后执行

SQL> select * from flashback_test;

C COL2
- ----------
1 TRN1
2 TRN2
3 TRN3
4 TRN3


完了,总结

自己动手很重要哇,谢谢楼主

使用道具 举报

回复
论坛徽章:
249
世界杯纪念徽章
日期:2006-07-20 13:19:202012新春纪念徽章
日期:2012-01-04 11:50:442012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:23马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14
30#
发表于 2008-7-10 11:00 | 只看该作者
俺是新手,过于简单别笑哇

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表