oracle資料庫閃回查詢和閃回表測試
閃回版本查詢測試
實現步驟:
1. 使用SQLPLUS連線Oracle資料庫
2. 構建簡單SQL語句
3. 閃回版本查詢測試
實驗操作如下:
1. 以SYS使用者通過SQLPLUS連線上Oracle資料庫
2. 啟動PDB :pdb_jxc,並切換到pdb下。
3. 新建一張表test,並進行一系列的插入,刪除,更新操作。並在每次操作後執行commit命令立即提交資料。
a) SQL>create table test (id number);建立一個表
b) SQL>insert into test values(111);
c) SQL>commit;
d) SQL>insert into test values(222);
e) SQL>commit;
f) SQL>update test set id=333 where id=222;
g) SQL>commit;
h) SQL>delete from test where id=111;
i) SQL>commit;
j) 對錶進行一系列的修改
k) SQL>select * from test;
4.閃回查詢版本測試
SQL>selectversions_startscn,versions_endscn,versions_xid,versions_operation,id from testversions between timestamp minvalue and maxvalue;
4. 繼續執行一些插入、更新刪除操作,但是不立即commit提交。
然後在進行閃回版本測試。
發現在不提交的情況下,閃回版本查詢的結果和第一次是一樣的。
5. 執行commit命令,再次進行閃回版本查詢操作。
發現commit後查詢結果多出兩行,即為新增的兩次操作的記錄。說明閃回版本查詢只能查詢到所有commit後的操作,對於還處於undo階段的語句是查詢不到的。
閃回表查詢測試
實現步驟:
使用SQLPLUS連線Oracle資料庫
構建簡單SQL語句
閃回表查詢測試
實驗操作如下:
1. 以SYS使用者通過SQLPLUS連線上Oracle資料庫
與前面一樣,暫不截圖。
2. 構建簡單SQL語句:
a) SQL>create table test1(id number);建立一個表
b) SQL>insert into test1 values(111);
c) SQL>commit;
d) 對錶test1進行插入資料操作
3. 查詢現階段表test1中的內容以及當前的asn號
a) SQL>select * from test1;
b) SQL>select current_scn from v$database;
4. 對錶test1繼續進行操作
a) SQL>insert into test1 values(222);
b) SQL>commit;
c) SQL>update test1 set id=333 where id=222;
d) SQL>commit;
e) SQL>delete from test1 where id=111;
f) SQL>commit;
5.查詢當前表test1中的內容
SQL>select* from test1;
6.進行閃回表查詢測試
SQL>select* from test1 as of scn 1636845;
發現閃回表的查詢結果和第一次的查詢結果是一樣的,說明閃回查詢的結果是正確的。
需要注意的是閃回查詢是不修改表的,而只是查詢歷史記錄。通過下面的截圖可以看出,在進行一次select 查詢的結果和閃回表查詢前的結果是一樣的。說明表中資料沒有被修改。