# Oracle 深入学习 Part 11: Managing Tables(管理表)

news/2024/12/21 5:59:58/

作为oracle初学者,在此只讨论普通表类型。

oracle_3">oracle表中的数据类型

​​​​在这里插入图片描述

数据类型主要分为四类:文本,数值,日期,二进制

文本:

  • CHAR(N) :固定长字符类型,N为字符长度。内容不够N字节会使用空格补充。固定占N个字符的位置。
  • NCHAR(N):存储Unicode字符的固定长;字符类型。
  • VARCHAR(N):可变长字符类型,N为字符长度。占实际内容长度的位置。
  • NVARCHAR2(N):存储Unicode字符的可变长类型。

在这里插入图片描述

数值:

  • NUMBER(P,S):存储精确的数值,支持整数和小数。
    • P表示可存储的整数部分和小数部分的总位数(最大为38),S表示小数点后的位数。
    • 示例:NMUBER(5,2):可存储最大值为999.99

日期:

  • DATE:存储日期和时间,精度到秒。
  • TIMESTAMP§:存储日期和时间,支持更高的精度。p表示精确程度。

二进制:

  • RAW(N):存储二进制数据,n 为长度,最大2000字节(2k)。
  • LOB
    • BLOB:存储二进制大对象,最大4GB。
    • CLOB:存储大文本数据,最大4GB。
  • ROWID:存储行的物理地址。
  • UROWID:存储逻辑行ID。

ROWID

ROWID 是 Oracle 数据库中用来表示数据库中每一行的唯一标识符,隐含在表中,通过ROWID唯一确定某行,任何表都有ROWID。

在这里插入图片描述

  • OOOOOO: 数据对象编号(Object ID),表示所属表。

  • FFF: 文件号,表示存储的表空间文件编号。

  • BBBBBB: 块号,表示行存储的数据库块。

  • RRR: 行号,表示该块中的行位置。

ROWID是快速定位一个记录最快的方法。

创建表

CREATE TABLE table_name (column1 data_type [constraint],column2 data_type [constraint],...[table_constraints]
)
TABLESPACE tablespace_name     -- 指定存储表的表空间	 
STORAGE (INITIAL size               -- 第一个区的大小NEXT size                  -- 后续扩展区的大小MINEXTENTS number          -- 初始分配的区数量MAXEXTENTS number | UNLIMITED -- 最大分配的区数量PCTINCREASE percentage     -- 每次扩展区大小增长的百分比
)
;
  • table_name:表名,必须唯一。

  • column1, column2:列名,每个列需要指定数据类型。

  • data_type:列的数据类型,如 VARCHAR2, NUMBER, DATE

  • constraint:列级别约束,如 PRIMARY KEY, NOT NULL, UNIQUE

  • table_constraints:表级别约束,比如主键、外键等。

参数描述
INITIAL定义分配的第一个区的大小(单位为字节、KB、MB、GB,例如 100K1M)。
NEXT定义第二个区的大小,或后续扩展区的初始大小。
MINEXTENTS定义对象创建时最少分配的区数量,默认值为 1
MAXEXTENTS定义对象允许的最大区数量,可指定具体值或 UNLIMITED
PCTINCREASE定义扩展区大小的增长比例。0 表示固定大小,不增长;非零值时每次扩展区增量按此百分比计算。

创建临时表

CREATE GLOBAL TEMPORARY TABLE table_name (column1 data_type [constraint],column2 data_type [constraint],...
) ON COMMIT {DELETE ROWS | PRESERVE ROWS};
  • table_name:表名,必须唯一。

  • column1, column2:列名和数据类型。

  • ON COMMIT DELETE ROWS:在每次事务提交后删除表中的数据。这是默认行为。

  • ON COMMIT PRESERVE ROWS:在事务提交后,保留表中的数据,直到会话结束。

Row Migration & Row Chaining

** 行迁移 (Row Migration)**

定义
  • 当某一行数据由于更新操作而增长时,可能会超出该行原本存储的数据块的空间。即使 PCTFREE 为该块留出了空间,也可能因为行的数据量增加(例如,更新了某个列的值,使得它变得更大)导致原数据块无法再容纳整个行。
  • 在这种情况下,Oracle 会将整个行迁移到一个新的数据块中,并留下一个指向新位置的指针。这个过程被称为 行迁移 (Row Migration)
影响
  • 行迁移会导致 Oracle 在读取这行数据时需要访问两个数据块:原始块和新块。
  • 这种额外的 I/O 操作会导致性能下降,尤其是当迁移的行被频繁访问时,查询的速度会显著变慢。
解决办法
  • 增加 PCTFREE 的值:为了避免行迁移,可以通过设置较高的 PCTFREE 值为数据块预留更多空间,以应对将来的数据增长。
  • 定期进行表重建:通过 ALTER TABLE MOVEDBMS_REDEFINITION 等操作,重建表并清理已经发生行迁移的行,以消除这些额外的指针。

行链接 (Row Chaining)

定义
  • 行链接 是当一行数据过大,无法完全存储在一个数据块中时,Oracle 将行分割成多个片段,每个片段存储在不同的块中。这些行片段通过指针连接起来,从而形成一个完整的行。每个片段都是该行的一部分,并且会存储在不同的数据块中。
  • 行链接通常发生在以下情况:
    • 行包含非常大的数据类型,如 CLOBBLOB 或长文本字段。
    • 表包含的列过多,导致每行的数据量超过了单个数据块的容量。
影响
  • 当行数据被拆分为多个块时,Oracle 必须访问多个数据块来重新组装完整的行,这会导致性能下降。
  • 特别是在需要频繁读取这些大行时,额外的 I/O 操作会明显影响数据库的响应时间。
解决办法
  • 增加数据块大小:通过选择较大的数据块(例如 8KB → 16KB 或 32KB),可以容纳更大的行,从而减少行链接的发生。
  • 拆分表:如果表的某些列特别长,可以考虑将表拆分成多个较小的表,将长列放在独立的表中,以减小单行的大小。
  • 使用合适的数据类型:避免使用过大的数据类型,尤其是在不必要的情况下,避免将数据列设为 CLOBBLOB,这些数据类型会导致行链接。

Nonpartitioned Table Reorg(非分区表重组)

在 Oracle 中,非分区表重组是一个重要的操作,通常用于优化表的存储布局或将表移动到不同的表空间中。重组过程会保留表的结构(例如,列定义),但是会重新安排表的数据存储方式。通过这种方式,可以减少行迁移,优化空间的使用,或者将表迁移到一个性能更好的表空间中。

 ALTER TABLE table_nameMOVE TABLESPACE tablespace_name;
  • table_name:要重组的表的名称。

  • tablespace_name:目标表空间的名称,表将被移动到这个表空间。

Truncating a Table(清空表)

TRUNCATE TABLE 是一种非常快速的删除表中所有数据的方式,常用于需要快速清空表但不需要日志记录每一行删除的情况。

TRUNCATE TABLE table_name;
  • table_name:指定要清空的表名。

TRUNCATE TABLE 的作用

  1. 删除表中的所有行
    • 执行 TRUNCATE TABLE 后,表中所有的行会被立即删除,但表结构和约束(如索引、触发器等)不会受到影响。
  2. 释放所使用的空间
    • 清空表会释放表占用的存储空间(通常是数据文件中的空间),从而减小表的物理大小。
  3. 清空索引
    • 与表关联的索引会在 TRUNCATE TABLE 操作后被清空,但索引本身不会被删除,索引结构依然存在。
  4. 不会触发触发器
    立即删除,但表结构和约束(如索引、触发器等)不会受到影响。
  5. 释放所使用的空间
    • 清空表会释放表占用的存储空间(通常是数据文件中的空间),从而减小表的物理大小。
  6. 清空索引
    • 与表关联的索引会在 TRUNCATE TABLE 操作后被清空,但索引本身不会被删除,索引结构依然存在。
  7. 不会触发触发器
    • DELETE 不同,TRUNCATE TABLE 不会触发 DELETE 触发器。这意味着如果表上定义了删除触发器,执行 TRUNCATE 时,触发器不会被执行。

http://www.ppmy.cn/news/1556844.html

相关文章

自动驾驶控制与规划——Project 2: 车辆横向控制

目录 零、任务介绍一、环境配置二、算法三、代码实现四、效果展示 零、任务介绍 补全src/ros-bridge/carla_shenlan_projects/carla_shenlan_stanley_pid_controller/src/stanley_controller.cpp中的TODO部分。 一、环境配置 上一次作业中没有配置docker使用gpu,…

mfc140u.dll是什么文件?如何解决mfc140u.dll丢失的相关问题

遇到“mfc140u.dll文件丢失”的错误通常影响应用程序的运行,这个问题主要出现在使用Microsoft Visual C环境开发的软件中。mfc140u.dll是一个重要的系统文件,如果它丢失或损坏,会导致相关程序无法启动。本文将简要介绍几种快速有效的方法来恢…

如何使用arping命令检测IP地址冲突?

不同的操作系统对于IP地址冲突都有着不同的检测与解决方法。 在Windows系统之中,如果出现IP地址冲突,系统会显示图表进行提示,你可以根据图标来进行后续的操作,尽可能的避免IP地址冲突带来的影响。 而在Linux系统之中是没有类似的…

url提取

很久没有接触这类题目了,发现还是很考察基础的,不过基本手敲两遍就会了。 题目: 有这样一个 URL:http://item.taobao.com/item.htm?a1&b2&c&dxxx&e,请写一段 JS 程序提取 URL 中的各个 GET 参数(参…

需求解读文档

目录 引言产品概述需求详细解读与技术方案 1. 一张图模块 1.1 多格式三维数据导入1.2 三维地图引擎1.3 空间测量功能1.4 图层管理 2. 户籍数据管理模块 2.1 批量数据导入2.2 关联房屋信息2.3 人员信息编辑2.4 人员分类标记2.5 多条件查询2.6 数据权限管理 3. 房屋信息管理模块…

【波数】常见波数计算公式及分析

1. 常见的波数计算公式 通常,在声学中,波数 的计算公式取决于介质的性质和声波的频率。以下是两种常见的波数计算方式: (1)理想气体中的波数计算(空气等) 在空气或类似的介质中,…

数说故事聚焦“卖车”场景,推出AI汽车销售转化解决方案

没错,“卖车”我们也在行,为某车企“保住”了新车上市的订单。 深耕汽车行业多年,该车企10月份刚发布一款新能源车,其前期已经拥有了大量的保有客户和线上多渠道获取的潜在客户,然而,仍面临两大难题&#x…

C哈的刷题计划之杨辉三角形(5)

1、盲听C哈说 哈喽,大家好,我是小C,一个每天嘻嘻哈哈的斜杠女青年。一直受一句话的影响 — "你关注的人,决定你看到的世界!" 现在是2024年12月20日早上9点,距离过年只剩一个多月了,总…