Oracle 11g 閃迴歸檔的簡單測試

來源:互聯網
上載者:User

Oracle 11g 閃迴歸檔的簡單測試

Oracle 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

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.