Oracle中flashback table功能為什麼需要開啟row movement功能
前言:
對於row movement的說明,網上的一些資料:
1.在flashback中使用,當需要使用flashback table功能時,需要首先開啟row mvoement的選項,否則使用該功能會報錯。
2.Shrink Segment能幫助我們壓縮資料段、整理資料碎片、降低高水位,以提高效能、節省空間。它也同樣要求開啟ROW MOVEMENT。
3.一般用於分割槽表,將row movement設定為enable,有可能發生行的物理移動,行的rowdi會變化,某一行更新時,如果更新的是分割槽列,並且更新後的列值不屬於原來的這個分割槽,如果開啟了這個選項,就會把這行從這個分割槽中delete掉,並加到更新後所屬的分割槽。相當於一個隱式的觸發器,但不會觸發Insert/delete觸發器。如果沒有開啟這個選項,更新時就會報錯。
這裡只分析第一點。
作業系統版本:
資料庫版本:
注意事項:
無法對sys使用者的表進行flashback table table_name to scn xxxxxx,如下:
構造環境:
實驗過程:
結論:可以看到,開啟了row movement之後,對錶TT進行flashback to scn操作之後,每個行的rowid均發生了變化。對於該功能,有可能發生物理行的移動,所以需要開啟row movement功能才能進行flashback操作。而在正常表中,表中行的rowid是不可以發生變化的。
對於row movement的說明,網上的一些資料:
1.在flashback中使用,當需要使用flashback table功能時,需要首先開啟row mvoement的選項,否則使用該功能會報錯。
2.Shrink Segment能幫助我們壓縮資料段、整理資料碎片、降低高水位,以提高效能、節省空間。它也同樣要求開啟ROW MOVEMENT。
3.一般用於分割槽表,將row movement設定為enable,有可能發生行的物理移動,行的rowdi會變化,某一行更新時,如果更新的是分割槽列,並且更新後的列值不屬於原來的這個分割槽,如果開啟了這個選項,就會把這行從這個分割槽中delete掉,並加到更新後所屬的分割槽。相當於一個隱式的觸發器,但不會觸發Insert/delete觸發器。如果沒有開啟這個選項,更新時就會報錯。
這裡只分析第一點。
作業系統版本:
-
[oracle@oracle ~]$ uname -a
-
Linux oracle.example.com 2.6.32-431.el6.x86_64 #1 SMP Sun Nov 10 22:19:54 EST 2013 x86_64 x86_64 x86_64 GNU/Linux
-
[oracle@oracle ~]$ lsb_release -a
-
LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
-
Distributor ID: RedHatEnterpriseServer
-
Description: Red Hat Enterprise Linux Server release 6.5 (Santiago)
-
Release: 6.5
- Codename: Santiago
資料庫版本:
-
SYS@proc> SELECT * FROM V$VERSION WHERE ROWNUM=1;
-
-
BANNER
-
--------------------------------------------------------------------------------
- Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
注意事項:
無法對sys使用者的表進行flashback table table_name to scn xxxxxx,如下:
-
SYS@proc> create table t1 (id int);
-
-
Table created.
-
-
SYS@proc> insert into t1 values (1);
-
-
1 row created.
-
-
SYS@proc> commit;
-
-
Commit complete.
-
-
SYS@proc> select current_scn from v$database;
-
-
CURRENT_SCN
-
-----------
-
5828852
-
-
SYS@proc> delete from t1;
-
-
1 row deleted.
-
-
SYS@proc> commit;
-
-
Commit complete.
-
-
SYS@proc> select * from t1;
-
-
no rows selected
-
-
SYS@proc> select * from t1 as of scn 5828852;
-
-
ID
-
----------
-
1
-
-
SYS@proc> flashback table t1 to scn 5828852;
-
flashback table t1 to scn 5828852
-
*
-
ERROR at line 1:
- ORA-08185: Flashback not supported for user SYS
構造環境:
-
SCOTT@proc> drop table tt purge;
-
-
Table dropped.
-
-
SCOTT@proc> create table tt (id int,name varchar2(2000)) tablespace users;
-
-
Table created.
-
-
SCOTT@proc> insert into tt values(1,rpad('a',1800,'+'));
-
-
1 row created.
-
-
SCOTT@proc> insert into tt values(2,rpad('b',1800,'+'));
-
-
1 row created.
-
-
SCOTT@proc> insert into tt values(3,rpad('c',1800,'+'));
-
-
1 row created.
-
-
SCOTT@proc> commit;
-
-
Commit complete.
-
-
SCOTT@proc> insert into tt values(4,rpad('d',1800,'+'));
-
-
1 row created.
-
-
SCOTT@proc> commit;
-
-
Commit complete.
-
-
SCOTT@proc> select id,substr(name,1,1),dbms_rowid.rowid_relative_fno(rowid) file#,dbms_rowid.rowid_block_number(rowid) block#,dbms_rowid.rowid_row_number(rowid) row# from tt;
-
-
ID SU FILE# BLOCK# ROW#
-
---------- -- ---------- ---------- ----------
-
1 a 4 549 0
-
2 b 4 549 1
-
3 c 4 549 2
-
4 d 4 549 3
-
-
SCOTT@proc> delete from tt where id=2;
-
-
1 row deleted.
-
-
SCOTT@proc> commit;
-
-
Commit complete.
-
-
SCOTT@proc> select id,substr(name,1,1),dbms_rowid.rowid_relative_fno(rowid) file#,dbms_rowid.rowid_block_number(rowid) block#,dbms_rowid.rowid_row_number(rowid) row# from tt;
-
-
ID SU FILE# BLOCK# ROW#
-
---------- -- ---------- ---------- ----------
-
1 a 4 549 0
-
3 c 4 549 2
-
4 d 4 549 3
-
-
SCOTT@proc> insert into tt values(5,rpad('e',1800,'+'));
-
-
1 row created.
-
-
SCOTT@proc> commit;
-
-
Commit complete.
-
-
SCOTT@proc> select id,substr(name,1,1),dbms_rowid.rowid_relative_fno(rowid) file#,dbms_rowid.rowid_block_number(rowid) block#,dbms_rowid.rowid_row_number(rowid) row# from tt;
-
-
ID SU FILE# BLOCK# ROW#
-
---------- -- ---------- ---------- ----------
-
1 a 4 549 0
-
5 e 4 549 1
-
3 c 4 549 2
-
4 d 4 549 3
實驗過程:
-
SCOTT@proc> select id,substr(name,1,1),rowid,dbms_rowid.rowid_relative_fno(rowid) file#,dbms_rowid.rowid_block_number(rowid) block#,dbms_rowid.rowid_row_number(rowid) row# from tt;
-
-
ID SU ROWID FILE# BLOCK# ROW#
-
---------- -- ------------------ ---------- ---------- ----------
-
1 a AAAV78AAEAAAAIlAAA 4 549 0
-
5 e AAAV78AAEAAAAIlAAB 4 549 1
-
3 c AAAV78AAEAAAAIlAAC 4 549 2
-
4 d AAAV78AAEAAAAIlAAD 4 549 3
-
-
SCOTT@proc> select current_scn from v$database;
-
-
CURRENT_SCN
-
-----------
-
6013384
-
-
SCOTT@proc> set time on
-
12:18:48 SCOTT@proc>
-
12:18:52 SCOTT@proc> delete from tt;
-
-
4 rows deleted.
-
-
12:19:03 SCOTT@proc> commit;
-
-
Commit complete.
-
-
12:19:04 SCOTT@proc> select id from tt as of scn 6013384;
-
-
ID
-
----------
-
1
-
5
-
3
-
4
-
-
12:19:21 SCOTT@proc> flashback table tt to scn 6013384;
-
flashback table tt to scn 6013384
-
*
-
ERROR at line 1:
-
ORA-08189: cannot flashback the table because row movement is not enabled
-
-
-
12:19:56 SCOTT@proc> alter table tt enable row movement;
-
-
Table altered.
-
-
12:20:06 SCOTT@proc> flashback table tt to scn 6013384;
-
-
Flashback complete.
-
-
12:20:11 SCOTT@proc> select id,substr(name,1,1),rowid,dbms_rowid.rowid_relative_fno(rowid) file#,dbms_rowid.rowid_block_number(rowid) block#,dbms_rowid.rowid_row_number(rowid) row# from tt;
-
-
ID SU ROWID FILE# BLOCK# ROW#
-
---------- -- ------------------ ---------- ---------- ----------
-
1 a AAAV78AAEAAAAInAAA 4 551 0
-
5 e AAAV78AAEAAAAInAAB 4 551 1
-
3 c AAAV78AAEAAAAInAAC 4 551 2
-
4 d AAAV78AAEAAAAInAAD 4 551 3
-
- 12:20:16 SCOTT@proc>
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30174570/viewspace-2141813/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ORACLE flashback 為什麼要啟動行遷移功能(轉)Oracle
- ORACLE ROW MOVEMENTOracle
- 【Flashback】Flashback Table功能實踐
- 開啟oracle的flashback閃回功能Oracle
- Oracle 11g開啟閃回功能FlashbackOracle
- Oracle的flashback功能Oracle
- 啟用flashback database 功能Database
- 開發短影片APP需要什麼功能APP
- 在Oracle DG Standby庫上啟用flashback database功能OracleDatabase
- 啟用oracle table rowdependencies trace row modificationOracle
- SSL數字證書有什麼功能?為什麼需要SSL證書?
- 【Flashback】啟用Flashback Database閃回資料庫功能Database資料庫
- assm下oracle為什麼為segment提供了shrink功能SSMOracle
- [Flashback]開啟資料庫閃回資料庫功能資料庫
- 【Flashback】Flashback Query功能實踐
- Flashback_oracle閃回功能的使用Oracle
- oracle flashback特性(2.2)--Flashback Table之從UNDO中恢復Oracle
- 小程式分銷商城系統開發需要什麼功能
- 兼職APP的開發思路是什麼 需要哪些功能APP
- 【Flashback】啟用閃回資料庫功能需要在歸檔模式下完成資料庫模式
- 開啟Oracle的審計功能Oracle
- oracle flashback特性(2.1)--Flashback Table之RECYCLEBINOracle
- 應用oracle flashback--Flashback Table之RECYCLEBINOracle
- 【徵文】應用oracle flashback(2.2)--Flashback Table之從UNDO中恢復Oracle
- 【實驗】【Flashback】Flashback EXP功能實踐
- Row Movement Common Questions and Problems on Partitioned Tables
- 全面學習oracle flashback特性(2.2)--Flashback Table之從UNDO中恢復Oracle
- 【徵文】應用oracle flashback(2.1)--Flashback Table之RECYCLEBINOracle
- 【實驗】【Flashback】Flashback Transaction Query功能實踐
- ORACLE開啟自動跟蹤SQL 功能。OracleSQL
- 手機QQ NFC功能怎麼使用?手機QQ中的NFC功能開啟使用教程
- FAQ: Row Movement Common Questions and Problems on Partitioned Tables
- redis為什麼要提供pipeline功能Redis
- 全面學習oracle flashback特性(2.1)--Flashback Table之RECYCLEBINOracle
- win10怎麼開啟wifi功能_win10開啟無線wifi功能的方法Win10WiFi
- 【Flashback】Flashback Drop閃回刪除功能實踐
- css中display設定為table、table-row、table-cell後的作用及其注意點CSS
- iPhone開啟CarPlay功能方法 iPhone如何開啟CarPlay功能?iPhone