拓扑园

  • O&M
    • Universal部署
    • PHP+VUE+Laravel相关
  • Oracle性能优化
  • Oracle项目案例
    • Oracle近期项目案例(目录)
    • Oracle实战问题解析(目录)
    • Oracle数据库名变更流程(2种方式)
    • Oracle数据库目录更换流程(使用Oracle的clone工具)
    • Oracle数据库迁移方案(目录)
    • 标准化文档系列
  • Oracle基础知识
    • LLL的Oracle培训(分类)
    • LLL的docker培训(分类)
    • 标准化文档系列--(分类)
    • Oracle核心经典分析(分类)
    • 图灵小队----(分类并包含以下文章)
    • --MySQL8.0/Oracle/Memcached/Redis等安装配置于RHEL/OL6/7/8.X系列-运行环境最优配置
    • --PG安装配置于RHEL/9X系列-运行环境最优配置
    • --自动维护任务详解-开启、关闭信息统计收集(统计信息)
    • --图灵小队—Oracle/PostgreSQL下创建一个用户测试表(自行定义数据行)
    • --图灵小队-Oracle存储过程导出表的明细_UTL_FILE(文章)
    • --图灵小队-Oracle数据库删除/卸载操作指南(文章)
    • --图灵小队-Oracle常用性能查询SQL语句(文章)
    • --图灵小队-Oracle数据库上线前检查(文章)
    • --图灵小队-Oracle常用SQL语句(文章)
    • --图灵小队—Linux/Oracle脚本/MySQL合集(持续更新)
    • --图灵小队-Oracle技巧记录(文章)
    • ADG
    • RAC
    • ASM
    • OGG
    • RMAN
    • EXPDP/IMPDP
    • 工厂数据导入导出系列
  • MySQL
    • MySQL数据库规范
    • MySQL项目案例
    • MySQL安装配置
    • MYSQL集群项目
    • MySQL常见处理
    • MySQL-Sysbench专题
    • MySQL-Percona Toolkit专题
  • Linux
    • Shell编程
    • kubernetes
    • docker
    • Linux
    • PHP
    • Nginx
    • haproxy
    • mail
    • 网站
    • 域名
    • 网址收藏
  • 数据中心
    • 新框架系统集合
    • 工作文档
    • EBS数据文件扩容
    • VMware虚拟化
    • EBS系列
    • 大数据
    • SVN
    • zabbix
    • SAP
    • 备份相关
    • FC交换机
    • SVN
  • K-Studing
    • D8-Python学习
    • Oracle/MySQl等面试题
    • LG-MySQL
    • LG-Docker/K8S
    • LG-PostgreSQL
    • LG-ORACLE_BBED
    • LG-ORACLE
    • LG-Elasticsearch(ES)+ELK
    • Oracle-19C-OCP
    • WERN_ORACLE培训
    • redis数据库
    • Nginx培训学习系列
  • 其他
    • 外研英语4年级下册-听力
    • 影视系列
    • 如何使用iTunes软件通过抓包下载旧版本的ios的app
天高任鸟飞
Oracle/MySQL数据库恢复/数据迁移/生产规范报告技术交流:TEL:18562510581(微信同号);加微信入群
  1. 首页
  2. Oracle基础知识
  3. 图灵小队
  4. 正文

图灵小队—Oracle 全局临时表和私有临时表_global Temporary Table+private temporary table

2022年7月20日 3069点热度 0人点赞 0条评论

目录

  • 一、全局临时表
    • 1、介绍
    • 2、建表语句
      • (1)事务级全局临时表创建语法
      • (2)基于会话方式创建全局临时表
    • 3、Temp Table 数据的时效性
      • (1)On Commit Delete Rows(默认) :
      • (2)On Commit Preserve Rows :
    • 4、关于drop 
      • (1)On Commit Delete Rows :
      • (2)On Commit Preserve Rows :
    • 5、Temp Table 的特点
  • 二、私有临时表
    • 1、私有临时表是18c新特性。
    • 2、私有临时表类别(跟全局临时表比较类似)
      • (1)事务私有临时表(on commit drop definition)
      • (2)会话私有临时表(on commit preserve definition)
  • 三、全局临时表和私有临时表对比

一、全局临时表

1、介绍

创建临时表时,Oracle只创建了表的结构(在数据字典中定义),并没有初始化内存空间,当某一会话使用临时表时,ORALCE会从当前用户的 临时表空间分配一块内存空间。也就是说只有向临时表中插入数据时,才会给临时表分配存储空间。

所有的操作都在一个事务里,事务提交后,此表清空,特别适合做插入删除频率特别高的临时表操作,比如插入完数据就开始查询,查询完就删掉等,用完就扔!

临时表分事务级临时表和会话级临时表。
事务级临时表只对当前事务有效,通过语句:ON COMMIT DELETE ROWS 指定。(默认) 
会话级临时表对当前会话有效,通过语句:ON COMMIT PRESERVE ROWS语句指定。

2、建表语句

(1)事务级全局临时表创建语法

create global temporary table t_global_temp(
a int
)
on commit delete rows;

创建全局临时表指定on commit delete rows一提交即清表,插入不提交即可查询到记录

(2)基于会话方式创建全局临时表

create global temporary table t_global_temp(
a int
)
on commit preserve rows;

创建全局临时表指定on commit preserve rows,这种临时表不占用表空间,而且不同的SESSION之间互相看不到对方的数据,在会话结束后表中的数据自动清空

3、Temp Table 数据的时效性

(1)On Commit Delete Rows(默认) :

数据在 Transaction 期间有效,一旦COMMIT后,数据就被自动 TRUNCATE 掉了;

(2)On Commit Preserve Rows :

数据在 Session 期间有效,一旦关闭了Session 或 Log Off 后,数据就被 ORACLE 自动 Truncate 掉。

注:这里要说明的是,ORACLE Truncate 掉的数据仅仅是分配给不同 Session 或 Transaction的 Temp Segment 上的数据,而不是将整张表数据 TRUNCATE 掉。

4、关于drop 

(1)On Commit Delete Rows :

随时可以drop;

(2)On Commit Preserve Rows :

只有所有的session下都没有数据了,才可以drop;

操作时是,在所有session下truncate数据,或者退出所有session,重新进入进行drop.

4、全局临时表的操作限制

(1) 不能分区,不能集簇化,不能iot化
(2) 不能指定外键约束
(3) 不能包含nested table column
(4) 不能指定lob_storage_clause的参数
(5) 不能启用并行update,delte,merge
(6) 在segment_atrributes_clause子句中,唯一可指定的参数是:tablespace
(7) 不支持分布式事务
(8)有数据的情况下不能添加列,无数据可以添加列

5、Temp Table 的特点

(1) 多用户操作的独立性:对于使用同一张临时表的不同用户,ORACLE都会分配一个独立的 Temp Segment,
这样就避免了多个用户在对同一张临时表操作时发生交叉,从而保证了多个用户操作的并发性和独立性;

(2) 数据的临时性:既然是临时表,顾名思义,存放在该表中的数据是临时性的。

ORACLE根据你创建临时表时指定的参数(On Commit Delete Rows / On Commit Preserve Rows),自动将数据TRUNCATE掉。

原文链接:https://blog.csdn.net/weixin_45233227/article/details/114115582

 

二、私有临时表

1、私有临时表是18c新特性。

Private temporary tables are temporary database objects that are automatically dropped at the end of a transaction or a session. A private temporary table is stored in memory and is visible only to the session that created it.

A private temporary table confines the scope of a temporary table to a session or a transaction, thus providing more flexibility in application coding, leading to easier code maintenance and a better ready-to-use functionality.

私有临时表是数据库的临时对象,私有临时表在事务或者会话结束后被自动drop掉。

私有临时表定义在内存中,只能被创建他的会话看见该表的定义和数据。

By default, rows in a private temporary table are stored in the default temporary tablespace of the user who creates it. However, you can assign a private temporary table to another temporary tablespace during the creation of the temporary table by using the TABLESPACE clause of CREATE PRIVATE TEMPORARY TABLE statement.

私有临时表存储在临时表空间中。

2、私有临时表类别(跟全局临时表比较类似)

(1)事务私有临时表(on commit drop definition)

在事务结束后drop掉私有事务临时表。

语法:create private temporary table ORA$PTT_tab1(a number) on commit drop definition;

(2)会话私有临时表(on commit preserve definition)

当会话结束时,drop掉私有会话临时表

语法:CREATE PRIVATE TEMPORARY TABLE ORA$PTT_tab2(id number) ON COMMIT PRESERVE DEFINITION;

三、全局临时表和私有临时表对比

 

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: 暂无
最后更新:2022年8月1日

admin

这个人很懒,什么都没留下

打赏 点赞
< 上一篇
下一篇 >

COPYRIGHT © 2022 拓扑园. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

鲁ICP备2021020523号

鲁ICP备2021020523号