Oracle配置和使用閃回


環境:RHEL 6.4 + Oracle 11.2.0.4
目錄:
一、閃回查詢

二、閃回事物

三、閃回表
四、Flashback Data Archive
五、閃回數據庫

Reference

一、閃回查詢

``` -- 初始化參數undo_retention undo_retention=1800 (1800s=0.5h),若條件允許,可以適當調大此參數。 -- 是否強制保留undo_retention的時間 select tablespace_name, retention from dba_tablespaces where tablespace_name like 'UNDO%'; alter tablespace undotbs1 retention guarantee; ```

1.1 閃回查詢舉例

select count(1) from t1 as of timestamp systimestamp - interval '5' minute; ``` --操作T1表刪除一條記錄 SQL> select count(1) from t1; COUNT(1) ---------- 100 SQL> delete from t1 where id=1; 1 row deleted. SQL> commit; Commit complete. SQL> select count(1) from t1; COUNT(1) ---------- 99 --閃回查詢5分鍾之前T1的狀態,重新插入誤刪除的那條記錄。 SQL> select count(1) from t1 as of timestamp systimestamp - interval '5' minute; COUNT(1) ---------- 100 SQL> insert into t1 select * from t1 as of timestamp systimestamp - interval '5' minute where id = 1; 1 row created. SQL> commit; Commit complete. SQL> select count(1) from t1; COUNT(1) ---------- 100 ```

1.2 閃回版本查詢舉例

``` --得到當前的SCN select dbms_flashback.get_system_change_number from dual; --Get Current SCN:3218516 --更新操作 update t1 set contents = 'AAA' where id = 1; commit; update t1 set contents = 'BBB' where id = 1; commit; select dbms_flashback.get_system_change_number from dual; --Get Current SCN:3218522 --刪除,插入,更新操作 delete from t1 where id = 1; commit; insert into t1 values(1,1,'CCC'); commit; update t1 set contents = 'DDD' where id = 1; commit; select dbms_flashback.get_system_change_number from dual; --Get Current SCN:3218530 ``` 查詢SCN在3218516 and 3218530之間的行id=1的完整歷史: ``` select versions_startscn, versions_endscn, versions_xid, versions_operation, id, contents from t1 versions between scn 3218516 and 3218530 where id = 1;

VERSIONS_STARTSCN VERSIONS_ENDSCN VERSIONS_XID V ID CONTENTS


      3218529                 01001700D0090000 U          1 DDD
      3218526         3218529 09000500AD0A0000 I          1 CCC
      3218524                 0A001C00D3090000 D          1 BBB
      3218521         3218524 02002100B60A0000 U          1 BBB
      3218518         3218521 08001800B60A0000 U          1 AAA
                      3218518                             1 rMLTDXxxqXOZnqYRJwInlGfGBTxNkAszBGEUGELqTSRnFjRGbi

6 rows selected.

<h1 id="2"> 二、閃回事物 </h1>
flashback_transaction_query包含對數據庫執行的所有更改,包括DDL操作。
由於undo表空間有限,因此flashback_transaction_query中只包含一部分事物。
<h2 id="2.1">2.1 閃回事物查詢的先決條件</h2>必須先啟用重做日志流的其他日志記錄。閃回事物查詢既需要增強的重做信息,也需要撤銷信息。

--開啟重做日志流的其他日志記錄
alter database add supplemental log data;
alter database add supplemental log data(primary key) columns;
--賦予相關權限給操作閃回事物的用戶
grant execute on dbms_flashback to jingyu;
grant select any transaction to jingyu;

<h2 id="2.2">2.2 閃回事物查詢</h2>

select start_scn, commit_scn, logon_user, operation, table_name, undo_sql
from flashback_transaction_query
where xid = hextoraw('05000E00C70B0000');

START_SCN COMMIT_SCN LOGON_USER OPERATION TABLE_NAME UNDO_SQL


3528038 3528039 JINGYU INSERT T1 delete from "JINGYU"."T1" where ROWID = 'AAAVvOAAFAAAACHAAA';
3528038 3528039 JINGYU BEGIN

<h1 id="3"> 三、閃回表 </h1>
核心命令:

--刪除表記錄
delete from t1;
commit;
--需要啟用row movement
alter table t1 enable row movement;
--閃回表T1
flashback table t1 to timestamp systimestamp - interval '3' minute;

實際操作過程如下:

SQL> delete from t1;
100 rows deleted.

SQL> commit;
Commit complete.
--由於未啟用row movement,閃回表會報錯ORA-08189:
SQL> flashback table t1 to timestamp systimestamp - interval '3' minute;
flashback table t1 to timestamp systimestamp - interval '3' minute
*
ERROR at line 1:
ORA-08189: cannot flashback the table because row movement is not enabled

SQL> alter table t1 enable row movement;
Table altered.

SQL> flashback table t1 to timestamp systimestamp - interval '3' minute;
Flashback complete.

SQL> select count(1) from t1;
COUNT(1)

   100

SQL> alter table t1 disable row movement;
Table altered.

<h1 id="4"> 四、Flashback Data Archive </h1>
如果數據庫中的一部分表需要長的多的保留期。
Flashback Data Archive僅記錄UPDATE和DELETE語句,不記錄INSERT語句。

--創建表空間(可以使用現有表空間,但Oracle建議最好使用專用表空間)
create tablespace fda1;
create tablespace fda2;
create tablespace fda3;
--創建閃回歸檔
create flashback archive fa_config tablespace fda1 retention 10 year;
create flashback archive fa_data tablespace fda1 retention 1 year;

--數據字典視圖dba_flashback_archive, dba_flashback_archive_ts查看閃回歸檔、閃回歸檔和表空間的關系
set linesize 1000
col FLASHBACK_ARCHIVE_NAME for a20
col CREATE_TIME for a34
col LAST_PURGE_TIME for a34
col OWNER_NAME for a20
select * from dba_flashback_archive;
select * from dba_flashback_archive_ts;
--權限 flashback archive administer(有這個系統權限才可以創建和修改FDA),flashback archive(有這個對象權限才能啟用對表的跟蹤)

--給閃回歸檔增加表空間
alter flashback archive fa_data add tablespace fda3 quota 50M;
--清除歸檔fa_data歸檔中2015年11月17日前的所有行:
alter flashback archive fa_data purge before timestamp to_timestamp('2015-11-16 00:00:00','YYYY-MM-DD HH24:MI:SS');

--表分配到閃回歸檔
alter table T1 flashback archive fa_config;
alter table T2 flashback archive fa_data;
--查詢DBA_FLASHBACK_ARCHIVE_TABLES分析使用FDA的表
select * from dba_flashback_archive_tables;

--查詢5年前T1表的數據量(對用戶而言,AS OF查詢使用的是FDA還是UNDO表空間是完全透明的)
select count(1) from t1 as of timestamp systimestamp - interval '5' year;

<h1 id="5"> 五、閃回數據庫 </h1>
<h2 id="5.1">5.1 配置閃回數據庫</h2>
5.1.1 開啟閃回數據庫:

--必須配置閃回恢復區
show parameter db_recovery
--必須歸檔模式
shutdown immediate;
startup mount exclusive;
alter database archivelog;
--設置閃回保留的目標時間(只是target,2880分鍾=兩天)
alter system set db_flashback_retention_target=2880;
--開啟數據庫閃回
alter database flashback on;
--打開數據庫
alter database open;

5.1.2 關閉閃回數據庫:

startup mount exclusive;
alter database flashback off;
alter database open;

<h2 id="5.2">5.2 使用閃回數據庫</h2>
RMAN和SQL>提示符下都可以執行閃回。但二者有些細微差別。
例如RMAN可以基於線程和特定日志號進行閃回。

--RMAN基於線程和特定日志號進行閃回舉例
RMAN> flashback database to sequence=307 thread=2;

--在SQL>提示符下,閃回到一小時前的狀態
shutdown immediate;
startup mount exclusive;
flashback database to timestamp sysdate-(1/24);
--read only打開檢查確定是要恢復的狀態
alter database open read only;
--最后resetlogs打開
alter database open resetlogs;

--從閃回數據庫排除表空間(創建時指定或后期修改flashback off)
alter tablespace dbs_d_test flashback off;
--若重新啟用表空間閃回,需要打開flashback后,重新啟動數據庫。
alter tablespace dbs_d_test flashback on;

--使用擔保還原點fla_init
create restore point fla_init guarantee flashback database;
flashback database to restore point fla_init;

<h2 id="5.3">5.3 監視閃回數據庫</h2>

--查詢可以將數據庫閃回到多久之前
select * from v$flashback_database_log;
--查詢數據庫的閃回狀態
select current_scn, flashback_on from v$database;
--監視每小時生成閃回數據的速率
select * from v$flashback_database_stat;

<h1 id="6">Reference</h1>
- OCP 認證考試指南 (1Z0-053)[M]. 清華大學出版社, 2010.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM