临时表空间主要用途是在数据库进行排序运算[如创建索引、order by及group by、distinct、union/intersect/minus/、sort-merge及join、analyze命令]、管理索引[如创建索引、IMP进行数据导入]、访问视图等操作时提供临时的运算空间,当运算完成之后系统会自动清理。

当临时表空间不足时,表现为运算速度异常的慢,并且临时表空间迅速增长到最大空间(扩展的极限),并且一般不会自动清理了。

如果临时表空间没有设置为自动扩展,则临时表空间不够时事务执行将会报ora-01652 无法扩展临时段的错误,当然解决方法也很简单:1、设置临时数据文件自动扩展,或者2、增大临时表空间。

临时表空间的相关操作:

查询默认临时表空间:

SQL> select * from database_properties where property_name=’DEFAULT_TEMP_TABLESPACE’;

PROPERTY_NAME

——————————

PROPERTY_VALUE

——————————————————————————–

DESCRIPTION

——————————————————————————–

DEFAULT_TEMP_TABLESPACE

TEMP

Name of default temporary tablespace

查询临时表空间状态:

SQL> select tablespace_name,file_name,bytes/1024/1024 file_size,autoextensible from dba_temp_files;

TABLESPACE_NAME

——————————

FILE_NAME

——————————————————————————–

FILE_SIZE AUT

———- —

TEMP

/u01/app/oracle/oradata/orcl/temp01.dbf

100 YES

扩展临时表空间:

方法一、增大临时文件大小:

SQL> alter database tempfile ‘/u01/app/oracle/oradata/orcl/temp01.dbf’ resize 100m;

Database altered.

方法二、将临时数据文件设为自动扩展:

SQL> alter database tempfile ‘/u01/app/oracle/oradata/orcl/temp01.dbf’ autoextend on next 5m maxsize unlimited;

Database altered.

方法三、向临时表空间中添加数据文件:

SQL> alter tablespace temp add tempfile ‘/u01/app/oracle/oradata/orcl/temp02.dbf’ size 100m;

Tablespace altered.

删除临时表空间的一个数据文件:

SQL> alter database tempfile ‘/u01/app/oracle/oradata/orcl/temp02.dbf’ drop;

Database altered.

删除临时表空间(彻底删除):

SQL> drop tablespace temp1 including contents and datafiles cascade constraints;

Tablespace dropped.

创建临时表空间:

SQL> create temporary tablespace temp1 tempfile ‘/u01/app/oracle/oradata/orcl/temp11.dbf’ size 10M;

Tablespace created.

更改系统的默认临时表空间:

SQL> alter database default temporary tablespace temp1;

Database altered.

所有用户的默认临时表空间都将切换为新的临时表空间:

SQL> select username,temporary_tablespace,default_ from dba_users;

USERNAME TEMPORARY_TABLESPACE

—————————— ——————————

MGMT_VIEW TEMP1

SYS TEMP1

SYSTEM TEMP1

DBSNMP TEMP1

SYSMAN TEMP1

SCOTT TEMP1

OUTLN TEMP1

MDSYS TEMP1

ORDSYS TEMP1

EXFSYS TEMP1

DMSYS TEMP1

USERNAME TEMPORARY_TABLESPACE

—————————— ——————————

WMSYS TEMP1

CTXSYS TEMP1

ANONYMOUS TEMP1

XDB TEMP1

ORDPLUGINS TEMP1

SI_INFORMTN_SCHEMA TEMP1

OLAPSYS TEMP1

ORACLE_OCM TEMP1

TSMSYS TEMP1

BI TEMP1

PM TEMP1

更改某一用户的临时表空间:

SQL> alter user scott temporary tablespace temp;

User altered.

SQL> select username,temporary_tablespace from dba_users;

USERNAME TEMPORARY_TABLESPACE

—————————— ——————————

MGMT_VIEW TEMP1

SYS TEMP1

SYSTEM TEMP1

DBSNMP TEMP1

SYSMAN TEMP1

SCOTT TEMP

OUTLN TEMP1

MDSYS TEMP1

ORDSYS TEMP1

EXFSYS TEMP1

DMSYS TEMP1

USERNAME TEMPORARY_TABLESPACE

—————————— ——————————

WMSYS TEMP1

CTXSYS TEMP1

ANONYMOUS TEMP1

XDB TEMP1

ORDPLUGINS TEMP1

SI_INFORMTN_SCHEMA TEMP1

OLAPSYS TEMP1

ORACLE_OCM TEMP1

TSMSYS TEMP1

BI TEMP1

PM TEMP1

USERNAME TEMPORARY_TABLESPACE

—————————— ——————————

MDDATA TEMP1

IX TEMP1

SH TEMP1

DIP TEMP1

OE TEMP1

HR TEMP1

28 rows selected.

**************************************************************************************

Oracle临时表空间主要用来做查询和存放一些缓冲区数据。临时表空间消耗的主要原因是需要对查询的中间结果进行排序。 重启数据库可以释放临时表空间,如果不能重启实例,而一直保持问题sql语句的执行,temp表空间会一直增长。直到耗尽硬盘空间。 网上有人猜测在磁盘空间的分配上,oracle使用的是贪心算法,如果上次磁盘空间消耗达到1GB,那么临时表空间就是1GB。也就是说当前临时表空间文件的大小是历史上使用临时表空间最大的大小。 临时表空间的主要作用: 索引create或rebuild Order by 或 group by Distinct 操作 Union 或 intersect 或 minus Sort-merge joins analyze

***************************************************************************************

在Oracle数据库中进行排序、分组汇总、索引等到作时,会产生许多的临时数据。如有一张员工内容表,数据库中是安装记录建立的时间来保存的。如果用户查询时,使用Order BY排序语句指定按员工编号来排序,那么排序后产生的所有记录就是临时数据。对于这些临时数据,Oracle数据库是如何处理的呢?

通常情况下,Oracle数据库会先将这些临时数据存放到内存的PGA(程序全 局区)内。在这个程序全局区中有一个啼做排序区的地方,专门用来存放这些因为排序操作而产生的临时数据。但是这个分区的容量是有限的。当这个分区的大小不 足以容纳排序后所产生的记录时,数据库系统就会将临时数据存放到临时表空间中。这就是临时表空间的来历。看起来好像这个临时表空间是个临时工,对于数据库 的影响不会有多大。其实大家这是误解这个临时表空间了。在用户进行数据库操作时,排序、分组汇总、索引这些作业是少不了,其会产生大量的临时数据。为此基 本上每个数据库都需要用到临时表空间。而如果这个临时表空间设置不当的话,则会给数据库功能带来很大的负面影响。为此管理员在维护这个临时表空间的时候, 不能够掉以轻心。要避免因为临时表空间设置不当影响数据库的功能。具体来说,主要需要注视如下几个方面的内容。

一、创建用户时要记得为用户创建临时表空间。

最好在创建用户时为用户指定临时表空间。如可以利用语句default temporary table space语句来为数据库设置默认的临时表空间。不过在Oracle数据库中这个不是强制的。但是笔者强烈建议这么做。因为如果没有为用户指定默认临时表 空间的话,那么当这个用户因为排序等操作需要使用到临时表空间的话,数据库系统就会“自作聪明”的利用系统表空间SYSTEM来创建临时段。众所周知,这 是一个系统表空间。总因为在这个表空间中存放着系统运行相关的数据,特别的建议是用户的数据不能够保存在这个表空间中。那么如果将用户的临时表空间防止在 这个系统表空间之内,会产生什么负面影响呢?

总因为临时表空间中的数据是临时的。为此数据库系统需要频繁的分配和释放临时 段。这些频繁的操作会在系统表空间中产生大量的存储碎片。当这些存储碎片比较多时,就会影响系统读取硬盘的效率,从而影响数据库的功能。其次系统表空间的 大小往往是有限制的。此时临时段也来插一脚,就会占用系统表空间的大小。

为此数据库管理员需要注视一点,当没有为用户指定临时表空间时,用户排序等操作 仍然需要用到临时段。此时数据库系统就会将临时段放入到系统表空间中。为此就会对数据库的功能产生不利的影响。所以笔者建议各位读者与数据库管理员,在创 建用户的时候同时为用户指定一个默认的表空间,以减少临时段对系统表空间的占用。

二、合理设置PGA,减少临时表空间使用的几率。

当排序操作产生临时数据时,数据库并不是立即将其存储在临时表空间中。通常情况 下,会先将这些临时数据存储在内存的PGA程序全局区内。只有当这个程序全局区无法容纳全部数据时,数据库系统才会启用临时表空间中的临时段来保存这些数 据。但是众所周知,操作系统从内存中读取数据要比从硬盘中读取数据块几千倍。为此比较理想的情况是,这个程序全局区足够的大,可以容纳所有的临时数据。此 时数据库系统就永遥用不到临时表空间了。从而可以提高数据库的功能。 网站建设 Www.Cx-Web.Com

但是这毕竟只是一个理想。总因为内存大小等多方面的限制,这个PGA程序区的大 小往往是有限制的。所以在进行一些大型的排序操作时,这个临时表空间仍然少不了。如今数据库管理员可以做的就是合理设置这个PGA程序全局区的大小,尽量 减少临时表空间使用的几率。如在实际工作中,数据库管理员可以根据需要来设置初始化参数SORT_AREA_SIZE参数。这个参数主要控制这个PGA程 序全局区内排序区的大小。通常情况下,如果这个数据库系统主要用来查询并且需要大量的排序、分组汇总、索引等操作时,那么可以合适调整这个参数,来扩大 PGA分区的大小。相反,如果这个系统主要用于升级操作,或者在这个数据库服务器上还部署由其他的应用程序,那么这个PGA分区就不能够占用太多的内存, 以防止对其他应用程序产生不利的影响。所以说,数据库官员不能够一刀切,需要根据实际情况来调整。在必要的情况下,可以增添系统内存来增添PGA分区的大 小,从而降低临时表空间的使用几率,以提高数据库的排序、分组汇总等操作的功能。 BaiKe.Cx-Web.Com

总之,如果临时段被频繁使用的话,总因为内存与硬盘在功能上的差异,从而会降低 数据库的功能。为此在平时工作中,数据库管理员还需要监控临时表空间的使用情况,以判断是否需要采取措施来减少临时表空间的使用来提高数据库的查询功能。 为了实现这个目的,笔者建议数据库管理员可以查看 v$sort_segment这张动态功能视图。通过这张动态功能视图可以查看系统排序段(临时段的一种)的使用情况。另外通过动态功能视图 v$sort_usage还可以查询使用排序段的用户与会话内容。从而为数据库管理员优化数据库功能提供数据上的支持。对于这个排序段,笔者还要说明一 点。对于排序段来说,同一个例程的所有SQL语句(如果需要排序操作的话)都将共享同一个排序段。并且排序段在第一次需要用到时被创建。排序完成后这个排 序段不会被释放,只有在这个历程关闭后排序段才会被释放。为此以上两张视图要综合起来分析,才能够得到数据库管理员想要的内容。

三、要为临时表空间保留足够的硬盘空间。 网站设计,Www.Cx-Web.Com

其他表空间对应的数据文件,在其创建时就会被完全分配和初始化,即在其创建时就 会被分配存储空间。但是临时表空间对应的临时文件则不同。如在 Linux操作系统中,临时表空间创建时系统是不会分配和初始化临时文件的。也就是说,不会为临时文件分配存储空间。只有临时数据出现需要用到临时文件的 时候,系统才会在硬盘上分配一块地方用来保存临时文件。此时就可能会产生一个问题,即当需要用到临时文件系统为其分配空间的时候,才会先系统分区中没有足 够的存储空间了。此时就会产生一些难以预料的后果。 网站建设

为此对于这些临时文件,数据库管理员最好能够预先为其保留足够的空间。如在 Linux操作系统中,可以将其防止在一个独立的分区内,不允许其他应用程序使用。如此的话,就不用担忧临时文件没有地方存储了。另外总因为临时表空间主 要用来存放一些排序用的临时文件。为此如果能够将这个临时表空间存放在功能比较好的分区中,还可以提高数据库系统读取临时表空间中数据的速度。另外总因为 系统需要频繁分配临时表空间中的数据,为此临时表空间所在的分区会出现比较多的碎片。此时如果将临时表空间存放在一个独立的分区内,那么数据库管理员就可 以单独对这个分区进行碎片整理,从而提高这个分区的功能。所以无论出于什么原因,将临时表空间防止在一个独立的分区内,是一个不错的想法。不仅可以保证临 时文件有存储的空间,而且还可以提高数据库的功能。 BaiKe.Cx-Web.Com

对于临时表空间最后需要说明的是,默认情况下这个临时表空间对各个用户都是共享的。也就是说每个连接到数据库的用户都可以使用默认的临时表空间。数据库管理员可以为其指定其他的临时表空间。特别来说,只需要一个临时表空间即可。

[Oracle] 中的Temporary tablespace的作用的更多相关文章

  1. Oracle中的Temporary tablespace的作用

    临时表空间主要用途是在数据库进行排序运算[如创建索引.order by及group by.distinct.union/intersect/minus/.sort-merge及join.analyze ...

  2. Oracle中index by binary_integer的作用

    如语句:type  numbers  is table of number index by binary_integer;其作用是,加了”index by binary_integer ”后,num ...

  3. oracle中的minus数据比对

    1.要有唯一索引或者主键作为前提,减少数据冲突的数量,如示例标红的地方:   2.当有in查询的时候,尽量用exists,这样能提高查询效率: create table TF_F_USER_DIFF1 ...

  4. Oracle中SYS_CONNECT_BY_PATH函数的使用

    在Oracle中,SYS_CONNECT_BY_PATH函数主要作用是可以把一个父节点下的所有子节点通过某个字符进行区分,然后连接在一个列中显示. sys_connect_by_path(字段名, 2 ...

  5. oracle数据库中的trim不起作用

    在项目中使用datastage软件将sqlserver数据库的数据导入到oracle中的时候,出现了一些空格,然而使用trim相对应的字段发现没有作用,空格还存在,并没有去掉. 使用length(.. ...

  6. ||在oracle数据库中起到字符串拼接的作用

    例子:select org.id from org where inner_code like '12011601001' || '%' ||在oracle数据库中起到字符串拼接的作用,上面等同于'1 ...

  7. oracle中的表空间(tablespace)、方案(schema)、段(segment)、区(extent)、块(block)

    数据文件和日志文件是数据库中最重要的文件.它们是数据存储的地方.每个数据库至少有一个与之相关的数据文件,通常情况下不只一个,有很多.数据在数据文件中是如何组织的?要了解这些内容我们首先必须理解什么是表 ...

  8. Oracle中用户的基本操作

    创建用户 1.首先登陆到系统用户sys(sys用户具有创建用户的权限). 2.然后在代码编辑框写入创建用户的代码. 语法:CREATE USER user_name IDENTIFIED BY pas ...

  9. 【RMAN】Oracle中如何备份控制文件?备份控制文件的方式有哪几种?

    真题1. 如何备份控制文件?备份控制文件的方式有哪几种? 答案:备份控制文件的方式有多种. ① 备份控制文件可以在线进行: SQL> ALTER DATABASE BACKUP CONTROLF ...

随机推荐

  1. NotifyIcon用法

    -------------------控件NotifyIcon-----------//客户端调用 private void btnShowError_Click(object sender, Eve ...

  2. Hadoop学习3--安装ssh服务

    题前语:为什么要安装这个东西呢? 是因为我们要在多台机器之间通信,这个服务就相当于支持这种通信的一个桥梁,打个比喻,相当于windows里,通过远程桌面连接到其他机器. 所以,安装这个服务,的目的是: ...

  3. Hive架构及Hive On Spark

    Hive的所有数据都存在HDFS中. (1)Table:每个表都对应在HDFS中的目录下,数据是经过序列化后存储在该目录中.同时Hive也支持表中的数据存储在其他类型的文件系统中,如NFS或本地文件系 ...

  4. DBA_Oracle Erp中某个Form需进行升级Patch详解(案例)

    2014-06-21 Created By BaoXinjian

  5. CF109 C. Lucky Tree 并查集

    Petya loves lucky numbers. We all know that lucky numbers are the positive integers whose decimal re ...

  6. Linux命令(20)查看当前网速

    Linux查看网络即时网速 sar -n DEV 1 100 1代表一秒统计并显示一次 100代表统计一百次 还可以使用ntop工具

  7. 手动编译Jsp文件

    手动模拟Tomcat编译jsp文件 Tomcat编译jsp文件的配置路径是在%tomcat_home%/conf/web.xml中,有这样一段代码 <servlet> <servle ...

  8. ssh 连接ubuntu的虚拟机问题

    我在winxp的虚拟机上装了一个ubuntu9.04的系统,winxp的ip为10.118.62.157,ubuntu的ip为192.168.116.1 两个ip互相ping都是正常的,但是,我在wi ...

  9. HTTP Response中的Status-Code

    1XX : 通知信息.请求被接收,继续处理2XX : 成功.请求动作被成功接收.理解和接受3XX : 重定向.需要其他的动作来完成这个请求4XX : 客户端错误.请求包含错误的语法或者缺少语法5XX  ...

  10. nbIoT基础概念

    1. 物理信道(L1与L2之间) 上行:PRACH.PUSCH 下行:PBCH.PDCCH.PDSCH 2.逻辑信道(L2与L3之间) CCCH.DCCH.DTCH 3.信令(L3与NAS层之间) D ...