1. 程式人生 > >oracle資料庫閃回查詢和閃回表測試

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 查詢的結果和閃回表查詢前的結果是一樣的。說明表中資料沒有被修改。