Oracle MOVE ONLINE 實現原理

Oracle MOVE ONLINE 實現原理

Oracle 的 MOVE ONLINE 操作是一種在線重組表的技術,允許在不中斷業務的情況下重新組織表數據。以下是其實現原理的詳細分析:

基本概念

MOVE ONLINE 是 Oracle 12c 引入的特性,用于替代傳統的 ALTER TABLE ... MOVE 操作,主要解決傳統 MOVE 操作需要鎖定表的問題。

核心實現原理

1. 在線重組機制

  • 臨時表創建:Oracle 在后臺創建一個臨時段(temporary segment)用于存儲重組后的數據
  • 增量同步:在重組過程中,對原表的 DML 操作會被捕獲并同步到臨時段
  • 元數據切換:重組完成后,通過修改數據字典元數據快速切換新舊表

2. 關鍵技術組件

  • 在線重定義技術:基于 Oracle 的在線重定義(Online Redefinition)框架
  • 物化視圖日志:用于跟蹤原表的變更
  • 臨時映射表:維護新舊行 ID 的映射關系

3. 具體執行流程

  1. 初始化階段

    • 創建臨時段(新表結構)
    • 建立變更跟蹤機制
    • 初始化數據復制
  2. 數據同步階段

    • 批量復制原表數據到臨時段
    • 并行捕獲和應用 DML 變更
    • 維護一致性讀視圖
  3. 切換階段

    • 短暫鎖定表(通常僅需毫秒級)
    • 原子性切換數據字典指針
    • 清理舊數據段

與傳統 MOVE 的區別

特性MOVE ONLINE傳統 MOVE
可用性幾乎無中斷需要長時間鎖定表
實現方式增量同步全量復制
資源消耗較高(需要維護變更日志)較低
Oracle 版本要求12c 及以上所有版本
執行時間通常較長相對較短

底層技術細節

1. 變更捕獲機制

  • 使用類似物化視圖日志的結構記錄 DML
  • 包括 INSERT、UPDATE、DELETE 操作
  • 記錄變更的行 ID 和新值

2. 一致性保證

  • 基于 SCN(System Change Number)確保數據一致性
  • 使用 UNDO 段處理長事務
  • 臨時段上的讀一致性視圖

3. 空間管理

  • 新段可以指定不同的表空間
  • 自動處理存儲參數轉換
  • 支持壓縮表格式轉換

典型使用場景

-- 基本語法
ALTER TABLE schema.table_name MOVE ONLINE 
[TABLESPACE new_tablespace] 
[COMPRESS FOR OLTP] 
[LOB (lob_column) STORE AS SECUREFILE (...)];-- 示例:將表移動到新表空間并啟用壓縮
ALTER TABLE sales.orders MOVE ONLINE 
TABLESPACE fast_data 
COMPRESS FOR OLTP;

性能考量

  1. 資源消耗

    • 需要額外的臨時空間(約原表大小的 1.2 倍)
    • 增加 redo 日志生成量
    • CPU 使用率較高
  2. 限制條件

Restrictions on the ONLINE Clause
The ONLINE clause is subject to the following restrictions when moving table partitions:You cannot specify the ONLINE clause for tables owned by SYS.You cannot specify the ONLINE clause for index-organized tables.You cannot specify the ONLINE clause for heap-organized tables that contain object types or on which bitmap join indexes or domain indexes are defined.Parallel DML and direct path INSERT operations require an exclusive lock on the table. Therefore, these operations are not supported concurrently with an ongoing online partition MOVE, due to conflicting locks.
Restrictions on Moving Table Partitions:
Moving table partitions is subject to the following restrictions:If partition is a hash partition, then the only attribute you can specify in this clause is TABLESPACE.You cannot specify this clause for a partition containing subpartitions. However, you can move subpartitions using the move_table_subpartition clause.
  1. 監控方法
    -- 查看移動操作進度
    SELECT * FROM v$session_longops WHERE opname LIKE '%MOVE%';-- 檢查空間使用
    SELECT segment_name, bytes/1024/1024 MB 
    FROM user_segments 
    WHERE segment_name IN ('TABLE_NAME', 'TEMP_MOVE_OBJECT');
    

最佳實踐

  1. 準備工作

    • 評估表大小和業務負載
    • 確保有足夠臨時空間
    • 在低峰期執行大表操作
  2. 執行建議

    -- 先測試小表
    ALTER TABLE test.small_table MOVE ONLINE;-- 大表使用并行度
    ALTER TABLE large.table_name MOVE ONLINE PARALLEL 4;
    
  3. 故障處理

    • 操作可中斷,重啟后會繼續
    • 失敗后會自動回滾臨時段
    • 可通過 DBA_REDEFINITION_STATUS 查看狀態

Oracle 的 MOVE ONLINE 技術通過創新的增量同步機制,實現了表重組操作的高可用性,是 Oracle 高可用架構的重要組成部分。

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

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

相關文章

工作流長任務處置方案

以下是前后端協作處理長任務工作流的完整實現方案,結合技術選型與設計要點,以清晰結構呈現: 一、后端實現方案 異步任務隊列架構 ? 技術選型: ? 消息隊列:NATS(輕量級)或 RabbitMQ&#xf…

RabbitMQ仲裁隊列高可用架構解析

#作者:閆乾苓 文章目錄 概述工作原理1.節點之間的交互2.消息復制3.共識機制4.選舉領導者5.消息持久化6.自動故障轉移 集群環境節點管理仲裁隊列增加集群節點重新平衡仲裁隊列leader所在節點仲裁隊列減少集群節點 副本管理add_member 在給定節點上添加仲裁隊列成員&…

fingerprint2瀏覽器指紋使用記錄

我在uniapp-vue3-H5端使用的,記錄一下 抄的這里前端使用fingerprintjs2獲取瀏覽器指紋fingerprintjs2是通過設備瀏覽器信息獲取瀏覽器指紋的插件( - 掘金 1、安裝依賴 npm i fingerprintjs2 -S2、抽成模塊文件,/utils/Fingerprint2.js 生成指…

深度學習面試八股簡略速覽

在準備深度學習面試時,你可能會感到有些不知所措。畢竟,深度學習是一個龐大且不斷發展的領域,涉及眾多復雜的技術和概念。但別擔心,本文將為你提供一份全面的指南,從基礎理論到實際應用,幫助你在面試中脫穎…

使用 Redis 作為向量數據庫

一、什么是向量數據庫? 向量(Vector):在機器學習和 AI 中,向量是由一系列數字組成的序列,用于數值化地描述數據的特征或語義。文本、圖像、音頻等非結構化數據可以通過模型轉換成固定長度的向量。 向量數據…

變量的計算

不同類型變量之間的計算 數字型變量可以直接計算 在python中,數字型變量可以直接通過算術運算符計算bool型變量:True 對應數字1 ;False 對應數字0、 字符串變量 使用 拼接字符串 使用 * 拼接指定倍數的相同字符串 變量的輸入:&…

PostgreSQL學會如何建表

開始使用PostgreSQL之前, 上一節我們說了怎樣安裝它。 PostgreSQL可能已經安裝到你的電腦上了,安裝后postgre服務默認在電腦開機時運行啟動。 一.了解PostgreSQL的運行 PostgreSQL使用一種客戶端/服務器(C/S)模型。 和其他典型的客戶端/服務…

Linux驅動學習筆記(十)

熱插拔 1.熱插拔:就是帶電插拔,即允許用戶在不關閉系統,不切斷電源的情況下拆卸或安裝硬盤,板卡等設備。熱插拔是內核和用戶空間之間,通過調用用戶空間程序實現交互來實現的,當內核發生了某種熱拔插事件時…

大模型應用開發第五講:成熟度模型:從ChatGPT(L2)到未來自主Agent(L4)

大模型應用開發第五講:成熟度模型:從ChatGPT(L2)到未來自主Agent(L4) 資料取自《大模型應用開發:動手做AI Agent 》。 查看總目錄:學習大綱 關于DeepSeek本地部署指南可以看下我之…

Delphi 導入excel

Delphi導入Excel的常見方法可分為兩種主流方案:基于OLE自動化操作Excel原生接口和利用第三方組件庫。以下為具體實現流程及注意事項: ?一、OLE自動化方案(推薦基礎場景)? 該方法通過COM接口調用本地安裝的Excel程序&#xff0c…

Selenium的第四天打卡——Selenium瀏覽器應用(完整版)

Selenium瀏覽器應用 目錄 Selenium瀏覽器應用 一、瀏覽器操作示例代碼 1.設置瀏覽器縮放大小 2.瀏覽器前進和后退 3.瀏覽器刷新 二、WebDriver常見方法 三、鼠標事件示例 四、鍵盤事件示例 五、獲取斷言信息 六、窗口的切換 七、關鍵注意事項 一、瀏覽器操作示例代…

PMO價值重構:從項目管理“交付機器”到“戰略推手”

在數字化轉型浪潮中,項目管理辦公室(PMO)正經歷著前所未有的角色蛻變。傳統上,PMO往往被視為項目管理的“交付機器”,專注于項目的按時交付和資源分配。然而,隨著企業對戰略執行的重視,PMO正逐漸…

本地依賴庫的版本和庫依賴的版本不一致如何解決?

我用的 yarn v4 版本,所以以下教程命令都基于yarn 這里假設我報錯的庫名字叫 XXXXXXXX,依賴他的庫叫 AAAAAAAA 排查解決思路分析: 首先查看一下 XXXXXXXX 的依賴關系,執行 yarn why XXXXXXXX 首先我們要知道 yarn 自動做了庫…

SQLiteStudio - 免費開源、輕量高效,跨平臺的 SQLite 數據庫管理工具,代替 Navicat for SQLite

管理 SQLite 數據庫就用這款軟件,真的早該摒棄破解和盜版的 Navicat 了。 SQLiteStudio 是一款專注于管理 SQLite 數據庫 的桌面軟件,用于瀏覽和編輯 SQLite 數據庫文件。軟件的作者是來自波蘭的開發者 Pawe? Salawa,他是一位擁有 20 年 Ja…

DeepSeek R1-0528 新開源推理模型(免費且快速)

DeepSeek推出了新模型,但這不是R2! R1-0528是DeepSeek的最新模型,在發布僅數小時后就在開源社區獲得了巨大關注。 這個悄然發布的模型DeepSeek R1-0528,已經開始與OpenAI的o3一較高下。 讓我來詳細介紹這次更新的新內容。 DeepSeek R1-0528 發布 DeepSeek在這次發布中采…

Opera Neon發布該公司首款“AI代理”瀏覽器

Opera 的瀏覽器產品組合今日迎來了新成員。Opera Neon 是該公司首款“AI 代理”瀏覽器,旨在“重新思考瀏覽器在代理網絡中的角色”。開發人員聲稱,Neon 能夠理解用戶的意圖,并利用 AI 驅動的功能將其轉化為行動。 Opera Neon 由三個主要部分…

網絡安全之Web滲透加解密

項目基本使用 準備環境:node.js python chrome npm install chrome-remote-interface pip install playwright playwright install chromium pip install mitmproxy ............... 第一步啟動cdp.js。 第二步使用python .\cdp_load.py vue_demo,連…

【VSCode-Qt】Docker遠程連接的項目UI文件在 VSCode 上無法預覽

Docker遠程連接的UI文件在 VSCode 上無法預覽,通常是因為 VSCode 通過遠程開發擴展(Remote - SSH/Docker)連接到 Docker 容器時,某些圖形化功能未正確配置或支持。以下是可能原因和解決方案: 原因分析 X11 轉發未配置…

【HW系列】—web組件漏洞(Strtus2和Apache Log4j2)

本文僅用于技術研究,禁止用于非法用途。 文章目錄 Struts2Struts2 框架介紹Struts2 歷史漏洞匯總(表格)Struts2-045 漏洞詳解 Log4j2Log4j2 框架介紹Log4j2 漏洞原理1. JNDI 注入2. 利用過程 Log4j2 歷史漏洞JNDILDAP 反彈 Shell 流程 Strut…

《深度關系-從建立關系到彼此信任》

陳海賢老師推薦的書,花了幾個小時,感覺現在的人與人之間特別缺乏這種深度的關系,但是與一個人建立深度的關系并沒有那么簡單,反正至今為止,自己好像沒有與任何一個人建立了這種深度的關系,那種雙方高度同頻…