1. 程式人生 > >oracle scn詳解

oracle scn詳解

1.什麼是scn?

SCN用以標識資料庫在某個確切時刻提交的版本。在事務提交時,它被賦予一個唯一的標識事務的SCN。SCN同時被作為Oracle資料庫的內部時鐘機制,可被看做邏輯時鐘,每個資料庫都有一個全域性的SCN生成器。

SCN(System Change Number),也就是通常所說的系統改變號,是資料庫中非常重要的一個數據結構。

SCN用以標識資料庫在某個確切時刻提交的版本。在事務提交時,它被賦予一個唯一的標識事務的SCN。SCN同時被作為Oracle資料庫的內部時鐘機制,可被看做邏輯時鐘,每個資料庫都有一個全域性的SCN生成器。

作為資料庫內部的邏輯時鐘,資料庫事務依SCN而排序,Oracle也依據SCN來實現一致性讀(Read Consistency)等重要資料庫功能。另外對於分散式事務(Distributed Transactions),SCN也極為重要,這裡不做更多介紹。

SCN在資料庫中是唯一的,並隨時間而增加,但是可能並不連貫。除非重建資料庫,SCN的值永遠不會被重置為0.

一直以來,對於SCN有很多爭議,很多人認為SCN是指System Commit Number,而通常SCN在提交時才變化,所以很多時候,這兩個名詞經常在文件中反覆出現。即使在Oracle的官方文件中,SCN也常以System Change/Commit Number兩種形式出現。

到底是哪個詞其實不是很重要,重要的是需要知道SCN是Oracle內部的時鐘機制,Oracle通過SCN來維護資料庫的一致性,並通過SCN實施Oracle至關重要的恢復機制。

SCN在資料庫中是無處不在,常見的事務表、控制檔案、資料檔案頭、日誌檔案、資料塊頭等都記錄有SCN值。

冠以不同字首,SCN也有了不同的名稱,如檢查點SCN(Checkpint SCN)、Resetlogs SCN等。

在《Concepts》中是這麼描述SCN的:

system change number (SCN) is a logical, internal timestamp used by Oracle Database. SCNs order events that occur within the database, which is necessary to satisfy the ACID properties of a transaction. Oracle Database uses SCNs to mark the SCN before which all changes are known to be on disk so that recovery avoids applying unnecessary redo. The database also uses SCNs to mark the point at which no redo exists for a set of data so that recovery can stop.

1.1.scn的作用

SCN描述的是資料一致性的狀態,自然的它就會在各種涉及資料一致性的場合中起到重要作用的,下面列舉的就是其中的一部分:

  • 讀資料的一致性
  • 資料庫恢復
  • Flashback
  • Stream
  • 等等其他的

2.scn如何產生?

SCN: oracle system change number.表示oracle 系統改變號。
SCN是一個由之間轉換過來的數字,可以通過下列語句轉換SCN和具體時間。
SELECTDBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER,
SCN_TO_TIMESTAMP(DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER)FROM DUAL;

當前scn號和時間的對應關係:

[email protected]> select dbms_flashback.get_system_change_number,SCN_TO_TIMESTAMP(dbms_flashback.get_system_change_number) from dual;

GET_SYSTEM_CHANGE_NUMBER SCN_TO_TIMESTAMP(DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER)
------------------------ ---------------------------------------------------------------------------
                 1387175 12-MAR-14 11.35.56.000000000 AM

[email protected]> 

查詢當前scn:

[email protected]> select CURRENT_SCN from v$database;

CURRENT_SCN
-----------
    1386439

2.1.SCN檢視與轉換

Oracle資料庫提供了兩種直接檢視系統當前SCN的方法,一個是V$DATABASE中的CURRENT_SCN列,另外一個就是通過dbms_flashback.get_system_change_number得到。

1 2 3 4 5 6 SQL> col scn for 9999999999999 SQL> SELECT current_scn scn FROM v$database; SCN -------------- 7046242302279
幫助
1 2 3 4 5 6 SQL> col scn for 9999999999999 SQL> SELECT DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER scn FROM DUAL; SCN -------------- 7046242302616

如果你好奇心足夠的話也許會執行下面的語句,然後發現一個“驚訝”的結果:

幫助
1 2 3 4 5 6 7 8 SQL> col scn2 for 9999999999999 SQL> col scn for 9999999999999 SQL> SELECT current_scn scn, DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER scn2 FROM v$database; SCN SCN2

相關推薦

oracle scn

1.什麼是scn? SCN用以標識資料庫在某個確切時刻提交的版本。在事務提交時,它被賦予一個唯一的標識事務的SCN。SCN同時被作為Oracle資料庫的內部時鐘機制,可被看做邏輯時鐘,每個資料庫都有一個全域性的SCN生成器。 SCN(System Chan

Oracle SCN

一、簡介 scn,system change number 在某個時間點定義資料庫已提交版本的時間戳標記,Oracle為每個已提交事務分配一個唯一的scn,scn值是對資料庫進行更改的邏輯時間點。scn是一個6位元組的數字,分為兩部分,scn_base和scn_wrap,scn_base是一個四位元組的數字,

oracle序列

pan 知識庫 引用 dpt 默認 數據 指定 sta ima 序列: 是oacle提供的用於產生一系列唯一數字的數據庫對象。 l 自動提供唯一的數值 l 共享對象 l 主要用於提供主鍵值 l 將序列值裝入內存可以提高訪問效率 創建序列: 1、 要有創建序列的權限

OracleOracle中NLS_LANG變量的使用

make fault tro territory font pin onclick 添加 其中 目錄結構: // contents structure [-] 關於NLS_LANG參數 NSL_LANG常用的值 在MS-DOS模式和Batch模式中

ORACLE觸發器

etc 遊標 target with get ger 獨立 erer mon 作者:indexman 觸發器是許多關系數據庫系統都提供的一項技術。在oracle系統裏,觸發器類似過程和函數,都有聲明,執行和異常處理過程的PL/SQL塊。 8.1 觸發器類型 觸

Oracle索引

png 匹配 時間 相同 空間 表示 單列 設置 ogg Oracle索引詳解(一) ### --索引介紹 ??索引對於Oracle學習來說,非常重要,在數據量巨大的狀況下,使用恰到好處的索引,將會使得數據查詢時間大大減少,於2017/12/25暫時對Oracle中的索引進

PLSQL Developer連線遠端Oracle配置

一、安裝Instant Client  1. 下載Instant Client(輕量級的客戶端),作為本地Oracle環境 。     https://download.csdn.net/download/qq_40110871/10747501 2.

java程式設計師菜鳥進階(五)oracle基礎(五)oracle資料庫體系架構

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Oracle約束

一 約束的定義 約束是強加在表上的規則或條件。確保資料庫滿足業務規則。保證資料的完整性。當對錶進行DML或DDL操作時,如果此操作會造成表中的資料違反約束條件或規則的話,系統就會拒絕執行這個操作。約束可以是列一級別的 也可以是表級別的。定義約束時沒有給出約束的名字,OR

java程式設計師菜鳥進階(二)oracle基礎(二)oracle查詢語句和資料排序

本文所以練習都是基於oracle自帶提供的一個數據庫進行的。資料庫中包含員工表emp。部門資訊表dept。員工工資工總表下面是三個表的表結構:一:基本查詢語句1.最簡單的查詢所有列語句Select * from emp;2.查詢指定列表的查詢語句Select empno ,e

建立Oracle synonym

  --建立使用同義詞 --同義詞就是給表、檢視等物件取得別名,用於簡化對其的訪問   --分為2種: --私有同義詞:使用者自己建立自己使用的 --公共同義詞:dba建立,給其它使用者使用的   --為dept_sum_vu檢視建立一個同義詞 --不使用pub

Oracle記憶體之四 Buffer Cache 資料緩衝區

一. 官網說明 Memory Architecture              The database buffer cache is the portion of the SGA that holds copies of data blocks read from

Oracle記憶體之 Library cache 庫緩衝

Oracle記憶體詳解之 Library cache 庫緩衝 2017年11月09日 11:38:39 閱讀數:410更多 個人分類: 體系結構 Library cache是Shared pool的一部分,它幾乎是Oracle記憶體結構中最複雜的一部分,主要存放shared curo

Oracle記憶體之三 Shared pool 共享池

一. Shared Pool 概述             在之前的blog對Oracle 的記憶體架構也做了一個概述,參考:             在網上搜到一篇介紹shared pool 非常詳細的pdf資料。 原文連結以找不到,但還是要感謝作者Kamus的辛勤

Oraclev$session

ilove error datafile ase 實例 ted lba terminal 內存 首先查看一下v$session都存在哪些列 SYS@ORCL>desc v$session Name

Oracle日誌

一、Oracle日誌分類 分三大類: Alert log files--警報日誌,Trace files--跟蹤日誌(使用者和程序), redo log 重做日誌(記錄資料庫的更改)。 本文主要關注Oracle的重做日誌。 重做日誌分為線上重做日誌和歸檔重做日誌。   o

Oracle索引

一.索引介紹  1.1 索引的建立語法: CREATE UNIUQE | BITMAP INDEX <schema>.<index_name>       ON <schema>.<table_name>           

Oracle語句

ORACLE支援五種型別的完整性約束 NOT NULL (非空)--防止NULL值進入指定的列,在單列基礎上定義,預設情況下,ORACLE允許在任何列中有NULL值. CHECK (檢查)--檢查在約束中指定的條件是否得到了滿足. UNIQUE (唯一)--保證在指定的列

VC使用ADO連線Oracle資料庫(含原始碼下載)

ADO 主要物件介紹     ADO物件包括:連線物件(Connection Object)、命令物件 (Command Object) 、記錄集對象(RecordSet  Object)、欄位物件(Field  Object) 、記錄物件(Record  Object)

Oracle Procedure

1、建立儲存過程 create or replace procedure test(var_name_1 in type,var_name_2 out type) as  --宣告變數(變數名 變數型別)  begin  --儲存過程的執行體  end test; 打