首页 > 数据库 >oracle的表

oracle的表

时间:2024-07-16 22:40:17浏览次数:18  
标签:创建 索引 水位 表中 oracle 数据

1 与表相关的以下术语

1.1 段

段是oracle中占用存储空间的数据库对象。创建表时会创建一个段,创建索引也会创建一个段。需要注意的是,创建表时可能会创建多个段。例如创建一个表CREATE TEST(ID PRIMARY KEY)。TEST这个表会创建两个段,一个是TEST表本身,一个是为主键所创建的索引。

1.2 段空间管理

  • 手动段空间管理(Manual Segment Space Management, MSSM )。由我们设置 FREELISTS、FREELIST GROUPS、PCTFREE 、PCTUSED和其他参数来控制如何分配、使用和重用段中的空间。
  • 自动段空间管理(Automatic Segment Space Management, ASSM ):只需由我们设置一个参数:PCTFREE。

1.3 高水位线(High-Water Mark, HWM )

高水位线是指段曾经包含数据最右边的块。当进行全段扫描时,oracle会扫描段中高水位线以下所有的块。所以高水位线会影响全面扫描的性能。如下图所示,当表创建时,高水位线位于表中的第一个块。随着表中数据的增加,高水位线会不断升高。删除数据后,高水位线不会降低。后面插入数据时,数据会插入这些高水位线以下之前删除过数据有空余空间的块。要降低高水位线,只能通过重建、截除(truncate)或收缩这个对象。

1.4 PCTFREE

PCTFREE是为一个块更新保留的空间百分比。默认是10%。当一个块的空闲空间低于10%,则这个块就不允许再插入数据,只能更新数据。

1.5 行迁移

行迁移是指当一行更新变得更大,无法放在原来的块中。oracle就会将这一行数据迁移到新的块,同时在原来的块中保留一个转发地址。一个表中如果发生行迁移过多,会影响性能。因为要找到发生行迁移的行,要先找到原来的块,再根据原来的块中的转发地址找到新的块,多了一步IO操作。同时,在高速缓存中也需要同时缓存两个块。
统计一个表上的行迁移情况

ANALYZE TABLE TEST COMPUTE STATISTICS;
SELECT chain_cnt,
      round(chain_cnt/num_rows*100,2) pct_chained,
      avg_row_len, pct_free , pct_used
 FROM user_tables
WHERE table_name = 'TEST';

1.6 LOGGING 和 NOLOGGING

正常情况下,我们在数据库的操作都是LOGGING模式,LOGGING模式就是会让我们的操作都会产生redo。而NOLOGGING模式则让我们的一些操作少产生redo甚至不产生redo。
NOLOGGING 只会影响几个特定的操作,如对象的初始创建,或使用SQLLoader的直接路径加载,或者重建操作;后续正常的DML的不受NOLOGGING影响。如果要在insert select 语句(insert/+ append*/ into t nologging)使用append直接路径加载数据,插入数据的表要去掉索引才能达到更好的性能,因为索引无法直接输入磁盘,会产生很多redo。
常见dml、ddl语句使用nologging选项所生成的redo和undo大小比较:http://blog.itpub.net/53956/viewspace-1273203/

2 oracle常见的表类型

  • 堆组织表(heap organized table):这就是普通的标准数据库表:数据在其中以堆的方式管理。增加数据时,会找到并使用段中第一个能放下此数据的自由空间。从表中删除数据时,则允许以后的INSERT和UPDATE重用这部分空间,这就是这种表类型中“堆”这个名字的由来。 “堆”是指一组空间,被以某种随机的方式来使用。
  • 临时表(temporary table):临时表中保存的数据,只对当前会话可见。
  • 外部表(external table):这些表中的数据并不存储在数据库中,而是放在数据库之外,也就是说它们被存放为普通的操作系统文件。
  • 索引组织表(index organized table ):这些表按索引结构存储。这就强制要求行本身有某种物理顺序。在堆表中,只要空间放得下,数据可以放在其中任何位置;而索引组织表(IOT)则不同,数据要根据主键有序地存储在索引组织表中。

标签:创建,索引,水位,表中,oracle,数据
From: https://www.cnblogs.com/study9196/p/18301803

相关文章

  • Oracle数据库 ASH视图详解
    OracleASH视图详解ASH视图基础v$active_session_history、dba_hist_active_sess_history数据来源:MMON进程收集数据库实例性能及会话活动的大量统计数据到SGA,并定期存储到SM/AWR组件中的数据字典用途:显示采样的会话活动信息,动态视图中每秒一行记录,历史视图中每10秒一......
  • Oracle数据闪回
    Oracle的闪回功能可以在对数据库进行不完全恢复的情况下,对某一个指定的表进行恢复。闪回数据库是进行时间点恢复的新方法,它能够快速将Oracle恢复到以前的时间,以更正由于逻辑数据损坏或用户错误而引起的问题。当需要恢复时,可以将数据库恢复到错误前的时间点,并且只恢复改变的数......
  • Oracle常见数据块损坏处理方式
    1前提:备份数据库查看数据库的模式SYS@orcl>selectopen_mode,log_modefromv$database;OPEN_MODE LOG_MODE--------------------------------READWRITE ARCHIVELOG修改RMAN的备份参数RMAN>configurecontrolfileautobackupon;newRMANconfigur......
  • Oracle数据库概述
    1oracle的数据模式是:用户建在数据库实例上,表建在用户上   不同数据库实例可以建相同的用户;  同一个数据库实例,用户名不能相同;  一个用户可以使用多个表空间;  一个表空间可以被多个用户所使用;  表的权限是和用户绑定的;  表空间不涉及任何权限控制问题; ......
  • oracle 查询锁 && 解锁
    目录oracle查询锁&&解锁查询数据库中的锁查询被锁的对象查询阻塞查询数据库正在等待锁的进程查询会话之间锁等待的关系查询锁等待事件解决方案:oracle查询锁&&解锁查询数据库中的锁select*fromv$lock;select*fromv$lockwhereblock=1;查询被锁的对象select*fr......
  • Oracle 18c&19c physical dg切换总结
    这篇文章总结Oracle18c/19cPhysicalStandbyDG的主备切换的操作流程,主要参考官方文档18c&19cPhysicalStandbySwitchoverBestPracticesusingSQL*Plus(DocID2485237.1)[1].由于参考官方的最佳实践,所以有些步骤/过程略显繁琐。其实正常情况下,这里面的很多步骤都可以......
  • java操作Oracle 方式三 ( 全局一个连接,当操作时发现连接断开了,则再次连接,单线程 )
    全局一个连接,当操作时发现连接断开了,则再次连接,单线程这种方式好处是,全局一个连接,不会每次都发启连接,适用于某一时刻,频繁操作数据库,如:每晚同步数据OracleUtil.java基础类代码详见:https://www.cnblogs.com/hailexuexi/p/18302732完整代码dbCdrOneConnect.javapackagecom.Ja......
  • java操作Oracle 方式一 ( 连接-》操作-》断开连接 )
    连接-》操作-》断开连接这种方式的特点是每次都是新的连接,单线程,缺点是网络环境不好时连接oracle比较费时。OracleUtil.java基础类代码详见:https://www.cnblogs.com/hailexuexi/p/18302732完整代码dbCDR.javapackagecom.JavaRabbitMQToDataBase.dbOracle;importjava......
  • java操作Oracle 方式二 ( 多线程 )
    多线程方式 也是 连接-》操作-》断开连接  这样的操作过程,只是采用了多线程这种方式的特点是每次都是新的连接,多线程,解决了网络环境不好时连接oracle比较费时,影响主程序其它功能的响应。OracleUtil.java基础类代码详见:https://www.cnblogs.com/hailexuexi/p/1830273......
  • java连接oracle执行sql语句
    一个简单的示例importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.SQLException;importjava.sql.Statement;publicclassOracleJdbcExample{publicstaticvoidmain(String[]args){//Oracle数据库的JDBCURL,用户名和密码......