一个数据库被分成一个个的逻辑单元,这些逻辑单元叫:表空间。

表空间用于存放数据库象(表、索引等),一个数据库逻辑上由一个或者多个表空间组成。 表空间由一个或多个数据文件(物理结构)组成。

表空间用于存放数据库对象。而这些对象实际上存放在数据文件中。数据文件是数据的物理载体。

 

每个数据库都有一个系统表空间(system  tablespace)和一个辅助表空间(Sysaux tablespace).创建数据库时,Oracel会自动创建这两个表空间。

 

数据库有以下类型的表空间:永久表空间(Permanent Tablespaces)、临时表空间(Temporary Tablespace)、回滚表空间(Undo Tablespace)。

 

表空间中, 区 (extent)的管理方式:

字典管理(dictionary,使用数据字典来跟踪表空间中区的使用。放分配一个新的区、使用一个区、或释放一个区的时候,Oracle都会更新数据字典FET$与UET$,

通过数据字典来反映去的状态,当更新数据字典时,会产生回滚信息,Oracle会存储这些回滚信息。(这也是字典管理的表空间被逐渐淘汰的根源)。

本地管理(locally Managed Tablespaces), 它通过本地表空间来管理区的使用。表空间中的每个数据文件都有一个位图(Bitmap),位图存放在数据文件头,位图中的每个位(bit)与一个或者一组数据块(block)相对应,当分配一个区或者释放一个区的时候,Oracle 将更新位图以反映这种改变。

特别的,对于本地管理的表空间,Oracle不会更新数据字典,也不会产生回滚信息。

============

概念区分:

============

数据库:
Oracle数据库是数据的物理存储。这就包括(数据文件ORA或者DBF、控制文件、联机日志、参数文件)。其实Oracle数据库的概念和其它数据库不一样,这里的数据库是一个操作系统只有一个库。可以看作是Oracle就只有一个大数据库。

实例:  
一个Oracle实例(Oracle Instance)有一系列的后台进程(Backguound Processes)和内存结构(Memory Structures)组成。一个数据库可以有n个实例。

用户:
用户是在实例下建立的。不同实例可以建相同名字的用户。

表空间:
表空间是一个用来管理数据存储逻辑概念,表空间只是和数据文件(ORA或者DBF文件)发生关系,数据文件是物理的,一个表空间可以包含多个数据文件,而一个数据文件只能隶属一个表空间。

数据文件(dbf、ora):
 数据文件是数据库的物理存储单位。数据库的数据是存储在表空间中的,真正是在某一个或者多个数据文件中。而一个表空间可以由一个或多个数据文件组成,一个数据文件只能属于一个表空间。一旦数据文件被加入到某个表空间后,就不能删除这个文件,如果要删除某个数据文件,只能删除其所属于的表空间才行。

网上找了个图片:

 

 建表空间是在实例下建,在EM web页面,先登录dabook实例,再创建表空间)

1 CREATE SMALLFILE TABLESPACE "TESTDB" DATAFILE 'E:\APP\DINGQI\ORADATA\TEST\DABOOK\testdb' SIZE 100M LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO 

使表空间离线/在线:

ALTER DATABASE testdb OFFLINE;//使表空间的数据不可访问。
ALTER DATABASE  testdb ONLINE; //在数据库打开的情况下,SYSTEM 表空间永远在线,因为oracle需要访问存放在SYSTEM表空间中的数据字典。

重命名表空间:

ALTER TABLESPACE testdb TO userdb2;// 不能重命名表空间SYSTEM SYSAUX.
ALTER TABLESPACE testdb READ ONLY;//只读

删除表空间:

DROP TABLESPACE testdb  INCLUDING CONTENTS AND DATAFILES;//删除表空间及其数据文件
DROP TABLESPACE testdb INCLUDING CONTENTS;//删除表空间

表空间加密:可以使用的算法:3DES168,AES128,AES1192,AES256

CREATE TABLESPACE securespace
DATAFILE ' d:\data' SIZE 100M
ENCRUPTION USING 'AES256'
DEFAULT STORAGE ( ENCRYPT);

 

SELECT tablespace_name FROM DBA_TABLESPACES;//列出数据库中有哪些表空间
SELECT FILE_NAME FROM DBA_DATA_FILES WHERE TABLESPACE_NAME='MYUNDOTBS'//数据字典DBA_DAT
A_FILES 存放数据文件的信息,从该视图中,可以知道一个表空间由哪些数据文件组成。

得到创建表空间的SQL语句:

首先以system的身份登录数据库 conn system;设置SQL*Plus的环境变量: set long 10000(如果不进行设置,执行DBMS_METADATA.GET_DDL将产生错误)

1 SELECT DBMS_METADAT.GET_DDL('TABLESPACE','MYSPACE') FROM dual;

使用户a拥有访问表空间 USERS的权限:

alter user item quota unlimited on USERS;

 

扩展表空间:

ALTER DATABASE  DATAFILE 'D:\data‘ RESIZE 1000M




posted on 2013-08-25 11:48  happinessqi  阅读(436)  评论(0编辑  收藏  举报