学习资料

学习的笔记


第二十一章 闪回技术、备份恢复与优化

<p>[TOC]</p> <h1>第二十一章 闪回技术、备份恢复与优化</h1> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/b6e30ddb624d1d9d00be4d4422dba2c6" alt="闪回删除和回收站" /></p> <h2>闪回已经删除的表</h2> <ul> <li> <p>闪回技术说明 删除的表放在回收站,回收站占用表原来的表空间 如果空闲磁盘空间不够就使用回收站的表空间</p> </li> <li> <p>闪回表实例</p> <pre><code>-- recyclebin=on时启用回收站 SQL&gt; show parameter recyclebin recyclebin string on select isses_modifiable, issys_modifiable from v$parameter where name='recyclebin'; --12c需要加deferred才能修改,在新的session中才能生效(修改参数) alter system set recyclebin = off DEFERRED; alter system set recyclebin=on deferred; --scott用户下删除表再闪回表 connect scott/tiger select * from cat; show recyclebin --显示回收信息与表名对应关系 --bin开头的是回收站的信息,如下清空回收站 purge table DEPT_DUMP; purge recyclebin; col table_name for a20 col table_type for a10 select * from cat; drop table DEPT_DUMP; select * from cat; show recyclebin; --查看已经删除的表占用的磁盘空间 select * from user_recyclebin; select * from dba_recyclebin; select * from DEPT_DUMP; --闪回回收站的表 flashback table dept_dump to before drop; --回收站不见了 show recyclebin; --直接删除表不进入回收站 drop table dept_dump purge;</code></pre> </li> <li>闪回技术只能保护非系统表空间中的表 这些表必须是本地管理表空间中 表的位图连接索引、引用完整性约束等对象不受回收站保护</li> </ul> <h2>闪回错误的DML操作(回滚段)</h2> <ul> <li> <p>DML操作事务的数据保存在回滚段中用于恢复 undo_retention参数,单位是秒,表示一个事务提交后保存在还原段中的时间</p> </li> <li>设置还原表空间的retention属性为guarantee为强制保留 设置retention属性为noguarantee为不强制保留</li> </ul> <pre><code>connect system/system --900秒15分钟保留时间 SQL&gt; show parameter undo_retention undo_retention integer 900 -- 改为保留两小时 alter system set undo_retention=7200; -- retention 属性修改 select * from dba_tablespaces where tablespace_name='UNDOTBS1'; connect scott/tiger update emp_dump set sal = 9999; --versions 子句,查看版本,提交后能看到两个版本 select versions_xid,empno,ename,sal from emp_dump versions between scn minvalue and maxvalue where empno = 7900; connect system/system --数据字典flashback_transaction_query:获取闪回信息 select operation,undo_sql from flashback_transaction_query where xid=hextoraw('0600100042080000'); --oracle12c禁用如下,开启才能看到undosql alter database add supplemental log data; --找出sql执行即可还原 update "SCOTT"."EMP_DUMP" set "SAL" = '1300' where ROWID = 'AAAS7aAAHAAAACrAAL'; update "SCOTT"."EMP_DUMP" set "SAL" = '3000' where ROWID = 'AAAS7aAAHAAAACrAAK'; update "SCOTT"."EMP_DUMP" set "SAL" = '950' where ROWID = 'AAAS7aAAHAAAACrAAJ'; update "SCOTT"."EMP_DUMP" set "SAL" = '1500' where ROWID = 'AAAS7aAAHAAAACrAAI'; update "SCOTT"."EMP_DUMP" set "SAL" = '5000' where ROWID = 'AAAS7aAAHAAAACrAAH'; update "SCOTT"."EMP_DUMP" set "SAL" = '2450' where ROWID = 'AAAS7aAAHAAAACrAAG'; update "SCOTT"."EMP_DUMP" set "SAL" = '2850' where ROWID = 'AAAS7aAAHAAAACrAAF'; update "SCOTT"."EMP_DUMP" set "SAL" = '1250' where ROWID = 'AAAS7aAAHAAAACrAAE'; update "SCOTT"."EMP_DUMP" set "SAL" = '2975' where ROWID = 'AAAS7aAAHAAAACrAAD'; update "SCOTT"."EMP_DUMP" set "SAL" = '1250' where ROWID = 'AAAS7aAAHAAAACrAAC'; update "SCOTT"."EMP_DUMP" set "SAL" = '1600' where ROWID = 'AAAS7aAAHAAAACrAAB'; update "SCOTT"."EMP_DUMP" set "SAL" = '800' where ROWID = 'AAAS7aAAHAAAACrAAA'; --一个语句完成恢复 --获取事务提交的SCN号:4977453 select operation,undo_sql,start_scn from flashback_transaction_query where xid=hextoraw('0600100042080000'); SQL&gt; flashback table scott.emp_dump to scn 4977453 ; ORA-08189: cannot flashback the table because row movement is not enabled --将表的行移动开启,才能进行表闪回操作 alter table scott.emp_dump enable row movement; select * from scott.emp_dump; --根据时间闪回 flashback table scott.emp_dump to timestamp to_timestamp('2021/8/10 00:31:00','yyyy/mm/dd hh24:mi:ss') ;</code></pre>

页面列表

ITEM_HTML