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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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…

《深度关系-从建立关系到彼此信任》

陈海贤老师推荐的书,花了几个小时,感觉现在的人与人之间特别缺乏这种深度的关系,但是与一个人建立深度的关系并没有那么简单,反正至今为止,自己好像没有与任何一个人建立了这种深度的关系,那种双方高度同频…