閃迴歸檔的簡單測試
11g裡面的新特性閃迴歸檔,為歷史資料的定製查詢提供了一種可能。抽時間學習了一下這個特性,發現還是比較清晰易用。如果使用得當還是很不錯的一個特性。
我們來簡單模擬一個例子來看看。
首先需要建立獨立的表空間,屬性需要為segment space management auto,因為預設屬性就是如此,所以我們簡化語句。
SQL> create tablespace fbarch datafile'/U01/app/oracle/oradata/actvdb/fbarch.dbf' size 10M ;
Tablespace created.
然後我們建立閃回資料歸檔區,可以指定多個表空間,也可以修改保留時長。
SQL> create flashback archive fda tablespace fbarch retention 1 month;
Flashback archive created.
建立一個測試表
SQL> create table test_fbarch as select * from dba_objects;
Table created.
然後修改表屬性,指定閃迴歸檔區,當然這個地方閃回資料歸檔區是不對應的。
SQL> alter table test_fbarch flashback archive fbarch;
alter table test_fbarch flashback archive fbarch
*
ERROR at line 1:
ORA-55605: Incorrect Flashback Archive is specified
我們刪除原有的閃回資料歸檔區,重新建立一個。
SQL> drop flashback archive fda;
Flashback archive dropped.
重新建立閃回資料歸檔區
SQL> create flashback archive fbarch tablespace fbarch retention 1 month;
Flashback archive created.
然後再次修改表屬性,指定為fbarch
SQL> alter table test_fbarch flashback archive fbarch;
Table altered.
透過閃回功能來查詢以前的歷史資料,可以基於時間戳或者基於SCN
SQL> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
380440310
假設基於SCN查詢
SQL> select count(*)from test_fbarch as of scn 380440310;
COUNT(*)
----------
86840
在此處,我們故意要重新整理undo資料空間,而且要讓資料的變化頻率大大加快。
使用下面的pl/sql來刷undo
SQL> begin
2 for i in 1 .. 100 loop
3 update test_fbarch set object_id=object_id+1;
4 commit;
5 end loop;
6 end;
7 /
當然這個時候,會不斷在後臺執行語句,重新整理資料,當然原來的閃回資料歸檔區肯定是不夠的。
在alert日誌中就會看到如下的報錯。
Wed Apr 13 22:43:23 2016
ORA-1688: unable to extend table CYDBA.SYS_FBA_HIST_239635 partition HIGH_PART by 1024 in tablespace FBARCH
當然這個錯誤看起來還不是很清晰,我們來簡單分析一下。
SQL> col segment_name format a30
SQL> select segment_name,segment_type from user_segments;
SEGMENT_NAME SEGMENT_TYPE
------------------------------ ------------------
TEST_FBARCH TABLE
SYS_FBA_DDL_COLMAP_239635 TABLE
SYS_FBA_TCRV_239635 TABLE
SYS_FBA_HIST_239635 TABLE PARTITION
SYS_FBA_TCRV_IDX_239635 INDEX
可以看到多出了4個段物件,三個是後臺資料表,一個是索引。
透過欄位的情況也可以猜出閃迴歸檔的一些實現原理來。
SQL> desc SYS_FBA_TCRV_239635 --這個表記錄的是在指定時間範圍內,進行特定操作(OP)的記錄。
Name Null? Type
----------------------------------------- -------- ----------------------------
RID VARCHAR2(4000)
STARTSCN NUMBER
ENDSCN NUMBER
XID RAW(8)
OP VARCHAR2(1)
SQL> desc SYS_FBA_HIST_239635 --這個表記錄的是指定時間範圍內,資料變化的明細情況,可以看到裡面有原表的所有欄位。
Name Null? Type
----------------------------------------- -------- ----------------------------
RID VARCHAR2(4000)
STARTSCN NUMBER
ENDSCN NUMBER
XID RAW(8)
OPERATION VARCHAR2(1)
OWNER VARCHAR2(30)
OBJECT_NAME VARCHAR2(128)
SUBOBJECT_NAME VARCHAR2(30)
OBJECT_ID NUMBER
DATA_OBJECT_ID NUMBER
OBJECT_TYPE VARCHAR2(19)
CREATED DATE
LAST_DDL_TIME DATE
TIMESTAMP VARCHAR2(19)
STATUS VARCHAR2(7)
TEMPORARY VARCHAR2(1)
GENERATED VARCHAR2(1)
SECONDARY VARCHAR2(1)
NAMESPACE NUMBER
EDITION_NAME VARCHAR2(30)
SQL> desc SYS_FBA_DDL_COLMAP_239635 --這個表記錄的是在指定時間範圍內的DDL相關記錄。
Name Null? Type
----------------------------------------- -------- ----------------------------
STARTSCN NUMBER
ENDSCN NUMBER
XID RAW(8)
OPERATION VARCHAR2(1)
COLUMN_NAME VARCHAR2(255)
TYPE VARCHAR2(255)
HISTORICAL_COLUMN_NAME VARCHAR2(255)
當然對於閃迴歸檔來說,DDL如果涉及表欄位的drop操作,就會有限制,而對於新增欄位的操作可以支援。
而對於239635該怎麼理解呢?我們來看看object_id
SQL> select object_id,object_name from dba_objects where object_id=239635;
OBJECT_ID OBJECT_NAME
---------- ------------------------------
239635 TEST_FBARCH
這個時候檢視後臺程式,會發現閃迴歸檔其實還有一個後臺程式fbda
SQL> !ps -ef|grep fb
oracle 26606 1 59 22:38 ? 00:07:24 ora_fbda_actvdb
oracle 26924 26849 0 22:51 pts/1 00:00:00 /bin/bash -c ps -ef|grep fb
oracle 26926 26924 0 22:51 pts/1 00:00:00 grep fb
我們來簡單模擬一個例子來看看。
首先需要建立獨立的表空間,屬性需要為segment space management auto,因為預設屬性就是如此,所以我們簡化語句。
SQL> create tablespace fbarch datafile'/U01/app/oracle/oradata/actvdb/fbarch.dbf' size 10M ;
Tablespace created.
然後我們建立閃回資料歸檔區,可以指定多個表空間,也可以修改保留時長。
SQL> create flashback archive fda tablespace fbarch retention 1 month;
Flashback archive created.
建立一個測試表
SQL> create table test_fbarch as select * from dba_objects;
Table created.
然後修改表屬性,指定閃迴歸檔區,當然這個地方閃回資料歸檔區是不對應的。
SQL> alter table test_fbarch flashback archive fbarch;
alter table test_fbarch flashback archive fbarch
*
ERROR at line 1:
ORA-55605: Incorrect Flashback Archive is specified
我們刪除原有的閃回資料歸檔區,重新建立一個。
SQL> drop flashback archive fda;
Flashback archive dropped.
重新建立閃回資料歸檔區
SQL> create flashback archive fbarch tablespace fbarch retention 1 month;
Flashback archive created.
然後再次修改表屬性,指定為fbarch
SQL> alter table test_fbarch flashback archive fbarch;
Table altered.
透過閃回功能來查詢以前的歷史資料,可以基於時間戳或者基於SCN
SQL> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
380440310
假設基於SCN查詢
SQL> select count(*)from test_fbarch as of scn 380440310;
COUNT(*)
----------
86840
在此處,我們故意要重新整理undo資料空間,而且要讓資料的變化頻率大大加快。
使用下面的pl/sql來刷undo
SQL> begin
2 for i in 1 .. 100 loop
3 update test_fbarch set object_id=object_id+1;
4 commit;
5 end loop;
6 end;
7 /
當然這個時候,會不斷在後臺執行語句,重新整理資料,當然原來的閃回資料歸檔區肯定是不夠的。
在alert日誌中就會看到如下的報錯。
Wed Apr 13 22:43:23 2016
ORA-1688: unable to extend table CYDBA.SYS_FBA_HIST_239635 partition HIGH_PART by 1024 in tablespace FBARCH
當然這個錯誤看起來還不是很清晰,我們來簡單分析一下。
SQL> col segment_name format a30
SQL> select segment_name,segment_type from user_segments;
SEGMENT_NAME SEGMENT_TYPE
------------------------------ ------------------
TEST_FBARCH TABLE
SYS_FBA_DDL_COLMAP_239635 TABLE
SYS_FBA_TCRV_239635 TABLE
SYS_FBA_HIST_239635 TABLE PARTITION
SYS_FBA_TCRV_IDX_239635 INDEX
可以看到多出了4個段物件,三個是後臺資料表,一個是索引。
透過欄位的情況也可以猜出閃迴歸檔的一些實現原理來。
SQL> desc SYS_FBA_TCRV_239635 --這個表記錄的是在指定時間範圍內,進行特定操作(OP)的記錄。
Name Null? Type
----------------------------------------- -------- ----------------------------
RID VARCHAR2(4000)
STARTSCN NUMBER
ENDSCN NUMBER
XID RAW(8)
OP VARCHAR2(1)
SQL> desc SYS_FBA_HIST_239635 --這個表記錄的是指定時間範圍內,資料變化的明細情況,可以看到裡面有原表的所有欄位。
Name Null? Type
----------------------------------------- -------- ----------------------------
RID VARCHAR2(4000)
STARTSCN NUMBER
ENDSCN NUMBER
XID RAW(8)
OPERATION VARCHAR2(1)
OWNER VARCHAR2(30)
OBJECT_NAME VARCHAR2(128)
SUBOBJECT_NAME VARCHAR2(30)
OBJECT_ID NUMBER
DATA_OBJECT_ID NUMBER
OBJECT_TYPE VARCHAR2(19)
CREATED DATE
LAST_DDL_TIME DATE
TIMESTAMP VARCHAR2(19)
STATUS VARCHAR2(7)
TEMPORARY VARCHAR2(1)
GENERATED VARCHAR2(1)
SECONDARY VARCHAR2(1)
NAMESPACE NUMBER
EDITION_NAME VARCHAR2(30)
SQL> desc SYS_FBA_DDL_COLMAP_239635 --這個表記錄的是在指定時間範圍內的DDL相關記錄。
Name Null? Type
----------------------------------------- -------- ----------------------------
STARTSCN NUMBER
ENDSCN NUMBER
XID RAW(8)
OPERATION VARCHAR2(1)
COLUMN_NAME VARCHAR2(255)
TYPE VARCHAR2(255)
HISTORICAL_COLUMN_NAME VARCHAR2(255)
當然對於閃迴歸檔來說,DDL如果涉及表欄位的drop操作,就會有限制,而對於新增欄位的操作可以支援。
而對於239635該怎麼理解呢?我們來看看object_id
SQL> select object_id,object_name from dba_objects where object_id=239635;
OBJECT_ID OBJECT_NAME
---------- ------------------------------
239635 TEST_FBARCH
這個時候檢視後臺程式,會發現閃迴歸檔其實還有一個後臺程式fbda
SQL> !ps -ef|grep fb
oracle 26606 1 59 22:38 ? 00:07:24 ora_fbda_actvdb
oracle 26924 26849 0 22:51 pts/1 00:00:00 /bin/bash -c ps -ef|grep fb
oracle 26926 26924 0 22:51 pts/1 00:00:00 grep fb
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8494287/viewspace-2089559/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 11GR2新特性測試-閃迴歸檔
- 開閃回及閃迴歸檔
- Oracle 11g 閃迴歸檔Oracle
- Oracle Flashback Archive——Oracle閃迴歸檔(上)OracleHive
- Oracle Flashback Archive——Oracle閃迴歸檔(中)OracleHive
- Oracle Flashback Archive——Oracle閃迴歸檔(下)OracleHive
- 詳解迴歸測試
- 迴歸測試總結
- 【備份恢復】 閃回技術之閃迴歸檔
- 迴歸測試的四個步驟
- 迴歸測試遇到的問題求助
- 軟體測試學習教程—迴歸測試
- python實現線性迴歸之簡單迴歸Python
- 軟體迴歸測試常用方法有哪些?迴歸測試報告收費貴嗎?測試報告
- EVIEWS 簡單線性迴歸 02View
- 機器學習——簡單線性迴歸(上)機器學習
- 機器學習——簡單線性迴歸(下)機器學習
- 測試DML 時產生歸檔日誌和閃回日誌的比
- 利用Junit4進行程式模組的測試,迴歸測試行程
- 我的測試之旅:(4)並行——自動化迴歸測試並行
- C++ 只能指標迴圈引用簡單測試C++指標
- Pytorch 實現簡單線性迴歸PyTorch
- 【火爐煉AI】機器學習003-簡單線性迴歸器的建立,測試,模型儲存和載入AI機器學習模型
- 機器學習(二):理解線性迴歸與梯度下降並做簡單預測機器學習梯度
- 簡單的 ping 測試
- try的簡單效能測試
- 物理DG刪除歸檔測試
- 使用java+TestNG進行介面迴歸測試Java
- Softmax迴歸簡介
- 關於歸檔日誌的切換測試
- RAC下歸檔不放到共享盤的測試
- 讓 API 測試變的簡單API
- Linux的OOMkiller簡單測試LinuxOOM
- Oracle RAC的TAF簡單測試Oracle
- mysql簡單效能測試MySql
- sql trace 簡單測試SQL
- 軟體測試中的Bug迴歸,到底有多重要?
- 迴歸測試中的專案質量管理應用(轉)