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)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
爱发电APP如何绑定支付方式_爱发电APP绑定支付宝微信支付详细步骤
上一篇 2025年11月9日 09:58:58
惠普打印机墨盒怎么加墨水加多少(惠普打印机加墨水技巧)
下一篇 2025年11月9日 09:59:00

相关推荐

  • php实现哪些功能

    PHP是一种通用脚本语言,可用来实现广泛的功能,包括:动态Web开发:生成响应用户请求的动态 веб页面。内容管理系统(CMS):构建允许用户管理网站内容的CMS。电子商务:开发具有购物车、订单处理和支付网关集成的电子商务网站。服务器端编程:编写命令行脚本和工具。文件操作:创建、读取、写入和删除文件…

    2026年5月10日
    000
  • SQL查询:精确判断事件过期,结合日期与时间列

    本文旨在解决数据库中事件过期判断不精确的问题,特别是当事件的过期日期和时间分别存储在不同列时。我们将探讨两种主流的sql查询策略:一种是利用逻辑运算符`or`和`and`进行分情况判断,另一种是通过合并日期和时间列为单一时间戳进行直接比较。文章将详细阐述每种方法的实现方式、适用场景及相关注意事项,确…

    2026年5月10日
    200
  • HTML表单如何实现白名单功能?怎样只允许授权用户?

    要实现%ignore_a_1%的白名单功能并确保只有授权用户操作,核心答案是必须依赖后端服务器进行严格的身份认证、会话管理、授权检查和数据验证,前端仅能提供用户体验层面的初步提示而不能保障安全;具体而言,首先通过用户身份认证(如用户名/密码或oauth)确认用户身份,服务器创建会话并返回标识符,后续…

    2026年5月10日
    800
  • 如何用C#实现数据库的跨平台迁移?使用EF Core工具?

    使用EF Core实现跨平台数据库迁移,需定义实体与DbContext,通过动态配置不同数据库提供程序,利用EF Core CLI生成并应用迁移,结合Fluent API处理数据库差异,确保结构与数据兼容。 要实现数据库的跨平台迁移,C# 中最常用且高效的方式是使用 Entity Framework…

    2026年5月10日
    000
  • Python连接MySQL 5.1:克服旧版认证与字符集兼容性挑战

    本教程详细阐述了如何使用Python 3和mysql.connector库成功连接到老旧的MySQL 5.1数据库。文章重点介绍了解决旧版认证协议和字符集兼容性问题的关键配置,特别是use_pure=True和charset=’utf8’的重要性,并提供了可运行的代码示例。同…

    2026年5月10日
    000
  • 想提升IT技能?哪些含金量高的认证值得考?

    it职业发展:高含金量认证助您成功 想在IT领域提升竞争力?选择合适的认证至关重要。本文推荐几项国内外认可度高的IT认证,助您在职业道路上更进一步。 热门认证推荐: 1. 高级软件设计师(软考高级): 国内IT领域含金量最高的认证之一。涵盖软件工程、项目管理及计算机基础知识。证明您在软件设计和开发方…

    2026年5月10日
    000
  • 什么是资产代币化(Asset Tokenization)?它如何将现实世界资产带入区块链?

    资产代币化是通过区块链将房产、股票等实体资产权益转化为可分割的数字代币。首先选择目标资产并由合规机构确权估值,随后在链上发行对应代币并通过智能合约绑定权益比例,实现自动化分红与转让。为确保真实性,引入第三方审计和去中心化预言机同步链下数据,资金流由托管账户与链上地址联动记录,提升透明度。代币化降低投…

    2026年5月10日
    000
  • MySQL、PostgreSQL、SQL Server和Oracle中空字符串、数字0和NULL占用空间有何区别

    不同数据库系统中空字符串、数字0和NULL的存储空间差异 本文比较了MySQL InnoDB、PostgreSQL、SQL Server和Oracle数据库中,空字符串(”)、数字0和NULL值在磁盘上所占用的空间大小。 MySQL InnoDB存储引擎: 整型字段: NULL: 不占用…

    2026年5月10日
    000
  • html文档中含有java怎么运行_html含java运行方法【教程】

    现代浏览器不支持Java Applet,推荐通过JavaScript调用Java后端服务或使用WebAssembly运行Java代码。 如果您在HTML文档中嵌入了Java代码,但发现无法正常运行,这通常是因为现代浏览器不再支持Java小程序(Applet)或相关插件。以下是几种实现HTML中Jav…

    2026年5月10日
    000
  • php主要运用哪些东西

    PHP 是一种通用脚本语言,主要用于 Web 开发,包括创建动态网页、网站框架和内容管理系统。此外,它还支持 Web 服务(RESTful 和 SOAP)、数据库操作、命令行脚本、桌面应用程序和图像处理。 PHP 语言的主要应用 PHP(超文本预处理器)是一种广泛应用的通用脚本语言,主要用于 Web…

    2026年5月10日
    100
  • java怎么编译运行.html_java编译运行.html方法【教程】

    Java程序的编译运行与HTML无关,需使用JDK。1. 编写HelloWorld.java文件;2. 命令行执行javac HelloWorld.java生成.class文件;3. 执行java HelloWorld运行程序。注意:HTML是网页标记语言,不能直接运行Java代码,勿将二者混淆。确…

    2025年12月23日
    000
  • 怎么运行html的applet小程序_运行html applet小程序步骤【指南】

    现代浏览器已不再默认支持Java Applet,需通过安装JRE、启用插件、使用支持NPAPI的旧版浏览器(如Firefox 52.9 ESR)、调整Java安全级别至中,并将网站添加到例外站点列表方可运行。 如果您在尝试运行HTML中的Applet小程序时遇到问题,可能是因为现代浏览器已不再默认支…

    2025年12月23日
    000
  • 使用BeautifulSoup和JSON有效抓取动态加载的网页表格数据

    本教程旨在解决使用BeautifulSoup抓取网页表格时,因数据动态加载导致部分内容缺失的问题。通过分析网页背后的API请求,直接获取并解析JSON数据源,再结合BeautifulSoup提取的HTML结构信息,最终实现完整且准确的数据抓取。文章将提供详细的代码示例和实现步骤。 理解网页动态内容与…

    2025年12月23日
    400
  • 解决BeautifulSoup爬取网页表格中动态内容缺失问题

    本文旨在解决使用BeautifulSoup爬取网页表格时,因部分数据通过JavaScript动态加载导致内容缺失的问题。通过详细分析Oracle云定价页面的案例,教程将指导读者如何识别并获取隐藏在JSON API中的动态数据,并将其与BeautifulSoup解析的静态HTML内容有效整合,最终构建…

    2025年12月23日
    500
  • Java GUI在Web部署中的挑战与现代解决方案

    本文旨在澄清Java Web Start(JWS)在Web页面内运行GUI的常见误解,指出JWS用于本地应用启动而非嵌入式Web GUI。文章将探讨JWS的局限性及其被Oracle弃用的原因,介绍OpenWebStart作为其开源替代方案,并重点推荐Vaadin Flow作为使用纯Java构建真正W…

    2025年12月22日
    500
  • Java GUI Web部署策略与现代替代方案

    本文旨在澄清Java GUI应用在Web页面中直接运行的常见误区,特别是关于Java Web Start (JWS) 的作用与局限性。我们将探讨JWS的实际工作机制、其被Oracle废弃的原因,并介绍OpenWebStart作为现有JWS应用的替代方案。此外,文章将重点推荐Vaadin Flow等现…

    2025年12月22日
    700
  • 表单中的ERP怎么连接?如何对接企业资源计划系统?

    将表单数据连接到erp系统的核心是打通数据流,确保信息能从前端无缝流入企业核心系统,主要通过api接口集成、中间件/ipaas、文件导入导出和rpa四种方式实现;其中api集成因其实时性高、安全性好、可扩展性强,成为现代系统的首选方案,尤其适用于支持开放api的erp系统;当业务涉及多系统复杂集成时…

    2025年12月22日
    100
  • HTML如何实现文本加密?怎么隐藏敏感内容?

    纯前端技术无法真正加密或安全隐藏敏感内容,因为html、css和javascript均在客户端运行,源代码和数据可被用户通过开发者工具轻易查看;2. 所谓“隐藏”如display: none、hidden属性或javascript移除dom,仅是视觉上的屏蔽,数据仍存在于页面中;3. 真正的安全必须…

    2025年12月22日
    000
  • 表单中的智能合约怎么集成?如何自动执行表单条款?

    要实现表单数据与智能合约的精准匹配及条款的自动执行,核心在于通过后端服务进行数据类型转换、多层校验并严格遵循abi规范调用合约;智能合约通过内置条件逻辑或借助chainlink keepers等自动化服务实现触发执行;需应对gas成本、安全风险、异步体验和预言机依赖等挑战,采用layer 2、元交易…

    2025年12月22日
    300
  • 解决node-oracledb Thin模式下不支持0x939密码验证器错误

    本文旨在解决使用node-oracledb在thin模式下连接oracle数据库时遇到的“密码验证器类型0x939不受支持”错误。该问题通常源于数据库使用了较旧的密码哈希算法。教程将详细介绍针对不同oracle数据库版本的解决方案,包括启用thick模式、调整数据库参数以及重置用户密码等,以确保no…

    2025年12月21日
    300

发表回复

登录后才能评论
关注微信