Oracle学习(十三):闪回

本文详细介绍了Oracle数据库的闪回功能,包括闪回表、闪回删除、闪回版本查询、事务查询,以及如何使用undo和SCN进行数据恢复。还涉及权限管理、行移动和注意事项,如系统表不可闪回和DDL操作限制。
摘要由CSDN通过智能技术生成

–scope的取值: momery spfile both

–momery:只改当前内存(即数据库),不改参数文件;重启数据库后恢复原样

–spfile:只改参数文件,不改数据库;重启数据库后变为修改后的

–both:数据库,参数都改

–授予闪回权限:grant flashback any table to scott;

–授予事务查询权限:grant select any transaction to scott;

SQL> – 1.闪回表:将表回退到过去的一个时间上

SQL> flashback table flashback_table to scn 3784220;

SQL> --开启表的行移动

SQL> alter table flashback_table enable row movement;

SQL> --2.闪回删除

SQL> flashback table testseq to before drop;

SQL> --闪回重名的表

SQL> flashback table testseq to before drop rename to testseq_old;

SQL> --查看回收站,管理员没有回收站

SQL> show recyclebin

SQL> --清空回收站

SQL> purge recyclebin;

SQL> --通过回收站的名字查看表要加双引号

SQL> select * from “BIN$UhseqyX1Reyl5iurpupyEg==$0”;

SQL> /*

SQL> 小结:

SQL> 基本概念: 1. SCN 2. 900秒 3. 权限 flashback any tables

SQL> 闪回表:将表回退到过去的一个时间

SQL> 1. 行移动

SQL> 2. 执行闪回表

SQL> 注意: 系统表不能闪回;不能跨越DDL

SQL> 问题: 如何得到离该操作最近的一个时间??

SQL> 闪回删除: Oracle的回收站

SQL> 1. 执行闪回删除

SQL> 2. 通过回收站中的名字闪回(双引号)

SQL> 3. 重名的表

SQL> 4. 触发器(disable)

SQL> */

SQL> --3.闪回版本查询

SQL> --执行闪回版本查询

SQL> select tid,tname,versions_operation 操作,versions_starttime 起始时间,

2 versions_endtime 结束时间,versions_xid 事务号

3 from versions_table

4 versions between TIMESTAMP MINVALUE and MAXVALUE

5 order by 1,4;

SQL> --4.闪回事务查询

SQL> --视图flashback_transaction_query

SQL> desc flashback_transaction_query

SQL> --得到XID

SQL> select tid,tname,versions_operation 操作,versions_starttime 起始时间,

2 versions_endtime 结束时间,versions_xid 事务号

3 from transaction_table

4 versions between TIMESTAMP MINVALUE and MAXVALUE

5 order by 事务号;

SQL> --通过XID查询事务信息,再利用undo_sql撤销事务操作

SQL> select operation,undo_sql

2 from flashback_transaction_query

3 where xid=‘080029005C050000’;

2.在Sqlplus下实际执行的结果录屏

SQL> host cls

SQL> /*

SQL> 1. 错误地删除了记录

SQL> 2. 错误地删除了表

SQL> 3. 查询历史记录

SQL> 4. 如何撤销一个已经提交的事务

SQL>

SQL> 闪回的类型

SQL> 1. 闪回表:将表回退到过去的一个时间上

SQL> 2. 闪回删除:Oracle回收站

SQL> 3. 闪回版本查询:所有历史记录

SQL> 4. 闪回事务查询: 通过select语句得到一个 undo_sql

SQL>

SQL> 5. 闪回数据库

SQL> 6. 闪回归档日志

SQL> */

SQL> --SCN系统改变号(时间)

SQL> select to_char(systimestamp,‘yyyy-mm-dd hh24:mi:ss*ff’) 时间,

2 timestamp_to_scn(systimestamp) SCN

3 from dual;

时间 SCN


2012-10-25 10:31:02*000000 3783972

SQL> /*

SQL> SQL> show parameter undo

SQL>

SQL> NAME TYPE VALUE

SQL> ------------------------------------ ----------- --------------------

SQL> undo_management string AUTO

SQL> undo_retention integer 1200

SQL> undo_tablespace string UNDOTBS1

SQL> SQL> --scope的取值: momery spfile both

SQL> SQL> alter system set undo_retention=900 scope=both;

SQL> */

SQL> --权限 grant flashback any table to scott;

SQL> create table flashback_table

2 (fid number,fname varchar2(20));

表已创建。

SQL> insert into flashback_table values(1,‘Tom’);

已创建 1 行。

SQL> insert into flashback_table values(2,‘Mary’);

已创建 1 行。

SQL> insert into flashback_table values(3,‘Mike’);

已创建 1 行。

SQL> commit;

提交完成。

SQL> --当前时间

SQL> select to_char(systimestamp,‘yyyy-mm-dd hh24:mi:ss*ff’) 时间,

2 timestamp_to_scn(systimestamp) SCN

3 from dual;

时间 SCN


2012-10-25 10:36:22*046000 3784220

SQL> select * from flashback_table;

FID FNAME


1 Tom

2 Mary

3 Mike

SQL> --删除mary

SQL> delete from flashback_table where fid =2;

已删除 1 行。

SQL> commit;

提交完成。

SQL> select * from flashback_table;

FID FNAME


1 Tom

3 Mike

SQL> --执行闪回表

SQL> flashback table flashback_table to scn 3784220;

flashback table flashback_table to scn 3784220

第 1 行出现错误:

ORA-08189: 因为未启用行移动功能, 不能闪回表

SQL> --开启表的行移动

SQL> alter table flashback_table enable row movement;

表已更改。

SQL> flashback table flashback_table to scn 3784220;

闪回完成。

SQL> select * from flashback_table;

FID FNAME


1 Tom

2 Mary

3 Mike

SQL> --问题:如何获取最近的一个时间?

SQL> host cls

SQL> --闪回删除

SQL> select * from tab;

TNAME TABTYPE CLUSTERID


DEPT TABLE

EMP TABLE

BONUS TABLE

SALGRADE TABLE

EMP20 TABLE

TESTSAVEPOINT TABLE

TEST2 TABLE

MYPERSON TABLE

EMP10 TABLE

EMPINCOME TABLE

VIEW1 VIEW

TNAME TABTYPE CLUSTERID


VIEW2 VIEW

TESTSEQ TABLE

HREMP SYNONYM

MSG1 TABLE

TEST1 TABLE

PM_CI TABLE

PM_STU TABLE

FLASHBACK_TABLE TABLE

SYS_TEMP_FBT TABLE

已选择20行。

SQL> drop table test1;

表已删除。

SQL> show recyclebin

ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME


TEST1 BIN$Rn2qG7V+SO2k+aNrG/oYww==$0 TABLE 2012-10-25:10:45:11

SQL> purge recyclebin;

回收站已清空。

SQL> --管理员没有回收站

SQL> select * from TESTSEQ;

TID TNAME


3 aaa

4 aaa

5 aaa

8 aaa

SQL> drop table TESTSEQ;

表已删除。

SQL> show recyclebin

ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME


TESTSEQ BIN$UhseqyX1Reyl5iurpupyEg==$0 TABLE 2012-10-25:10:47:38

SQL> select * from TESTSEQ;

select * from TESTSEQ

第 1 行出现错误:

ORA-00942: 表或视图不存在

SQL> select * from tab;

TNAME TABTYPE CLUSTERID


DEPT TABLE

EMP TABLE

BONUS TABLE

SALGRADE TABLE

EMP20 TABLE

TESTSAVEPOINT TABLE

TEST2 TABLE

MYPERSON TABLE

EMP10 TABLE

EMPINCOME TABLE

VIEW1 VIEW

TNAME TABTYPE CLUSTERID


VIEW2 VIEW

HREMP SYNONYM

MSG1 TABLE

BIN$UhseqyX1Reyl5iurpupyEg==$0 TABLE

PM_CI TABLE

PM_STU TABLE

FLASHBACK_TABLE TABLE

SYS_TEMP_FBT TABLE

已选择19行。

SQL> select * from BIN$UhseqyX1Reyl5iurpupyEg==$0;

select * from BIN$UhseqyX1Reyl5iurpupyEg==$0

第 1 行出现错误:

ORA-00933: SQL 命令未正确结束

SQL> select * from “BIN$UhseqyX1Reyl5iurpupyEg==$0”;

TID TNAME


3 aaa

4 aaa

5 aaa

8 aaa

SQL> host cls

SQL> show recyclebin

ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME


TESTSEQ BIN$UhseqyX1Reyl5iurpupyEg==$0 TABLE 2012-10-25:10:47:38

SQL> --执行闪回删除

SQL> flashback table testseq to before drop;

闪回完成。

SQL> show recyclebin

SQL> select * from testseq;

TID TNAME


3 aaa

4 aaa

5 aaa

8 aaa

SQL> host cls

SQL> drop table testseq;

表已删除。

SQL> create table testseq(tid number);

表已创建。

SQL> drop table testseq;

表已删除。

SQL> show recyclebin

ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME


TESTSEQ BIN$ZsXHtmHLTLu40DAC6jiKqg==$0 TABLE 2012-10-25:10:51:22

TESTSEQ BIN$hBllsvl5Tum9hHaSvtQhag==$0 TABLE 2012-10-25:10:51:01

SQL> flashback table testseq to before drop;

闪回完成。

SQL> show recyclebin

ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME


TESTSEQ BIN$hBllsvl5Tum9hHaSvtQhag==$0 TABLE 2012-10-25:10:51:01

SQL> select * from testseq;

未选定行

SQL> flashback table testseq to before drop;

flashback table testseq to before drop

第 1 行出现错误:

ORA-38312: 原始名称已被现有对象使用

SQL> --闪回重名的表

SQL> flashback table testseq to before drop rename to testseq_old;

闪回完成。

SQL> select * from testseq_old;

TID TNAME


3 aaa

4 aaa

5 aaa

8 aaa

SQL> host cls

SQL> /*

SQL> 小结:

SQL> 基本概念: 1. SCN 2. 900秒 3. 权限 flashback any tables

SQL> 闪回表:将表回退到过去的一个时间

SQL> 1. 行移动

SQL> 2. 执行闪回表

SQL> 注意: 系统表不能闪回;不能跨越DDL

SQL> 问题: 如何得到离该操作最近的一个时间??

SQL> 闪回删除: Oracle的回收站

SQL> 1. 执行闪回删除

SQL> 2. 通过回收站中的名字闪回(双引号)

SQL> 3. 重名的表

SQL> 4. 触发器(disable)

SQL> */

SQL> host cls

SQL> --闪回版本查询

SQL> create table versions_table

2 (tid number,tname varchar2(20));

表已创建。

SQL> insert into versions_table values(1.‘Tom’);

insert into versions_table values(1.‘Tom’)

第 1 行出现错误:

ORA-00917: 缺失逗号

SQL> insert into versions_table values(1,‘Tom’);

已创建 1 行。

SQL> commit;

提交完成。

SQL> insert into versions_table values(2,‘Mary’);

已创建 1 行。

SQL> commit;

提交完成。

SQL> insert into versions_table values(3,‘Mike’);

已创建 1 行。

Docker步步实践

目录文档:

①Docker简介

②基本概念

③安装Docker

④使用镜像:

⑤操作容器:

⑥访问仓库:

⑦数据管理:

⑧使用网络:

⑨高级网络配置:

⑩安全:

⑪底层实现:

⑫其他项目:

nsert into versions_table values(2,‘Mary’);

已创建 1 行。

SQL> commit;

提交完成。

SQL> insert into versions_table values(3,‘Mike’);

已创建 1 行。

Docker步步实践

目录文档:

[外链图片转存中…(img-FGKmG9Ab-1714435376609)]

[外链图片转存中…(img-lezWQruP-1714435376609)]

①Docker简介

②基本概念

③安装Docker

[外链图片转存中…(img-aGVOKv3e-1714435376609)]

④使用镜像:

[外链图片转存中…(img-fu4QiziY-1714435376610)]

⑤操作容器:

[外链图片转存中…(img-ZRn9TIb2-1714435376610)]

⑥访问仓库:

[外链图片转存中…(img-QBETgcTI-1714435376610)]

⑦数据管理:

[外链图片转存中…(img-5mkG6ukV-1714435376611)]

⑧使用网络:

[外链图片转存中…(img-qxueM4qz-1714435376611)]

⑨高级网络配置:

[外链图片转存中…(img-RaA0PP3k-1714435376611)]

⑩安全:

[外链图片转存中…(img-MNXzN8Vw-1714435376611)]

⑪底层实现:

[外链图片转存中…(img-3Vi2MH1S-1714435376612)]

⑫其他项目:

[外链图片转存中…(img-PIJiLqbA-1714435376612)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 30
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值