【體繫結構】有關Oracle SCN知識點的整理

来源:http://www.cnblogs.com/lhrbest/archive/2016/10/14/5961987.html
-Advertisement-
Play Games

【體繫結構】有關Oracle SCN知識點的整理 1 BLOG文檔結構圖 2 前言部分 2.1 導讀和註意事項 各位技術愛好者,看完本文後,你可以掌握如下的技能,也可以學到一些其它你所不知道的知識,~O(∩_∩)O~: ① Oracle中的SCN是什麼?(重點) ② 如何查詢SCN?(重點) ③ S... ...


體繫結構有關Oracle SCN知識點整理

 

1  BLOG文檔結構圖

wpsDE64.tmp_thumb 

 

2  前言部分

2.1  導讀和註意事項

各位技術愛好者,看完本文後,你可以掌握如下的技能,也可以學到一些其它你所不知道的知識,~O(∩_∩)O~

Oracle中的SCN是什麼?(重點)

如何查詢SCN?(重點)

SCN有哪些分類?(重點)

SCN和系統恢復的關係?(重點)

實例恢復和介質恢復的區別是什麼?RAC中的實例恢復是什麼樣的?(重點)

SCN和時間的轉換

⑦ SMON_SCN_TIME系統表的認識

不完全恢復的一些分類及其寫法

Tips

本文在itpubhttp://blog.itpub.net/26736162)、博客園(http://www.cnblogs.com/lhrbest)和微信公眾號(xiaomaimiaolhr有同步更新

文章中用到的所有代碼相關軟體相關資料及本文的pdf版本都請前往小麥苗的360雲盤下載,我的360雲盤地址見:http://blog.itpub.net/26736162/viewspace-1624453/

若網頁文章代碼格式有錯亂,請嘗試以下辦法:使用360瀏覽器去博客園地址閱讀下載pdf格式的文檔來閱讀

本篇BLOG,代碼輸出部分一般放在一行一列的表格中。其中,需要特別關註的地方我都用灰色背景和粉紅色字體來表示,比如下邊的例子中,thread 1的最大歸檔日誌號為33thread 2的最大歸檔日誌號為43是需要特別關註的地方;而命令一般使用黃色背景和紅色字體註;對代碼或代碼輸出部分的註釋一般採用藍色字體表示

  List of Archived Logs in backup set 11

  Thrd Seq     Low SCN    Low Time            Next SCN   Next Time

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

  1    32      1621589    2015-05-29 11:09:52 1625242    2015-05-29 11:15:48

  1    33      1625242    2015-05-29 11:15:48 1625293    2015-05-29 11:15:58

  2    42      1613951    2015-05-29 10:41:18 1625245    2015-05-29 11:15:49

  2    43      1625245    2015-05-29 11:15:49 1625253    2015-05-29 11:15:53

[ZHLHRDB1:root]:/>lsvg -o

T_XLHRD_APP1_vg

rootvg

[ZHLHRDB1:root]:/>

00:27:22 SQL> alter tablespace idxtbs read write;

====2097152*512/1024/1024/1024=1G

本文如有錯誤或不完善的地方請大家多多指正,ITPUB留言或QQ皆可,您的批評指正是我寫作的最大動力。

 

2.2  本文簡介

由於寫書遇到了SCN的概念,所以就找了點資料,整理了一下有關SCN的一些知識。順便複習了一下SCN和資料庫恢復的關係。

3  Oracle SCN

3.1  簡介

SCN(System Change Number,系統改變號)是一個由系統內部維護的序列號。當系統需要更新的時候自動增加,它是系統中維持數據的一致性和順序恢復的重要標誌,是資料庫非常重要的一種數據結構。SCN的最大值是0xffff.ffffffff。在資料庫中SCN作為一種時鐘機制來標記資料庫動作,比如當事務的發生,資料庫會用一個SCN來標記它。同時這個SCN在資料庫全局也是唯一的,它隨時間的增長而增長除非重建資料庫。

在資料庫中,SCN可以說是無處不在,數據文件頭,控制文件,數據塊頭,日誌文件等等都標記著SCN。也正是這樣,資料庫的一致性維護和SCN密切相關。不管是數據的備份,恢復都是離不開SCN的。

3.2  官方文檔

A system change number (SCN) is a logical, internal time stamp 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.

SCNs occur in a monotonically increasing sequence. Oracle Database can use an SCN like a clock because an observed SCN indicates a logical point in time and repeated observations return equal or greater values. If one event has a lower SCN than another event, then it occurred at an earlier time with respect to the database. Several events may share the same SCN, which means that they occurred at the same time with respect to the database.

Every transaction has an SCN. For example, if a transaction updates a row, then the database records the SCN at which this update occurred. Other modifications in this transaction have the same SCN. When a transaction commits, the database records an SCN for this commit.

Oracle Database increments SCNs in the system global area (SGA). When a transaction modifies data, the database writes a new SCN to the undo data segment assigned to the transaction. The log writer process then writes the commit record of the transaction immediately to the online redo log. The commit record has the unique SCN of the transaction. Oracle Database also uses SCNs as part of its instance recovery and media recovery mechanisms.

怎麼理解這個“SCN(系統變更號)是供Oracle資料庫使用的一個邏輯的、內部的時間戳呢?要理解這個先需要理解Oracle中的事務(Transaction)和數據一致性(Data Consistency)的概念。

先說說數據一致性的概念。數據一致性指的是數據的可用性。比如說管理一個財務的系統,需要從A賬戶將100元轉入到B賬戶,正常的操作是從A賬戶減去100元,然後給B賬戶加上100元,如果這兩步操作都正常完成了,那我們可以說完成轉賬操作之後的數據是一致可用的;但是如果在操作的過程中出了問題,A賬戶的100元給減掉了,但是B賬戶卻沒有加上100元,這樣的情況下產生的結果數據就有問題了,因為部分操作的失敗導致了數據的不一致而不可用,在實際中肯定是要避免這種讓數據不一致的情況發生的。在Oracle資料庫中,保證數據一致性的方法就是事務。

事務是一個邏輯的、原子性的作業單元,通常由一個或者是多個SQL組成,一個事務裡面的所有SQL操作要麼全部失敗回滾(Rollback),要麼就是全部成功提交(Commit)。就像上面轉賬的例子,為保證數據的一致性,就需要將轉賬的兩步操作放在一個事務裡面,這樣不管哪個操作失敗了,都需要將所有已進行的操作回滾,以保證數據的可用性。進行事務管理是資料庫區別於別的文件系統的一個最主要的特征,在資料庫中事務最主要的作用就是保證了數據的一致性,每次事務的提交都是將資料庫從一種一致性的狀態帶入到另外一種一致性的狀態中,SCN就是用來對資料庫的每個一致狀態進行標記的,每當資料庫進入到一個新的一致的狀態,SCN就會加1,也就是每個提交操作之後,SCN都會增加。也許你會想為什麼不直接記錄事務提交時候的時間戳呢?這裡面主要是涉及了兩個問題,一個是時間戳記錄的精度有限,再一個就是在分散式系統中記錄時間戳會存在系統時鐘同步的問題,詳細的討論可以查看Ordering Events in Oracle

SCN在資料庫中是一個單一的不斷的隨著資料庫一致性狀態的改變而自增的序列。正如一個時間戳代表著時間裡面的某一個固定的時刻點一樣,每一個SCN值也代表著資料庫在運行當中的一個一致性的點,大的SCN值所對應的事務總是比小SCN值的事務發生的更晚。因此把SCN說成是Oracle資料庫的邏輯時間戳是很恰當的。

3.3  SCN的分類

嚴格來說SCN是沒有分類的,之所以會有不同類型的SCN並不是說這些SCN的概念不一樣,而是說不同分類的SCN代表的意義不一樣,不管什麼時候SCN所指代的都是資料庫的某個一致性的狀態。就像我們給一天中的某個時間點定義上班時間、另外的某個時間點定義成下班時間一樣,資料庫Checkpoint發生點的SCN被稱為Checkpoint SCN,僅此而已。

SCN可以分為4類,系統檢查點SCNSystem Checkpoint SCN)、文件檢查點SCNDatafile Checkpoint SCN)、開始SCNStart SCN)和結束SCNStop SCN),參考如下表格:

wpsDE75.tmp_thumb 

3.4  查詢4SCN常用的SQL語句

col status for a10

select GROUP# ,SEQUENCE#,STATUS,FIRST_CHANGE#,FIRST_TIME from v$log;

 

SELECT A.FILE#,

       A.NAME,

       (SELECT CHECKPOINT_CHANGE# FROM V$DATABASE) SYSTEM_CKPT_SCN,

       A.CHECKPOINT_CHANGE# DF_CKPT_SCN,

       A.LAST_CHANGE# END_SCN,

       B.CHECKPOINT_CHANGE# START_SCN,

       B.RECOVER,

       A.STATUS

  FROM V$DATAFILE A, V$DATAFILE_HEADER B

WHERE A.FILE# = B.FILE#;

SELECT FILE#,ONLINE_STATUS,CHANGE#,ERROR FROM V$RECOVER_FILE;

 

3.4.1  文件檢查點SCN (Datafile Checkpoint SCN)

SYS@lhrdb>  select file#,checkpoint_change# from v$datafile;

 

     FILE# CHECKPOINT_CHANGE#

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

         1            9026292

         2            9026292

         3            9026292

         4            9026292

         5            9026292

         6            9026292

         7            9026292

 

7 rows selected.

 

SYS@lhrdb>  alter tablespace users read only;

 

Tablespace altered.

 

SYS@lhrdb> select file#,checkpoint_change# from v$datafile;

 

     FILE# CHECKPOINT_CHANGE#

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

         1            9026292

         2            9026292

         3            9026292

         4            9028165

         5            9026292

         6            9026292

         7            9026292

 

7 rows selected.

 

SYS@lhrdb> select checkpoint_change# from v$database;

 

CHECKPOINT_CHANGE#

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

           9026292

 

可以看到4號文件也就是users表空間所屬的文件scn值和其他文件不一致,且比系統檢查點的scn要大。

3.4.2  Stop SCN

Stop scn記錄在數據文件頭上。當資料庫處在打開狀態時,stop scn被設成最大值0xffff.ffffffff。在資料庫正常關閉過程中,stop scn被設置成當前系統的最大scn值。在資料庫打開過程中,Oracle會比較各文件的stop scncheckpoint scn,如果值不一致,表明資料庫先前沒有正常關閉,需要做恢復。

SYS@lhrdb> SELECT TABLESPACE_NAME,STATUS FROM DBA_TABLESPACES;

 

TABLESPACE_NAME                STATUS

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

SYSTEM                         ONLINE

SYSAUX                         ONLINE

UNDOTBS1                       ONLINE

TEMP                           ONLINE

USERS                          READ ONLY

EXAMPLE                        ONLINE

TS_MIG_CHAIN_LHR               ONLINE

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、Handler 機制 Android 中主線程也叫 UI 線程,那麼從名字上我們也知道主線程主要是用來創建、更新 UI 的,而其他耗時操作,比如網路訪問,或者文件處理,多媒體處理等都需要在子線程中操作,之所以在子線程中操作是為了保證 UI 的流暢程度,手機顯示的刷新頻率是 60Hz,也就是一秒鐘 ...
  • 試試這個,能解決國內訪問Google伺服器的困難啟動 Android SDK Manager ,打開主界面,依次選擇「Tools」、「Options...」,彈出『Android SDK Manager - Settings』視窗;在『Android SDK Manager - Settings』窗 ...
  • 在項目中日期的顯示經常會當天的顯示時分,當月的顯示日時和分,以此類推,難免會涉及到日期的比較,下麵介紹一下日期比較的兩種方法 比較日期有兩種方法 一種是通過系統的NSCalendar類實現 NSString * date = @"2016-10-12 13:12:12"; //創建日期格式 NSDa ...
  • // 1. 實現一個函數,在一個有序整型數組中二分查找出指定的值,找到則返回該值的位置,找不到返回 -1。 package demo; public class Mytest { public static void main(String[] args) { int[] arr={1,2,5,9, ...
  • 1、Service 是否在 main thread 中執行, service 裡面是否能執行耗時的操作?預設情況,如果沒有顯示的指 servic 所運行的進程, Service 和 activity 是運行在當前 app 所在進程的 main thread(UI 主線程)裡面。service 裡面不 ...
  • 1、什麼是 Activity?Activity是Android組件中最基本也是最為常見用的四大組件(Activity,Service服務,Content Provider內容提供,BroadcastReceiver廣播接收器)之一。 Activity是一個應用程式組件,提供一個屏幕,用戶可以用來交互 ...
  • 開啟Tomcat https服務 發佈企業級應用的時候遇到一個問題,就是IOS7.1之後app的下載地址URL必須是https開頭的協議,所以伺服器必須支持https協議。 實驗環境:Mac OSX 或者 win7,Tomcat 7.0,JDK 1.7 一.環境搭建 1. 安裝tomcat a.下載 ...
  • SQL分頁查詢的幾種方式: 1:TOP() 2:BETWEEN * AND * , Row_Number() OVER(ORDER BY *) AS rowNum 3:WITH * AS () , Row_Number() OVER(ORDER BY *) AS rowNum 4... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...