Oracle临时表和临时表空间组
ORACLE临时表空间总结
ORACLE临时表空间总结临时表空间概念临时表空间⽤来管理数据库排序操作以及⽤于存储临时表、中间排序结果等临时对象,当ORACLE⾥需要⽤到SORT的时候,并且当PGA中sort_area_size⼤⼩不够时,将会把数据放⼊临时表空间⾥进⾏排序。
像数据库中⼀些操作: CREATE INDEX、 ANALYZE、SELECT DISTINCT、ORDER BY、GROUP BY、 UNION ALL、 INTERSECT、MINUS、SORT-MERGE JOINS、HASH JOIN等都可能会⽤到临时表空间。
当操作完成后,系统会⾃动清理临时表空间中的临时对象,⾃动释放临时段。
这⾥的释放只是标记为空闲、可以重⽤,其实实质占⽤的磁盘空间并没有真正释放。
这也是临时表空间有时会不断增⼤的原因。
临时表空间存储⼤规模排序操作(⼩规模排序操作会直接在RAM⾥完成,⼤规模排序才需要磁盘排序Disk Sort)和散列操作的中间结果.它跟永久表空间不同的地⽅在于它由临时数据⽂件(temporary files)组成的,⽽不是永久数据⽂件(datafiles)。
临时表空间不会存储永久类型的对象,所以它不会也不需要备份。
另外,对临时数据⽂件的操作不产⽣redo⽇志,不过会⽣成undo⽇志。
创建临时表空间或临时表空间添加临时数据⽂件时,即使临时数据⽂件很⼤,添加过程也相当快。
这是因为ORACLE的临时数据⽂件是⼀类特殊的数据⽂件:稀疏⽂件(Sparse File),当临时表空间⽂件创建时,它只会写⼊⽂件头部和最后块信息(only writes to the header and last block of the file)。
它的空间是延后分配的.这就是你创建临时表空间或给临时表空间添加数据⽂件飞快的原因。
另外,临时表空间是NOLOGGING模式以及它不保存永久类型对象,因此即使数据库损毁,做Recovery也不需要恢复Temporary Tablespace。
oracle建立表空间的方法
oracle建立表空间的方法Oracle数据库中建立表空间的方法主要有两种:一种是通过SQL命令的方式,另一种是通过Oracle客户端Enterprise Manager Console来创建。
通过SQL命令的方式创建表空间,需要先创建临时表空间和数据表空间,然后创建用户并指定表空间。
具体步骤如下:1. 创建临时表空间。
可以通过以下命令创建:```sqlcreate temporary tablespace user_temptempfile 'D:\oracle\oradata\Oracle9i\user_'size 50m autoextend on next 50mmaxsize 20480mextent management local;```2. 创建数据表空间。
可以通过以下命令创建:```sqlcreate tablespace user_dataloggingdatafile 'D:\oracle\oradata\Oracle9i\user_'size 50m autoextend on next 50mmaxsize 20480mextent management local;```3. 创建用户并指定表空间。
可以通过以下命令创建用户并将表空间指定给该用户:```sqlcreate user username identified by password;grant create session, create tablespace to username;alter user username default tablespace user_data temporary tablespace user_temp;```通过Oracle客户端Enterprise Manager Console来创建表空间,可以通过以下步骤完成:1. 打开Oracle客户端Enterprise Manager Console。
oracle中临时表用法
在Oracle 数据库中,临时表(Temporary Table)是一种在会话期间存在并可用的表,这种表在会话结束时自动删除。
临时表的主要作用是为了解决数据管理的问题及优化查询性能,可以大大减少数据的I/O 操作,提高查询的速度。
临时表提供了一个临时存储结果集的空间,在某些情况下,创建一个临时表来存储查询的结果集,可能要比多次进行复杂的连接查询更为高效。
常见的用法包括但不限于以下几种:1. 存储及处理大型数据集:对于数据存放不方便的情况,使用临时表可以提高查询速度并且减少与外部程序的交互。
2. 存储查询的中间结果:当多个表连接查询时,查询的结果可能是复杂的中间结果,此时可以使用临时表存储结果,以便后续的查询操作,这可以大大提高查询效率。
3. 缓存查询结果:将查询结果存储到临时表中,在下一次查询时可以直接从临时表中获取数据而不需要再次执行查询,减少了查询的时间。
在Oracle 中创建临时表的语法如下所示:```CREATE GLOBAL TEMPORARY TABLE 表名(列名数据类型,...)ON COMMIT {DELETE|PRESERVE} ROWS;```创建临时表的时候需要设置ON COMMIT 子句。
DELETE 这个选项表示当事务提交后删除临时表中所有的数据。
PRESERVE 这个选项则表示当事务提交后保留临时表中的数据。
使用GLOBAL 关键字创建的是全局临时表,可以被其他会话访问;如果使用的是SESSION 关键字,则创建的是会话级别的临时表,只能被当前会话访问。
临时表在使用结束之后,需要使用DROP TABLE 命令来删除。
例如:```DROP TABLE 表名;```需要注意的是,临时表的作用是暂时存储数据,使用后需要及时删除,否则可能会浪费存储空间和影响其他查询。
学习王二暖oracle笔记(25-31)
学习oracle笔记一、临时表空间 (3)1.目标 (3)2.临时表空间的作用 (3)3.临时表空间组 (3)4.临时表空间的操作 (3)二、UNDO表空间(undo撤销,redo重做) (5)1.目标 (5)2.UNDO管理方式的改变 (5)3.Undo表空间概念 (5)4.Undo相关的重要的参数 (6)5.Undo表空间的操作 (7)6.Oracle11G undo表空间的新特性 (8)三、逻辑备份与恢复 (8)1.目标 (8)2.备份与恢复简介 (8)3.故障类型 (9)4.传统的导出与导入实用程序 (9)5.导出 (11)6.导入 (12)7.导出导入三种方式 (14)8.可传输表空间 (14)9.oracle11G的数据泵 (15)10.Expdp重要的参数 (15)11.inmdp的重要参数 (19)四、数据装载 (20)1.目标 (20)2.数据的装载 (20)3.SQL*LOADER (21)4.外部表 (23)五、闪回flashback (25)1.目标 (25)2.9I的闪回查询 (25)3.10G中的闪回版本查询 (26)4.10G的闪回事务查询 (27)5.10G的闪回表 (27)6.闪回删除 (28)7.10G的闪回数据库 (29)六、物化视图 (30)1.目标 (30)2.问题的提出 (30)3.物化视图的简介 (31)4.物化视图的作用 (32)5.创建物化视图时需要的权限 (33)6.创建物化视图时的选项 (33)7.基于主键的物化视图 (34)8.基于rowid的物化视图 (36)七、使用物化视图和exp实现生产库的逻辑备份的例子 (37)1.问题的提出 (37)2.问题的解决 (37)一、临时表空间1.目标2.临时表空间的作用临时表空间在硬盘上3.临时表空间组4.临时表空间的操作查看表空间:Select * from v$tablespace;Select * from dba_tablespaces;查看数据文件:Select * from dba_data_files;查看临时数据文件:Select * from dba_temp_files;Select * from v$tempfile;查看默认的临时表空间:Select * from database_propertieswhere property_name=’DEFAULT_TEMP_TABLESPACE’;创建临时表空间,不属于组:Create temporary tablespace temp2 tempfile’F:\data\orcl\tem2a.dbf’ size 10M autoextend on;创建临时表空间,属于组:Create temporary tablespace temp3tempfile’F:\data\orcl\tem3a.dbf’size 10M autoextend ontablespace group temp_grp;查看临时表空间组:Select * from dba_tablespace_groups;把temp2加入到temp_grp组内:Alter tablespace temp2 tablespace group temp_grp;把temp2移出temp_grp组:Alter tablespace temp2 tablespace group ’’;给temp2表空间添加一个临时文件:Alter tablespacetemp2 addtempfile’F:\data\orcl\tem2b.dbf’size 10m autoextend on;修改系统默认的临时表空间为另一个临时表空间:Alter database default temporary tablespace temp2;修改系统默认的临时表空间为一个临时表空间组:Alter database default temporary tablespacetemp_grp;二、UNDO表空间(undo撤销,redo重做)1.目标2.UNDO管理方式的改变3.Undo表空间概念4.Undo相关的重要的参数查看undo相关信息:Show parameter undo;5.Undo表空间的操作增加一个undo表空间:Create undo tablespace undotbs2 datafile’F:\DATA\ORCL\undotbs201.dbf’ size 10m autoextend on;给undotbs2表空间增加一个undo数据文件:Alter tablespace undotbs2 add datafile’F:\DATA\ORCL\undotbs202.dbf’ size 10m;查看系统默认undo表空间:Show parameter undo;切换undo表空间:Alter system set undo_tablespace=undotbs2;启用rententiongarentee:Alter tablespace undotbs1 retention guarantee;查看表空间是否启用了rententiongarentee:Select * from dba_tablespaces;取消启用rententiongarentee:Alter tablespace undotbs1 retention no guarantee;查看undo表空间使用情况:Select * from v$undostat;Select to_char(begin_time,’yyyymmdd hh24:mi:ss’),to_char(end_time,’yyyymmdd hh24:mi:ss’),undoblks,txncount from v$undostat;6.Oracle11G undo表空间的新特性三、逻辑备份与恢复1.目标2.备份与恢复简介3.故障类型语句故障:不需要人工处理。
深入浅出谈Oracle临时表
关于临时表上的DML活动,有以下结论: 活动,有以下结论: 关于临时表上的 活动
• 1、 INSERT 会生成很少甚至不生成undo/redo活动。因此,临 时表对insert/select型的应用很有用。 比如在处理web翻页时, 可以通过临时表来模拟cache返回结果。 • 2、 DELETE 在临时表上生成的redo与正常表上生成的redo同 样多。 • 3 、临时表的UPDATE会生成正常表UPDATE一半的redo。
在一个SESSION中(比如SQLPLUS登陆)插入上面3条记录,然后再以另外一个SESSION(用 SQLPLUS再登陆一次)登陆,当你select * from classes;的时候,classes表是空的,而你再第 一次登陆的SQLPLUS中select的时候可以查询到,这个时候你没有进行commit或者rollback之前 你可以对刚才插入的3条记录进行update、delete等操作,当你进行commit或者rollback的时候, 这个时候由于你的表是事务级的临时表,那么在插入数据的session也看不到数据了,这个时候 数据就已经被截断了。
什么时候使用临时表? 什么时候使用临时表?
• 1)、当某一个SQL语句关联的表在2张及以上,并且和一些小表 关联。可以采用将大表进行分拆并且得到比较小的结果集合存放 在临时表中。 • 2)、程序执行过程中可能需要存放一些临时的数据,这些数据在 整个程序的会话过程中都需要用的等等。
<Insert Picture Here>
事务级SQL操作 操作 事务级
• • • • • • • • • • SQL> insert into classes(Class_id,Class_Name,Class_Memo) values(1,'计算机','9608'); 1 row inserted SQL> insert into classes(Class_id,Class_Name,Class_Memo) values(2,'经济信息','9602'); 1 row inserted SQL> insert into classes(Class_id,Class_Name,Class_Memo) values(3,'经济信息','9603'); 1 row inserted SQL> update classes set class_memo ='' where class_id=3 ; 1 row updated SQL> select * from classes ; CLASS_ID CLASS_NAME CLASS_MEMO -------- ---------- -------------------------------------------------------------------------------1 计算机 9608 2 经济信息 9602 3 经济信息 SQL> delete from classes where class_id=3 ; 1 row deleted SQL> select * from classes ; CLASS_ID CLASS_NAME CLASS_MEMO -------- ---------- -------------------------------------------------------------------------------1 计算机 9608 2 经济信息 9602 SQL> commit; Commit complete SQL> select *from classes ; CLASS_ID CLASS_NAME CLASS_MEMO -------- ---------- -------------------------------------------------------------------------------SQL> 再重复插入一次,然后rollback。 SQL> Rollback ; Rollback complete SQL> select * from classes ; CLASS_ID CLASS_NAME CLASS_MEMO -------- ---------- -------------------------------------------------------------------------------SQL>
Oracle的临时表、分区表、分区索引
Oracle的临时表一、表的种类1:永久表:非私有数据,需要DML锁。
2:临时表:临时表的定义对所有会话都是可见的,处理事务或会话期存在的私有数据,不需要DML锁,对于临时表的DML语句不生成重做日志,临时表占用临时表空间,临时表的数据是自动删除的,在临时表上建的索引也是临时的。
二、临时表的种类1:事物型临时表:在事务期间数据存在,事务结束后数据被自动删除。
2:会话型临时表:在会话期间数据存在,会话结束后数据被自动删除。
三、临时表的限制1:不能分区,不能是索引组织表或簇。
2:不能指定关于临时表的外键约束。
3:不支持并行DML或并行查询。
4:不支持分布式事务处理。
5:不能指定段存储语句、嵌套表存储语句或并行语句四、建立临时表的语法1:建立关系表2:建立对象表3:并行语句Oracle的分区表一、什么是分区表Oracle可以将大表或索引分成若干个更小更方便管理的部分,每一部分称为一个分区,这样的表称为分区表。
SQL语句使用分区表比全表或全表索引能提供更好的访问和处理数据。
下图是按周所建分区表示例。
二、使用分区表的限制1:不能分割是簇一部分的表。
2:不能分割含有LONG或LONG RAW列的表。
3:索引组织表IOT不能进行范围分区。
**采用基于规则的优化器时,有会从分区表中受益!三、分区方法1:范围分区(更适合历史数据库)—Oracle8从惟一可用的分区类型按照列的列表的范围分割表;如果是索引组织表,则列的列表就必须是索引组织表主键的子集。
分区关键列的限制:列列表中的列可以是任何一种内置的数据类型,ROWID、LONG、LOB或者TIMESTAMP WITH TIME ZONE除外。
关键字MAXVALUE比任何值都高(含NULL)。
2:散列分区--Oracle8i可用的分区类型指定这个表是按哈希算法分区的,分区的数目应为2的幂。
1)单独散列分区(individual_hash_partitions)及其限制使用子名按照名字指定单个分区,分区名可以匆略。
Oracle 建立临时表空间
Oracle 建立临时表空间通过在表空间中分配临时存储空间,Oracle能够使带有排序等操作的SQL语句获得更高的执行效率。
如果创建了专门的临时表空间,Oracle就可以不必在其他的表空间中为排序操作分配临时空间,这样不仅可以实现临时数据的集中化管理,而且还不会影响到其他表空间的使用效率。
在数据库中创建用户时必须为用户指定一个表空间作为临时表空间使用,该用户所生成的所有临时表数据都将存储在这个表空间中。
如果使用其他表空间作为临时表空间,这不仅会占用其中的存储空间,而且会在该表空间中生成许多存储碎片,从而影响整个数据库的性能。
因此,最好为数据库创建一个专门的临时表空间。
一个临时表空间可以被多个数据库用户共享使用。
在临时表空间中创建的段称为临时段。
Oracle只会为一个实例创建一个临时段,这个临时段被实例中所有的排序操作共享使用,但是临时段中的每一个区只能由一个事务使用。
另外,如果在数据库运行过程中经常有大量并发排序操作,那么为了提高排序性能,可以建立多个临时表空间。
建立临时表空间是使用CREATE TEMPORARY TABLESPACE命令完成的。
1.建立本地管理临时表空间建立本地管理临时表空间时,使用UNIFORM选项可以指定区尺寸。
需要注意,当建立临时表空间时,不能指定AUTOALLOCA TE选项。
例如,下面的语句在数据库中创建一个临时表空间TEMP01:SQL> create temporary tablespace temp012 tempfile 'd:\oracledata\temp01.dbf' size 10m3 extent management local4 uniform size 256k;表空间已创建。
上面创建的表空间其管理方式为本地化管理,并且区尺寸统一为256KB。
需要注意,本地化管理临时表空间不使用数据文件,而使用临时文件,也就是说,在创建临时表空间时,必须将表示数据文件的DA TAFILE改为表示临时文件的TEMPFILE。
Oracle Temporary Tables(Oracle 临时表)
Oracle Temporary Tables(Oracle 临时表)1. 建立临时表语法A.ON COMMIT DELETE ROWS 定义了建立事务级临时表的方法CREATE GLOBAL TEMPORARY TABLE TABLE_NAME-----(COUMNS …)-----AS SELECT … FROM TABLE…ON COMMIT DELETE ROWS;当前session发出commit/rollback命令,则该事务周期发生的所有数据自动被Oracle删除(Oracle truncate table)。
但不影响任何其他session的数据。
B.ON COMMIT PRESERVE ROWS 定义了创建会话级临时表的方法CREATE GLOBAL TEMPORARY TABLE TABLE_NAME-----(COUMNS …)-----AS SELECT … FROM TABLE…ON COMMIT PRESERVE ROWS;当前session结束(用户正常退出/ 用户不正常退出/ Oracle实例崩溃),Oracle对这个会话的中发生的数据进行删除(O racle truncate table)。
但不影响任何其他session的数据。
2. 特点说明A.临时表数据自动清空后,但是临时表的结构以及元数据还存储在用户的数据字典中。
表的定义对所有的会话可见B.临时表不需要DML锁C.可以索引临时表和在临时表基础上建立视图D.在临时表上的索引也是临时的,也是只对当前会话或者事务有效E.临时表可以拥有触发器F.可以用export和import工具导入导出临时表的定义,但是不能导出数据3. 使用技巧A.当某一个SQL语句关联的表在2张及以上,并且和一些小表关联。
可以采用将大表进行分拆并且得到比较小的结果集合存放在临时表中B.程序执行过程中可能需要存放一些临时的数据,可以将这类数据放在临时表里非常方便C.存储过程中用到临时表:1> 在建立临时表前,应先加上对表名的判断Select count(*) into v_count from user_tables where table_name = ‘XXX’;If v_count=0 thenCreate global temporary table …在存储过程结束处,应该记得删除表execute immediate 'drop table t_temp';2> 若在存储过程中建的临时表为on commit delete rows。
Oracle两种临时表的创建及使用方法
Oracle两种临时表的创建及使⽤⽅法临时表的概念 临时表就是⽤来暂时保存数据(或者叫中间数据)的⼀个数据库对象,它和普通表有些类似,然⽽⼜有很⼤的区别.他只能存储在临时表空间,⽽⾮⽤户的表空间.Oracle临时表是会话或事物级别的,只对当前会话或事物可见.每个会话只能查看和修改⾃⼰的数据.Oracle数据库的临时表可以⽤来保存⼀个会话session的数据,或者⼀个事务中的数据.当查询语句⾮常的复杂时,我们就可以创建⼀个临时表保存查询结果,并进⾏⼀系列的操作.创建临时表创建临时表有两种⽅式:事物级临时表 on commit delete rows; 当commit的时候删除数据(默认情况)会话级临时表 on commit preserve rows; 当commit的时候保留数据创建的时候不加关键字默认是事物级临时表会话级临时表会话级临时表是指表中的数据只会在会话周期中存在,当⽤户退出会话结束时,Oracle⾃动清除临时表中当前会话的数据.执⾏commit或者rollback操作,表内的数据依然存在,新建⼀个窗⼝命令(相当于开启了⼀个新的会话),表内的数据就查询不到了创建语法:create global temporary table 临时表名( 列名数据类型,...)on commit preserve rows;事物级临时表事物级临时表是指表中的数据只在事物的⽣命周期中存在,当事物结束(commit 或 rollback),Oracle⾃动清除临时表中的数据,继承会话临时表特点创建语法:create global temporary table 临时表名( 列名数据类型,...)on commit delete rows;也可以直接:create global temporary table 临时表名 as (select结果集);--默认事物级临时表注意事项不建议 lob 对象,但实际应⽤中确实需要此功能时就⽆法使⽤临时表了.CREATE GLOBAL TEMPORARY TABLE TMP_TEST( ID NUMBER ,NAME CLOB) ON COMMIT PRESERVE ROWS;不⽀持主键外键临时表不能永久的保存数据临时表的数据不会备份,恢复,对其的修改也不会有任何的⽇志信息临时表不会有DML锁临时表可以创建临时的索引,试图,触发器如果要 DROP 会话级临时表,并且包含数据时,必须先截断其中的数据,否则会报错.所有会话都要关闭,或者所有的会话中的数据都为空命名时以temp_开头。
Oracle基本术语大全
Oracle基本术语大全Oracle基本术语大全Oracle数据库系统是一个复杂的软件系统。
如果不了解其内部的结构原理及关系,就不可能设计和编写出高质量的应用软件系统,也不可能管理好一个复杂的应用系统。
为了帮助大家了解更多Oracle数据库知识,下文简要给出 ORACLE 8 /i数据库系统结构的描述。
§2.1 术语数据库块(BLOCK)ORACLE 数据库中的最小存储和处理单位,包含块本身的头信息数据或PL/SQL代码。
ORACLE 块的大小是可以在安装时选择“自定义安装”来指定,也可以在CREATE E创建数据库实例时指定。
其最小为2K,最大可达为64K.瓶颈(Bottleneck)指限制系统性能的部件。
面向对象的关系数据库具有关系数据库的全部功能,同时又支持面向对象的数据库,称作面向对象关系数据库系统。
Oracle7是一种功能完备的关系数据库系统;oracle8是一种面向对象的关系数据库系统。
客户/服务器结构(Client/Server)有客户机、服务器、网络三要素的结构,客户机(PC机)通过网络与服务器相连和工作。
胖客户机(Fat Client)一般的Client/Server结构中的客户机均为胖客户机。
因为这些客户机需要配置较高的设备,如内存、硬盘、主频、CD_ROM等。
瘦客户机(Thin Client)也称作NC(网络计算机),是一种内存配置小(过去指一般只有4M,现无法定义),无硬盘,只有处理心片的处理机。
数据在线分析处理(OLAP)是一种能以快速、交互、方便的方式洞察数据情况的技术。
如Oracle E某press,Cognos(加拿大)的Power Play, Business Objects公司的Business Object 等。
多线程(MTS)一个用户可以同时运行多个程序对数据库进行访问,比如Visual C/C++可以提供同时启动多个进程,而Visual Basic则不能。
oracle 临时表的用法
oracle 临时表的用法Oracle 临时表是一种临时存储数据的方式,其数据存储在内存中或者一个特定的临时表空间中,在会话结束时自动删除。
临时表在处理大量数据、复杂计算和临时存储中间结果时非常有用。
以下是一些 Oracle 临时表的用途和用法:1. 中间结果存储:当需要在多个查询和计算过程中共享中间结果时,临时表可以用来存储这些中间结果,并且在需要时可以反复使用。
这样可以减少查询和计算的时间和复杂度。
2. 数据筛选和过滤:临时表可以用来存储经过筛选和过滤后的数据,让后续的查询和分析更加高效。
通过将筛选条件应用于临时表,可以减少查询的数据量和查询的复杂性。
3. 临时数据存储:当需要存储临时数据以供后续操作时,可以使用临时表来存储这些数据。
这在复杂的数据处理和分析任务中非常有用,可以保持会话的整洁并且提高计算的效率。
4. 重复数据删除:临时表可以用来删除重复的数据,并且只保留唯一的数据。
这在数据清洗和数据整理的过程中非常有用,可以提高数据质量并且减少存储空间的占用。
5. 大规模数据加载:当需要将大量数据加载到数据库中时,可以使用临时表来存储加载的数据,并通过批量插入的方式来提高数据加载的效率。
在使用临时表时,需要注意以下几点:1. 创建临时表:可以使用 CREATE GLOBAL TEMPORARY TABLE 或 CREATE PRIVATE TEMPORARY TABLE 命令来创建临时表。
全局临时表对所有会话可见并且只在会话结束时被删除,私有临时表只对当前会话可见并且只在会话结束时被删除。
2. 数据插入:可以使用 INSERT INTO 语句向临时表中插入数据。
插入的数据只在当前会话中可见并且在会话结束时被删除。
3. 查询和操作:可以像普通表一样对临时表进行查询和操作,包括使用 SELECT、UPDATE、DELETE 等命令。
4. 清空临时表:可以使用 TRUNCATE TABLE 命令清空临时表中的数据。
Oracle临时表空间查看、添加临时表空间数据文件、修改默认临时表空间方法!
Oracle临时表空间查看、添加临时表空间数据⽂件、修改默认临时表空间⽅法!--查表空间使⽤率情况(含临时表空间)SELECT d.tablespace_name "Name", d.status "Status",TO_CHAR (NVL (a.BYTES / 1024 / 1024, 0), '99,999,990.90') "Size (M)",TO_CHAR (NVL (a.BYTES - NVL (f.BYTES, 0), 0) / 1024 / 1024,'99999999.99') USE,TO_CHAR (NVL ((a.BYTES - NVL (f.BYTES, 0)) / a.BYTES * 100, 0),'990.00') "Used %"FROM SYS.dba_tablespaces d,(SELECT tablespace_name, SUM (BYTES) BYTESFROM dba_data_filesGROUP BY tablespace_name) a,(SELECT tablespace_name, SUM (BYTES) BYTESFROM dba_free_spaceGROUP BY tablespace_name) fWHERE d.tablespace_name = a.tablespace_name(+)AND d.tablespace_name = f.tablespace_name(+)AND NOT (d.extent_management LIKE 'LOCAL' AND d.CONTENTS LIKE 'TEMPORARY')UNION ALLSELECT d.tablespace_name "Name", d.status "Status",TO_CHAR (NVL (a.BYTES / 1024 / 1024, 0), '99,999,990.90') "Size (M)",TO_CHAR (NVL (t.BYTES, 0) / 1024 / 1024, '99999999.99') USE,TO_CHAR (NVL (t.BYTES / a.BYTES * 100, 0), '990.00') "Used %"FROM SYS.dba_tablespaces d,(SELECT tablespace_name, SUM (BYTES) BYTESFROM dba_temp_filesGROUP BY tablespace_name) a,(SELECT tablespace_name, SUM (bytes_cached) BYTESFROM v$temp_extent_poolGROUP BY tablespace_name) tWHERE d.tablespace_name = a.tablespace_name(+)AND d.tablespace_name = t.tablespace_name(+)AND d.extent_management LIKE 'LOCAL'AND d.CONTENTS LIKE 'TEMPORARY';1. 查询表空间剩余字节⼤⼩SELECT TABLESPACE_NAME, SUM(BYTES)/1024/1024 AS "FREE SPACE(M)"FROM DBA_FREE_SPACEWHERE TABLESPACE_NAME = '&tablespace_name'GROUP BY TABLESPACE_NAME;注:如果是临时表空间,请查询DBA_TEMP_FREE_SPACESELECT TABLESPACE_NAME, FREE_SPACE/1024/1024 AS "FREE SPACE(M)"FROM DBA_TEMP_FREE_SPACEWHERE TABLESPACE_NAME = '&tablespace_name';2. 查询表空间所有数据⽂件路径SELECT TABLESPACE_NAME, FILE_ID, FILE_NAME, BYTES/1024/1024 AS "BYTES(M)"FROM DBA_DATA_FILESWHERE TABLESPACE_NAME = '&tablespace_name';注:如果是临时表空间,请查询DBA_TEMP_FILESSELECT TABLESPACE_NAME, FILE_ID, FILE_NAME, BYTES/1024/1024 AS "SPACE(M)"FROM DBA_TEMP_FILESWHERE TABLESPACE_NAME = '&tablespace_name';3. 为空间不⾜的表空间增加数据⽂件ALTER TABLESPACE &tablespace_name ADD DATAFILE '&datafile_name' SIZE 2G;注:如果要为临时表空间扩容,使⽤下⾯的语句ALTER TABLESPACE &tablespace_name ADD TEMPFILE '&datafile_name' SIZE 2G;4.查看临时表空间的⼤⼩和数据⽂件路径SELECT TABLESPACE_NAME, FILE_ID, FILE_NAME, BYTES/1024/1024 AS "SPACE(M)"FROM DBA_TEMP_FILESWHERE TABLESPACE_NAME = 'TEMP';或者select name, bytes/1024/1024 as "⼤⼩(M)" from v$tempfile order by bytes;5.重建并修改默认临时表空间办法:--查询当前数据库默认临时表空间名select * from database_properties where property_name='DEFAULT_TEMP_TABLESPACE';--创建新的临时表空间create temporary tablespace temp02 tempfile 'E:\oracle\oradata\lims\TEMP02.DBF' size 1024M autoextend on; --修改默认表空间为刚刚建⽴的临时表空间alter database default temporary tablespace temp02;--查看⽤户所⽤临时表空间的情况SELECT USERNAME,TEMPORARY_TABLESPACE FROM DBA_USERS;--删除原来的临时表空间drop tablespace temp including contents and datafiles;--查看所有表空间名确认临时表空间是否已删除select tablespace_name from dba_tablespaces;。
Oracle表空间(tablespaces)
Oracle表空间(tablespaces) 我们知道oarcle数据库真正存放数据的是数据⽂件(data files),Oarcle表空间(tablespaces)实际上是⼀个逻辑的概念,他在物理上是并不存在的,那么把⼀组data files 捻在⼀起就成为⼀个表空间。
表空间属性:⼀个数据库可以包含多个表空间,⼀个表空间只能属于⼀个数据库⼀个表空间包含多个数据⽂件,⼀个数据⽂件只能属于⼀个表空间表这空间可以划分成更细的逻辑存储单元Oracle数据库的存储结构: 从逻辑的⾓度来看,⼀个数据库(database)下⾯可以分多个表空间(tablespace);⼀个表空间下⾯⼜可以分多个段(segment);⼀个数据表要占⼀个段(segment),⼀个索引也要占⼀个段(segment )。
⼀个段(segment)由多个区间(extent)组成,那么⼀个区间⼜由⼀组连续的数据块(data block)组成。
这连续的数据块是在逻辑上是连续的,有可能在物理磁盘上是分散。
那么从物理的⾓度上看,⼀个表空间由多个数据⽂件组成,数据⽂件是实实在在存在的磁盘上的⽂件。
这些⽂件是由oracle数据库操作系统的block 组成的。
Segment(段):段是指占⽤数据⽂件空间的通称,或数据库对象使⽤的空间的集合;段可以有表段、索引段、回滚段、临时段和⾼速缓存段等。
Extent (区间):分配给对象(如表)的任何连续块叫区间;区间也叫扩展,因为当它⽤完已经分配的区间后,再有新的记录插⼊就必须在分配新的区间(即扩展⼀些块);⼀旦区间分配给某个对象(表、索引及簇),则该区间就不能再分配给其它的对象.查看表空间: SQL> select * from v$tablespace; TS# NAME INCLUD BIGFIL FLASHB ENCRYP ---------- ------------------------------------------------------------ ------------ ------ ------ 0 SYSTEM YES NO YES 1 UNDOTBS1 YES NO YES 2 SYSAUX YES NO YES4 USERS YES NO YES 3 TEMP NO NO YES查看每个表空间有哪些数据⽂件: SQL> desc dba_data_files; Name Null? Type ----------------------------------------- -------- ---------------------------- FILE_NAME VARCHAR2(513) FILE_ID NUMBER TABLESPACE_NAME VARCHAR2(30) BYTES NUMBER BLOCKS NUMBER STATUS VARCHAR2(9) RELATIVE_FNO NUMBER AUTOEXTENSIBLE VARCHAR2(3) MAXBYTES NUMBER MAXBLOCKS NUMBER INCREMENT_BY NUMBER USER_BYTES NUMBER USER_BLOCKS NUMBER ONLINE_STATUS VARCHAR2(7)查看详细数据⽂件:SQL> select file_name,tablespace_name from dba_data_files; FILE_NAME TABLESPACE_NAME ---------------------------------------------------------------------------------------------------------------- /ora10/product/oradata/ora10/users01.dbf USERS /ora10/product/oradata/ora10/sysaux01.dbf SYSAUX /ora10/product/oradata/ora10/undotbs01.dbf UNDOTBS1/ora10/product/oradata/ora10/system01.dbf SYSTEM创建⼀个表空间: SQL> create tablespace paul datafile '/ora10/product/oradata/ora10/paul01.dbf' size 20m;Tablespace created. 查看我们创建的表空间:[ora10@localhost ora10]$ pwd /ora10/product/oradata/ora10 [ora10@localhost ora10]$ ls control01.ctl control03.ctl redo01.log redo03.log system01.dbf undotbs01.dbf control02.ctl paul01.dbf redo02.log sysaux01.dbf temp01.dbf users01.dbf表空间根据对区间(extents)的管理分为两种类型词典管理表空间(Dictionary-managed tablespaces)在表空间⾥,有的区间被占⽤了,有的没被占⽤,这些数据是放在数据字典⾥的。
oracle临时表用法
oracle临时表用法Oracle临时表用法临时表是Oracle数据库中的一个重要概念,它可以在会话级别上暂时存储数据,为查询和数据处理提供临时的存储空间。
本文将介绍Oracle临时表的用法,包括创建、使用和管理。
一、创建临时表在Oracle数据库中,可以使用CREATE GLOBAL TEMPORARY TABLE语句来创建临时表。
临时表的定义与普通表类似,可以指定列名、数据类型和约束等。
需要注意的是,临时表在创建时需指定SESSION 或TRANSACTION作为其生命周期,分别对应会话级别和事务级别的临时表。
例如,创建一个会话级别的临时表:CREATE GLOBAL TEMPORARY TABLE temp_table(id NUMBER,name VARCHAR2(50)) ON COMMIT PRESERVE ROWS;二、使用临时表使用临时表可以进行数据查询、临时存储和数据处理等操作。
临时表的使用方式与普通表类似,可以通过INSERT、SELECT、UPDATE和DELETE等语句来操作临时表中的数据。
例如,向临时表中插入数据:INSERT INTO temp_table(id, name) VALUES(1, '张三');查询临时表中的数据:SELECT * FROM temp_table;三、管理临时表在使用临时表时,需要注意以下几点管理问题。
1. 临时表的数据仅在当前会话中可见,其他会话无法访问临时表的数据。
因此,不同会话可以同时使用同名的临时表,互不干扰。
2. 临时表的数据在会话结束时自动删除。
如果需要手动删除临时表中的数据,可以使用TRUNCATE TABLE语句。
但注意,TRUNCATE TABLE语句将删除所有数据,并且不能回滚。
3. 当会话中使用了临时表后,可以通过查询系统视图V$SORT_SEGMENT来查看临时表的使用情况。
该视图显示了每个临时表的占用空间、排序次数和读写次数等信息,可以帮助进行性能优化。
Oracle临时表空间暴满的原因与解决方法
Oracle临时表空间暴满的原因与解决⽅法 Oracle临时表空间主要⽤来做查询和存放⼀些缓冲区数据。
临时表空间消耗的主要原因是需要对查询的中间结果进⾏排序。
重启数据库可以释放临时表空间,如果不能重启实例,⽽⼀直保持问题sql语句的执⾏,temp表空间会⼀直增长。
直到耗尽硬盘空间。
数据库temp临时表空间增⼤,⼀般在数据安装时设置临时表空间⼤⼩,默认的情况下都是设置为⾃动增长。
这样会引起⼀个问题:在数据库使⽤中temp表空间会⾃动扩展的越来越⼤,造成磁盘空间使⽤不⾜。
引起临时表空间增⼤主要使⽤在以下⼏种情况: 1、order by or group by (disc sort占主要部分); 2、索引的创建和重创建; 3、distinct操作; 4、union & intersect & minus sort-merge joins; 5、Analyze 操作; 6、有些异常也会引起TEMP的暴涨。
解决⽅法ORA-01652: ⽆法通过 128 (在表空间 TEMP 中) 扩展 temp 段查询默认临时表空间:SQL> select * from database_properties where property_name='DEFAULT_TEMP_TABLESPACE';查询临时表空间状态:SQL> select tablespace_name,file_name,bytes/1024/1024 file_size,autoextensible from dba_temp_files;⽅法1.重启实例实例重启时,Smon进程会完成临时段释放,TEMP表空间的清理操作,不过很多的时侯我们的库是不允许down的,所以这种⽅法缺少了⼀点的应⽤机会,不过这种⽅法还是很好⽤的。
⽅法2.增⼤临时⽂件⼤⼩SQL> alter database tempfile ‘/oradata/orcl/temp01.dbf’ resize 20000m;注:数据⽂件最⼤为32GB,如果现有数据⽂件已达到32GB将⽆法resize成更⼤值,只能缩⼩。
数据库逻辑结构大全(精)
Oracle数据库逻辑结构2.1.1Oracle系统体系结构话说与其他数据库产品不同,Oracle有其自己独特的系统体系结构。
Oracl e系统体系结构是整个Oracle服务器系统的框架,是管理和应用Oracle数据服务器的基础和核心。
Oracle系统体系结构由三部分组成:逻辑结构、物理结构和实例。
其中,实例是维系物理结构和逻辑结构的核心,如图2-1和图2-2所示。
图2-1表明了数据库三级模式及其物理文件之间的关系。
图2-1 数据库模式及其物理文件关系示意图图2-2 Oracle系统体系结构与功能不论是Oracle的应用开发还是数据库管理都是以实例作为切入点的。
只不过Oracle的应用程序开发主要是以数据库的逻辑对象为主(如表、索引和视图等),而数据库管理则是针对数据库的全部内容。
Oracle数据库由构成物理结构的各种文件组成,如数据文件、控制文件和重做日志文件等;实例是Oracle在内存中分配的一段区域SGA和服务器后台进程的集合。
Oracle数据库服务器就是数据库和实例的组合。
2.1.2Oracle逻辑结构Oracle的逻辑结构是一种层次结构。
主要由:表空间、段、区和数据块等概念组成。
逻辑结构是面向用户的,用户使用Oracle开发应用程序使用的就是逻辑结构。
数据库存储层次结构及其构成关系,结构对象也从数据块到表空间形成了不同层次的粒度关系,如图2-3和图2-4所示。
图2-3 Oracle 10g数据库层次结构图图2-4 段、区和数据块之间的关系1.数据块Oracle数据块(Data Block)是一组连续的操作系统块。
分配数据库块大小是在Oracle数据库创建时设置的,数据块是Oracle读写的基本单位。
数据块的大小一般是操作系统块大小的整数倍,这样可以避免不必要的系统I/O操作。
从Oracle9i开始,在同一数据库中不同表空间的数据块大小可以不同。
数据块是O racle最基本的存储单位,而表空间、段、区间则是逻辑组织的构成成员。
ORACLE体系结构逻辑结构-表空间、段、区和数据块
ORACLE体系结构逻辑结构-表空间、段、区和数据块转⾃:⼀、Oracle的逻辑结构Oracle的逻辑结构是⼀种层次结构。
主要由:表空间、段、区和数据块等概念组成。
逻辑结构是⾯向⽤户的,⽤户使⽤Oracle开发应⽤程序使⽤的就是逻辑结构。
数据库存储层次结构及其构成关系,结构对象也从数据块到表空间形成了不同层次的粒度关系。
1.数据块(Data Blocks)1.1 数据块是Oracle最⼩的存储单位,Oracle数据存放在“块”中。
⼀个块占⽤⼀定的磁盘空间。
特别注意的是,这⾥的“块”是Oracle的“数据块”,不是操作系统的“块”。
1.2 Oracle每次请求数据的时候,都是以块为单位。
也就是说,Oracle每次请求的数据是块的整数倍。
如果Oracle请求的数据量不到⼀块,Oracle也会读取整个块。
所以说,“块”是Oracle读写数据的最⼩单位或者最基本的单位。
1.3 块的标准⼤⼩由初始化参数DB_BLOCK_SIZE指定。
具有标准⼤⼩的块称为标准块(Standard Block)。
块的⼤⼩和标准块的⼤⼩不同的块叫⾮标准块(Nonstandard Block)。
1.4 操作系统每次执⾏I/O的时候,是以操作系统的块为单位;Oracle每次执⾏I/O的时候,都是以Oracle的块为单位。
1.5 Oracle数据块⼤⼩⼀般是操作系统块的整数倍。
1.6 数据块的格式(Data Block Format)块中存放表的数据和索引的数据,⽆论存放哪种类型的数据,块的格式都是相同的,块由块头(header/Common and Variable),表⽬录(Table Directory),⾏⽬录(Row Directory),空余空间(Free Space)和⾏数据(Row Data)五部分组成块头(header/Common and Variable):存放块的基本信息,如:块的物理地址,块所属的段的类型(是数据段还是索引段)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Oracle临时表和临时表空间组一、临时表功能介绍:Oracle中的临时表是全局的,需要在数据库设计时创建完成,而不是程序使用时。
每个登陆用户都使用这一个相同的临时表,但互相之间看不到彼此的数据,也就是说临时表是会话独立的。
并且不产生日志。
Oracle 的临时表分为事务型和会话型。
事务型临时表就是指在事务处理过程中插入的记录只在事务提交或回滚之前有效,一旦事务完成,表中的记录便被自动清除。
会话型临时表指临时表中的数据在本次会话期间一直有效,直到会话结束。
会话结束后表中针对此次会话的数据会自动清空。
Oracle 临时表的不足之处:1、不支持lob对象,例如Spatial 的SDO_GEOMETRY。
这也许是设计者基于运行效率的考虑,但实际应用中确实需要此功能时就无法使用临时表了。
2、不支持主外键关系。
这意味着临时表创建临时表的语法:CREATE GLOBAL TEMPORARY TABLE table"(" column datatype [DEFAULT expr] [{ NULL | NOT NULL}][, column datatype [DEFAULT expr] [ {NULL | NOT NULL} ]... ")"ON COMMIT {DELETE | PRESERVE } ROWS ;--SampleCREATE GLOBAL TEMPORARY TABLE TABLE_NAME (COL1 VARCHAR2(10),COL2 NUMBER) ON COMMIT PRESERVE(DELETE) ROWS ;如果选择PRESERVE ROWS,则在会话结束后表中的数据自动清空,如果选了DELETE ROWS,则在提交的时候即清空数据,PRESERVE则一直到会话结束。
Oracle中的临时表有两种一种是事务级别的临时表它在事务结束的时候自动清空记录,另一种是会话级的它在我们访问数据库时的一个会话结束后自动的清空。
关于临时表多用户并行不是问题,一个会话从来不会阻止另一个会话使用临时表。
即使“锁定”临时表,一个会话也不会阻止其他会话使用它们的临时表。
如果有在SQL SERVER 和\或sybase中使用临时表的经验,需要主要考虑的不是执行select x,y ,z into #temp from some_table 来创建和装载临时表,而是:1.对于每一个数据库,创建所有的temp表作为全局临时表。
这将作为应用程序安装的一部分完成,就像创建永久表一样。
2.只要在过程中简单的insert into temp(x,y,z) selelct x,y,z from some_table。
只是理解这点,这里的目的不是运行存储过程创建表。
在Oracle中这样做不是正确的方法。
DDL是一种消耗资源非常大的操作,在运行时尽量不要使用,应用程序需要的临时表应在应用程序安装时创建,而不是在运行时创建。
Oracle中的临时表和其他数据库的临时表是相似的,在每个数据库中创建临时表一次,不必在数据库中的每个存储过程中创建一次。
临时表总是存在的,他们作为对象存在于数据字典中,并且总是保持为空,直到有会话在其中放入数据。
所有我在这里说明如果我们在存储过程中建临时表,每次都建立一个那么我的系统随着用户的操作调用此存储过程,每次多一个这样的表,我们在不知不觉中数据库中的表的数量会越来越多,而我们还不知道会存在很大的隐患的所有说这点不可小视,为了我们的系统能在客户那里平稳、安全的运行我们一定要注意这样的问题。
如果不手动Drop 表,临时表还是在数据字典中存在的。
二、临时表空间组介绍Temporary Tablespace GroupsOracle Database 10g introduced the concept of a temporary tablespace group. Rather than having just one temporary tablespace and the possibility that it may become a performance bottleneck, you can define an entire group of temporary tablespaces and spread temporary tablespace input/output across them. To create a group of temporary tablespaces, simply specify the GROUP clause when creating it. Both of the following tablespaces comprise a temporary tablespace group named temp_group01:CREATE TEMPORARY TABLESPACE temp01 TEMPFILE '/oradata/db01/temp01.dbf' SIZE 100MEXTENT MANAGEMENT LOCAL UNIFORM SIZE 16M TABLESPACE GROUP temp_group01;CREATE TEMPORARY TABLESPACE temp02 TEMPFILE '/oradata/db02/temp02.dbf' SIZE 100MEXTENT MANAGEMENT LOCAL UNIFORM SIZE 16M TABLESPACE GROUP temp_group01;Having created a group of temporary tablespaces, you can now make that group the default source of temporary disk space for your database, as follows:ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp_group01;Now, rather than have all temporary input/output go against a single temporary tablespace, the database can distribute that I/O load among all the temporary tablespaces in the group. Temporary tablespace groups are even more of an advantage when you are performing operations in parallel. If you issue an ORDER BY query against a partitioned table and if multiple execution server processes are started in order to process that query in parallel, one for each partition, those execution servers no longer need to all funnel to the same temporary tablespace. Instead, the execution servers will be distributed across all the temporary tablespaces in the active group.在oracle 10g 中,可以创建多个临时表空间,并把它们组成一个临时表空间组,这样应用数据用于排序时可以使用组里的多个临时表空间,一个临时表空间组至少有一个临时表空间,其最大个数没有限制,组的名字不能和其中某个表空间的名字相同。
临时表空间组是在创建临时表空间时通过指定group字句创建的,如果删除组中的全部临时表空间,那么这个组也将消失。
我们将可以将一个表空间从一个组移动另一个组,或是从一个组中删除临时表空间,或是往组里添加新的表空间。
使用临时表空间组,有如下的优点:1.避免当临时表空间不足时所引起的磁盘排序问题;2.当一个用户同时有多个会话时,可以使得它们使用不同的临时表空间;3.使得并行的服务器在单节点上,能使用多个临时表空间.现在就看看如何操作使用临时表空间组:1:创建临时表空间组:SQL> create temporary tablespace tempts1 tempfile2 '/home/oracle/temp1_02.dbf' size 2M tablespace group group1;Tablespace createdSQL> create temporary tablespace tempts2 tempfile2 '/home/oracle/temp2_02.dbf' size 2M tablespace group group2;Tablespace created2.查询临时表空间组:SQL> select * from dba_tablespace_groups;GROUP_NAME TABLESPACE_NAME------------------------------ ------------------------------GROUP1 TEMPTS1GROUP2 TEMPTS23.将表空间从一个临时表空间组移动到另外一个临时表空间组:SQL> alter tablespace tempts1 tablespace group GROUP2 ;Tablespace alteredSQL> select * from dba_tablespace_groups;GROUP_NAME TABLESPACE_NAME------------------------------ ------------------------------GROUP2 TEMPTS1GROUP2 TEMPTS24.把临时表空间组指定给用户SQL> alter user scott temporary tablespace GROUP2;User altered5.在数据库级设置临时表空间SQL> alter database <db_name> default temporary tablespace GROUP2;Database altered.6.删除临时表空间组(删除组成临时表空间组的所有临时表空间)SQL> drop tablespace tempts1 including contents and datafiles;Tablespace droppedSQL> select * from dba_tablespace_groups;GROUP_NAME TABLESPACE_NAME------------------------------ ------------------------------GROUP2 TEMPTS2SQL> drop tablespace tempts2 including contents and datafiles; Tablespace droppedSQL> select * from dba_tablespace_groups;GROUP_NAME TABLESPACE_NAME ------------------------------ ------------------------------。