ORACLE-高水线的使用和直接装入数据详解

2023-11-10 23:10

本文主要是介绍ORACLE-高水线的使用和直接装入数据详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

实验环境

1、oracle 11g
2、登录用户system

基本概念

1、高水线(HWM)是一条线,在这条线之上的所有数据块都从来没有使用过。在这条线之下的数据块都是分配给该段的。该段可以使用这些数据块也可以不使用这些数据块。其他段不能占用已分配的数据块。高水线的初始值为8的倍数,且每次增长8的倍数个数据块。
2、高水线(最高水位线) :表dba_segments的blocks值
3、当前水位线:表dba_tables的blocks值
4、可上升值:表dba_tables的empty_blocks值
5、最高水位线=当前水位线+可上升值

优缺点

优点

1、便于直接装入数据

缺点

1、在大表中不利于全表扫描

一、直接装入数据

在当前水位线之上装入数据

1、串行直接装入

insert /*+ append*/ into scott.ex nologging select * from sh.sales;

2、并行直接装入
修改DML操作的方式为parallel

alter session enable parallel DML;

并行插入数据,2个数据块同时插入

insert /*+ parallel (scott.ex,2)*/ into scott.ex nologging select * from sh.sales;

二、高水线(HWM)

1、创建测试表ex

create table scott.ex as select * from sh.sales;
select * from scott.ex;

在这里插入图片描述

2、查询表ex使用的数据块个数

select blocks from dba_segments where owner='SCOTT' and segment_name='EX';
  • 高水线=4608

在这里插入图片描述
3、查询表ex的行数、正在使用的数据块数、空的数据块数

select num_rows,blocks,empty_blocks from dba_tables where owner='SCOTT' and table_name='EX';
  • 当前水位线和可上升值都为空,这是因为还未统计。
    在这里插入图片描述
    4、在表dba_segments中的blocks为高水线,在表dba_tables中blocks+empty_blocks的值为高水线。以dba_segments中的为标准。若高水线不一致,则dba_tables的数据不准确。应使用analyze命令收集ex表的统计信息。
analyze table scott.ex compute statistics;
select num_rows,blocks,empty_blocks from dba_tables where owner='SCOTT' and table_name='EX';
  • 当前水位线=4513
  • 可上升值=95

在这里插入图片描述
5、delete操作不影响高水线
delete操作是DML操作,要执行commit。不影响HWM,下次直接装入数据从原高水线装入。

delete scott.ex;
commit;
analyze table scott.ex compute statistics;
select blocks from dba_segments where owner='SCOTT' and segment_name='EX';
  • 高水线=4608

在这里插入图片描述

select num_rows,blocks,empty_blocks from dba_tables where owner='SCOTT' and table_name='EX';
  • 当前水位线=4513
  • 可上升值=95

在这里插入图片描述
6、串行直接装入

insert /*+ append*/ into scott.ex nologging select * from sh.sales;
commit;
select * from scott.ex;

在这里插入图片描述
7、检查高水线情况

select blocks from dba_segments where owner='SCOTT' and segment_name='EX';
  • 串行直接装入数据后,高水线=9216

在这里插入图片描述

select num_rows,blocks,empty_blocks from dba_tables where owner='SCOTT' and table_name='EX';
  • 未统计时,当前水位线=4513,可上升值=95

在这里插入图片描述

analyze table scott.ex compute statistics;
select num_rows,blocks,empty_blocks from dba_tables where owner='SCOTT' and table_name='EX';
  • 统计后,当前水位线=9005,可上升值=211

在这里插入图片描述

8、truncate操作影响高水线
truncate操作是DDL操作,自动commit。影响HWM,将HWM设置为8。

select blocks from dba_segments where owner='SCOTT' and segment_name='EX';

在这里插入图片描述

select num_rows,blocks,empty_blocks from dba_tables where owner='SCOTT' and table_name='EX';

在这里插入图片描述

truncate table scott.ex;
select * from scott.ex;

在这里插入图片描述

select blocks from dba_segments where owner='SCOTT' and segment_name='EX';

在这里插入图片描述

analyze table scott.ex compute statistics;
select num_rows,blocks,empty_blocks from dba_tables where owner='SCOTT' and table_name='EX';
  • 在进行truncate操作后,当前水位线=0,可上升值=8,表明当前水位线置为0,即数据从0开始装入。

在这里插入图片描述
9、当装入数据超过高水线时,一次申请8的倍数个数据块。
在这里插入图片描述
直接装入一次数据:
在这里插入图片描述
在这里插入图片描述
10、结论

  1. 直接装入数据是在高水线之上未使用过的数据块装入数据,会改变HWM,若超过高水线,则向表空间再申请8的倍数个数据块。
  2. delete是DML操作,只删除数据,不删除表结构,不影响高水线,下次直接装入数据从原HWM开始装入。
  3. truncate是DDL操作,只删除数据,不删除表结构,影响高水线,重置HWM=8,当前水位线=0,可上升值为8,下次直接装入数据从0开始。

这篇关于ORACLE-高水线的使用和直接装入数据详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/385885

相关文章

Java使用ANTLR4对Lua脚本语法校验详解

《Java使用ANTLR4对Lua脚本语法校验详解》ANTLR是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件,下面就跟随小编一起看看Java如何使用ANTLR4对Lua脚本... 目录什么是ANTLR?第一个例子ANTLR4 的工作流程Lua脚本语法校验准备一个Lua Gramm

Java Optional的使用技巧与最佳实践

《JavaOptional的使用技巧与最佳实践》在Java中,Optional是用于优雅处理null的容器类,其核心目标是显式提醒开发者处理空值场景,避免NullPointerExce... 目录一、Optional 的核心用途二、使用技巧与最佳实践三、常见误区与反模式四、替代方案与扩展五、总结在 Java

使用Java将DOCX文档解析为Markdown文档的代码实现

《使用Java将DOCX文档解析为Markdown文档的代码实现》在现代文档处理中,Markdown(MD)因其简洁的语法和良好的可读性,逐渐成为开发者、技术写作者和内容创作者的首选格式,然而,许多文... 目录引言1. 工具和库介绍2. 安装依赖库3. 使用Apache POI解析DOCX文档4. 将解析

一文详解如何在Python中从字符串中提取部分内容

《一文详解如何在Python中从字符串中提取部分内容》:本文主要介绍如何在Python中从字符串中提取部分内容的相关资料,包括使用正则表达式、Pyparsing库、AST(抽象语法树)、字符串操作... 目录前言解决方案方法一:使用正则表达式方法二:使用 Pyparsing方法三:使用 AST方法四:使用字

Qt中QUndoView控件的具体使用

《Qt中QUndoView控件的具体使用》QUndoView是Qt框架中用于可视化显示QUndoStack内容的控件,本文主要介绍了Qt中QUndoView控件的具体使用,具有一定的参考价值,感兴趣的... 目录引言一、QUndoView 的用途二、工作原理三、 如何与 QUnDOStack 配合使用四、自

C++使用printf语句实现进制转换的示例代码

《C++使用printf语句实现进制转换的示例代码》在C语言中,printf函数可以直接实现部分进制转换功能,通过格式说明符(formatspecifier)快速输出不同进制的数值,下面给大家分享C+... 目录一、printf 原生支持的进制转换1. 十进制、八进制、十六进制转换2. 显示进制前缀3. 指

Python列表去重的4种核心方法与实战指南详解

《Python列表去重的4种核心方法与实战指南详解》在Python开发中,处理列表数据时经常需要去除重复元素,本文将详细介绍4种最实用的列表去重方法,有需要的小伙伴可以根据自己的需要进行选择... 目录方法1:集合(set)去重法(最快速)方法2:顺序遍历法(保持顺序)方法3:副本删除法(原地修改)方法4:

使用Python构建一个Hexo博客发布工具

《使用Python构建一个Hexo博客发布工具》虽然Hexo的命令行工具非常强大,但对于日常的博客撰写和发布过程,我总觉得缺少一个直观的图形界面来简化操作,下面我们就来看看如何使用Python构建一个... 目录引言Hexo博客系统简介设计需求技术选择代码实现主框架界面设计核心功能实现1. 发布文章2. 加

SpringBoot集成Milvus实现数据增删改查功能

《SpringBoot集成Milvus实现数据增删改查功能》milvus支持的语言比较多,支持python,Java,Go,node等开发语言,本文主要介绍如何使用Java语言,采用springboo... 目录1、Milvus基本概念2、添加maven依赖3、配置yml文件4、创建MilvusClient

python logging模块详解及其日志定时清理方式

《pythonlogging模块详解及其日志定时清理方式》:本文主要介绍pythonlogging模块详解及其日志定时清理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录python logging模块及日志定时清理1.创建logger对象2.logging.basicCo