|
找到了一个数据库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
完了,总结
自己动手很重要哇,谢谢楼主 |
|