oracle 怎么實現讀一致性

?
Oracle 數據塊讀一致性判斷流程(正確版)
假設:

Query SCN = 查詢開始的 SCN(Query SCN)
lastSubbmit SCN = 行中最新的提交scn
Row SCN = 行最后修改的 SCN(存儲在行頭,通過 ITL 推導)
UBA = Undo Block Address(Undo 文件號、塊號、槽號)
Record SCN = 某條 Undo Record 中的 SCN
行頭要關注的字段
Lock Byte + UBA 是讀一致性的核心:

Lock Byte → 找 ITL 槽 → 得到事務提交狀態、提交 SCN

UBA → 找 Undo Record → 獲取舊版本數據

步驟 1:塊級快速判斷
讀取 塊頭:
如果 lastSubbmit SCN ≤ Query SCN 并且 塊中所有事務槽(ITL entries):
都已提交
→ 整個塊可直接使用,無需逐行回溯
否則 → 進入逐行判斷

步驟 2:逐行判斷
對塊中的每一行(或通過索引定位到的行):


獲取鎖字節(Lock Byte) → 對應 ITL 槽號
如果無法定位到事物槽,直接走uba的undo record邏輯
獲取該行的 UBA(行級 Undo 指針,指向該行上一次修改的 Undo Record)

如果事務已提交:
從 ITL 槽獲得 Row SCN(提交 SCN)
如果 Row SCN ≤ Query SCN → 當前行可見,直接返回
如果 Row SCN > Query SCN → 需要回溯 Undo
如果事務未提交 → 必須回溯 Undo(查詢要看到事務開始前的舊值)
步驟 3:回溯 Undo 鏈
用行頭中的 UBA 定位到對應的 Undo Block
在 Undo Block 中找到目標 Undo Record:
獲取該記錄的 SCN(Record SCN)
如果 Record SCN ≤ Query SCN → 這是可見版本,使用該 Undo Record 的數據構造一致性讀副本(CR Copy)
如果 Record SCN > Query SCN → 沿著該記錄的 Prev UBA 指向的上一條 Undo Record 繼續回溯
重復步驟 2 直到:
找到 Record SCN ≤ Query SCN 的版本 → 返回該版本
或 Undo 已被覆蓋 → 報 ORA-01555 snapshot too old
整體邏輯圖(簡化)
讀取塊頭
├── 如果 lastSubbmit SCN ≤ Query SCN 且 所有 ITL 已提交 且 提交 SCN ≤ Query SCN → 直接使用塊數據
└── 否則 → 遍歷每行:
├── 行頭 → 鎖字節 → ITL 槽
├── 判斷事務提交狀態和 Row SCN
├── 若需回溯 → 行頭 UBA → Undo Block → Undo Record
├── 若 Undo Record.SCN ≤ Query SCN → 返回版本
└── 若 Undo Record.SCN > Query SCN → Prev UBA 回溯


通過實體中的uba 定位到undo塊具體記錄信息,在通過record 中的Prev UBA(指向上一條記錄),
找到上1條undo record.每個record 中有scn記錄,這里叫做Record SCN.如果Record SCN<=Query SCN.則取該undo record 記錄.

下面是undo bock記錄:


Undo Block
├─ Undo Block Header(元信息,段號、事務表、事務狀態…)
├─ Undo Records[]
│ ????├─ Record Header
│ ????│ ????├─ UBA(本記錄的地址:文件號+塊號+記錄號)
│ ????│ ????├─ Prev UBA(指向上一條記錄)
│ ????│ ????├─ SCN(修改發生時的 SCN)
│ ????│ ????├─ Object Number(表/索引對象 ID)
│ ????│ ????├─ RowID(被修改行的物理位置)
│ ????└─ Old Column Values(修改前的列值)
└─ ...

重要實現是Prev UBA 構成undo record 鏈,可以回溯上一個版本.

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/93334.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/93334.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/93334.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ISTA為什么要加上軟閾值激活函數?r若沒有L1 正則化也要加其他激活函數嗎?

一、加上軟閾值函數&#xff08;Soft-thresholding&#xff09;是因為 LISTA&#xff08;以及它的前身 ISTA&#xff09;本質上是在求解一個 帶 L1 正則化的稀疏優化問題&#xff1a; min?x12∥y?Ax∥22λ∥x∥1 \min_x \frac{1}{2} \|y - Ax\|_2^2 \lambda \|x\|_1 xmin?2…

線程P4 | 線程安全問題及解決方法

何為線程安全&#xff1f;要談及何為線程安全&#xff0c;總得說來&#xff0c;我們可以用一句話來概況&#xff1a;如果在多線程環境下代碼運行結果和我們預期是相符的&#xff0c;即和單線程環境下的運行結果相同&#xff0c;那么我們就稱這個程序是線程安全的&#xff0c;反…

水印消失術!JavaAI深度學習去水印技術深度剖析

一、飛算JavaAI平臺概述1.1 飛算JavaAI定位與技術特色 飛算JavaAI是國內領先的智能化Java開發平臺&#xff0c;通過AI技術賦能軟件開發全流程&#xff0c;特別針對小程序、Web應用等輕量級開發場景提供*零基礎編程→高質量交**的一站式解決方案。其核心優勢體現在&#xff1a; …

醋酸釓:醫學影像與科技創新中的重要角色

醋酸釓是一種由釓元素和醋酸根離子組成的化合物。釓是稀土金屬之一&#xff0c;常常用于醫學影像、核磁共振成像&#xff08;MRI&#xff09;以及某些工業應用。醋酸釓作為釓的鹽之一&#xff0c;具有許多獨特的性質&#xff0c;尤其在醫學和科學研究領域表現突出。一、醋酸釓的…

插入排序專欄

插入排序&#xff08;Insertion Sort&#xff09;是一種簡單直觀的排序算法&#xff0c;其思想源于我們日常生活中整理撲克牌的方式。本文將詳細解析插入排序的工作原理&#xff0c;通過 Java 實現代碼進行分析&#xff0c;深入探討其時間復雜度的計算過程&#xff0c;并闡述其…

高效Unicode字符表示:一種創新的詞表構建策略分析

在自然語言處理中&#xff0c;處理多語言和特殊字符的表示始終是一項挑戰。本文將分析一種創新的詞表構建策略&#xff0c;該策略通過數學優化和雙token機制&#xff0c;在保持詞表緊湊的同時實現了對Unicode字符的全面覆蓋。 詞表構建的核心邏輯 該策略包含四個關鍵步驟&#…

python與物聯網基礎知識

軟件準備&#xff1a;軟件&#xff1a;thonny-4.0.1-windows-portable(win10,11系統64位)驅動&#xff1a;CP210x_Windows_Drivers固件&#xff1a;esp8266-1m-20220618-v1.19.1.bin物料準備&#xff1a;面包板、開發板、電源線一、安裝與調試&#xff1a;1.在軟件文件中找到th…

SVN提交服務器拒絕訪問的問題

SVN提交服務器拒絕訪問的問題 介紹 分析 1.服務器的SVN沒有開啟 2.服務器的網絡端口除了問題沒有開放端口 3.客戶端的SVN配置除了問題刷新一下數據 4.客戶端的SVN重裝 找原因 1.初步以為是**防火墻**的問題 2.網絡運營商的問題 總結 介紹 SVN相信大家都用過,今天反饋一個比較…

【Linux】庫制作與原理

前言 本篇博客我們來認識下庫方面的知識 &#x1f493; 個人主頁&#xff1a;zkf ? 文章專欄&#xff1a;Linux 若有問題 評論區見&#x1f4dd; &#x1f389;歡迎大家點贊&#x1f44d;收藏?文章 目錄 1.什么是庫 2.靜態庫 2.1靜態庫的生成 2.2靜態庫的使用 3.動態庫 …

Android ADB 常用指令全解析

ADB&#xff08;Android Debug Bridge&#xff09;是 Android 開發和測試不可或缺的調試工具&#xff0c;它建立了電腦與 Android 設備之間的通信橋梁&#xff0c;通過命令行指令可實現對設備的全方位控制。掌握 ADB 指令能大幅提升開發效率&#xff0c;解決各類調試難題。本文…

使用 Rust 創建 32 位 DLL 的完整指南

使用 Rust 創建 32 位 DLL 的完整指南 在 Rust 中創建 32 位 DLL 需要特定的工具鏈配置和編譯選項。以下是詳細步驟和最佳實踐&#xff1a; 環境準備 1. 安裝 Rust 工具鏈 # 安裝 Rust curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh# 安裝 32 位目標 rustu…

算法基礎 第3章 數據結構

1.單調棧 1.什么是單調棧 單調棧&#xff0c;即具有單調性的棧。 實現 #include <iostream> #include <stack> using namespace std; const int N 3e6 10; int a[N], n; void test1() {stack<int> st; // 維護?個單調遞增的棧for(int i 1; i < n; i…

[機器學習]08-基于邏輯回歸模型的鳶尾花數據集分類

使用sklearn的LogisticRegression多分類模型程序代碼&#xff1a;import numpy as np from sklearn.linear_model import LogisticRegression import matplotlib.pyplot as plt import matplotlib as mpl from sklearn import datasets from sklearn import preprocessing impo…

【STM32入門教程】stm32簡介

一、STM32簡介二、ARM三、stm32f103c8t6四、命名規則五、系統結構六、引腳定義七、啟動配置一般情況下&#xff0c;都是在flash開始程序&#xff0c;而啟動程序也可以進行配置在其他地方啟動程序&#xff0c;通過配置boot0和boot1來進行配置八、最小系統電路

SAE J2716多協議網關的硬件架構與實時協議轉換機制解析

本文解析符合SAE J2716標準的工業級協議轉換設備技術架構&#xff0c;通過拆解其四路雙向SENT通道與多總線&#xff08;CANFD/Ethernet/USB&#xff09;的實時交互機制、MicroSD獨立日志系統設計及模擬量動態映射方案&#xff0c;為汽車電子與工業通信開發者提供可復用的技術參…

VS2022+QT5.15.2+OCCT7.9.1的開發環境搭建流程

以下是VS2022 QT5.15.2 OCCT7.9.1開發環境搭建的完整流程&#xff1a; 一、安裝Visual Studio 2022 下載安裝程序 訪問VS官網下載Community版安裝組件 選擇"使用C的桌面開發"工作負載勾選&#xff1a; MSVC v143 - VS 2022 C x64/x86生成工具Windows 10 SDK (建議…

數據庫訪問模式詳解

數據庫訪問模式詳解數據庫訪問模式是軟件架構中數據訪問層&#xff08;Data Access Layer&#xff09;設計的核心&#xff0c;它定義了應用程序如何與數據庫進行交互的策略和方法。選擇合適的訪問模式對于系統的性能、可維護性、可擴展性、事務一致性和開發效率至關重要。不同的…

BGE向量算法

一、是什么 什么是BGE向量算法&#xff1f;先說說網上的概念吧。本文不講解太深的算法知識&#xff0c;主要講解如何用&#xff01; BGE&#xff08;BAAI General Embedding&#xff09;是北京智源研究院開源的“通用語義向量模型”。一句話&#xff1a;把中文或英文句子變成…

AI數據倉庫的核心優勢解析

內容概要本文旨在全面解析AI數據倉庫的核心優勢&#xff0c;為讀者提供清晰的框架。文章首先從基礎定義出發&#xff0c;探討其如何高效整合多源數據&#xff0c;并支持人工智能與機器學習應用。隨后&#xff0c;將詳細闡述處理TB級數據的能力&#xff0c;包括兼容結構化和非結…

具身智能Scaling Law缺失:機器人界的“摩爾定律“何時誕生?

8月9日&#xff0c;在世界機器人大會的演講臺上&#xff0c;宇樹科技創始人王興興談論到目前機器人運動控制領域存在的RL Scaling Law問題&#xff0c;他認為現在的機器人在學習一項新的技能時&#xff0c;往往都是需要從頭開始研究以及教學。而在未來更加希望的是能夠在原有的…