關於ora_rowscn的一點理解

LuiseDalian發表於2014-04-29

--ora_rowscn返回的是當前會話中對該行進行修改的最近的SCN

scott@TESTDB11>select empno, ename, ora_rowscn from emp;

 

     EMPNO ENAME      ORA_ROWSCN

---------- ---------- ----------

      7369 SMITH         2583143

      7499 ALLEN         2583143

      7521 WARD          2583143

      7566 JONES         2583143

      7654 MARTIN        2583143

      7698 BLAKE         2583143

      7782 CLARK         2583143

      7788 SCOTT         2583143

      7839 KING          2583143

      7844 TURNER        2583143

      7876 ADAMS         2583143

      7900 JAMES         2583143

      7902 FORD          2583143

      7934 MILLER        2583143

 

14 rows selected.

 

--檢視當前的SCN

scott@TESTDB11>select current_scn from v$database;

 

CURRENT_SCN

-----------

    2643927

   

--對資料進行更新並提交

scott@TESTDB11>update emp set sal = sal * 2 where empno = 7788;

 

1 row updated.

 

scott@TESTDB11>commit;

 

Commit complete.

 

--再次檢視ora_rowscn,都有所增長

scott@TESTDB11>select empno, ename, ora_rowscn from emp;

 

     EMPNO ENAME      ORA_ROWSCN

---------- ---------- ----------

      7369 SMITH         2644024

      7499 ALLEN         2644024

      7521 WARD          2644024

      7566 JONES         2644024

      7654 MARTIN        2644024

      7698 BLAKE         2644024

      7782 CLARK         2644024

      7788 SCOTT         2644024

      7839 KING          2644024

      7844 TURNER        2644024

      7876 ADAMS         2644024

      7900 JAMES         2644024

      7902 FORD          2644024

      7934 MILLER        2644024

 

14 rows selected.

 

--為什麼更新一個人的工資,所有行的ora_rowscn都改變了呢,原因就是這些行都在同一資料檔案的相同的塊中

scott@TESTDB11>select empno, ename, rowid, dbms_rowid.rowid_relative_fno(rowid) file#,

  2  dbms_rowid.rowid_block_number(rowid) block#, ora_rowscn from emp;

 

     EMPNO ENAME      ROWID                   FILE#     BLOCK# ORA_ROWSCN

---------- ---------- ------------------ ---------- ---------- ----------

      7369 SMITH      AAAUzoAAEAAAACVAAA          4        149    2644024

      7499 ALLEN      AAAUzoAAEAAAACVAAB          4        149    2644024

      7521 WARD       AAAUzoAAEAAAACVAAC          4        149    2644024

      7566 JONES      AAAUzoAAEAAAACVAAD          4        149    2644024

      7654 MARTIN     AAAUzoAAEAAAACVAAE          4        149    2644024

      7698 BLAKE      AAAUzoAAEAAAACVAAF          4        149    2644024

      7782 CLARK      AAAUzoAAEAAAACVAAG          4        149    2644024

      7788 SCOTT      AAAUzoAAEAAAACVAAH          4        149    2644024

      7839 KING       AAAUzoAAEAAAACVAAI          4        149    2644024

      7844 TURNER     AAAUzoAAEAAAACVAAJ          4        149    2644024

      7876 ADAMS      AAAUzoAAEAAAACVAAK          4        149    2644024

      7900 JAMES      AAAUzoAAEAAAACVAAL          4        149    2644024

      7902 FORD       AAAUzoAAEAAAACVAAM          4        149    2644024

      7934 MILLER     AAAUzoAAEAAAACVAAN          4        149    2644024

 

14 rows selected.

   

-- rowdepencencies選項:確定使用行級別的依賴性跟蹤。表中的每一行都有一個SCN,這個SCN >= 修改該行的最後的事務的提交的SCN

scott@TESTDB11>create table emp1 rowdependencies as select * from emp;

 

Table created.

--剛建立之後,所有行的ora_rowscn都一致

scott@TESTDB11>select empno, ename, rowid, dbms_rowid.rowid_relative_fno(rowid) file#,

  2  dbms_rowid.rowid_block_number(rowid) block#, ora_rowscn from emp1;

 

     EMPNO ENAME      ROWID                   FILE#     BLOCK# ORA_ROWSCN

---------- ---------- ------------------ ---------- ---------- ----------

      7369 SMITH      AAAUz6AAEAAAAIzAAA          4        563    2644529

      7499 ALLEN      AAAUz6AAEAAAAIzAAB          4        563    2644529

      7521 WARD       AAAUz6AAEAAAAIzAAC          4        563    2644529

      7566 JONES      AAAUz6AAEAAAAIzAAD          4        563    2644529

      7654 MARTIN     AAAUz6AAEAAAAIzAAE          4        563    2644529

      7698 BLAKE      AAAUz6AAEAAAAIzAAF          4        563    2644529

      7782 CLARK      AAAUz6AAEAAAAIzAAG          4        563    2644529

      7788 SCOTT      AAAUz6AAEAAAAIzAAH          4        563    2644529

      7839 KING       AAAUz6AAEAAAAIzAAI          4        563    2644529

      7844 TURNER     AAAUz6AAEAAAAIzAAJ          4        563    2644529

      7876 ADAMS      AAAUz6AAEAAAAIzAAK          4        563    2644529

      7900 JAMES      AAAUz6AAEAAAAIzAAL          4        563    2644529

      7902 FORD       AAAUz6AAEAAAAIzAAM          4        563    2644529

      7934 MILLER     AAAUz6AAEAAAAIzAAN          4        563    2644529

 

14 rows selected.

 

scott@TESTDB11>update emp1 set sal = sal + 500 where empno = 7788;

 

1 row updated.

 

scott@TESTDB11>commit;

 

Commit complete.

--更新一行之後,只有被更新的行的ora_rowscn與其它的不同

scott@TESTDB11>select empno, ename, rowid, dbms_rowid.rowid_relative_fno(rowid) file#,

  2  dbms_rowid.rowid_block_number(rowid) block#, ora_rowscn from emp1;

 

     EMPNO ENAME      ROWID                   FILE#     BLOCK# ORA_ROWSCN

---------- ---------- ------------------ ---------- ---------- ----------

      7369 SMITH      AAAUz6AAEAAAAIzAAA          4        563    2644529

      7499 ALLEN      AAAUz6AAEAAAAIzAAB          4        563    2644529

      7521 WARD       AAAUz6AAEAAAAIzAAC          4        563    2644529

      7566 JONES      AAAUz6AAEAAAAIzAAD          4        563    2644529

      7654 MARTIN     AAAUz6AAEAAAAIzAAE          4        563    2644529

      7698 BLAKE      AAAUz6AAEAAAAIzAAF          4        563    2644529

      7782 CLARK      AAAUz6AAEAAAAIzAAG          4        563    2644529

      7788 SCOTT      AAAUz6AAEAAAAIzAAH          4        563    2644586

      7839 KING       AAAUz6AAEAAAAIzAAI          4        563    2644529

      7844 TURNER     AAAUz6AAEAAAAIzAAJ          4        563    2644529

      7876 ADAMS      AAAUz6AAEAAAAIzAAK          4        563    2644529

      7900 JAMES      AAAUz6AAEAAAAIzAAL          4        563    2644529

      7902 FORD       AAAUz6AAEAAAAIzAAM          4        563    2644529

      7934 MILLER     AAAUz6AAEAAAAIzAAN          4        563    2644529

 

14 rows selected.

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17013648/viewspace-1151262/,如需轉載,請註明出處,否則將追究法律責任。

相關文章