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分钟(一天)
闪回技术必须在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 <>;
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;
1.闪回数据库
a.创建一个用户---创建对象----插入数据
drop user
b.emp---sal+100---commit;
2.使用闪回查询
更新dept表中dname---
insert -- dept ---deptno=11,12,13,14
update----emp----sal+1,sal+2,sal+3
commit;
撤销insert ,撤销10部门的update
依赖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';
相关文章推荐
- Oracle出现适配器的问题解决关键点
- 【从零开始学习Oracle数据库】(5)约束视图与索引
- 【从零开始学习Oracle数据库】(4)创建表与增删改和数据库事务
- 【从零开始学习Oracle数据库】(3)函数与子查询和连接查询
- 【从零开始学习Oracle数据库】(2)函数
- 【从零开始学习Oracle数据库】(1)建表与简单查询
- 30分钟搞定EBS套件安装及配置
- 工作总结26 发票同步方案的总结
- ORACLE 定时执行存储过程
- 【oracle】plsql连接oracle(localhost连接成功,ip连接提示无监听)问题
- mysql与oracle常用函数及数据类型对比00持续补充
- Oracle里count(1)、count(*)和count(主键)哪个更快
- Oracle数据库预定义帐号(SYS,SYSTEM,SYSMAN,DBSNMP,SCOTT)
- AIX系统存储故障后的Oracle 10g RAC恢复过程
- 【oracle】首次启动SQL Developer配置java.exe出错(Could not find jvm.cfg! )
- [置顶] ArcGIS SED10.2 + Oracle10g 空间数据连接方式
- oracle数据库创建用户,创建表以及Scott的解锁
- 常用oracle sql函数及语句积累
- Oracle定时任务总结
- Oracle创建表空间,用户,授权,导入.sql/.dem文件语句