- 浏览: 788457 次
- 性别:
- 来自: 广州
文章分类
最新评论
表里的一行对于一个数据块太大的情况有二种(一行在一个数据块里放不下)
第一种情况:
INSERT的时候,INSERT时候行的大小就超一个块的大小。Oracle把这行的数据存储在一连串的数据块里(Oracle Stores the data for the row in a chain of data blocks),这种情况称为行链接(Row Chain),一般不可避免(除非使用更大的数据块)。
第二种情况:
UPDATE的时候,UPDATE之后导致行的大小超过一个块的大小,Oracle将迁移这行数据(整行)到一个新的数据块(假设更新的行在新的数据块下放得下,否则这里发生一次行链接),在行迁移之前的地方有一个指向迁移后数据块的指针,行的rowid不会改变。
view source
-- 行链接
SQL> create table t01
2 (
3 col01 varchar2(4000),
4 col02 varchar2(4000),
5 col03 varchar2(2000)
6 )
7 /
Table created.
SQL> insert into t01 values(lpad('*',4000,'*'),lpad('*',4000,'*'),lpad('*',2000,'*'));
1 row created.
SQL> commit;
Commit complete.
SQL> select rowid from t01;
ROWID
------------------
AAASpTAAEAAAALdAAA
SQL> select * from t01 where rowid='AAASpTAAEAAAALdAAA';
Execution Plan
----------------------------------------------------------
Plan hash value: 2326159110
-----------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 5018 | 1 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY USER ROWID| T01 | 1 | 5018 | 1 (0)| 00:00:01 |
-----------------------------------------------------------------------------------
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
2 consistent gets
0 physical reads
-- 行迁移
SQL> show parameter block_size
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_block_size integer 8192
SQL> create table t01
2 (
3 col01 varchar2(4000),
4 col02 varchar2(4000),
5 col03 varchar2(2000)
6 )
7 /
Table created.
SQL> insert into t01
2 values(lpad('*',3000,'*'),lpad('*',3000,'*'),lpad('*',1000,'*'));
1 row created.
SQL> insert into t01
2 values('a','a','a');
1 row created.
SQL> commit;
Commit complete.
SQL> select rowid from t01 where col01='a';
ROWID
------------------
AAASpWAAEAAAALrAAB
SQL> select * from t01 where rowid='AAASpWAAEAAAALrAAB';
Execution Plan
----------------------------------------------------------
Plan hash value: 2326159110
-----------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 5018 | 1 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY USER ROWID| T01 | 1 | 5018 | 1 (0)| 00:00:01 |
-----------------------------------------------------------------------------------
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
1 consistent gets
0 physical reads
SQL> update t01
2 set col01 = lpad(col01, 3000, 'a'),
3 col02 = lpad(col02, 3000, 'a'),
4 col03 = lpad(col03, 1000, 'a')
5 where col01 = 'a';
1 row updated.
SQL> commit;
Commit complete.
SQL> select rowid from t01 where col01 like 'a%';
ROWID
------------------
AAASpWAAEAAAALrAAB
SQL> select rowid from t01 where col01 like 'a%';
ROWID
------------------
AAASpWAAEAAAALrAAB
SQL> set autot trace
SQL> select * from t01 where rowid='AAASpWAAEAAAALrAAB';
Execution Plan
----------------------------------------------------------
Plan hash value: 2326159110
-----------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 5018 | 1 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY USER ROWID| T01 | 1 | 5018 | 1 (0)| 00:00:01 |
-----------------------------------------------------------------------------------
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
2 consistent gets
0 physical reads
-- 检查行迁移的记录
SQL> truncate table chained_rows;
Table truncated.
SQL> analyze table t01 list chained rows into chained_rows;
Table analyzed.
SQL> exec print_table('select * from chained_rows')
OWNER_NAME : YAO
TABLE_NAME : T01
CLUSTER_NAME :
PARTITION_NAME :
SUBPARTITION_NAME : N/A
HEAD_ROWID : AAASpWAAEAAAALrAAB
ANALYZE_TIMESTAMP : 2012-12-24 11:31:51
-----------------
PL/SQL procedure successfully completed.
-- 消除行迁移
SQL> alter table t01 move;
Table altered.
SQL> select rowid from t01 where col01 like 'a%';
ROWID
------------------
AAASpZAAEAAAAL8AAA
SQL> set autot trace
SQL> select * from t01 where rowid='AAASpZAAEAAAAL8AAA';
Execution Plan
----------------------------------------------------------
Plan hash value: 2326159110
-----------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 5018 | 1 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY USER ROWID| T01 | 1 | 5018 | 1 (0)| 00:00:01 |
-----------------------------------------------------------------------------------
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
1 consistent gets
0 physical reads
第一种情况:
INSERT的时候,INSERT时候行的大小就超一个块的大小。Oracle把这行的数据存储在一连串的数据块里(Oracle Stores the data for the row in a chain of data blocks),这种情况称为行链接(Row Chain),一般不可避免(除非使用更大的数据块)。
第二种情况:
UPDATE的时候,UPDATE之后导致行的大小超过一个块的大小,Oracle将迁移这行数据(整行)到一个新的数据块(假设更新的行在新的数据块下放得下,否则这里发生一次行链接),在行迁移之前的地方有一个指向迁移后数据块的指针,行的rowid不会改变。
view source
-- 行链接
SQL> create table t01
2 (
3 col01 varchar2(4000),
4 col02 varchar2(4000),
5 col03 varchar2(2000)
6 )
7 /
Table created.
SQL> insert into t01 values(lpad('*',4000,'*'),lpad('*',4000,'*'),lpad('*',2000,'*'));
1 row created.
SQL> commit;
Commit complete.
SQL> select rowid from t01;
ROWID
------------------
AAASpTAAEAAAALdAAA
SQL> select * from t01 where rowid='AAASpTAAEAAAALdAAA';
Execution Plan
----------------------------------------------------------
Plan hash value: 2326159110
-----------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 5018 | 1 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY USER ROWID| T01 | 1 | 5018 | 1 (0)| 00:00:01 |
-----------------------------------------------------------------------------------
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
2 consistent gets
0 physical reads
-- 行迁移
SQL> show parameter block_size
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_block_size integer 8192
SQL> create table t01
2 (
3 col01 varchar2(4000),
4 col02 varchar2(4000),
5 col03 varchar2(2000)
6 )
7 /
Table created.
SQL> insert into t01
2 values(lpad('*',3000,'*'),lpad('*',3000,'*'),lpad('*',1000,'*'));
1 row created.
SQL> insert into t01
2 values('a','a','a');
1 row created.
SQL> commit;
Commit complete.
SQL> select rowid from t01 where col01='a';
ROWID
------------------
AAASpWAAEAAAALrAAB
SQL> select * from t01 where rowid='AAASpWAAEAAAALrAAB';
Execution Plan
----------------------------------------------------------
Plan hash value: 2326159110
-----------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 5018 | 1 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY USER ROWID| T01 | 1 | 5018 | 1 (0)| 00:00:01 |
-----------------------------------------------------------------------------------
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
1 consistent gets
0 physical reads
SQL> update t01
2 set col01 = lpad(col01, 3000, 'a'),
3 col02 = lpad(col02, 3000, 'a'),
4 col03 = lpad(col03, 1000, 'a')
5 where col01 = 'a';
1 row updated.
SQL> commit;
Commit complete.
SQL> select rowid from t01 where col01 like 'a%';
ROWID
------------------
AAASpWAAEAAAALrAAB
SQL> select rowid from t01 where col01 like 'a%';
ROWID
------------------
AAASpWAAEAAAALrAAB
SQL> set autot trace
SQL> select * from t01 where rowid='AAASpWAAEAAAALrAAB';
Execution Plan
----------------------------------------------------------
Plan hash value: 2326159110
-----------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 5018 | 1 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY USER ROWID| T01 | 1 | 5018 | 1 (0)| 00:00:01 |
-----------------------------------------------------------------------------------
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
2 consistent gets
0 physical reads
-- 检查行迁移的记录
SQL> truncate table chained_rows;
Table truncated.
SQL> analyze table t01 list chained rows into chained_rows;
Table analyzed.
SQL> exec print_table('select * from chained_rows')
OWNER_NAME : YAO
TABLE_NAME : T01
CLUSTER_NAME :
PARTITION_NAME :
SUBPARTITION_NAME : N/A
HEAD_ROWID : AAASpWAAEAAAALrAAB
ANALYZE_TIMESTAMP : 2012-12-24 11:31:51
-----------------
PL/SQL procedure successfully completed.
-- 消除行迁移
SQL> alter table t01 move;
Table altered.
SQL> select rowid from t01 where col01 like 'a%';
ROWID
------------------
AAASpZAAEAAAAL8AAA
SQL> set autot trace
SQL> select * from t01 where rowid='AAASpZAAEAAAAL8AAA';
Execution Plan
----------------------------------------------------------
Plan hash value: 2326159110
-----------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 5018 | 1 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY USER ROWID| T01 | 1 | 5018 | 1 (0)| 00:00:01 |
-----------------------------------------------------------------------------------
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
1 consistent gets
0 physical reads
发表评论
-
Oracle 10g 的clusterware 32位 下载地址
2013-04-19 23:03 1236Oracle 10g 的clusterware 32位 下载地 ... -
oracle 分析函数 RANK()
2013-04-11 00:05 1107RANK()既是一个聚合函数,也是一个分析函数 其具体的语法 ... -
oracle 分析函数
2013-04-09 23:25 1184分析函数是用于计算一组中多行的聚合值,与聚合函数的区别在于聚合 ... -
批量执行 bulk collect与forall用法
2013-04-08 23:49 1398BULK COLLECT 子句会批量检 ... -
pl/sql集合类型
2013-03-26 10:12 1578--集合类型 /* 单行单列的数据,使用标量变量 单行 ... -
oracle Health Monitor
2013-01-20 00:02 1620About Health Monitor Beginning ... -
oracle moving window size与 AWR retention period关系
2013-01-19 15:58 8494转自: http://tomszrp.itpub.net/po ... -
Oracle11.2新特性之INSERT提示IGNORE_ROW_ON_DUPKEY_INDEX
2013-01-12 00:20 2932insert提示IGNORE_ROW_ON_DUPKEY_IN ... -
oracle 11g新特性Flashback data archive
2013-01-09 22:52 30891. 什么是flashback data archive F ... -
RMAN List和report 命令
2012-12-25 00:07 2912LIST 命令 使用RMAN LIST 命令显示有关资料档案库 ... -
oracle ASM中ASM_POWER_LIMIT参数
2012-12-24 23:46 6442ASM_POWER_LIMIT 该初始化参数用于指定ASM例程 ... -
oracle I/O 从属进程
2012-12-24 23:24 1437I/O 从属进程 I/O从 ... -
easy connect 之 ORA-12154: TNS: 无法解析指定的连接标识符
2012-12-19 23:43 5646用easy connect连接出现“tns无法解析指定的连接标 ... -
Flashback Database --闪回数据库
2012-12-19 23:38 1396Flashback 技术是以Undo segment中的内容为 ... -
Oracle 11g新特性:Automatic Diagnostic Repository
2012-12-19 22:35 1398Oracle Database 11g的FDI(Fault D ... -
RMAN配置中通道(CHANNEL)相关参数 PARALLELISM 、FILESPERSET的关系
2012-12-19 22:09 2726RMAN配置中通道(CHANNEL)相 ... -
oracle 空间RESUMABLE
2012-12-14 22:05 3066空间RESUMABLE操作 转 Oracle从9i开始 ... -
oracle 创建视图 with check option
2012-12-13 23:14 1539我们来看下面的例子: create or replace vi ... -
flashback transaction闪回事务查询
2012-11-26 22:00 1508闪回事务查询有别于闪回查询的特点有以下3个: (1) ... -
pl/sql连不上oracle数据库
2012-11-21 22:56 3754pl/sql 9.2版本连不上oracle数据库 当系统安装 ...
相关推荐
### Oracle 行迁移与行链接的实验详解 #### 一、引言 在Oracle数据库管理过程中,行迁移(row migration)与行链接(row chaining)是两种常见的现象,它们通常发生在记录过大或更新操作导致记录扩展超出单个数据块所能...
- **与行迁移的区别**:行迁移是将整行数据移动到新的块中,而行链接是将一行数据分割并存储在多个块中。 #### 五、示例样本 以下是一个简单的示例,用以说明行迁移和行链接: ```sql -- 示例:创建一个包含长...
在Oracle数据库中,行迁移(Row Migration)和行链接(Row Chaining)是两种与数据存储和空间管理紧密相关的现象。这两个概念对于理解和优化数据库性能至关重要。 行迁移是指当一个数据库行在一个分配的块中无法...
在开始迁移之前,首要任务是在DM8中创建与Oracle数据库中的用户相对应的新用户。这一步不仅包括创建用户,还包括为用户分配相应的权限和角色,以确保迁移后系统功能的正常运行。 二、新建工程、迁移 创建一个迁移...
此外,检查Oracle服务是否正常运行,特别是Oracle监听器和服务,它们是数据迁移的基础设施,如果未启动,将导致无法连接。 总结来说,从MySQL到Oracle的数据迁移是一个涉及多个步骤的过程,需要正确配置和管理...
程序是C#写的,编译成64bit程序,只能跑在windows 64位平台,无需安装Oracle客户端,实现SQLServer2005以上数据 迁移数据到Oracle数据库 自动创建表及主键,自动迁移数据 使用方法: 1. 修改配置文件MigrationMSSQL2...
《Oracle8i行链接和行迁移探析》这篇文章主要探讨了Oracle数据库中行迁移和行链接的概念、影响以及如何识别和处理这两种现象。行迁移和行链接是Oracle数据库在处理数据更新时可能出现的问题,对数据库性能产生显著...
该方法简单易行,类似于 MySQL 数据库迁移到 Oracle 数据库的过程。 二、实现步骤 1. 在目标数据库中创建表空间和用户 首先,需要在目标数据库中创建表空间和用户。对于 Oracle 数据库,不像 MySQL 中一个用户...
内容概要:本文详细介绍了 Oracle19c 数据库中的行链接和行迁移概念,解释了 PCTFREE 和 PCTUSED 参数的作用及其对数据块空间管理的影响。通过具体的示例,说明了行链接和行迁移的发生条件和解决方法。并提供了实际...
- **连接本机MySQL数据库**:通过Oracle SQL Developer的连接功能,建立与本地MySQL数据库的连接。 - **连接生产Oracle数据库**:同样地,也需要通过Oracle SQL Developer连接到生产Oracle数据库。 ##### 2.3 执行...
在进行数据迁移之前,首先需要了解SQL Server与Oracle之间不同类型的数据类型的映射关系。下面是两种数据库管理系统之间的主要数据类型对应关系: | SQL Server Data Type | Oracle Data Type | |-----------------...
- **SCANIP**:作为客户端与数据库之间的连接层,需与PublicIP和VIP在同一网段。 **注1**:网卡eth0配置为PublicIP,eth1配置为PrivateIP。 **注2**:所有IP地址必须是可用的且未被占用。 ##### 3.5 ASM磁盘组规划...
### IBM Portal 7.0 数据库迁移至 Oracle 完全教程 #### 一、数据库准备 **1.1 IBM Portal 7.0 兼容的 Oracle 版本及操作系统** IBM Portal 7.0 支持多种 Oracle 数据库版本及操作系统,确保在迁移过程中选择正确...
它连接Oracle数据库,自动扫描并提取其结构或数据,然后生成可以加载到PostgreSQL数据库中的SQL脚本。 二、Ora2PG功能 Ora2PG可以支持大多数SQL的转换,但某些情况下仍需要人工校正语法,使其兼容PostgreSQL。其...
1. **建立数据库连接**:使用OracleConnection类创建连接字符串,并建立与源数据库和目标数据库的连接。连接字符串应包含数据库的服务器地址、服务名、用户名和密码等信息。 2. **获取源视图信息**:使用...
Oracle数据库的冷备份迁移是一种在数据库关闭状态下进行的迁移方法,主要涉及数据库文件的复制、参数文件的调整以及可能的版本升级。以下是对这个过程的详细解释: 首先,确保新服务器上安装的Oracle数据库版本与旧...