Oracle 行迁移 & 行链接的检测与消除

什么是行迁移行链接?#以下描述来自Oracle11gR2Document1.行链接Therowistoolargetofitintoonedatablockwhenitisfirstinserted.Inrowchaining,OracleDatabasestor

什么是行迁移 & 行链接?

#     以下描述来自Oracle 11gR2 Document

1.       行链接

The row is too large to fit into one data block when it is first inserted.

In row chaining, Oracle Database stores the data for the row in a chain of one or more data blocks reserved for the segment. Row chaining most often occurs with large rows. Examples include rows that contain a column of data type LONG or LONG RAW, a VARCHAR2(4000) column in a 2 KB block, or a row with a huge number of columns. Row chaining in these cases is unavoidable.

2.       行迁移

A row that originally fit into one data block is updated so that the overall row length increases, but insufficient free space exists to hold the updated row.

In row migration, Oracle Database moves the entire row to a new data block, assuming the row can fit in a new block. The original row piece of a migrated row contains a pointer or “forwarding address” to the new block containing the migrated row. The rowid of a migrated row does not change.

行者AI 行者AI

行者AI绘图创作,唤醒新的灵感,创造更多可能

行者AI 100 查看详情 行者AI

本文的主题是消除行迁移,既然如此,那就必须先模拟出行迁移来:

–创建chained_rows表SQL> @$ORACLE_HOME/rdbms/admin/utlchain.sqlTable created.SQL>–创建测试表EMPLOYEESSQL> CREATE TABLE EMPLOYEES TABLESPACE TEST16K PCTFREE 0 AS SELECT * FROM HR.EMPLOYEES;Table created.SQL> COMMIT;Commit complete.SQL>–分析测试表EMPLOYEESSQL> analyze table employees list chained rows into chained_rows;Table analyzed.SQL>–查询可知当前测试表EMPLOYEES上不存在行迁移SQL> select count(*) from chained_rows where table_name=’EMPLOYEES’; COUNT(*)———-0SQL>–更新测试表EMPLOYEES结构SQL> alter table employees modify FIRST_NAME varchar2(2000);Table altered.SQL> alter table employees modify LAST_NAME varchar2(2000);Table altered.SQL> alter table employees modify EMAIL varchar2(2000);Table altered.SQL> alter table employees modify PHONE_NUMBER varchar2(2000);Table altered.SQL>–更新测试表EMPLOYEESSQL> update employees set FIRST_NAME=LPAD(‘1′,2000,’*’),LAST_NAME=LPAD(‘1′,2000,’*’),EMAIL=LPAD(‘1′,2000,’*’),PHONE_NUMBER=LPAD(‘1′,2000,’*’);107 rows updated.SQL> commit;Commit complete.SQL>–分析测试表EMPLOYEESSQL> analyze table employees list chained rows into chained_rows;Table analyzed.SQL>–查询可知已经产生行迁移SQL> select count(*) from chained_rows where table_name=’EMPLOYEES’; COUNT(*)———-106SQL>–行迁移模拟成功,我把这个过程保存为一个脚本reset_employees.sql:CREATE TABLE EMPLOYEES TABLESPACE TEST16K PCTFREE 0 AS SELECT * FROM HR.EMPLOYEES;alter table employees modify FIRST_NAME varchar2(2000);alter table employees modify LAST_NAME varchar2(2000);alter table employees modify EMAIL varchar2(2000);alter table employees modify PHONE_NUMBER varchar2(2000);update employees set FIRST_NAME=LPAD(‘1′,2000,’*’),LAST_NAME=LPAD(‘1′,2000,’*’),EMAIL=LPAD(‘1′,2000,’*’),PHONE_NUMBER=LPAD(‘1′,2000,’*’);–之后模拟行迁移直接执行这个脚本就OK了.

以上就生成了行迁移模拟脚本

第一种消除行迁移的方式:

–准备脚本Solution1.sqlCREATE TABLE employees_tmp tablespace test16k AS SELECT * FROM employees WHERE ROWID IN (SELECT HEAD_ROWID FROM CHAINED_ROWS WHERE TABLE_NAME = ‘EMPLOYEES’);DELETE FROM employees WHERE ROWID IN (SELECT HEAD_ROWID FROM CHAINED_ROWS WHERE TABLE_NAME = ‘EMPLOYEES’);INSERT INTO EMPLOYEES SELECT * FROM EMPLOYEES_TMP;DROP TABLE EMPLOYEES_TMP;DELETE FROM CHAINED_ROWS WHERE TABLE_NAME = ‘EMPLOYEES’;COMMIT;–执行脚本Solution1.sqlSQL> @Solution1.sqlTable created.106 rows deleted.106 rows created.Table dropped.106 rows deleted.Commit complete.SQL>–分析测试表EMPLOYEESSQL> analyze table employees list chained rows into chained_rows;Table analyzed.SQL>–查询可知行迁移已经消除SQL> select count(*) from chained_rows where table_name=’EMPLOYEES’; COUNT(*)———-0SQL>

第二种消除行迁移的方式:

–清理测试环境SQL> truncate table chained_rows;Table truncated.SQL> drop table employees;Table dropped.SQL> commit;Commit complete.SQL>–以上清理过程也保存为脚本clear_employees.sql:truncate table chained_rows;drop table employees;commit;–之后的清理工作都会使用这个脚本来进行–模拟行迁移SQL> @reset_employees.sqlTable created.Table altered.Table altered.Table altered.Table altered.107 rows updated.SQL> commit;Commit complete.SQL>–准备脚本Solution2.sqlcreate table employees_tmp tablespace test16k as select * from employees;truncate table employees;insert into employees select * from employees_tmp;drop table employees_tmp;commit;–执行脚本Solution2.sqlSQL> @Solution2.sqlTable created.Table truncated.107 rows created.Table dropped.Commit complete.SQL>–分析测试表EMPLOYEESSQL> analyze table employees list chained rows into chained_rows;Table analyzed.SQL>–查询可知行迁移已经消除SQL> select count(*) from chained_rows where table_name=’EMPLOYEES’; COUNT(*)———-0SQL>

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/530039.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月9日 09:57:04
下一篇 2025年11月9日 09:59:44

相关推荐

  • UNI继续领导分散的交易所

    尽管竞争激烈,但其一致的升级和强大的流动性池有助于保持相关性。 加密货币的价格每天可能会大幅上涨或下降,试图预测价格变动可能有风险。最好投资于您理解和相信的加密货币,并为损益的可能性做好准备。此外,重要的是要注意,加密货币是一种挥发性资产类别,任何预测价格变动的尝试都是投机性的。 加密货币的价格,尤…

    2025年12月8日
    000
  • 5个可能爆炸的病毒令牌:从基础设施播放到最佳模因硬币

    随着比特币壮观的历史最高高点,可显而易见的“ altcoin季节”正在占据,投资者疯狂地寻找下一枚加密货币爆炸。 随着比特币(BTC)出色的辉煌集会升至新的高潮之后,明显的“ Altcoin赛季”正在持续下去,投资者疯狂地寻找下一枚加密货币硬币要爆炸。在这个高能环境中,捕捉巨大社区嗡嗡声的项目是展示…

    2025年12月8日
    000
  • Credefi 3.0重塑贷款带有令牌的附带池

    credefi 3.0的发布象征着区块链借贷领域的变革。其核心在于一种模块化设计,能够实现抵押品的代币化,使现实世界的资产重新融入链上信贷体系。 魔术广场(Magic Square)分享了关于即将推出的Credefi 3.0更新的见解,重点介绍了旨在连接传统金融(TradFI)与去中心化金融(DeF…

    2025年12月8日
    000
  • 这5个加密货币可能是当今最明智的举动吗?

    随着注意力转移超越市值和炒作周期,分析师现在指出了富含基础设施的区块链 注意力正在从市值炒作转向悄悄地改变区块链世界运作方式的项目。随着在关键生态系统中的机构活动变暖和预售利息的回报,寻找今天购买的最佳加密货币的搜索变得更加技术性和针对性。对于那些跟踪潜在的长期收益的人,这一刻少于转瞬即逝的价格趋势…

    2025年12月8日
    000
  • 加密市场正在辐射不可否认的能源

    加密货币市场在2025年5月下旬散发出不可否认的能源,这是由高度积极的新闻和事件的汇合而引起的,这些新闻和事件正在重塑 加密货币市场将在2025年5月下旬以不可否认的能源升温,这是由于高度积极的新闻和事件的融合,这些新闻和事件正在改变投资者对市场的看法。 就在最近,比特币迅速达到了令人惊叹的新历史最…

    2025年12月8日
    000
  • TRB币(Tellor Tributes)详细介绍与2025年末价格预测

    目录 1. TRB币的基本信息2. 当前市场表现(2025年5月)3. 历史价格波动与关键事件4. 2025年末价格预测(单向看涨/看跌)5. 投资建议 截至2025年5月27日,trb价格为 37.2美元。 TRB币英文全称为Tellor,是Tellor系统的实用代币,也是基于以太坊的ERC-20…

    2025年12月8日
    000
  • 尽管最近有报道,但R3 Corda定居者仍使用XRP

    xrp社区成员及研究者smqke正在引发关于r3是否仍会继续将xrp用于其corda settler平台的社区热议。 XRP社区成员及研究者Smqke正持续探讨R3是否会继续采用XRP作为其Corda Settler平台的一部分。 这一讨论起源于Smqke于2018年12月5日分享的R3演示视频,该…

    2025年12月8日
    000
  • 查尔斯·霍斯金森(Charles Hoskinson)在比特币和XRP Defi中看到了数十亿美元的机会

    霍斯金森(hoskinson)多次调侃称,将去中心化金融(defi)引入比特币网络的举措并不明智。近期,他分享了一张带有xrp的图片,似乎在暗示某种潜在的合作。 Cardano的创始人查尔斯·霍斯金森(Charles Hoskinson)表达了希望在Cardano区块链上看到XRP DeFi的愿望,…

    2025年12月8日
    000
  • CETUS协议利用停顿操作,触发2.23亿美元的损失和SUI代币抛售

    2025年5月26日,sui/usdt 4小时图表显示了一个看涨的旗形形态。这种形态通常出现在急剧上涨后,随后进入一个向下倾斜的通道中。 2025年5月26日,在SUI/USDT 4小时图上出现了看涨的旗形。这种形态预示着之前上升趋势可能的延续。 若此看涨旗形得以确认,SUI的价格可能从当前的3.5…

    2025年12月7日
    000
  • SOLV协议加深了与Chainlink的储备证明(POR)系统的整合

    solv协议是一个以比特币为基础的领先defi平台,已经深化了与chainlink储备证明(por)系统的整合。 SOLV协议是比特币生态中的一个重要DeFi平台,现已宣布与Chainlink的储备证明(POR)系统实现更紧密的结合。 这一举措旨在为SOLV的标记化比特币产品SOLVBTC及其20亿…

    2025年12月7日
    000
  • 连锁链接(链接)价格接近突破点,可能触发大量向上移动

    chainlink的价格正接近一个重要的技术转折点,专家认为这可能引发显著的上涨趋势。 Chainlink的价格正靠近一个关键的技术节点,专家指出这可能触发大量的向上波动。Oracles代币在日线图上形成了一个下降楔形形态,最近的价格走势正在测试自2024年底以来一直压制增长的阻力位。 加密货币市场…

    2025年12月7日
    000
  • ChainLink(Link)在开发活动方面继续主导着Crypto的现实资产(RWA)领域

    santiment在社交媒体平台x上的一篇新帖子中指出,chainlink在过去30天内注册了532.43个著名的github事件。 根据分析公司的说法,分散的Oracle网络链链路(Link)继续在加密货币的现实世界中占据主导地位,就开发活动而言。 santiment在社交媒体平台x上的一篇新帖子…

    2025年12月7日
    000
  • LINK币未来如何?2025-2031年Chainlink(LINK)币价格预测

    目录 Chainlink(LINK)币概述Chainlink(LINK)币价格预测:技术分析Chainlink(LINK)币价格分析每日图表上的LINK币价格分析4小时图表上的LINK币价格分析LINK币技术指标:水平和行动每日简单移动平均线 (SMA)每日指数移动平均线 (EMA) Chainli…

    2025年12月7日 好文分享
    000
  • Oracle DATE 类型存储时间戳及如何仅存储日期

    本文旨在解释 Oracle 数据库中 DATE 类型总是包含时间戳的原因,并提供在数据库中存储日期时去除时间部分的方法,重点介绍如何通过格式化函数控制日期显示,而非修改数据库结构。 在 Oracle 数据库中,DATE 类型的设计初衷就是同时存储日期和时间信息。即使你只关心日期部分,DATE 类型仍…

    2025年12月6日 java
    000
  • mysql中事务隔离级别有哪些

    读未提交允许读取未提交数据,易引发脏读、不可重复读和幻读;2. 读已提交确保读取已提交数据,避免脏读但存在不可重复读和幻读;3. 可重复读保证事务内多次读取一致,MySQL默认级别,通过MVCC和间隙锁减少幻读;4. 串行化强制事务串行执行,避免所有并发问题但性能最差。选择隔离级别需权衡一致性与性能…

    2025年12月6日 数据库
    000
  • 优化MySQL电话号码字段搜索:解决空格与格式多样性问题

    本文详细介绍了在mysql数据库中,如何高效地搜索包含空格或多种格式的电话号码字段。针对`like`查询无法识别空格字符的问题,核心解决方案是利用`replace`函数在查询时移除字段中的空格,从而实现准确匹配。教程还将探讨更全面的数据清洗策略和性能优化建议,以提升搜索效率和数据质量。 在数据库管理…

    2025年12月6日 后端开发
    000
  • OpenJPA 在 Oracle 中处理字符串长度限制的警告与解决方案

    本文深入探讨了 openjpa 在与 oracle 数据库交互时,针对字符串字段可能遇到的“值超过 4000 字节/字符”的警告信息。该警告源于 oracle `varchar2` 数据类型的默认 4000 字节限制。教程将详细介绍两种主要的解决方案:通过 `@column(length = n)`…

    2025年12月6日 java
    000
  • Java中MANIFEST.MF的作用 详解清单文件

    manifest.mf是java中jar文件的元数据配置文件,位于meta-inf目录下,用于定义版本、主类、依赖路径等关键信息。1. 它允许指定入口类,使jar可直接运行;2. 通过class-path管理依赖,减少类加载冲突;3. 可配置安全权限,如设置沙箱运行;4. 常见属性包括manifes…

    2025年12月5日 java
    000
  • Java中枚举类型怎么定义 掌握Java枚举的定义和常用方法

    java中定义枚举类型使用enum关键字,例如public enum weekday { monday, tuesday,…};枚举可包含字段和方法,如添加中文名称字段及获取方法;可在switch语句中使用,确保覆盖所有值;常用方法包括values()、valueof()、ordinal…

    2025年12月4日 java
    000
  • oracle/mysql拼接值遇到的坑及双竖线||和concat怎么使用

    %ign%ignore_a_1%re_a_1% mysql 拼接值遇到的坑 双竖线 || concat || “||” 在oracle中是拼接值,但在mysql中是“或”的意思。 where name like ‘%’ || ‘Tony’ || ‘%’ 所以推荐使用concat() concat()…

    数据库 2025年12月4日
    000

发表回复

登录后才能评论
关注微信