您的位置:首页 > 数据库 > Oracle

17_Oracle_Admin_表空间的管理方式以及UNDO和临时表空间

2014-09-30 22:57 861 查看
一、表空间的管理





数据库表空间的管理主要分为两种:
1.数据字典的表空间管理――当空闲的extents释放了,数据字典中的表会做相应的调整,它相当于中央控制,对全局进行管理2.本地表空间的管理――tablespace自身来管理空闲的extents;Bitmap位图用来记录extents空闲与否,每一个extent对应位图上的一位,其中1表示extent被占用,0表示没有被占用。












如果SYSTEM是本地管理的,那么该数据库将不支持表空间的数据字典管理方式。





使用数据字典进行中央管理,需要定期对数据文件进行整理。





二、将Dictionary-Managed方式转换为Locally-Managed方式




出于一些历史原因或其他的原因,需要将Dictionary 的管理方式转换为本地管理的方式,只需要运行Oracle提供的一个包即可:

DBMS_SPACE_ADMIN.TABLESPACE_MICGRATE_TO_LOCAL(‘SYSTEM’);




通过以下具体可以完成转换:
1. 对数据库进行完整的备份;
2. 准备一个非SYSTEM的临时表空间,使用命令 CREATE TEMPORARYTABLESPACE可以创建临时表空间
3. 从Dictionary-managed的表空间中消除undo的是segments。
4. 至少确保有一个online undo的segment是本地管理的。
5. 将所有表空间(除undo 表空间和默认的临时表空间外)都设为只读模式;
6. 以restricted模式启动数据库,以防止其他用户登录;
7. 对system的表空间使用DBMS_SPACE_ADMIN.TABLESPACE_MICGRATE_TO_LOCAL(‘SYSTEM’)语句完成转换。

需要用到这种转换工作的可能性并不大,仅作了解即可。

三、 UNDO TABLESPACE




UNDO 表空间主要用来存储UNDO segment,UNDO主要保存的是一条记录修改之前的信息,当需要执行rollback操作时,会将UNDO segment里的信息拷贝到原来的位置。
UNDO Tablespace只能放UNOD的相关信息,它的extent只能是locally managed的。
它的创建方式和其他表空间的创建方式类似,执行CREATEUNDO TABLESPACE即可。

四、Temporary Tablespace





临时表空间类似于一个中转站,某些操作如sorting之类的,需要将一些数据存放在这里。它不可以存放一些需要长久保存的数据,可以由多个用户共享,推荐使用locallymanaged的方式。创建方式和其他的tablespace类似: CREATE TEMPORARY TABLESPACE。





9i及以前的数据库中,如果没有指定缺省的temporary tablespace,那么数据库会将SYSTEM tablespace作为默认的temporary tablespace,这是一个比较危险的操作,因此从10g和11g以后在创建数据库时会要求强制指定一个默认的temporary tablespace,且采用locally managed。





创建默认的temporarytablespace有两种方式,一种是在创建数据库时指定,另一种是创建了数据库之后,使用alterdatabase来指定。




在创建数据库时指定temporarytablespace,只需要加入DEFAULT TEMPORARYTABLESPACE语句就可以了。



如果创建数据库时没有指定,可以先创建一个temporarytablespace,然后使用ALTER DATABASEDEFAULT TEMPORARY TABLESPACE来指定:

=======查看temporary tablespace的信息========
SQL> conn / as sysdba
Connected.
SQL> desc database_properties;
Name                                      Null?    Type
------------------------------------------------- ------------------
PROPERTY_NAME                             NOT NULL VARCHAR2(30)
PROPERTY_VALUE                                     VARCHAR2(4000)
DESCRIPTION                                        VARCHAR2(4000)

SQL> col property_name format a20
SQL> col property_value format a20
SQL> col description format a30
SQL> select * from database_properties;

PROPERTY_NAME     PROPERTY_VALUE           DESCRIPTION
----------------------------------------------------------------------
DICT.BASE                    2    dictionary base tables version #

DEFAULT_TEMP_TABLESPACE     TEMP  Name of default temporary tablespace
-- 缺省的temporary tablespace
DEFAULT_PERMANENT           USERS   Name of default permanenttablespace
_TABLESPACE
DEFAULT_EDITION         ORA$BASE   Name of the database defaultedition
…

WORKLOAD_REPLAY_MODE    PREPARE     implies external replay clients
can connect;REPLAY implies workload replay is in progress

查询v$tablespace这个动态性能可以获取所有的表空间名字

SQL> select * from v$tablespace;
TS# NAME                           INC BIG FLA ENC
---------- ------------------------------ --- --- --- ---
0 SYSTEM                         YES NO  YES
1 SYSAUX                         YES NO  YES
2 UNDOTBS1                       YES NO  YES
4 USERS                          YES NO  YES
3 TEMP                           NO  NO  YES
-- temporarytablespace
6 EXAMPLE                        YES NO  YES

6 rows selected.

dba_tablespaces表也有表空间的相关信息:

SQL> desc dba_tablespaces;
Name                                     Null?    Type
------------------------------------------------- -------------------
TABLESPACE_NAME                           NOT NULL VARCHAR2(30)
BLOCK_SIZE                                NOT NULL NUMBER
INITIAL_EXTENT                                     NUMBER
…
EXTENT_MANAGEMENT                                  VARCHAR2(10)
CONTENTS                                           VARCHAR2(9)

SQL> select tablespace_name, contents,extent_management from dba_tablespaces;

TABLESPACE_NAME                CONTENTS   EXTENT_MAN
------------------------------ ----------------------------------------
SYSTEM                          PERMANENT             LOCAL
SYSAUX                          PERMANENT             LOCAL
UNDOTBS1                        UNDO                  LOCAL
TEMP                            TEMPORARY             LOCAL
USERS                           PERMANENT             LOCAL
EXAMPLE                         PERMANENT             LOCAL

6 rows selected.


=========创建临时表空间============
SQL> create temporary tablespace mytemp
2 tempfile'/oracle/oradata/orcl/mytemp01.dbf' size 100M
3 extent management local;

Tablespace created.

[oracle@localhost ~]$ cd /oracle/oradata/orcl
[oracle@localhost orcl]$ ll
total 1807580
-rw-r-----. 1 oracle oinstall   9748480 Aug 30 11:45 control01.ctl
-rw-r-----. 1 oracle oinstall   9748480 Aug 27 09:21 control02.ctl
-rw-r-----. 1 oracle oinstall   9748480 Aug 27 09:21 control03.ctl
-rw-r-----. 1 oracle oinstall 104865792 Aug 30 07:05example01.dbf
-rw-r-----. 1 oracle oinstall 104865792 Aug 30 11:45mytemp01.dbf
# 新创建的temporary tablespace,大小为100M
…
-rw-r-----. 1 oracle oinstall  20979712 Aug 30 10:30 temp01.dbf
-rw-r-----. 1 oracle oinstall  57679872 Aug 30 11:45 undotbs01.dbf

这个临时表空间的创建速度非常快,因为操作系统并不是实实在在的划分了100M用作临时表空间,而只是建立了一个框架,通过df命令查询磁盘的剩余空间,可以看到在创建temporarytablespace之前和之后剩余空间并没有发生变化。

SQL> select tablespace_name, contents,extent_management from dba_tablespaces;

TABLESPACE_NAME                CONTENTS  EXTENT_MAN
------------------------------ --------- ----------
SYSTEM                         PERMANENT LOCAL
SYSAUX                         PERMANENT LOCAL
UNDOTBS1                       UNDO      LOCAL
TEMP                           TEMPORARY LOCAL
USERS                          PERMANENT LOCAL
EXAMPLE                        PERMANENT LOCAL
MYTEMP                         TEMPORARY LOCAL
--新创建的临时表空间

7 rows selected.


=========修改临时表空间的缺省值为新建的临时表空间============

SQL> alter database default temporarytablespace mytemp;

Database altered.

SQL> select * from database_properties;
PROPERTY_NAME       PROPERTY_VALUE       DESCRIPTION
---------------------------------------------------------------------
DICT.BASE                      2     dictionary base tablesversion #
DEFAULT_TEMP_TABLESP MYTEMP          Name of default temp
-- 缺省的表空间已经变成MYTEMP了
ACE                                  orary tablespace
DEFAULT_PERMANENT_TA USERS           Name of default perm
BLESPACE

五、临时表空间的局限性




缺省的全局临时表空间不能drop,如果要drop一个全局的临时表空间,需要先将其设定为offline,然后将全局的临时表空间alter到另一个表空间(一个数据库可以有多个临时表空间,但只能有一个全局的默认临时表空间;undo 表空间也是同理),再将其drop掉。

本文出自 “重剑无锋 大巧不工” 博客,请务必保留此出处http://wuyelan.blog.51cto.com/6118147/1560199
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: