文档库 最新最全的文档下载
当前位置:文档库 › 利用闪回取数据_闪回数据库

利用闪回取数据_闪回数据库

--一.Oracle 闪回(FLASHBACK DATABASE)
--=================================
闪回顾名思义就是快速恢复数据曾经的某个状态
闪回的方式又可分为:数据库级别的闪回,表级别的闪回,事物级别闪回
根据数据受影响程度游客分为:闪回恢复,闪回查询

--2. 闪回数据库 flashback database特性
闪回数据库是取的闪回日志里面的数据(注意其他闪回全部是取的undo的数据)
flashback database 就是将数据库闪回到过去的某一时刻
闪回点之后的数据全部拜拜

--3. 闪回数据库 flashback database组成
闪回缓冲区:当启用的 flashback database ,则SGA中会开辟一块新的区域作为闪回缓冲器,大小有系统分配
启用新的RVWR进程,RVWR进程将闪回缓冲区的内容写日到闪回日志中(闪回日志不是重做日志,闪回日志是在重做日志之上的,是完整的数据块映像的日志。联机日志则是变化的日志)

闪回日志不能复用,不能归档。闪回日志使用循环写方式
--4. 闪回数据库 flashback database 配置

必须启用归档模式,且算会之后必须使用resetlogs打开数据库
4.1.查看数据库的归档模式是否启用
select log_mode ,open_mode,flashback_on from v$database ;
4.2.启用归档模式(必须在mount模式下)
alter database archivelog
4.3 启用flashback(同样在mount模式下)
alter database flashback on;
4.4 设置闪回目录、大小、时间(默认24小时)
alter system set db_recovery_file_dest='E:\log\recovery';
alter system set db_recovery_file_dest_size= 5g;
alter system set db_flashback_retention_target=2000;
4.5 查看闪回设置
show parameter db_recovery;--目录大小
show parameter db_flashback;--时间
select * from v$sgastat d where https://www.wendangku.net/doc/4311526451.html, like 'flashback%';--SGA中分配的大小
select * from v$recovery_log

--5. 实现闪回数据库(必须在mount模式下)
FLASHBACK DATABASE [] TO SCN
FLASHBACK DATABASE [] TO TIMESTMP

--实战演示
5.1 创建一个表
SQL> create table nick(n1 varchar2(100));
表已创建。
5.2 记录系统当前SCN
SQL> select current_scn from V$database;

CURRENT_SCN
-----------
884809

5.2 在表中插入几条数据
SQL> insert into nick
select '1' from dual
union all
select '2' from dual
union all
select '3' from dual ;

已创建3行。

5.3 再创建一个表
SQL> create table niciiiikii(n1 varchar2(100));
表已创建。

5.3 shutdown immediate;
SQL> shutdown immediate;

SQL> startup mount;


5.4 实施闪回

select timestamp_to_scn(to_timestamp('2011-11-02 09:00:00','YYYY-MM-DD HH24:MI:

SS')) from dual;
SQL> flashback database to SCN 9595983;

闪回完成。

5.5 校验数据
SQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项


SQL> alter database open resetlogs;--- 一定要用 resetlogs启动

--884809 这个时间以前的数据还在,但是之后的数据没了
SQL> select * from nick
2 ;
未选定行
--我们在这个时间创建的表也不在了
SQL> select * from niciiiikii;
select * from niciiiikii
*
第 1 行出现错误:
ORA-00942: 表或视图不存在

------------------------------------------闪回表空间的使用情况
select name,
d.space_limit / 1024 / 1024 sp_limt,
space_used / 1024 / 1024 sce_used
from v$recovery_file_dest d
--------------------------------可以将某些表空间排除
alter tablespace users flashback off;
---------------------------------我们也可以利用闪回找回删除的表 truncate 的表也可以噢
flashback table cy.NICK_009 to before drop
-----------------------------------注意: 一旦resetlogs之后,将不能再flashback至resetlogs之前的时间点。


注意:
闪回数据库一定设置足够的闪回空间,不然你会死的很惨
一定要多元备份,如果闪回数据库失败,等着哭吧

相关文档