oracle闪回技术

本文详细介绍了Oracle数据库中的闪回技术,包括配置闪回环境、闪回数据库、闪回删除的表以及闪回表数据等操作步骤。通过具体示例展示了如何在不同场景下运用这些功能来恢复数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、闪回技术配置
1、oracle 处于归档模式
2、用 alter database flashback on 开启闪回

1)配置oracle运行的模式
在sqlplus下以sys用户运行archive log list 命令

SQL> archive log list
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 481
Current log sequence 483
SQL>
database log mode 显示为No Archive Mode 证明数据库不处于归档模式,所以要开启归档模式,但是要开启归档模式,数据库必须要处于mount状态,因此要关闭数据库,重启数据库到mount状态
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.
Total System Global Area 722366464 bytes
Fixed Size 2216864 bytes
Variable Size 511708256 bytes
Database Buffers 205520896 bytes
Redo Buffers 2920448 bytes
Database mounted.
SQL> alter database archivelog ;
Database altered.
现在输入archivelog list命令可以查看到
SQL> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 483
Next log sequence to archive 485
Current log sequence 485
SQL>
Database log mode Archive Mode 证明数据库已经处于归档模式
注* alter database archivelog 是在oracle mount状态下使用
2)开启闪回
直接在mount状态执行alter database flashback on; 命令
SQL> alter database flashback on;
Database altered.
修改完之后可以在v$database里面查看运行模式和是否开启了闪回

SQL> select LOG_MODE,FLASHBACK_ON from v$database ;
LOG_MODE FLASHBACK_ON


ARCHIVELOG YES
SQL>
注*该命令也可以在oracle open状态下执行

二、闪回数据库
1、闪回命令
sql: 1、flashback database to timestamp (sysdate-1/24);–闪回一个小时
2、flashback database to scn 53943;
3、flashback database to restore point b4_load;

SQL> conn scott/oracle
Connected.
SQL> select * from t2;
no rows selected
SQL> show user;
USER is “SCOTT”
SQL> drop table t2; ———–册除表
Table dropped.
SQL> conn /as sysdba
Connected.
SQL> shutdown immediate —-关闭数据库
ORACLE instance shut down.
SQL> startup mount;——-开启数据到mount状态
ORACLE instance started.
Total System Global Area 722366464 bytes
Fixed Size 2216864 bytes
Variable Size 511708256 bytes
Database Buffers 205520896 bytes
Redo Buffers 2920448 bytes
Database mounted.
SQL> flashback database to timestamp (sysdate-1/144);—–闪回到十分钟前
Flashback complete.
SQL> alter database open read only ; —–开启数据只读验证数据
Database altered.
SQL> select * from t2;
select * from t2
*
ERROR at line 1:
ORA-00942: table or view does not exist
SQL> conn scott/oracle
Connected.
SQL> select * from t2;——-t2表已经恢复
no rows selected
SQL> conn /as sysdba
Connected.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area 722366464 bytes
Fixed Size 2216864 bytes
Variable Size 511708256 bytes
Database Buffers 205520896 bytes
Redo Buffers 2920448 bytes
Database mounted.
SQL> alter database open resetlogs ;——–开启数据库并且重置日志
Database altered.
SQL> conn scott/oracle
Connected.
SQL> select* from t2;
no rows selected
SQL>

注*此例权是一个简单的举例,在实际中不可能因为一个表的数据被删或者表被drop而回滚数据库
不能使用闪回数据库例子
1、 数据库文件被删除
2、当控制文件被标志为脱节
3、 数据库被删除
4 、当数据库data file 被reset之后,只可以闪回reset之后的操作

二、闪回册除的平
1、recyclebin(回收站)
oracle 的回收站类似于windows的回收站,当我们drop table 的时候它会像windows一样把表信息从数据字典删除并且放到回收站存放着。此时表里面的数据还存在数据块上没有删除。
2、查看recyclebin功能是否开启

SQL> show parameter recyclebin;

NAME TYPE VALUE


recyclebin string on

SQL>
此时recyclebin的状态为on,表示回收功能已经开启
3、闪回删除的表
1)SQL> select * from tt;

ID

 1

SQL>
现有表tt里面存在一条数据

2)删除表tt
SQL> drop table tt;
Table dropped.
SQL> select * from tt;
select * from tt
*
ERROR at line 1:
ORA-00942: table or view does not exist
SQL>
表tt已经不存在

3)查看回收站信息
SQL> select object_name,original_name from user_recyclebin;

OBJECT_NAME

ORIGINAL_NAME

BIN YUGR1XSVuELgUAB/AQAL4g== 0
TT

SQL>
或者
SQL> select object_name,original_name from recyclebin;
OBJECT_NAME

ORIGINAL_NAME

BIN YUGR1XSVuELgUAB/AQAL4g== 0
TT

SQL>
或者
SQL> show recyclebin;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME


TT BIN YUGR1XSVuELgUAB/AQAL4g== 0 TABLE 2017-12-27:00:13:56
SQL>
又或者可以以超级管理员查看dba_recyclebin信息

OBJECT_NAME:册除后存放到回收站的表名
ORIGINAL_NAME:删除前的表名

4)闪回删除的表
SQL> flashback table tt to before drop;
Flashback complete.
SQL>
SQL> select * from tt;

ID

 1

SQL>
表已经闪回,并且可以查询

ps:平时我们drop table 时 都会经过回收站 如果想删除不经过回收站可以用以下语句
drop table tt purge;
purge table tt;
drop tablespace test including contents;
如果某个表空间多个表被drop 并且数据还存在硬盘上,如果想完全释放些空间
purge table “object_name”
purge tablespace tablespacesname;

三、闪回表数据
SQL> show parameter undo;

NAME TYPE VALUE
—————- ——————– ———————-

undo_management string AUTO

undo_retention integer 86400

undo_tablespace string UNDOTBS1

SQL>
undo_retention 表示保留删回时长

alter tablespace undotbs1 retention guarantee;
如果设置retention guarantee 那么undo表空间不够用时数据库会hang住 具体内容可参照 http://www.linuxidc.com/Linux/2016-05/131842.htm(这个不是必选项)

1)测试
SQL> conn scott/scott;
Connected.
SQL> select * from tt;

ID

 1

SQL>
SQL> select to_char(sysdate ,’yyyy-mm-dd hh24:mi:ss’)from dual;

TO_CHAR(SYSDATE,’YYYY-MM-DDHH24:MI:SS’

2017-12-27 00:28:58

SQL>
SQL> delete from tt;

1 row deleted.

SQL> commit;

Commit complete.

SQL> select * from tt;

no rows selected

SQL> flashback table tt to timestamp to_date(‘2017-12-27 00:28:58’,’yyyy-mm-dd hh24:mi:ss’);
flashback table tt to timestamp to_date(‘2017-12-27 00:28:58’,’yyyy-mm-dd hh24:mi:ss’)
*
ERROR at line 1:
ORA-08189: cannot flashback the table because row movement is not enabled

SQL> alter table tt enable row movement;

Table altered.

SQL> flashback table tt to timestamp to_date(‘2017-12-27 00:28:58’,’yyyy-mm-dd hh24:mi:ss’);

Flashback complete.

SQL> select * from tt;

ID

 1

SQL>

alter table tt enable row movement; 此语句是开启行移动

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值