您的位置:首页 > 数据库 > Oracle

ORACLE—闪回

2016-12-18 00:00 302 查看
闪回技术:使用与用户的DDL操作,而且没有发生结构变化
依赖undo表空间,所以将undo表空间设为自动增长,而且设置为auto自动管理
闪回不适用的情况:
1>
2>
3>

1.flashback database 100m--shrink
闪回功能
闪回日志
闪回路径,大小

alter database flashback on; //打开闪回功能 ,闪回功能会产生闪回日志,保证闪回日志的保存,影响数据库性能,占用数据库7%-10
alter database flashback off ;//关闭闪回功能
select flashback_on from v$database ;//查询闪回功能是否打开
在数据库mount状态下打开闪回功能

归档打开后:rvwr---recover write ---- //rvwr进程将归档缓冲区中的所有内容写到归档日志中
show parameter flashback_ // 决定了闪回日志保存的时间,默认是1440分钟(一天)

SQL> show parameter flashback_

NAME      TYPE  VALUE
------------------------------------ ----------- ------------------------------
db_flashback_retention_target      integer  1440
SQL>


闪回技术必须在mount状态下执行
flashback database to scn <>;
flashbach database to timestamp<>; //将数据库闪回到某个时间

alter database open read only; //闪回scn号以后的操作,我们还可以通过一次次闪回回去
alter database open resetlogs ; //闪回scn号以后的操作都丢失

2.flashback drop //只针对drop功能
drop table<> ;// 保证回收站功能打开
show recyclebin ;//查看回收站
select object_name,type from user_recyclebin;
flashback table <> to before drop ;//主键

3.flashback query----undo---dml //针对dml操作
1> flashbazk query :闪回查询
update emp set sal=sal+1 where empno=7788;
select * from <> as of scn|timestamp <>;

SQL> select current_scn from v$database;

CURRENT_SCN
-----------
2274480
SQL> update scott.emp set sal=sal+50 where empno=7788;

1 row updated.

SQL> select current_scn from v$database;

CURRENT_SCN
-----------
2274546

SQL> select sal  from scott.emp  as of scn 2274480 where empno=7788;

SAL
----------
202
SQL> select sal  from scott.emp   where empno=7788;

SAL
----------
252


2> flashback verisons query:闪回版本查询,前面所做的不管所有操作,最后用一个commit操作,那么commit之前的所有操作都是一个版本,每个版本中的每一个操作我们称之为一个事务

select * from <>versions between scn minvalue and maxvalue; //通过SCN号找到版本信息
select * from <> versions between timestamp minvalue and maxvalue; //通过时间戳来找版本信息
verdions_startscn :表示事务开始的scn号
versions_starttime:表示做这个事务开始的时间
versions_endscn: 表示事务结束的scn号
versions_endtime:表示事务结束的时间
versions_operation:(i,u,d):表示对应相应的操作insert,update,delete
verdions_xid:每个事务的id号
v$flashback_transaction_query //闪回事务查询
select

3> flashback table: 闪回表
update,delete------忘了加where子句 //对整个表都做了误操作,我们使用闪表技术,将我们的类重新插回表中
alter table <> enable row movement; //打开行移动
flashback table <> to scn <> |timestamp<>;
alter table <> disable row movement;

>>>show parameter undo_

SQL> show parameter undo_

NAME      TYPE  VALUE
------------------------------------ ----------- ------------------------------
undo_management       string  AUTO        //undo表空间必须为auto
undo_retention      integer  900    //表示存放的时间
undo_tablespace       string  UNDOTBS2


1.闪回数据库
a.创建一个用户---创建对象----插入数据
drop user
b.emp---sal+100---commit;

SQL> create tablespace test datafile '/opt/u01/oracle/oradata/maxdb/test01.dbf' size 20m;

Tablespace created.
SQL> create user test1 identified by oracle default tablespace test;

User created.
SQL> grant connect ,resource to test1;
SQL> create table test1.test1 as select * from scott.emp;
SQL> create table test1.test2 as select * from scott.AA;

SQL> select current_scn from v$database; //查找到当前的scn号

CURRENT_SCN
-----------
2183527

SQL> drop user test1 cascade;

SQL> update scott.emp set sal=sal+10;

SQL> update scott.emp set sal=sal+100;

SQL> select * from scott.emp as of scn 2183527 where deptno=10;//我们可以通过scn号的查找到未做操作时候的状态

EMPNO ENAME      JOB        MGR HIREDATE     SAL       COMM
---------- ---------- --------- ---------- --------- ---------- ----------
DEPTNO DENAME   LOC
---------- -------------- -------------
7782 CLARK      MANAGER       7839 09-JUN-81     202
10 ACCOUNTING   NEW YORK

7839 KING       PRESIDENT     17-NOV-81     202
10 ACCOUNTING   NEW YORK

7934 MILLER     CLERK       7782 23-JAN-82     202
10 ACCOUNTING   NEW YORK

SQL> select * from scott.emp where deptno=10;  //当前状态表的情况

EMPNO ENAME      JOB        MGR HIREDATE     SAL       COMM
---------- ---------- --------- ---------- --------- ---------- ----------
DEPTNO DENAME   LOC
---------- -------------- -------------
7782 CLARK      MANAGER       7839 09-JUN-81     312
10 ACCOUNTING   NEW YORK

7839 KING       PRESIDENT     17-NOV-81     312
10 ACCOUNTING   NEW YORK

7934 MILLER     CLERK       7782 23-JAN-82     312
10 ACCOUNTING   NEW YORK

SQL> startup mount;
SQL> flashback database to scn 2183527;
SQL> alter database open read only;
SQL> conn test1/oracle
Connected.
SQL> select table_name from user_tables;

TABLE_NAME
------------------------------
TEST1
TEST2

[oracle@up12 ~]$ exp \'/ as sysdba\' file=/tmp/testuser1.dmp owner=test1 grant=n log=/tmp/test1.log   //导出用户
再用当前的SCN闪回到当前的状态

在打开的数据库中重新将user test1建回去,再导入刚才导出的用户
[oracle@up12 ~]$ imp \'/ as sysdba\' file=/tmp/testuser1.dmp fromuser=test1 touser=test1


2.使用闪回查询
更新dept表中dname---
insert -- dept ---deptno=11,12,13,14
update----emp----sal+1,sal+2,sal+3
commit;
撤销insert ,撤销10部门的update

SQL> insert into scott.dept(deptno) values(11);

1 row created.

SQL> update scott.emp set sal=sal+1 where deptno=10;

3 rows updated.

SQL> update scott.emp set sal=sal+2 where deptno=20;

4 rows updated.

SQL> update scott.emp set sal=sal+3 where deptno=30;

6 rows updated.

SQL>commit

SQL> select versions_xid ,versions_operation,versions_startscn from scott.dept versions between scn minvalue and maxvalue;  //查看闪回版本

VERSIONS_XID	 V VERSIONS_STARTSCN
---------------- - -----------------
0D0001009E000000 I	     2333545
0D0001009E000000 I	     2333545
0D0001009E000000 I	     2333545

SQL> select undo_sql from flashback_transaction_query where xid='0D0001009E000000';   //通过事务版本,找到我们的每一个操作,想要撤回哪条命令,就直接将undo_sql里的命令执行就可以了

UNDO_SQL
--------------------------------------------------------------------------------
update "SCOTT"."EMP" set "SAL" = '203' where ROWID ='AAAS0SAAEAAAAILAAM';
update "SCOTT"."EMP" set "SAL" = '205' where ROWID ='AAAS0SAAEAAAAILAAL';
update "SCOTT"."EMP" set "SAL" = '204' where ROWID ='AAAS0SAAEAAAAILAAK';
update "SCOTT"."EMP" set "SAL" = '205' where ROWID = 'AAAS0SAAEAAAAILAAJ';
update "SCOTT"."EMP" set "SAL" = '203' where ROWID = 'AAAS0SAAEAAAAILAAI';
update "SCOTT"."EMP" set "SAL" = '254' where ROWID ='AAAS0SAAEAAAAILAAH';
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: