iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >【TEMPORARY TABLE】Oracle临时表使用注意事项
  • 527
分享到

【TEMPORARY TABLE】Oracle临时表使用注意事项

2023-06-06 04:06:02 527人浏览 泡泡鱼
摘要

  此文将给出在使用oracle临时表的过程中需要注意的事项,并对这些特点进行验证。  ①临时表不支持物化视图  ②可以在临时表上创建索引  ③可以基于临时表创建视图  ④临时表结构可被导出

  此文将给出在使用oracle临时表的过程中需要注意的事项,并对这些特点进行验证。
  临时表不支持物化视图
  可以在临时表上创建索引
 
可以基于临时表创建视图
 
临时表结构可被导出,但内容不可以被导出
 
临时表通常是创建在用户的临时表空间中的,不同用户可以有自己的独立的临时表空间
 
不同的session不可以互相访问对方的临时表数据
  临时表数据将不会上DML(Data Manipulation Language)


1.
临时表不支持物化视图
1)环境准备
(1)创建基于会话的临时表
sec@ora10g> create global temporary table t_temp_session (x int) on commit preserve rows;

Table created.

sec@ora10g> col TABLE_NAME for a30
sec@ora10g> col TEMPORARY for a10
sec@ora10g> select TABLE_NAME,TEMPORARY from user_tables where table_name = 'T_TEMP_SESSION';

TABLE_NAME                     TEMPORARY
------------------------------ ----------
T_TEMP_SESSION                 Y

(2)初始化两条数据
sec@ora10g> insert into t_temp_session values (1);

1 row created.

sec@ora10g> insert into t_temp_session values (2);

1 row created.

sec@ora10g> commit;

Commit complete.

sec@ora10g> select * from t_temp_session;

         X
----------
         1
         2

(3)在临时表
T_TEMP_SESSION上添加主键
sec@ora10g> alter table T_TEMP_SESSION add constraint PK_T_TEMP_SESSION primary key(x);

Table altered.

2)在临时表T_TEMP_SESSION上创建物化视图
(1)创建物化视图日志日志
sec@ora10g> create materialized view log on T_TEMP_SESSION with sequence, rowid (x) including new values;
create materialized view log on T_TEMP_SESSION with sequence, rowid (x) including new values
*
ERROR at line 1:
ORA-14451: unsupported feature with temporary table

可见,在创建物化视图时便提示,临时表上无法创建物化视图日志。

(2)创建物化视图
sec@ora10g> create materialized view mv_T_TEMP_SESSION build immediate refresh fast on commit enable query rewrite as select * from T_TEMP_SESSION;
create materialized view mv_T_TEMP_SESSION build immediate refresh fast on commit enable query rewrite as select * from T_TEMP_SESSION
                                                                                                                        *
ERROR at line 1:
ORA-23413: table "SEC"."T_TEMP_SESSION" does not have a materialized view log

由于物化视图日志没有创建成功,因此显然物化视图亦无法创建。

2.在临时表上创建索引
sec@ora10g> create index i_t_temp_session on t_temp_session (x);

Index created.

临时表上索引创建成功。

3.基于临时表创建视图
sec@ora10g> create view v_t_temp_session as select * from t_temp_session where x<100;

View created.

基于临时表的视图创建成功。

4.临时表结构可被导出,但内容不可以被导出
1)使用exp工具备份临时表
ora10g@secdb /home/oracle$ exp sec/sec file=t_temp_session.dmp log=t_temp_session.log tables=t_temp_session

Export: Release 10.2.0.1.0 - Production on Wed Jun 29 22:06:43 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
Export done in WE8ISO8859P1 character set and AL16UTF16 NCHAR character set

About to export specified tables via Conventional Path ...
. . exporting table                 T_TEMP_SESSION
Export terminated successfully without warnings.


可见在备份过程中,没有显示有数据被导出。

2)使用imp工具的show选项查看备份介质中的sql内容
ora10g@secdb /home/oracle$ imp sec/sec file=t_temp_session.dmp full=y show=y

Import: Release 10.2.0.1.0 - Production on Wed Jun 29 22:06:57 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

Export file created by EXPORT:V10.02.01 via conventional path
import done in WE8ISO8859P1 character set and AL16UTF16 NCHAR character set
. importing SEC's objects into SEC
. importing SEC's objects into SEC
 "CREATE GLOBAL TEMPORARY TABLE "T_TEMP_SESSION" ("X" NUMBER(*,0)) ON COMMIT "
 "PRESERVE ROWS "
 "CREATE INDEX "I_T_TEMP_SESSION" ON "T_TEMP_SESSION" ("X" ) "
Import terminated successfully without warnings.


这里体现了创建临时表和索引的语句,因此临时表的结构数据是可以被导出的。

3)尝试导入数据
ora10g@secdb /home/oracle$ imp sec/sec file=t_temp_session.dmp full=y ignore=y

Import: Release 10.2.0.1.0 - Production on Wed Jun 29 22:07:16 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

Export file created by EXPORT:V10.02.01 via conventional path
import done in WE8ISO8859P1 character set and AL16UTF16 NCHAR character set
. importing SEC's objects into SEC
. importing SEC's objects into SEC
Import terminated successfully without warnings.

依然显示没有记录被导入。

5.查看临时表空间的使用情况
可以通过查询V$SORT_USAGE视图获得相关信息。
sec@ora10g> select username,tablespace,session_num sid,sqladdr,sqlhash,segtype,extents,blocks from v$sort_usage;

USERNAME TABLESPACE     SID SQLADDR     SQLHASH SEGTYPE EXTENTS  BLOCKS
-------- ---------- ------- -------- ---------- ------- ------- -------
SEC      TEMP           370 389AEC58 1029988163 DATA          1     128
SEC      TEMP           370 389AEC58 1029988163 INDEX         1     128

可见SEC用户中创建的临时表以及其上的索引均存放在TEMP临时表空间中。
在创建用户的时候,可以指定用户的默认临时表空间,这样不同用户在创建临时表的时候便可以使用各自的临时表空间,互不干扰。

6.不同的session不可以互相访问对方的临时表数据
1)在第一个session中查看临时表数据
sec@ora10g> select * from t_temp_session;

         X
----------
         1
         2

此数据为初始化环境时候插入的数据。

2)在单独开启一个session,查看临时表数据。
ora10g@secdb /home/oracle$ sqlplus sec/sec

SQL*Plus: Release 10.2.0.1.0 - Production on Wed Jun 29 22:30:05 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

sec@ora10g> select * from t_temp_session;

no rows selected

说明不同的session拥有各自独立的临时表操作特点,不同的session之间是不能互相访问数据。

7.临时表数据将不会上DML(Data Manipulation Language)锁
1)在新session中查看SEC用户下锁信息
sec@ora10g> col username for a8
sec@ora10g> select
  2       b.username,
  3       a.sid,
  4       b.serial#,
  5       a.type "lock type",
  6       a.id1,
  7       a.id2,
  8       a.lmode
  9  from v$lock a, v$session b
 10  where a.sid=b.sid and b.username = 'SEC'
 11  order by username,a.sid,serial#,a.type;

no rows selected

不存在任何锁信息。

2)向临时表中插入数据,查看锁信息
(1)插入数据
sec@ora10g> insert into t_temp_session values (1);

1 row created.

(2)查看锁信息
sec@ora10g> select
  2       b.username,
  3       a.sid,
  4       b.serial#,
  5       a.type "lock type",
  6       a.id1,
  7       a.id2,
  8       a.lmode
  9  from v$lock a, v$session b
 10  where a.sid=b.sid and b.username = 'SEC'
 11  order by username,a.sid,serial#,a.type;

                               lock                                lock
USERNAME        SID    SERIAL# type           id1         id2      mode
-------- ---------- ---------- ------ ----------- ----------- ---------
SEC             142        425 TO           12125           1         3
SEC             142        425 TX           65554         446         6

此时出现TO和TX类型锁。

(3)提交数据后再次查看锁信息
sec@ora10g> commit;

Commit complete.

sec@ora10g> select
  2       b.username,
  3       a.sid,
  4       b.serial#,
  5       a.type "lock type",
  6       a.id1,
  7       a.id2,
  8       a.lmode
  9  from v$lock a, v$session b
 10  where a.sid=b.sid and b.username = 'SEC'
 11  order by username,a.sid,serial#,a.type;

                               lock                                lock
USERNAME        SID    SERIAL# type           id1         id2      mode
-------- ---------- ---------- ------ ----------- ----------- ---------
SEC             142        425 TO           12125           1         3

事务所TX被释放。TO锁保留。

3)测试更新数据场景下锁信息变化
(1)更新临时表数据
sec@ora10g> update t_temp_session set x=100;

1 row updated.

(2)锁信息如下
                               lock                                lock
USERNAME        SID    SERIAL# type           id1         id2      mode
-------- ---------- ---------- ------ ----------- ----------- ---------
SEC             142        425 TO           12125           1         3
SEC             142        425 TX          524317         464         6

(3)提交数据
sec@ora10g> commit;

Commit complete.

(4)锁信息情况
                               lock                                lock
USERNAME        SID    SERIAL# type           id1         id2      mode
-------- ---------- ---------- ------ ----------- ----------- ---------
SEC             142        425 TO           12125           1         3

4)测试删除数据场景下锁信息变化
(1)删除临时表数据
sec@ora10g> delete from t_temp_session;

1 row deleted.

(2)查看锁信息
                               lock                                lock
USERNAME        SID    SERIAL# type           id1         id2      mode
-------- ---------- ---------- ------ ----------- ----------- ---------
SEC             142        425 TO           12125           1         3
SEC             142        425 TX          327713         462         6

(3)提交数据
sec@ora10g> commit;

Commit complete.

(4)锁信息情况
                               lock                                lock
USERNAME        SID    SERIAL# type           id1         id2      mode
-------- ---------- ---------- ------ ----------- ----------- ---------
SEC             142        425 TO           12125           1         3

5)总结
在临时表上的增删改等DML操作都会产生TO锁和TX事务所。TO锁会从插入数据开始一直存在。
但整个过程中都不会产生DML的TM级别锁。

8.小结
  本文就临时表使用过程中常见的问题和特点进行了介绍。临时表作为Oracle的数据库对象,如果能够在理解这些特性基础上加以利用将会极大地改善系统性能。

Good luck.

secooler
11.06.29

-- The End --

--结束END--

本文标题: 【TEMPORARY TABLE】Oracle临时表使用注意事项

本文链接: https://www.lsjlt.com/news/246061.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 【TEMPORARY TABLE】Oracle临时表使用注意事项
      此文将给出在使用Oracle临时表的过程中需要注意的事项,并对这些特点进行验证。  ①临时表不支持物化视图  ②可以在临时表上创建索引  ③可以基于临时表创建视图  ④临时表结构可被导出...
    99+
    2023-06-06
  • Spark临时表tempView的注册/使用/注销/注意事项(推荐)
    目录createTempView运作原理低效做法缓存临时表方式:方式1 创建方式2方式3临时表生命周期createTempView运作原理 先说一个众人皆知的知识:Spark中的算子包含transformation算子和...
    99+
    2022-10-18
  • 关于replaceFirst使用时的注意事项
    目录replaceFirst使用时的注意事项坑一坑二String类的replaceFirst方法不好用的原因代码一代码二replaceFirst使用时的注意事项 公司项目最近有一个开...
    99+
    2022-11-13
  • 使用FlexSDK4时注意事项有哪些
    这篇文章将为大家详细讲解有关使用FlexSDK4时注意事项有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。使用FlexSDK4注意事项TWaverFlex是支持SDK4的,FlexSDK4新增了Spa...
    99+
    2023-06-17
  • 使用Oracle Nologging+Append注意事项是什么
    本篇内容介绍了“使用Oracle Nologging+Append注意事项是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细...
    99+
    2022-10-18
  • replaceFirst使用时的注意事项有哪些
    这篇文章主要介绍了replaceFirst使用时的注意事项有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。replaceFirst使用时的注意事项公司项目最近有一个开发填...
    99+
    2023-06-29
  • 详解Android Service 使用时的注意事项
    最近有个项目刚好使用了Service,特别是AIDL远程服务,经过这次项目对Service有了更好的理解,在这里作个总结。startService / bindService 混合使用 每一次调用 startService 都会回调onS...
    99+
    2023-05-30
    android service roi
  • PHP使用PHPMailer发送邮件时注意事项和注意点
    PHP是一种强大的编程语言,通过它我们可以构建出各种应用程序,其中邮件发送应用是很重要的一个。PHPMailer是PHP中用来发送邮件的一个第三方库,它在使用上非常简单,而且功能也非常强大。但是,在发送邮件的过程中,我们还是需要注意一些事项...
    99+
    2023-05-21
    PHPMailer 注意事项 发送邮件
  • Lambda表达式的使用及注意事项
    目录Lambda表达式的使用Lambda表达式的省略模式Lambda使用注意事项Lambda表达式和匿名内部类的区别Lambda表达式的使用 练习: 定义一个接口flyable,里面...
    99+
    2022-11-13
  • MySQL使用Amoeba作为Proxy时的注意事项
    (1).Amoeba不支持事务 目前Amoeba不支持事务,任何有关事务的SQL语句都会被Amoeba屏蔽掉。如果必须使用事务,而且事务内的处理操作都可以路由到同一台MySQL上的话,可以考虑在存储过程中使...
    99+
    2022-10-18
  • mysql使用索引时的注意事项有哪些
    mysql使用索引时的注意事项有哪些?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!mysql使用索引时需要注意:1、列中含...
    99+
    2022-10-18
  • 使用MySQL时有哪些必须注意的事项
    下文主要给大家带来使用MySQL时有哪些必须注意的事项,希望这些内容能够带给大家实际用处,这也是我编辑使用MySQL时有哪些必须注意的事项这篇文章的主要目的。好了,废话不多说,大家直接看下文吧。 ...
    99+
    2022-10-18
  • 使用Flex SDK4时必须注意事项有哪些
    这篇文章将为大家详细讲解有关使用Flex SDK4时必须注意事项有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。使用Flex SDK4 注意事项 TWaverFlex是支持SDK4的,Flex SDK...
    99+
    2023-06-17
  • 在python中使用集合时需要注意的事项
    这篇文章将为大家详细讲解有关在python中使用集合时需要注意的事项,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语...
    99+
    2023-06-14
  • 在python中使用lxml时需要注意哪些事项
    这篇文章将为大家详细讲解有关在python中使用lxml时需要注意哪些事项,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。python主要应用领域有哪些1、云计算,典型应用OpenStack。...
    99+
    2023-06-14
  • 在python中使用yield时需要注意哪些事项
    在python中使用yield时需要注意哪些事项?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语言相比...
    99+
    2023-06-14
  • 使用Seek method做分页时offset predicate的注意事项
    Seek method pagination是最近流行的分页概念。其核心思想是:不再依赖index作为偏移量,而是使用条件表达式作为分页的依据。具体原理我在这里就不再废话了,感兴趣的朋友可以去搜一搜。由于“...
    99+
    2022-10-18
  • 使用香港服务器时要注意哪些事项
    使用香港服务器时要注意的事项有:1、注意修改服务器远程信息,如用户名及密码,以提高服务器的安全;2、配置防火墙和安装病毒防御软件,关闭不常用的端口,放行自己的业务端口;3、使用香港服务器前认真阅读服务器注意事项,以确保自身的利益。具体内容如...
    99+
    2022-10-07
  • 六个Java集合使用时需要注意的事项
    目录1.集合判空2.集合转 Map3.集合遍历4.集合去重5.集合转数组6.数组转集合1.集合判空 判断所有集合内部的元素是否为空,使用 isEmpty() 方法,而不是 size(...
    99+
    2023-01-29
    Java集合使用 Java集合
  • 在java中使用final时需要注意哪些事项
    在java中使用final时需要注意哪些事项?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java的特点有哪些Java的特点有哪些1.Java语言作为静态面向对象编程语言的代表...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作