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。

查看实例的临时表空间

SQL1:

SQL> SELECT PROPERTY_NAME, PROPERTY_VALUE
2 FROM DATABASE_PROPERTIES
3 WHERE PROPERTY_NAME='DEFAULT_TEMP_TABLESPACE';
SQL2:
SELECT USERNAME, TEMPORARY_TABLESPACE FROM DBA_USERS;
查看临时表空间信息:
SET LINESIZE 1200
COL NAME FOR A60
SELECT FILE# AS FILE_NUMBER
,NAME AS NAME
,CREATION_TIME AS CREATION_TIME
,BLOCK_SIZE AS BLOCK_SIZE
,BYTES/1024/1024/1024 AS "FILE_SIZE(G)"
,CREATE_BYTES/1024/1024/1024 AS "INIT_SIZE(G)"
,STATUS AS STATUS
,ENABLED AS ENABLED
FROM V$TEMPFILE;

删除用户与数据库:

1、以system用户登录查找需要删除的用户(普通用户没有删除权限)
select * from dba_users;
2、查询需要删除用户对应的表空间
select * from dba_data_files;
3、删除用户和表空间
drop user usernamecascade;
drop tablespace?tablespacename?including contents and datafiles cascade constraint;
在删除用户时可能会碰到无法删除当前连接的用户,这是由于还有数据库连接到该用户,有会话存在,需要先删除会话。
最暴力的做法是直接shutdown数据库,然后重启即可。。。
一般的操作是通过查询SessionID,手动杀掉会话再删除用户:
1)查询连接情况:select username,sid,serial# from v$session;
2)找到要删除用户的sid和serial并删除:alter system kill session 'sid,serial';
再执行删除用户的操作,如果还是无法删除说明还有连接的会话,继续执行删除会话的操作。

临时表空间组

临进表空间组:

临进表空间组是ORACLE 10g引入的一个新特性,它是一个逻辑概念,不需要显示的创建和删除。只要把一个临时表空间分配到一个组中,临时表空间组就自动创建,所有的临时表空间从临时表空间组中移除就自动删除。

一个临时表空间组必须由至少一个临时表空间组成,并且无明确的最大数量限制.

A temporary tablespace group contains at least one tablespace. There is no limit for a group to have a maximum number of tablespaces

如果删除一个临时表空间组的所有成员,该组也自动被删除。 

临时表空间的名字不能与临时表空间组的名字相同。

It shares the namespace of tablespaces, thus its name cannot be the same as that of any tablespace.

可以在创建临时表空间是指定表空间组,即隐式创建。

SQL>CREATE TEMPORARY TABLESPACE TEMP2     
TEMPFILE '/u01/app/oracle/oradata/GSP/temp2_1.dbf' SIZE 200M     
TABLESPACE GROUP GRP_TEMP;
查看临时表空间组:
SQL> SELECT * FROM DBA_TABLESPACE_GROUPS;
GROUP_NAME                            TABLESPACE_NAME
------------------------------ ------------------------------
GRP_TEMP                                  TEMP2

也可以指定已经创建好的临时表空间的临时表空间组。

SQL> ALTER TABLESPACE  TEMP TABLESPACE GROUP GRP_TEMP;  
  Tablespace altered.
SQL> select * from dba_tablespace_groups;
GROUP_NAME                     TABLESPACE_NAME
------------------------------ ------------------------------
GRP_TEMP                       TEMP
GRP_TEMP                       TEMP2

从组中移除:

SQL> ALTER TABLESPACE TEMP TABLESPACE GROUP '';
当为数据库指定临时表空间或为用户指定临时表空间时,可以使用临时表空间组的名称
ALTER USER DM TEMPORARY TABLESPACE GRP_TEMP;

猜你喜欢

转载自blog.csdn.net/weixin_41492331/article/details/86606547
今日推荐