Oracle闪回技术(笔记)

简介:

1、设置SQL*Plus提示符

临时设置

set sqlprompt "_user'@'_connect_identifier>"

永久设置

为了对所有SQL*Plus会话自动设置sqlprompt.将上面的命令放置在ORACLE_HOME_HOME/sqlplus/admin目录中的glogin.sql文件内

2、查看是否启用闪回临视

SQL> select flashback_on from v$database;

 

FLASHBACK_ON

------------------

YES

3、查询回收站

show recyclebin;会显示当前的用户有三个删除的表并显示:原先的名称、回收站名称以及删除的时间。

右要了解更详细的信息,查询数据字典视图USER_RECYCLEBINDBA_RECYCLEBIN来查看全局视图

select owner,original_name,type,droptime,can_undrop,space fromdba_recyclebin;

4PURGE命令永久性地清除删除的对象

(1)删除表并且不将它转移到回收站

drop table <table_name> purge;

(2)从回收站中清除表,如果存在多个具有相同原始名称的对象,那么将清除时间最久的对象。也可以通过指定回收站名称来避免这种混淆

purge table <table_name>;

3)从回收站中清除索引

 purge index<index_name>;

 (4)从表空间中清除所有删除的对象

 purge tablespace<tablespace_name>;

 (5)从表空间中清除属于一个用户的所有删除的对象

 purge tablespace<tablespace_name> user <user_name>;

 (6)清除您删除的所有对象

 purge user_recyclebin;

 7)清除所有删除的对象,但是执行它需要DBA权限。

 purge dba_recyclebin;

5、配置闪回数据库

1)确保数据库处于归档日志模式

归档日志模式是启用闪回数据库的先决条件

 

SQL> select log_mode from v$database;

 

LOG_MODE

------------

ARCHIVELOG

2)创建闪回恢复区

SQL> alter system setdb_recovery_file_dest='/opt/oracle/flash_recovery_area';

SQL> alter system set db_recovery_file_dest_size=8G;

3)设置闪回保留目标时间

SQL> alter system set db_flashback_retention_target=240;

4)干净地关闭并加载数据库

SQL> shutdown immediate

SQL> startup mount;

5)启用闪回日志记录。

SQL> alter database flashback on;

6)打开数据库

SQL> alter database open;

6、创建闪回数据归档

(1)创建一个供闪回数据库归档使用的表空间:

create tablespace fda datafile 'fda1.dbf'size 10m;

(2)在表空间创建一个保留时间为7年的闪回数据归档:

create flashback archive fla1 tablespacefda retention 7 year;

(3)创建用于此练习的模式,并授予它DBA角色:

grant dba to fbdauser identified byfbdauser;

(4)授予用户操作归档的必要权限:

grant flashback archive on fla1 tofbdauser;

(5)作为fbdauser进行连接。创建一个表并为此表启用闪回数据归档:

conn fbdauser/fbdauser

create table t1 as select * from all_users;

alter table t1 flashback archive fla1;

(6)运行这些查询来确定归档创建的对象。可能必须等待几分钟,因为对象不是立即创建的。

select object_name,object_type from user_objects;

select segment_name,segment_type from dba_segments wheretablespace_name='FDA';

(7)对保护的表执行一些DML

delete from t1;

commit;

8)使用标准的闪回查询语法对保护的表执行闪回查询,然后查询归档中的历史表。

select count(*) from t1;

select count(*) from t1 as of timestamp(sysdate-20/1440);

select ENDSCN,USER_ID,CREATED from SYS_FBA_HIST_75307;

(9)尝试对保护的表执行一些DDL命令:

alter table t1 drop column created;

truncate table t1;

drop table t1;

作为SYSDBA连接,并尝试执行如下命令:

drop user fbdauser cascade;

drop tablespace fda including contents and datafiles;

注意,这些命令将会生成与归档和保护的表的存在有关的错误。

10)删除表的除归档保护:

alter table fdbauser.t1 no flashbackarchive;

(11)删除闪回数据归档

drop flashback archive fla1;

(12)重新运行步骤(9)中的所有命令。

7、闪回查询实验

(1)记录时间

SCOTT@orcl>select sysdate from dual;

 

SYSDATE

-------------------

2015-10-06 18:46:43

2)从表中删除一些行,并提交更改。

SCOTT@orcl>delete from regions where region_name like 'A%';

 

2 rows deleted.

 

SCOTT@orcl>commit;

 

Commit complete.

3)查询确认表中只有两行。

SCOTT@orcl>select * from regions;

 

 REGION_ID REGION_NAME

---------- --------------------------------------------------

        1 Europe

        4 Middle East and Africa

4)查询针对以前某个时间的表

SCOTT@orcl>select * from regions as of timestampto_timestamp('2015-10-06 18:46:43','yyyy-mm-dd hh24:mi:ss');

 

 REGION_ID REGION_NAME

---------- --------------------------------------------------

        1 Europe

        2 Americas

        3 Asia

        4 Middle East and Africa

 

SCOTT@orcl>select * from regions as of timestampto_timestamp('2015-10-06 18:46:43','yyyy-mm-dd hh24:mi:ss') minus select * fromregions;

 

 REGION_ID REGION_NAME

---------- --------------------------------------------------

        2 Americas

        3 Asia

8、通过SQL*Plus使用闪回删除

在本练习中创建一个新的模式并在该模式内创建一个表,然后使用flashback drop恢复它

1)作为用户SYSTEM使用SQL*Plus连接数据库

2)创建一个用户

SYS@orcl>create user dropper identified by dropper;

SYS@orcl>grant create session,resource to dropper;

SYS@orcl>conn dropper/dropper

3)创建一个带有索引和约束的表,并插入一行:

DROPPER@orcl>create table names (name varchar2(10));

DROPPER@orcl>create index name_idx on names(name);

DROPPER@orcl>alter table names add (constraint name_uunique(name));

DROPPER@orcl>insert into names values('John');

DROPPER@orcl>commit;

4)确认模式的内容

DROPPER@orcl>select object_name,object_type from user_objects;

DROPPER@orcl>select constraint_name,constraint_type,table_namefrom user_constraints;

5)删除该表:

DROPPER@orcl>drop table names;

6)重新运行步骤(4)中的查询。注意,已从user_objects中删除了对象,但是仍存在采用系统生成的约束。

7)查询回收站以查看原始的名称到回收站名称的映射:

DROPPER@orcl>select object_name,original_name,type fromuser_recyclebin;

注意,该视图并没有显示约束

8)这表明可以查询回收站但是无法对它执行DML

DROPPER@orcl>select * from"BIN$IVfJDb9uy+zgVQAAAAAAAQ==$0";

 

NAME

----------

John

9)使用flashback drop恢复表:

DROPPER@orcl>flashback table names to before drop;



本文转自 corasql 51CTO博客,原文链接:http://blog.51cto.com/corasql/1700513,如需转载请自行联系原作者
相关文章
|
5月前
|
SQL Oracle 关系型数据库
不小心删除表或数据后,如何利用Oracle的闪回进行恢复
不小心删除表或数据后,如何利用Oracle的闪回进行恢复
|
5月前
|
运维 Oracle 容灾
Oracle dataguard 容灾技术实战(笔记),教你一种更清晰的Linux运维架构
Oracle dataguard 容灾技术实战(笔记),教你一种更清晰的Linux运维架构
|
2月前
|
SQL 存储 Oracle
"挑战极限!Oracle数据库精英试炼场:夺命连环5问,你能否一路披荆斩棘,登顶技术巅峰?"
【8月更文挑战第9天】Oracle,数据库领域的巨擘,以卓越的数据处理能力、稳定性和安全性成为企业级应用首选。今天我们带来“Oracle夺命连环25问”。首问:核心组件有哪些?答:实例(含内存结构和后台进程)、物理存储(数据文件、控制文件等)及逻辑存储(表空间、段等)。第二问:如何理解事务隔离级别?答:Oracle支持四种级别,默认READ COMMITTED,避免脏读,但可能遇到不可重复读和幻读。
39 0
|
5月前
|
SQL Oracle 关系型数据库
JAVAEE框架数据库技术之12_oracle常用函数和高级查询子查询
JAVAEE框架数据库技术之12_oracle常用函数和高级查询子查询
105 0
JAVAEE框架数据库技术之12_oracle常用函数和高级查询子查询
|
5月前
|
存储 Java 数据库
JAVAEE框架数据库技术之13_oracle 之PLSQL技术及存储过程和函数(二)
JAVAEE框架数据库技术之13_oracle 之PLSQL技术及存储过程和函数
73 0
|
4月前
|
弹性计算 Oracle 关系型数据库
技术好文共享:谁说阿里云不能跑Oracle,让驻云架构师告诉你怎么办!
技术好文共享:谁说阿里云不能跑Oracle,让驻云架构师告诉你怎么办!
39 0
|
4月前
|
Oracle 关系型数据库 数据库
oracle基本操作笔记分享
oracle基本操作笔记分享
34 0
|
5月前
|
Oracle 关系型数据库 数据库
Oracle闪回:时光倒流,数据重现的魔法
【4月更文挑战第19天】Oracle数据库的闪回功能如同时光机,借助撤销段保存数据旧版,实现数据丢失或误改后的恢复。包括闪回查询、闪回表、闪回删除和闪回数据库等,适用于不同场景。使用时注意撤销段空间、保留时间和定期备份。虽非万能,但在数据保护体系中扮演重要角色。
|
5月前
|
Oracle 关系型数据库
oracle基本笔记整理及案例分析2
oracle基本笔记整理及案例分析2
|
5月前
|
Oracle 关系型数据库
oracle基本笔记整理及案例分析1
oracle基本笔记整理及案例分析1

推荐镜像

更多
下一篇
无影云桌面