Oracle MOVE ONLINE 实现原理

news2025/6/1 10:52:08

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.coloradmin.cn/o/2392551.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux:深入理解网络层

网络层在复杂的网络环境中确定一个合适的路径.传输到指定的网络中 一、网络层的理解 问题1:为什么要有网络层的概念呢?? ——>我们先来讲一个故事: 假设我在学校里被誉为数学大神,是因为我的数学有考满分的能力&…

Linux_编辑器Vim基本使用

✨✨ 欢迎大家来到小伞的大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:LInux_st 小伞的主页:xiaosan_blog 制作不易!点个赞吧!!谢谢喵!&a…

vue展示修改前后对比,并显示修改标注diff

动态父组件 <template><el-buttontype"primary"size"small"plainclick"showDiffDialog(subItem)">查看修改内容</el-button><TextDiffDialogv-model:visible"diffDialogVisible":before"currentDiffItem?.…

LiveWallpaperMacOS:让你的 Mac 桌面动起来

随着桌面美化需求的不断提升,用户对于桌面壁纸的要求已经不再局限于静态图片。越来越多的 Mac 用户希望桌面能像 Windows 一样,拥有动态壁纸,展现个性、提升体验。LiveWallpaperMacOS 正是这样一款让你的 Mac 桌面焕发活力的开源项目。 本文将详细介绍 LiveWallpaperMacOS …

[预训练]Encoder-only架构的预训练任务核心机制

原创文章1FFN前馈网络与激活函数技术解析&#xff1a;Transformer模型中的关键模块2Transformer掩码技术全解析&#xff1a;分类、原理与应用场景3【大模型技术】Attention注意力机制详解一4Transformer核心技术解析LCPO方法&#xff1a;精准控制推理长度的新突破5Transformer模…

07-后端Web实战(部门管理)

5. 修改部门 对于任何业务的修改功能来说&#xff0c;一般都会分为两步进行&#xff1a;查询回显、修改数据。 5.1 查询回显 5.1.1 需求 当我们点击 "编辑" 的时候&#xff0c;需要根据ID查询部门数据&#xff0c;然后用于页面回显展示。 5.1.2 接口描述 参照参照…

mysql ACID 原理

序言&#xff1a;ACID 是一组数据库设计原则&#xff0c;他是业务数据和关键业务程序的可靠性保障。 1、atomicity&#xff08;原子性&#xff09; 依赖如下能力 autocommit commit rollback2、一致性 2.1 double write buffer 1、定义&#xff1a;double write buffer 是…

[Rust_1] 环境配置 | vs golang | 程序运行 | 包管理

目录 Rust 环境安装 GoLang和Rust 关于Go 关于Rust Rust vs. Go&#xff0c;优缺点 GoLang的优点 GoLang的缺点 Rust的优点 Rust的缺点 数据告诉我们什么&#xff1f; Rust和Go的主要区别 (1) 性能 (2) 并发性 (3) 内存安全性 (4) 开发速度 (5) 开发者体验 Ru…

二十五、面向对象底层逻辑-SpringMVC九大组件之HandlerMapping接口设计

一、引言&#xff1a;MVC架构的交通枢纽 在Spring MVC框架中&#xff0c;HandlerMapping接口扮演着"请求导航仪"的关键角色&#xff0c;它决定了HTTP请求如何被路由到对应的Controller处理器。作为MVC模式的核心组件之一&#xff0c;HandlerMapping在请求处理的生命…

HUAWEI交换机配置镜像口验证(eNSP)

技术术语&#xff1a; 流量观察口&#xff1a;就是我们常说的镜像口&#xff0c;被观察的流量的引流目的端口 流量源端口&#xff1a;企业生产端口&#xff0c;作为观察口观察对象。 命令介绍&#xff1a; [核心交换机]observe-port [观察端口ID或编号&#xff08;数字&am…

前端vue3实现图片懒加载

场景和指令用法 场景:电商网站的首页通常会很长&#xff0c;用户不一定能访问到页面靠下面的图片&#xff0c;这类图片通过懒加载优化手段可以做到只有进入视口区域才发送图片请求 核心原理:图片进入视口才发送资源请求 首先&#xff1a;我们需要定义一个全局的指令&#x…

计算机网络-MPLS VPN应用场景与组网

上一篇文章我们通过一个基础实验实现了企业分支间的MPLS VPN互联&#xff0c;如果还不理解的可以多看几遍前面的文章或者多敲下实验。今天来学习几种常见的MPLS VPN应用场景与这些场景下MPLS VPN的部署方法。 一、MPLS VPN典型应用 目前&#xff0c;MPLS VPN的主要应用包括企…

Linux 的编辑器--vim

1.Linux编辑器-vim使⽤ vi/vim的区别简单点来说&#xff0c;它们都是多模式编辑器&#xff0c;不同的是vim是vi的升级版本&#xff0c;它不仅兼容vi的所有指令&#xff0c;⽽且还有⼀些新的特性在⾥⾯。例如语法加亮&#xff0c;可视化操作不仅可以在终端运⾏&#xff0c;也可以…

[Protobuf] 快速上手:安全高效的序列化指南

标题&#xff1a;[Protobuf] (1)快速上手 水墨不写bug 文章目录 一、什么是protobuf&#xff1f;二、protobuf的特点三、使用protobuf的过程&#xff1f;1、定义消息格式&#xff08;.proto文件&#xff09;(1)指定语法版本(2)package 声明符 2、使用protoc编译器生成代码&…

如何将通话记录从Android传输到Android

“如何将通话记录从 Android 转移到 Android&#xff1f;我换了一部新的 Android 手机&#xff0c;想要将通话记录复制到其中。”您需要将通话记录从 Android 传输到 Android 是一种常见的情况&#xff0c;因为通话记录是手机上最重要的数据之一。幸运的是&#xff0c;如果您从…

数据结构第4章 栈、队列和数组 (竟成)

目录 第 4 章 栈、队列和数组 4.1 栈 4.1.1 栈的基本概念 4.1.2 栈的基本操作 4.1.3 栈的实现 1.顺序栈 2.链式栈 3.共享栈 4.1.4 顺序栈的基本操作实现 1.初始化栈 2.判空 3.判满 4.元素进栈 5.元素出栈 6.获取栈顶元素 4.1.5 链栈的基本操作实现 1.元素进栈 2.元素出栈 4.1.6…

2025年渗透测试面试题总结-匿名[校招]安全研究员(SAST方向)(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 匿名[校招]安全研究员(SAST方向) 一面问题回答框架 1. 自我介绍 2. 简历深挖&#xff08;漏洞挖掘&#x…

Unity 游戏优化(持续更新中...)

垃圾回收 是什么&#xff1f; 垃圾回收&#xff08;Garbage Collection&#xff09;GC 工作机制 1、Unity 为用户生成的代码和脚本采用了自动内存管理。 2、小块数据&#xff08;如值类型的局部变量&#xff09;分配在栈上。大块数据和长期存储分配在托管堆上。 3、垃圾收集…

20250529-C#知识:索引器

C#知识&#xff1a;索引器 索引器给对象添加了索引访问的功能&#xff0c;实际访问的是对象的成员&#xff0c;感觉不太常用。 1、主要内容及代码示例 索引器中类似属性&#xff0c;也包含get和set方法索引器能够使像访问数组一样访问对象一般当类中有数组类型的成员变量时&am…

【笔记】suna部署之获取 Tavily API key

#工作记录 Tavily 注册 Tavily 账号5&#xff1a; 打开浏览器&#xff0c;访问 Tavily 官网Tavily AI。点击页面上的 “注册” 按钮&#xff0c;按照提示填写注册信息&#xff0c;如邮箱地址、设置密码等&#xff0c;完成注册流程。也可以选择使用 Google 或 GitHub 账号授权登…