iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >Oracle数据库中怎么实现数据行迁移与行链接
  • 208
分享到

Oracle数据库中怎么实现数据行迁移与行链接

2024-04-02 19:04:59 208人浏览 八月长安
摘要

本篇内容主要讲解“oracle数据库中怎么实现数据行迁移与行链接”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Oracle数据库中怎么实现数据行迁移与行链接”吧

本篇内容主要讲解“oracle数据库中怎么实现数据行迁移与行链接”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Oracle数据库中怎么实现数据行迁移与行链接”吧!

在Oracle数据库中存在两种数据存储现象:行迁移和行链接。这两者现象严重时都会导致数据库查询性能严重低下,处理好数据存储的行链接或者行迁移也是有效提升数据库性能的有效方式。

一、行迁移和行链接的定义:

1.行迁移:
ORACLE一个BLOCK的DEFAULT SIZE是8K,事实上,一个BLOCK不可以存储8K的数据.一个BLOCK可以存储多少数据,由PCTFREE,PCTUSED参数控制(对于以前的手工管理的表空间而言).

PCTFREE:是指BLOCK保留空闲空间的百分比,用于UPDATE。对于已经插入到BLOCK的行而言,后面的UPDATE操作有可能使行的长度增加;PCTFREE就是用于容纳增加的那部分长度而保留的空闲空间。如果UPDATE时PCTFREE再也不能够容纳行增加的长度,则ORACLE会将整个行迁移到一个新的BLOCK,行的ROWID保留(不是太明白为什么ORACLE不改变ROWID),原来的BLOCK有一个指针指向ROW存放的新BLOCK。这就是行迁移。

可见,行迁移是由于UPDATE操作所导致。从字面上理解,所谓迁移,肯定先有存在这一行,才能叫着迁移.

2.行链接:
是指一个BLOCK不能容纳一行(行的长度太大),而必须将此行存放于几个BLOCK.行链接一般是在Insert时产生的.一个BLOCK能否用于insert是由PCTUSED控制.

PCTUSED:是指BLOCK用于INSERT的百分比。对于INSERT操作,BLOCK可用于容纳新行的最大空间为Blocksize-pctfree-overhead.当BLOCK数据存储已高于PCTUSED,ORACLE会将该块从自由链表中移除,直到该块已使用空间降到PCTUSED以下,才会再次将此块重新加入到Freelist(这是ORACLE以前手工管理的表空间管理空闲块的原理,现在ORACLE推荐使用ASSM).

对表分析后检查表中行迁移的情况:

select TABLE_NAME,NUM_ROWS,AVG_ROW_LEN,BLOCKS,EMPTY_BLOCKS,CHaiN_CNT from user_tables where table_name='EMP';

(其中字段CHAIN_CNT显示的就是行迁移或者行链接的表中的行数)

二、行迁移与行链接的分析检测:

检测表中是否存在行迁移或者行链接需要对表进行分析:
表分析的方法有两种:

1, analyze table emp compute statistics;2, exec dbms_stats.gather_schema_stats('scott','emp');   --前者为用户名,后者为表名

但是ORACLE的dbms_stats.gather_schema_stats只会收集优化器统计信息,不会检测表的记录是否存在行迁移和行链接,因此要分析行链接或者行迁移必须用analyse命令。

行迁移和行链接的检测:

select b.NAME,a.VALUE from v$mystat a,v$statname b where a.STATISTIC#=b.STATISTIC# and b.NAME like 'table fetch continued row';

当有返回值时,可以知道表的数据存在行迁移和行链接。
行迁移和行链接的清除:
能过REBUILD数据来清除行迁移:

create table MM_PM_temp as select * from MM_PM; truncate table MM_PM; insert into MM_PM select * from MM_PM_temp

再重新分析表:

analyze table MM_PM compute statistics;

分析过后再查看:

select t.table_name, t.num_rows, t.chain_cnt, t.avg_row_len, round((t.chain_cnt / t.num_rows) * 100, 2) as "chained rows %" from user_tables t where t.chain_cnt > 0;

如果该表的chain_cnt变为0时,表示原先的chain_cnt全部是行迁移,而不是行链接。
如果REBUILD数据后chain_cnt变少,但还大于0,则可以证明,这个表即包含行迁移,又包含真正的行链接。

事实证明,行迁移是可以通过REBUILD数据和增加PCTFREE%来清除和减少发生频率的。

注意,对于ASSM,PCTUSED,FREELIST,FREELIST GROUPS参数会被忽略。
但对于真正的行链接,只能通过将表移植到大的BLOCSIZE的表空间上。

例如:

创建一个16K的表空间:

CREATE TABLESPACE LARGETBS BLOCKSIZE 16 K LOGGING DATAFILE '/data/app/oracle/oradata/ora33/LARGETBS_01.dbf' SIZE 64M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO ;

在创建的时候报了个ORA-的错,原因我们没有设定16的DB_Buffer_cache,我们设定一下:

 alter system set db_16k_cache_size=34603008;

将表MOVE到16K的表空间:

 alter table SRC_CS move tablespace LARGETBS;
 alter table MM_PM move tablespace LARGETBS;

由于进行了迁移,表的索引会失效,所以我们要REBUILD索引:

 alter index PK_SRC_CS rebuild; alter index PK_MM_PM rebuild;

再重新分析:

 analyze table SRC_CS compute statistics; analyze table MM_PM compute statistics;

重新查询:

 select t.table_name, t.num_rows, t.chain_cnt, t.avg_row_len, round((t.chain_cnt / t.num_rows) * 100, 2) as "chained rows %" from user_tables t where t.chain_cnt > 0 order by t.table_name;

发现,这些表都没有ROW CHAIN了。可见,MOVE到16K的表空间可以清除ROW CHAIN。

三、消除迁移的方法:

一:生成一张表(chained_rows),保存迁移的行的rowid

@?/rdbms/admin/utlchain

使用分析命令将产生迁移的行的rowid插入到chained_rows表:

analyze table test01 list chained rows into chained_rows;create table tmp as select * from test01 where rowid in (select head_rowid from chained_rows);delete test01 where rowid in (select head_rowid from chained_rows);insert into test01 select * from tmp;drop table tmp purge;

再分析表:

analyze table test01 compute statistics;

再查看字典中的统计信息:

select TABLE_NAME,NUM_ROWS,AVG_ROW_LEN,BLOCKS,EMPTY_BLOCKS,CHAIN_CNT from user_tables where table_name='TEST01';

二、将存在行迁移的表用导出工具导出数据库,将原表truncate后,再讲数据重新导入。

到此,相信大家对“Oracle数据库中怎么实现数据行迁移与行链接”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

您可能感兴趣的文档:

--结束END--

本文标题: Oracle数据库中怎么实现数据行迁移与行链接

本文链接: https://www.lsjlt.com/news/62999.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Oracle数据库中怎么实现数据行迁移与行链接
    本篇内容主要讲解“Oracle数据库中怎么实现数据行迁移与行链接”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Oracle数据库中怎么实现数据行迁移与行链接”吧...
    99+
    2024-04-02
  • SQLServer中怎么进行数据迁移
    在SQL Server中进行数据迁移可以通过多种方法实现,以下是一些常用的方法: 使用SQL Server自带的导入导出工具:S...
    99+
    2024-03-11
    SQLServer
  • 如何实现oracle数据迁移到db2数据库
    这篇文章将为大家详细讲解有关如何实现oracle数据迁移到db2数据库,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、表结构迁移在plsql中选择表----->d...
    99+
    2024-04-02
  • MariaDB如何进行数据库迁移
    数据库迁移通常是指将数据从一个数据库服务器迁移到另一个数据库服务器,下面是使用MariaDB迁移数据库的一般步骤: 备份原始数据库...
    99+
    2024-04-02
  • mysql使用mysqldump 与 mysqlimport进行数据库迁移
    ...
    99+
    2024-04-02
  • 在Oracle中如何执行数据库升级和迁移
    在Oracle数据库中,执行数据库升级和迁移通常涉及以下步骤: 创建数据库备份:在进行升级或迁移之前,首先应该创建数据库的完整备...
    99+
    2024-04-09
    Oracle
  • oracle数据库怎么迁移到另一个数据库
    Oracle数据库迁移到另一个数据库通常需要使用数据迁移工具或者手动迁移的方式。下面是一些迁移Oracle数据库的常用方法: 使用...
    99+
    2024-05-07
    oracle
  • 如何在Mac之间进行数据迁移,macbook怎么迁移数据
    更换了新的Mac电脑,怎样把旧Mac里面的文件、应用程序和帐号信息等迁移到新Mac上?如何在Mac之间进行数据迁移。 一、mac电脑怎么迁移数据 mac电脑怎么迁移数据?据苹果官方消息得知,Mac里储存的文件资料、系统设置、帐户信息...
    99+
    2023-09-01
    macos windows microsoft
  • postgresql数据库数据怎么迁移
    要迁移PostgreSQL数据库数据,可以使用以下几种方法: 使用pg_dump和pg_restore命令:可以使用pg_dump...
    99+
    2024-04-17
    postgresql
  • 如何在Aurora数据库中实现数据迁移
    在Aurora数据库中实现数据迁移可以通过以下几种方式: 使用AWS Database Migration Service(DMS...
    99+
    2024-04-02
  • 如何在AmazonAurora中执行跨数据库迁移
    在Amazon Aurora中执行跨数据库迁移通常涉及将数据从一个数据库引擎迁移到另一个数据库引擎。以下是在Amazon Auror...
    99+
    2024-04-09
    AmazonAurora
  • django数据库迁移migration实现
    在django中,ORM(对象关系映射器—object-relational mapper)任务是:模型化数据库,创建数据库由另外一个系统负责(迁移–migr...
    99+
    2024-04-02
  • 怎么迁移现有的数据库到Aurora数据库
    迁移现有的数据库到Aurora数据库可以通过以下步骤完成: 创建一个新的Aurora数据库实例:首先在控制台上创建一个新的Auro...
    99+
    2024-04-09
    Aurora 数据库
  • 怎么用Oracle冷备方式实现迁移数据库
    这篇文章主要介绍“怎么用Oracle冷备方式实现迁移数据库”,在日常操作中,相信很多人在怎么用Oracle冷备方式实现迁移数据库问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2024-04-02
  • golang数据库自动迁移怎么实现
    在Go语言中,实现数据库自动迁移可以使用一些第三方库,如gorm、migrate等。下面以使用gorm库实现数据库自动迁移为例进行说...
    99+
    2023-10-20
    golang 数据库
  • 怎么使用dbeaver进行数据迁移
    要使用DBeaver进行数据迁移,你可以按照以下步骤操作: 打开DBeaver并连接到源数据库和目标数据库。 在DBeave...
    99+
    2024-03-14
    dbeaver
  • SQLServer数据库中怎么进行网络链接
    今天就跟大家聊聊有关SQLServer数据库中怎么进行网络链接,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。  怎样使用SQLServer数据库进行...
    99+
    2024-04-02
  • 通过LogMiner实现Oracle数据库同步迁移
    目录通过LogMiner实现Oracle数据同步迁移一、实现过程1.创建目录2.配置LogMiner3.开启日志追加模式4.重启数据库5.创建数据同步用户6.创建数据字典7.加入需要...
    99+
    2024-04-02
  • mysql数据库怎么迁移
    本篇内容主要讲解“mysql数据库怎么迁移”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql数据库怎么迁移”吧!上面是测试人员的要求,可以提取出2条有用的...
    99+
    2024-04-02
  • 如何使用RMAN实现Oracle数据库迁移
    这篇文章主要介绍了如何使用RMAN实现Oracle数据库迁移,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1.打开RMAN[oracle@E...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作