全部博文(101)
分类: Oracle
2011-04-19 18:33:06
一.表空间的两种管理方式
1.1数据字典管理的表空间
定义:表空间的所有区的管理都是在数据字典中进行的。
但是从Oracle9.2开始,如果SYSTEM表空间为本地管理的,ORACLE系统就不允许再创建数据字典管理的表空间。
创建示例:
SQL>create tablespace jinlian
2 datafile 'c:/jinlian01.dbf' size 50 M
3 mimimum extent 50k extent management dictionary--这条语句就是说明是数据字典管理的。
4 default storage (initial 50k next 50k maxextents 100 pctincrease 0);
SQL>
上面语句中名词的解释:
mimimun extent 100:最小的区为50k
initial extent 50k:磁盘空间自动分配时第一次分配为50k
next 50k:第二次为50k
maxextents 100:分配的最大磁盘空间为100个
1.2本地管理的表空间
定义:本地管理的表空间的区是在表空间中管理的。
创建示例:
C:/Documents and Settings/jacky>sqlplus/nolog
SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 3月 24 16:32:55 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn / as sysdba;
已连接。
SQL> create tablespace jinlian_index
2 datafile 'c:/jinlian_index01.dbf'
3 size 10m
4 extent management local
5 uniform size 1m;--这样所有分配区的大小都是1m;
表空间已创建。
SQL> --确认一下
SQL> select tablespace_name,block_size,extent_management,segment_space_managemen
t
2 from dba_tablespaces
3 where tablespace_name='JINLIAN_INDEX';
TABLESPACE_NAME BLOCK_SIZE EXTENT_MAN SEGMEN
------------------------------ ---------- ---------- ------
JINLIAN_INDEX 8192 LOCAL AUTO
SQL> --可以看到状态为LOCAL,本地管理方式。
二.还原表空间
还原表空间是Oracle9i引入的,它是用来自动的管理还原(回滚)数据的。
还原表空间的区段是由本地管理的,而且创建的SQL语句中只能使用
DATAFILE和EXTENT MANAGEMENT子句。
创建示例:
SQL> create uodo tablespace jinlian1_undo
2
SQL> create undo tablespace jinlian1_undo
2 datafile 'c:/jinlian_undo001.dbf'
3 size 10m;
表空间已创建。
SQL> --确认一下是还原表空间;
SQL> select tablespace_name,status,contents
2 from dba_tablespaces
3 where tablespace_name='JINLIAN1_UNDO';
TABLESPACE_NAME STATUS CONTENTS
------------------------------ --------- ---------
JINLIAN1_UNDO ONLINE UNDO
SQL> --完成。
三.临时表空间
定义:临时表空间是作为排序操作使用的。当pga可能装不下,服务器可能就要把一些
中间的结果写到临时表空间中,以增加效率。
临时表空间可以由多个用户共享,但是其中不能包含永久对象。
创建表空间时,必须使用标准数据块。
创建示例:
create temporary tablespace jinlian_temp
tempfile 'c:/jinlian_temp01.dbf'
size 10m
extent management local
uniform size 2m;
*限制:
本地管理的表空间是基于临时数据文件的,这些文件与普通的数据文件非常相似,但是他们还有
一下特征:
*临时数据文件的状态不能置为只读;
*不能将临时数据文件重新命名;
*临时数据文件总是置为NOLOGGING状态;
*不能用ALTER DATABASE命令创建临时数据文件;
*以只读方式运行的数据库需要临时数据文件;
*介质恢复时不能恢复临时数据文件的;
*为了优化临时表空间的效率,还应将UNIFORM SIZE设置为SORT_AREA_SIZE参数的整数倍;
四:默认临时表空间
定义:默认临时表空间也是ORACLE9I开始引入的,一般创建数据库的时候就有了默认临时表空间
如果没有默认临时表空间,而且一个用户在创建时也没有知道临时表空间,那么这个用户将使用
system表空间为排序区,这样是system表空间碎片化,从而降低了数据库的效率。如果一个数据
库没有设定默认临时表空间,那么就将system表空间作为默认临时表空间。
4.1修改默认临时表空间示例:
SQL> col property_name for a16
SQL> col property_value for a16
SQL> col description for a38
SQL> select * from database_properties
2 where property_name like 'DEFAULT%';
PROPERTY_NAME PROPERTY_VALUE DESCRIPTION
---------------- ---------------- --------------------------------------
DEFAULT_TEMP_TAB TEMP Name of default temporary tablespace
LESPACE
DEFAULT_PERMANEN USERS Name of default permanent tablespace
T_TABLESPACE
DEFAULT_TBS_TYPE SMALLFILE Default tablespace type
SQL> --可以看出描述中,TEMP是默认临时表空间;
SQL> --如果想修改默认临时表空间,看如下操作;
SQL> alter database default temporary tablespace jinlian_temp;
数据库已更改。
SQL> select * from database_properties
2 where property_name like 'DEFAULT%';
PROPERTY_NAME PROPERTY_VALUE DESCRIPTION
---------------- ---------------- --------------------------------------
DEFAULT_TEMP_TAB JINLIAN_TEMP Name of default temporary tablespace
LESPACE
DEFAULT_PERMANEN USERS Name of default permanent tablespace
T_TABLESPACE
DEFAULT_TBS_TYPE SMALLFILE Default tablespace type
SQL> --可以看到现在的默认临时表空间已经成为了JINLIAN_TEMP;
SQL> --再次将默认临时表空间修改为TEMP;
SQL> alter database default temporary tablespace temp;
数据库已更改。
SQL>
4.2默认临时表空间的一些限制
首先默认临时表空间不能被删除,除非有个新的可以使用的来替换它,而且必须
用命令来修改;修改后才能删除旧的默认表空间;
另外,以前使用旧的默认临时表空间的用户会自动的被赋予新的默认临时表空间;
最后,默认临时标记必须是临时表空间或者是系统表空间,而且不能置为脱机。
五.设置表空间脱机和联机
5.1以下表空间不能被置为脱机状态
*系统表空间
*上面有活动的还原/回滚段的表空间
*默认临时表空间
5.2命令
alter tablespace jinlian offline;--设置为脱机
alter tablespace jinlian online;--设置为联机
六.只读表空间
定义:当一个表空间为只读状态时,在该表空间中的数据库只能进行读操作,也就是
里面的数据不会变化,因为就不需要重做日志的保护,也就间接提高了系统的效率。
命令:
alter tablespace jinlian read only;--设置为只读;
alter tablespace jinlian read write;--设置为可读可写;
七.改变表空间的存储设置
命令:
alter tablespace jinlian
minimum extent 100k
default storage (initial 100k next 100k maxextents 200);
八.重置表空间的大小
命令如下:修改一个数据文件为可扩展
alter database datafile
'c:/jinlian01.dbf' autoextend on
next 1m;
手动设置数据文件的大小
alter database datafile 'c:/jinlian02.dbf' resize 100m;
增加数据文件
alter tablespace jinlian
add datafile 'c:/jinlian02.dbf'
size 10m;
移动数据文件的内容将单独作为一个专题下次发,谢谢!