GVKun编程网logo

oracle表空间追加(oracle 加表空间)

13

在本文中,我们将带你了解oracle表空间追加在这篇文章中,我们将为您详细介绍oracle表空间追加的方方面面,并解答oracle加表空间常见的疑惑,同时我们还将给您一些技巧,以帮助您实现更有效的4.

在本文中,我们将带你了解oracle表空间追加在这篇文章中,我们将为您详细介绍oracle表空间追加的方方面面,并解答oracle 加表空间常见的疑惑,同时我们还将给您一些技巧,以帮助您实现更有效的4.Oracle表空间、9.1oracle表空间表分区详解及oracle表分区查询使用方法、ArcSDE for Oracle表空间管理临时(TEMP)表空间、Oracle创建表空间及在表空间下创建用户(oracle扩展RAC表空间)

本文目录一览:

oracle表空间追加(oracle 加表空间)

oracle表空间追加(oracle 加表空间)

一、建立表空间

        数据库建立表空间语句比较简单,例如:

create tablespace KAKOU_201307  nologging 
datafile ''e:\KAKOU\KAKOU_201307.dbf'' size 100m 
autoextend on  next 50m maxsize unlimited  extent management local;

create tablespace KAKOU_201308  nologging 
datafile ''e:\KAKOU\KAKOU_201308.dbf'' size 100m 
autoextend on  next 50m maxsize unlimited  extent management local;

create tablespace KAKOU_201309  nologging 
datafile ''e:\KAKOU\KAKOU_201309.dbf'' size 100m 
autoextend on  next 50m maxsize unlimited  extent management local;

注意:执行语句前文件路径中的文件夹必须事先建立好,要不人语句执行错误。

二、建立表空间索引

   数据库建立表空间语句比较简单,例如:

create tablespace KKINDEX_201307  nologging 
datafile ''e:\KKINDEX\KKINDEX_201307.dbf'' size 100m 
autoextend on  next 50m maxsize unlimited  extent management local;

create tablespace KKINDEX_201308  nologging 
datafile ''e:\KKINDEX\KKINDEX_201308.dbf'' size 100m 
autoextend on  next 50m maxsize unlimited  extent management local;

create tablespace KKINDEX_201309  nologging 
datafile ''e:\KKINDEX\KKINDEX_201309.dbf'' size 100m 
autoextend on  next 50m maxsize unlimited  extent management local;

注意:执行语句前文件路径中的文件夹必须事先建立好,要不人语句执行错误。

三、建立Partition

 Partition一般是建表时一起建立

CREATE TABLE "ZHST"."KAKOU"
  (
    "GCID"  VARCHAR2(40 BYTE) NOT NULL ENABLE,
    "HPHM"  VARCHAR2(20 BYTE) DEFAULT NULL,
    "HPYS"  VARCHAR2(5 BYTE) DEFAULT NULL,
    "CSYS"  VARCHAR2(5 BYTE) DEFAULT NULL,
    "CLLX"  VARCHAR2(5 BYTE) DEFAULT NULL,
    "JGSJ"  VARCHAR2(40 BYTE) DEFAULT NULL,
    "XSFX"  VARCHAR2(5 BYTE) DEFAULT NULL,
    "XSCD"  VARCHAR2(5 BYTE) DEFAULT NULL,
    "XSSD"  VARCHAR2(10 BYTE) DEFAULT NULL,
    "HPTP"  VARCHAR2(200 BYTE) DEFAULT NULL,
    "TPLJ1" VARCHAR2(200 BYTE) DEFAULT NULL,
    "TPLJ2" VARCHAR2(200 BYTE) DEFAULT NULL,
    "TPLJ3" VARCHAR2(200 BYTE) DEFAULT NULL,
    "WFDZ"  VARCHAR2(50 BYTE) DEFAULT NULL,
    "WFDD"  VARCHAR2(20 BYTE) DEFAULT NULL,
    "SBBM"  VARCHAR2(20 BYTE) DEFAULT NULL,
    "HPZL"  VARCHAR2(10 BYTE),
    PRIMARY KEY ("GCID") 
  )
PARTITION BY RANGE(JGSJ)
(  
	PARTITION KAKOUPART201307 VALUES LESS THAN(''2013-07-31 00:00:00'') TABLESPACE KAKOU_201307,
	PARTITION KAKOUPART201308 VALUES LESS THAN(''2013-08-31 00:00:00'') TABLESPACE KAKOU_201308,
	PARTITION KAKOUPART201309 VALUES LESS THAN(''2013-09-30 00:00:00'') TABLESPACE KAKOU_201309,
	PARTITION KAKOUPART201310 VALUES LESS THAN(''2013-10-31 00:00:00'') TABLESPACE KAKOU_201310,
	PARTITION KAKOUPART201311 VALUES LESS THAN(''2013-11-30 00:00:00'') TABLESPACE KAKOU_201311,
	PARTITION KAKOUPART201312 VALUES LESS THAN(''2013-12-31 00:00:00'') TABLESPACE KAKOU_201312
	);

如果时间到了,映射不到分区了之后需要追加:

alter table KAKOU add partition KAKOUPART201510 VALUES LESS THAN(''2016-05-01 00:00:00'') TABLESPACE KAKOU_201510;
alter table KAKOU add partition KAKOUPART201605 VALUES LESS THAN(''2016-11-01 00:00:00'') TABLESPACE KAKOU_201605;
alter table KAKOU add partition KAKOUPART201611 VALUES LESS THAN(''2017-06-01 00:00:00'') TABLESPACE KAKOU_201611;

关于Partition的其他使用方法下回再详细了解。



4.Oracle表空间

4.Oracle表空间

Oracle数据库的存储结构:
分为物理结构逻辑结构
物理结构
数据文件(.dbf)、日志文件(.log)、控制文件(.ctl)
逻辑结构
表空间、段、区、数据块



逻辑角度来看
1.数据库(database)是由多个或一个表空间(tablespace)组成。
2.表空间(tablespace)是由多个段(segment)组成。
注:一个数据文件要占用一个段,一个索引也要占用一个段。
3.一个段(segment)是由多个区(extent)组成。
4.一个区(extent)是由多个连续的数据块(Databook)组成。
注:数据块(Databook)是在逻辑上属于连续的,在物理磁盘上可能是分散的。
物理角度来看
1.一个表空间(tablespace)是由多个数据文件组成,这些数据文件是实实在在存储在硬盘上的。
小结:
1.逻辑存储结构是和操作系统无关,是由oracle数据库创建和管理的。
2.物理存储结构是和操作系统有关,因为要存储在物理磁盘上。
详细说明:
表空间(tablespace):
表空间是最大的逻辑单位,对应一个或多个数据文件,表空间的大小是它所对应的数据文件大小总和。
表空间分类

类别
说明
永久性表空间
一般保存表、试图、过程和索引等数据。
SYstem、SYSAUX、USERS、EXAMPLE表空间是默认安装的。
临时性表空间
只用于保存系统中短期活动的数据,如排序数据等。
撤销表空间
用来保住回退未提交的事务数据,已经提交了的数据在这里是不可以恢复的。一般不需要建临时和撤销表空间,除非把他们转移到其它磁盘中以提高性能。
System:系统表空间,存放关于表空间的名称,控制文件,数据文件等。
Temp:临时表空间存放临时表和临时数据,用于排序。
Users:用户表空间,永久妇女放用户对象和隐私信息。
Sysaux:辅助系统表空间,减少系统负荷,提高系统作业效率。

段(Segment):
段是表空间的逻辑存储结构,它由一个或多个区组成,段将占用并增长存储空间。
引导段:存储数据字典表的定义
临时段:存储表排序操作期间的临时表的数据
回滚段:存储修改之前的位置和值
索引段:存储表上最佳查询的所有索引数据
数据段:存储表中所有数据
(Extent):
区是由一组数据块组成,区是由段分配的,分配的第一个区称为初始区,以后分配的去为增量区。
数据块(Database Block)
数据块是数据库使用的I/O最小单元,又称逻辑块或oracle块。一个数据块对应一个或多个物理块。
数据块由一下五部分组成:
标题:包括通用块信息,如块地址/段类型等。
表目录:存储聚集中表的信息,这些信息用于聚集段。
行目录:包括块中的有效行信息。
自由空间:块中能插入或修改的一组空间。
行数据:存储表或索引的数据。



创建表空间:
语法:
TABLESPACENAME?:需要创建表空间的名字。
DATAFILE:数据文件绝对路径
SIZE:数据文件的初始大小
AOTUEXTEND:是否自动增长。
实例:
修改表空间:
ALTER TABLESPACE TABLESPACENAME
ADD DATAFILE 'DATAFILE' SIZE 10M AUTOEXTEND ON;//添加新数据文件

ALTER DATABASE DATAFILE 'DATEFILE' RESIZE 10M;//修改数据文件大小


删除表空间:
DROP TABLESPACE TABLESPACENAME;//删除表空间
DROP TABLESPACE TABLESPACENAME INCLUDING CONTENTS AND DATAFILE;//删除表空间与数据文件

查询所有表空间
select*fromdba_tablespaces;

查询所有表
select*fromall_tables;

查询表空间下有哪些表
select * from db@H_301_640@a_tables where tablespace_name='表空间名',注意表空间名大小写敏感。

看表空间属于哪个用户
select*fromdba_userswheredefault_tablespace='表空间';

9.1oracle表空间表分区详解及oracle表分区查询使用方法

9.1oracle表空间表分区详解及oracle表分区查询使用方法

此文从以下几个方面来整理关于分区表的概念及操作:
1.表空间及分区表的概念
2.表分区的具体作用
3.表分区的优缺点
4.表分区的几种类型及操作方法
5.对表分区的维护性操作.
(1.) 表空间及分区表的概念
表空间:
是一个或多个数据文件的集合,所有的数据对象都存放在指定的表空间中,但主要存放的是表, 所以称作表空间。

分区表:
当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区。表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上存放到多个表空间(物理文件上),这样查询数据时,不至于每次都扫描整张表。

( 2).表分区的具体作用
Oracle的表分区功能通过改善可管理性、性能和可用性,从而为各式应用程序带来了极大的好处。通常,分区可以使某些查询以及维护操作的性能大大提高。此外,分区还可以极大简化常见的管理任务,分区是构建千兆字节数据系统或超高可用性系统的关键工具。

分区功能能够将表、索引或索引组织表进一步细分为段,这些数据库对象的段叫做分区。每个分区有自己的名称,还可以选择自己的存储特性。从数据库管理员的角度来看,一个分区后的对象具有多个段,这些段既可进行集体管理,也可单独管理,这就使数据库管理员在管理分区后的对象时有相当大的灵活性。但是,从应用程序的角度来看,分区后的表与非分区表完全相同,使用 sql DML 命令访问分区后的表时,无需任何修改。

什么时候使用分区表:
1、表的大小超过2GB。
2、表中包含历史数据,新的数据被增加都新的分区中。

(3).表分区的优缺点
表分区有以下优点:
1、改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度。
2、增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用;
3、维护方便:如果表的某个分区出现故障,需要修复数据,只修复该分区即可;
4、均衡I/O:可以把不同的分区映射到磁盘以平衡I/O,改善整个系统性能。

缺点:
分区表相关:已经存在的表没有方法可以直接转化为分区表。不过 Oracle 提供了在线重定义表的功能。

(4).表分区的几种类型及操作方法

一.范围分区:

范围分区将数据基于范围映射到每一个分区,这个范围是你在创建分区时指定的分区键决定的。这种分区方式是最为常用的,并且分区键经常采用日期。举个例子:你可能会将销售数据按照月份进行分区。
当使用范围分区时,请考虑以下几个规则:
1、每一个分区都必须有一个VALUES LESS THEN子句,它指定了一个不包括在该分区中的上限值。分区键的任何值等于或者大于这个上限值的记录都会被加入到下一个高一些的分区中。
2、所有分区,除了第一个,都会有一个隐式的下限值,这个值就是此分区的前一个分区的上限值。
3、在最高的分区中,MAXVALUE被定义。MAXVALUE代表了一个不确定的值。这个值高于其它分区中的任何分区键的值,也可以理解为高于任何分区中指定的VALUE LESS THEN的值,同时包括空值。

例一:
假设有一个CUSTOMER表,表中有数据200000行,我们将此表通过CUSTOMER_ID进行分区,每个分区存储100000行,我们将每个分区保存到单独的表空间中,这样数据文件就可以跨越多个物理磁盘。下面是创建表和分区的代码,如下:

CREATE TABLE CUSTOMER 
( 
    CUSTOMER_ID NUMBER NOT NULL PRIMARY KEY,FirsT_NAME  VARCHAR2(30) NOT NULL,LAST_NAME   VARCHAR2(30) NOT NULL,PHONEVARCHAR2(15) NOT NULL,EMAILVARCHAR2(80),STATUS       CHAR(1) 
) 
PARTITION BY RANGE (CUSTOMER_ID) 
( 
    PARTITION CUS_PART1 VALUES LESS THAN (100000) TABLESPACE CUS_TS01,PARTITION CUS_PART2 VALUES LESS THAN (200000) TABLESPACE CUS_TS02 
)

例二:按时间划分

CREATE TABLE ORDER_ACTIVITIES 
( 
    ORDER_ID      NUMBER(7) NOT NULL,ORDER_DATE    DATE,TOTAL_AMOUNT NUMBER,CUSTOTMER_ID NUMBER(7),PAID   CHAR(1) 
) 
PARTITION BY RANGE (ORDER_DATE) 
(
  PARTITION ORD_ACT_PART01 VALUES LESS THAN (TO_DATE('01- MAY -2003','DD-MON-YYYY')) TABLESPACEORD_TS01,PARTITION ORD_ACT_PART02 VALUES LESS THAN (TO_DATE('01-JUN-2003','DD-MON-YYYY')) TABLESPACE ORD_TS02,PARTITION ORD_ACT_PART02 VALUES LESS THAN (TO_DATE('01-JUL-2003','DD-MON-YYYY')) TABLESPACE ORD_TS03
)
例三:MAXVALUE
CREATE TABLE RangeTable
( 
  idd   INT PRIMARY KEY,iNAME VARCHAR(10),grade INT  
) 
PARTITION  BY  RANGE (grade) 
( 
      PARTITION  part1 VALUES  LESS  THEN (1000) TABLESPACE  Part1_tb,PARTITION  part2 VALUES  LESS  THEN (MAXVALUE) TABLESPACE  Part2_tb 
);

二.列表分区:

该分区的特点是某列的值只有几个,基于这样的特点我们可以采用列表分区。

例一

CREATE TABLE PROBLEM_TICKETS 
( 
    PROBLEM_ID   NUMBER(7) NOT NULL PRIMARY KEY,DESCRIPTION  VARCHAR2(2000),CUSTOMER_ID  NUMBER(7) NOT NULL,DATE_ENTERED DATE NOT NULL,STATUS       VARCHAR2(20) 
) 
PARTITION BY LIST (STATUS) 
( 
      PARTITION PROB_ACTIVE   VALUES ('ACTIVE') TABLESPACE PROB_TS01,PARTITION PROB_INACTIVE VALUES ('INACTIVE') TABLESPACE PROB_TS02
)
例二
CREATE  TABLE  ListTable
( 
    id    INT  PRIMARY  KEY,name  VARCHAR (20),area  VARCHAR (10) 
) 
PARTITION  BY  LIST (area) 
( 
    PARTITION  part1 VALUES ('guangdong','beijing') TABLESPACE  Part1_tb,PARTITION  part2 VALUES ('shanghai','nanjing')  TABLESPACE  Part2_tb 
);
)
三.散列分区:

这类分区是在列值上使用散列算法,以确定将行放入哪个分区中。当列的值没有合适的条件时,建议使用散列分区。
散列分区为通过指定分区编号来均匀分布数据的一种分区类型,因为通过在I/O设备上进行散列分区,使得这些分区大小一致。

例一:

CREATE TABLE HASH_TABLE 
( 
  COL NUMBER(8),INF VARCHAR2(100) 
) 
PARTITION BY HASH (COL) 
( 
  PARTITION PART01 TABLESPACE HASH_TS01,PARTITION PART02 TABLESPACE HASH_TS02,PARTITION PART03 TABLESPACE HASH_TS03 
)
简写:
CREATE TABLE emp
(
    empno NUMBER (4),ename VARCHAR2 (30),sal   NUMBER 
)
PARTITION BY  HASH (empno) PARTITIONS 8
STORE IN (emp1,emp2,emp3,emp4,emp5,emp6,emp7,emp8);
hash分区最主要的机制是根据hash算法来计算具体某条纪录应该插入到哪个分区中,hash算法中最重要的是hash函数,Oracle中如果你要使用hash分区,只需指定分区的数量即可。建议分区的数量采用2的n次方,这样可以使得各个分区间数据分布更加均匀。

四.组合范围散列分区
这种分区是基于范围分区和列表分区,表首先按某列进行范围分区,然后再按某列进行列表分区,分区之中的分区被称为子分区。
CREATE TABLE SALES 
(
PRODUCT_ID VARCHAR2(5),SALES_DATE DATE,SALES_COST NUMBER(10),STATUS VARCHAR2(20)
)
PARTITION BY RANGE(SALES_DATE) SUBPARTITION BY LIST (STATUS)
(
   PARTITION P1 VALUES LESS THAN(TO_DATE('2003-01-01','YYYY-MM-DD'))TABLESPACE rptfact2009 
  ( 
      SUBPARTITION P1SUB1 VALUES ('ACTIVE') TABLESPACE rptfact2009,SUBPARTITION P1SUB2 VALUES ('INACTIVE') TABLESPACE rptfact2009 
  ),PARTITION P2 VALUES LESS THAN (TO_DATE('2003-03-01','YYYY-MM-DD')) TABLESPACE rptfact2009 
  ( 
      SUBPARTITION P2SUB1 VALUES ('ACTIVE') TABLESPACE rptfact2009,SUBPARTITION P2SUB2 VALUES ('INACTIVE') TABLESPACE rptfact2009 
  ) 
)
五.复合范围散列分区:
这种分区是基于范围分区和散列分区,表首先按某列进行范围分区,然后再按某列进行散列分区。
create table dinya_test 
 ( 
 transaction_id number primary key,item_id number(8) not null,item_description varchar2(300),transaction_date date 
 ) 
 partition by range(transaction_date)subpartition by hash(transaction_id)  subpartitions 3 store in (dinya_space01,dinya_space02,dinya_space03) 
 ( 
     partition part_01 values less than(to_date(‘2006-01-01','yyyy-mm-dd')),partition part_02 values less than(to_date(‘2010-01-01',partition part_03 values less than(maxvalue) 
 );

(5).有关表分区的一些维护性操作:

一、添加分区

以下代码给SALES表添加了一个P3分区

ALTER TABLE SALES ADD PARTITION P3 VALUES LESS THAN(TO_DATE('2003-06-01','YYYY-MM-DD'));

注意:以上添加的分区界限应该高于最后一个分区界限。
以下代码给SALES表的P3分区添加了一个P3SUB1子分区

ALTER TABLE SALES MODIFY PARTITION P3 ADD SUBPARTITION P3SUB1 VALUES('COMPLETE');

二、删除分区
以下代码删除了P3表分区:

ALTER TABLE SALES DROP PARTITION P3;

在以下代码删除了P4SUB1子分区:

ALTER TABLE SALES DROP SUBPARTITION P4SUB1;

注意:如果删除的分区是表中唯一的分区,那么此分区将不能被删除,要想删除此分区,必须删除表。

三、截断分区

截断某个分区是指删除某个分区中的数据,并不会删除分区,也不会删除其它分区中的数据。当表中即使只有一个分区时,也可以截断该分区。通过以下代码截断分区:

ALTER TABLE SALES TruncATE PARTITION P2;
通过以下代码截断子分区:
ALTER TABLE SALES TruncATE SUBPARTITION P2SUB2;

四、合并分区

合并分区是将相邻的分区合并成一个分区,结果分区将采用较高分区的界限,值得注意的是,不能将分区合并到界限较低的分区。以下代码实现了P1 P2分区的合并:

ALTER TABLE SALES MERGE PARTITIONS P1,P2 INTO PARTITION P2;

五、拆分分区

拆分分区将一个分区拆分两个新分区,拆分后原来分区不再存在。注意不能对HASH类型的分区进行拆分。

ALTER TABLE SALES SBLIT PARTITION P2 AT(TO_DATE('2003-02-01','YYYY-MM-DD')) INTO (PARTITION P21,PARTITION P22);

六、接合分区(coalesca)
结合分区是将散列分区中的数据接合到其它分区中,当散列分区中的数据比较大时,可以增加散列分区,然后进行接合,值得注意的是,接合分区只能用于散列分区中。通过以下代码进行接合分区:

ALTER TABLE SALES COALESCA PARTITION;

七、重命名表分区

以下代码将P21更改为P2

ALTER TABLE SALES RENAME PARTITION P21 TO P2;

八、相关查询

跨分区查询

select sum( *) from
(select count(*) cn from t_table_SS PARTITION (P200709_1)
union all
select count(*) cn from t_table_SS PARTITION (P200709_2)
);
查询表上有多少分区
SELECT * FROM useR_TAB_PARTITIONS WHERE TABLE_NAME='tableName'
查询索引信息
select object_name,object_type,tablespace_name,sum(value)
from v$segment_statistics
where statistic_name IN ('physical reads','physical write','logical reads')and object_type='INDEX'
group by object_name,tablespace_name
order by 4 desc

--显示数据库所有分区表的信息:
select * from DBA_PART_TABLES

--显示当前用户可访问的所有分区表信息:
select * from ALL_PART_TABLES

--显示当前用户所有分区表的信息:
select * from USER_PART_TABLES

--显示表分区信息 显示数据库所有分区表的详细分区信息:
select * from DBA_TAB_PARTITIONS

--显示当前用户可访问的所有分区表的详细分区信息:
select * from ALL_TAB_PARTITIONS

--显示当前用户所有分区表的详细分区信息:
select * from USER_TAB_PARTITIONS

--显示子分区信息 显示数据库所有组合分区表的子分区信息:
select * from DBA_TAB_SUBPARTITIONS

--显示当前用户可访问的所有组合分区表的子分区信息:
select * from ALL_TAB_SUBPARTITIONS

--显示当前用户所有组合分区表的子分区信息:
select * from USER_TAB_SUBPARTITIONS

--显示分区列 显示数据库所有分区表的分区列信息:
select * from DBA_PART_KEY_COLUMNS

--显示当前用户可访问的所有分区表的分区列信息:
select * from ALL_PART_KEY_COLUMNS

--显示当前用户所有分区表的分区列信息:
select * from USER_PART_KEY_COLUMNS

--显示子分区列 显示数据库所有分区表的子分区列信息:
select * from DBA_SUBPART_KEY_COLUMNS

--显示当前用户可访问的所有分区表的子分区列信息:
select * from ALL_SUBPART_KEY_COLUMNS

--显示当前用户所有分区表的子分区列信息:
select * from USER_SUBPART_KEY_COLUMNS

--怎样查询出oracle数据库中所有的的分区表
select * from user_tables a where a.partitioned='YES'

--删除一个表的数据是
truncate table table_name;

--删除分区表一个分区的数据是
alter table table_name truncate partition p5;
转载原文地址:http://www.jb51.net/article/44959.htm

ArcSDE for Oracle表空间管理临时(TEMP)表空间

ArcSDE for Oracle表空间管理临时(TEMP)表空间

Oracle临时表空间主要用来做查询和存放一些缓冲区数据。临时表空间消耗的主要原因是需要对查询的中间结果进行排序。 重启数据库可以释放临时表空间,如果不能重启实例,而一直保持问题sql语句的执行,temp表空间会一直增长。直到耗尽硬盘空间。 以下操作会占

ArcSDE for Oracle表空间管理临时(TEMP)表空间

oracle临时表空间主要用来做查询和存放一些缓冲区数据。临时表空间消耗的主要原因是需要对查询的中间结果进行排序。


重启数据库可以释放临时表空间,如果不能重启实例,而一直保持问题sql语句的执行,temp表空间会一直增长。直到耗尽硬盘空间。


以下操作会占用大量的temporary:
    1、用户执行imp/exp 导入导出操作时,会使用大量的temporary段
    2、用户在Create 或者 rebuild index时
    3、执行create table ...... as 语句时
    4、移动用户下的数据到别的表空间时
    5、用户执行排序Order by 或 group by
    6、用户执行Distinct 操作
    7、用户执行Union 或 intersect 或 minus
    8、用户执行Sort-merge joins
    9、用户执行analyze


对ArcGIS用户来说,进行Oracle逻辑迁移、重建空间索引、空间数据与属性数据的关联等操作都会使用到Oracle的临时表,特别是如果有数据量比较大的空间数据重建空间索引,会使用PGA内存,如果该内存资源不足就会使用临时表空间资源,所以临时表空间的管理对用户来说也是比较重要的。


一般情况下,创建Oracle库之后默认有一个临时表空间TEMP,默认大小是30MB,在创建数据库用户时,都会为该用户设置一个临时表空间,那么该用户所做的以上某些操作自然会在占用临时表空间的资源。那么如果是OLTP系统,多个用户都在进行不同的操作,势必会带来临时表空间资源的占用。所以很多用户可以创建了多个表空间,根据用户业务类型分配相应的临时表空间大小。对于大型操作频繁(大型查询,大型分类查询,大型统计分析等),应指定单独的比较大容量的临时表空间,当然我们也可以创建临时表空间组来让Oracle自动合理分配临时表空间资源。


临时表空间组就是创建多个临时表空间数据文件,然后将这些临时表空间组成一个临时表空间组,设置Oracle的默认临时表空间,那么创建用户设置的临时表空间也为该临时表空间组,让Oracle自动管理临时表空间资源。

以下为oracle官方帮助:

A tablespace group enables a user to consume temporary space from multiple tablespaces. Using a tablespace group, rather than a single temporary tablespace, can alleviate problems caused where one tablespace is inadequate to hold the results of a sort, particularly on a table that has many partitions. A tablespace group enables parallel execution servers in a single parallel operation to use multiple temporary tablespaces.

----------------------------------------------------------------------------------


Blog:               http://blog.csdn.net/linghe301

----------------------------------------------------------------------------------


下面就实践一下创建临时表空间组


查明默认的临时表空间信息

SQL> select tablespace_name from dba_tablespaces;

TABLESPACE_NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
TEMP
USERS
EXAMPLE
SDE
ESRI
ESRI2
TEST

已选择10行。
登录后复制
创建多个临时表空间数据文件
SQL> create temporary tablespace temp2 tempfile ''E:\APP\ADMINISTRATOR\ORADATA\ORCL\temp02.dbf'' size 10M;

表空间已创建。

SQL> create temporary tablespace temp3 tempfile ''E:\APP\ADMINISTRATOR\ORADATA\ORCL\temp03.dbf'' size 10M;

表空间已创建。

SQL> create temporary tablespace temp4 tempfile ''E:\APP\ADMINISTRATOR\ORADATA\ORCL\temp04.dbf'' size 10M;

表空间已创建。

SQL> select name from v$tempfile;

NAME
--------------------------------------------------------------------------------
E:\APP\ADMINISTRATOR\ORADATA\ORCL\TEMP01.DBF
E:\APP\ADMINISTRATOR\ORADATA\ORCL\TEMP02.DBF
E:\APP\ADMINISTRATOR\ORADATA\ORCL\TEMP03.DBF
E:\APP\ADMINISTRATOR\ORADATA\ORCL\TEMP04.DBF
登录后复制
添加临时表空间组
SQL> alter tablespace temp tablespace group temp_group;

表空间已更改。

SQL> alter tablespace temp2 tablespace group temp_group;

表空间已更改。

SQL> alter tablespace temp3 tablespace group temp_group;

表空间已更改。

SQL> alter tablespace temp4 tablespace group temp_group;

表空间已更改。

SQL> select * from dba_tablespace_groups;

GROUP_NAME                     TABLESPACE_NAME
------------------------------ ------------------------------
TEMP_GROUP                     TEMP
TEMP_GROUP                     TEMP2
TEMP_GROUP                     TEMP3
TEMP_GROUP                     TEMP4
登录后复制
设置临时表空间为临时表空间组
SQL> alter database default temporary tablespace temp_group;

数据库已更改。

SQL> select temporary_tablespace from dba_users where username=''SDE'';

TEMPORARY_TABLESPACE
------------------------------
TEMP_GROUP
登录后复制

----------------------------------------------------------------------------------


Blog:               http://blog.csdn.net/linghe301

----------------------------------------------------------------------------------


关于临时表空间的问题:

很多用户会发现在使用临时表空间时,如果操作任务完成之后,系统不会自动清理临时表空间的资源。


可以通过Oracle11g新增的DBA_TEMP_FREE_SPACE视图来查看临时表空间的占用率和空闲率

SQL> select * from DBA_TEMP_FREE_SPACE;

TABLESPACE_NAME                TABLESPACE_SIZE ALLOCATED_SPACE FREE_SPACE
------------------------------ --------------- --------------- ----------
TEMP                                  32497664         2088960   31457280
TEMP4                                 10485760         2097152    9437184
TEMP3                                 10485760         4194304    7340032
TEMP2                                 10485760         3145728    9437184


SQL> select allocated_space*100/tablespace_size as used from DBA_TEMP_FREE_SPACE;

      USED
----------
6.42803126
        20
        40
        30
登录后复制


如果TEMPORARY TABLESPACE的类型是TEMPORARY,TEMPORARY TABLESPACE里的使用过的空间是不会被释放的,除非shutdown。


如果使用TEMPORARY类型的临时表空间,数据库刚刚startup后,第一个使用TEMPORARY tablespace进行排序的statement会创一个建sort segment,这个segment不会被释放,除非数据库restart,可以用V$SORT_SEGMENT察看当前的已分配了的sort segments地使用情况。

ArcSDE for Oracle表空间管理临时(TEMP)表空间

如果临时表空间的类型为PERMANENT,SMON会在process不再使用临时段之后去做清理。


如果是用PERMANENT tablespace作排序,由smon负责在statement结束之后删除被创建的temporary segments,这样空间可以被其他对象使用。

考虑到性能原因,当一个temporary extent被分配的时候,tablespace会做一个标记,操作结束之后这个extent不会被释放或回收,相应的,这个extent被简单的标志为free,对于后面的sort操作是available的,这样就省去了系统分配和回收temporary extent的负载。建议都是用临时类型。


当然,在Oracle11g版本用户也可以使用ALTER TABLESPACE SHRINK 命令对临时表空间为释放的资源进行Shrink。

----------------------------------------------------------------------------------


Blog:               http://blog.csdn.net/linghe301

----------------------------------------------------------------------------------


参考Oracle帮助文档:

Shrinking a Locally Managed Temporary Tablespace

Large sort operations performed by the database may result in a temporary tablespace growing and occupying a considerable amount of disk space. After the sort operation completes, the extra space is not released; it is just marked as free and available for reuse. Therefore, a single large sort operation might result in a large amount of allocated temporary space that remains unused after the sort operation is complete. For this reason, the database enables you to shrink locally managed temporary tablespaces and release unused space.

You use the SHRINK SPACE clause of the ALTER TABLESPACE statement to shrink a temporary tablespace, or the SHRINK TEMPFILE clause of the ALTER TABLESPACE statement to shrink a specific temp file of a temporary tablespace. Shrinking frees as much space as possible while maintaining the other attributes of the tablespace or temp file. The optional KEEP clause defines a minimum size for the tablespace or temp file.

Shrinking is an online operation, which means that user sessions can continue to allocate sort extents if needed, and already-running queries are not affected.

The following example shrinks the locally managed temporary tablespace lmtmp1 while ensuring a minimum size of 20M.

ALTER TABLESPACE lmtemp1 SHRINK SPACE KEEP 20M;
登录后复制

The following example shrinks the temp file lmtemp02.dbf of the locally managed temporary tablespace lmtmp2. Because the KEEP clause is omitted, the database attempts to shrink the temp file to the minimum possible size.

ALTER TABLESPACE lmtemp2 SHRINK TEMPFILE ''/u02/oracle/data/lmtemp02.dbf'';
登录后复制

默认可以不带KEEP参数,如果忽略KEEP 子句,则只要满足其它存储属性,数据库就会尽可能尝试收缩表空间/临时文件(所有当前使用的区的总空间),如果使用KEEP参数建议KEEP大小不能超过所操作临时表空间的最大值。如果该表空间对象参与了临时表空间组也适用于该命令。


注意:临时表空间过大或者过小都会对数据库性能有直接影响,所以建议在Shrink临时表空间都是用KEEP参数。


参考文献:

http://blog.chinaunix.net/uid-21267700-id-3295645.html

http://blog.csdn.net/tianlesoftware/article/details/8225395

----------------------------------------------------------------------------------


Blog:               http://blog.csdn.net/linghe301

----------------------------------------------------------------------------------



Oracle创建表空间及在表空间下创建用户(oracle扩展RAC表空间)

Oracle创建表空间及在表空间下创建用户(oracle扩展RAC表空间)

创建表空间及在表空间下创建用户(oracle扩展RAC表空间)

-- 查看所有数据文件路径以及对应的表空间名
select file_name , tablespace_name from dba_data_files;
 
SELECT
  TABLE_NAME,
  TABLESPACE_NAME
FROM
  USER_TABLES
  
  
  
SELECT t.tablespace_name, round(SUM(bytes / (1024 * 1024)), 0) ts_size 
FROM dba_tablespaces t, dba_data_files d 
WHERE t.tablespace_name = d.tablespace_name 
GROUP BY t.tablespace_name; 
 
 
SELECT SUM(bytes) / (1024 * 1024) AS free_space, tablespace_name 
FROM dba_free_space 
GROUP BY tablespace_name; 
 
 
SELECT a.tablespace_name, 
a.bytes total, 
b.bytes used, 
c.bytes free, 
(b.bytes * 100) / a.bytes "% USED ", 
(c.bytes * 100) / a.bytes "% FREE " 
FROM sys.sm$ts_avail a, sys.sm$ts_used b, sys.sm$ts_free c 
WHERE a.tablespace_name = b.tablespace_name 
AND a.tablespace_name = c.tablespace_name; 
 
 
-- 查看所有表空间,总容量,剩余容量
    SELECT tbs 表空间名,                                    
    sum(totalM) 总共大小M,                                    
    sum(usedM) 已使用空间M,                                    
    sum(remainedM) 剩余空间M,                                    
    sum(usedM)/sum(totalM)*100 已使用百分比,                            
    sum(remainedM)/sum(totalM)*100 剩余百分比                            
    FROM(                                            
     SELECT b.file_id ID,                                    
     b.tablespace_name tbs,                                    
     b.file_name name,                                    
     b.bytes/1024/1024 totalM,                                    
     (b.bytes-sum(nvl(a.bytes,0)))/1024/1024 usedM,                        
     sum(nvl(a.bytes,0)/1024/1024) remainedM,                            
     sum(nvl(a.bytes,0)/(b.bytes)*100),                                
     (100 - (sum(nvl(a.bytes,0))/(b.bytes)*100))                            
     FROM dba_free_space a,dba_data_files b                            
     WHERE a.file_id = b.file_id                                
     GROUP BY b.tablespace_name,b.file_name,b.file_id,b.bytes                    
     ORDER BY b.tablespace_name                                
    )                                            
    GROUP BY tbs 
   
 
 
 
--创建新的表空间
create tablespace njdata datafile ''+WLW_DATA1'' size 28000m autoextend on next 100m maxsize 30000m extent management local segment space management auto;
 
--查看表空间数据文件
select file_name from dba_data_files where tablespace_name=''NJDATA'';
 
--扩展表空间
alter tablespace njdata add datafile ''+WLW_DATA1'' size 28000m autoextend on next 100m maxsize 30000m;
 
--查询当前用户所属表空间
select username,default_tablespace from user_users;
 
--创建用户、赋予权限
create user sdj identified by sdj ACCOUNT UNLOCK
DEFAULT TABLESPACE njdata TEMPORARY TABLESPACE TEMP;
 
grant connect to sdj;
grant resource to sdj;
 
GRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW ,DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,DBA,CONNECT,RESOURCE,CREATE SESSION TO sdj;
 
 
 
select count(*) from sdj.historydata
 
select * from sdj.historydata order by rtime desc
 

关于oracle表空间追加oracle 加表空间的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于4.Oracle表空间、9.1oracle表空间表分区详解及oracle表分区查询使用方法、ArcSDE for Oracle表空间管理临时(TEMP)表空间、Oracle创建表空间及在表空间下创建用户(oracle扩展RAC表空间)等相关内容,可以在本站寻找。

本文标签: