Êý¾Ý²Ö¿â¾³£Í¨¹ý¶àÖÖÊý¾ÝԴϵͳÌî³ä£¬¶øÿÖÖϵͳ¶¼ÔËÐÐÓÐ×Ô¼ºµÄÓ¦ÓóÌÐò¡£ËùÒÔΪÁËÄܸøÊý¾Ý²Ö¿âÖ»ÌṩÐÂÊý¾Ý£¬È·¶¨ÄÄЩÊÇ×î½ü¸üеÄÐÐÊÇÒ»¼þ·Ç³£¸´ÔÓµÄÊ¡£ÔÚ´¦ÀíһЩÆä¼Ü¹¹Öв»°üÀ¨¡°ÉϴθüÐÂʱ¼ä¡±ÁеĹýʱÈí¼þʱ£¬ÕâÓÈÆäÊÇÒ»¸öÄÑÌâ¡£ÆóÒµ×ÔÈ»²»ÇéÔ¸½ö½öΪÁË×·×ٱ仯¶øͨ¹ýÐ޸Ť×÷´úÂëÀ´Ìí¼ÓÁС£
ÔÚOracle 10gÖУ¬ÔÚÐÐ×îºóÒ»´Î±»¸üеÄʱºò£¬Ã¿Ò»Ðж¼ÓÐÒ»¸öеı»³Æ×÷ORA_ROWSCNµÄαÁС£ ORA_ROWSCN ÌṩÁËÒ»¸ö¡°±£ÊØÉϱ߽磨conservative upper bound£©¡±ÏµÍ³¸Ä±äÊý£¬ÓÃÀ´¼Ç¼×î½ü±»Ð޸ĵÄÐеÄÊÂÎñ¡£Õâ¾ÍÒâζ×Åϵͳ¸Ä±äÊý£¨SCN£©ÊÇÒ»¸ö¹À¼ÆÖµ£¬ÒòΪÔÚOracleÖÐϵͳ¸Ä±äÊýÖ»ÄÜĬÈÏÔÚÄ£¿é¼¶±»×·×Ù¡£
ÀýÈçÔÚÁбíAÖУ¬ORA_ROWSCN ÔÚ´¦ÀíÒ»¸öС±í¸ñʱ±»Ñ¡ÖУ¬Ò»Ðб»¸üкó£¬ORA_ROWSCN Ôٴα»Ñ¡ÖС£
ÁбíA
SQL>
SQL> SELECT ora_rowscn, ename, sal
2 FROM emp;
ORA_ROWSCN ENAME SAL
---------- ---------- ----------
529426 SMITH 800
529426 ALLEN 1600
529426 WARD 1250
529426 JONES 2975
529426 MARTIN 1250
529426 BLAKE 2850
529426 CLARK 2450
529426 SCOTT 3000
529426 KING 5000
529426 TURNER 1500
529426 ADAMS 1100
ORA_ROWSCN ENAME SAL
---------- ---------- ---------- 529426 JAMES 950
529426 FORD 3000
529426 MILLER 1300
14 rows selected.
SQL> UPDATE emp
2 SETsal = 6000
3 WHERE ename = 'KING';
1 row updated.
SQL> commit;
Commit complete.
SQL> SELECT ora_rowscn, ename, sal
2 FROM emp;
ORA_ROWSCN ENAME SAL
---------- ---------- ----------
653331 SMITH 800
653331 ALLEN 1600
653331 WARD 1250
653331 JONES 2975
653331 MARTIN 1250
653331 BLAKE 2850
653331 CLARK 2450
653331 SCOTT 3000
653331 KING 6000
653331 TURNER 1500
653331 ADAMS 1100
ORA_ROWSCN ENAME SAL
---------- ---------- ----------
653331 JAMES 950
653331 FORD 3000
653331 MILLER 1300
14 rows selected.
SQL> SELECT SCN_TO_TIMESTAMP(653331) FROM dual;
SCN_TO_TIMESTAMP(653331)
--------------20-JUN-06 11.03.59.000000000 PM
¼´Ê¹Ö»ÓÐÒ»Ðб»¸Ä¶¯ÁË£¬Ê£ÏµÄÒ²»áÏÔʾһ¸öеÄϵͳ¸Ä±äÊý£¨SCN£©¡££¨¸ü׼ȷµØ˵£¬Äã¿ÉÒÔÔÚÒ»¸ö±íµÚÒ»´Î±»´´½¨Ê±£¬Ê¹ÓÃÐм¶ÏµÍ³¸Ä±äÊý×·×Ù¡£µ«Òź¶µÄÊÇ£¬Äã²»Äܹ»¸ü¸Ä¸Ã±í¸ñ£¬ÒÔ±ãÔÚÒÔºó¼ÓÈë¸ÃÌØÐÔ¡££©ËùÒÔÈç¹û±»¸üеĿéÊý±È±íÖеĿéÊýÒªÉÙ£¬ÕâÒ²¿ÉÒÔ³ÉΪһÖÖ·¢Ïֱ仯µÄ·½·¨£¬¶ø²»ÓÃÉæ¼°Ì«¶à¶îÍâµÄÐС£
Èç¹ûÄãÐèÒªÓëÊÂÎñÓйصÄÈÕÆÚºÍʱ¼äÓ¦¸ÃÔõô°ìÄØ£¿SCN_TO_TIMESTAMPº¯Êý¿ÉÒÔ½«ORA_ROWSCN ת»»³ÉΪһ¸öʱ¼ä´Á£¬ÀûÓÃËüÄã¿ÉÒÔ½øÐвéѯ£¬»òÕß°ÑËüÓÃ×÷Ò»¸öWHERE ×Ó¾äµÄνÓï¡£µ«ÊÇ£¬Õâ¸öʱ¼ä´ÁÈÔÈ»ÊÇÒ»¸ö¹À¼ÆÖµ¡£
ORA_ROWSCN Ò²Êǽ«ÏµÍ³¸Ä±äÖµ£¨SCN£©ÓÃ×÷ÉÁ»Ø²éѯ½Ý¾¶£¨¾¡¹ÜRA_ROWSCN ±¾ÉíÔÚÉÁ»ØÖв¢²»Äܱ»Ñ¡ÖУ©µÄÒ»Öֺܷ½±ãµÄ·½·¨£¬²»È»¾ÍÒªÓÃÉÁ»ØÐÎʽ²éѯ£¬Ñ¡ÖÐVERSIONS_STARTSCN ºÍVERSIONS_ENDSCN αÁС£
ÁбíBÊÇÒ»´ÎÉÁ»Ø²éѯ£¬ËüÓÃÒ»¸öСÓÚµ±Ç°ÖµµÄϵͳ¸Ä±äÖµÀ´»ñµÃÒ»¸öÊý¾ÝÐÐÔÀ´µÄÖµ¡£ÎÒÃÇ·¢ÏÖKingµÄ¹¤×ʻص½ÁË5000£¬¶øORA_ROWSCNµÄÖµÔòÊÇ×î³õµÄϵͳ¸Ä±äÖµ¡£
ÁбíB
SQL> SELECT ora_rowscn, ename, sal
2 FROMemp AS OF SCN (653330)
3 WHERE ename = 'KING';
ORA_ROWSCN ENAME SAL
---------- ---------- ----------
529426 KING 5000