oracle数据库,所有数据从逻辑结构上看都是存放在表空间当中,当然表空间下还有段、区、块等逻辑结构。
一个ORACLE数据库能够有一个或多个表空间,而一个表空间则对应着一个或多个物理的数据库文件。
表空间的定义:存放数据的一个容器。表空间由一个数据文件或多个数据文件组成,一个数据文件只属于一个表
空间。
-----(这个容器会随着数据文件的增加而增大)
表空间的作用能帮助DBA用户完成以下工作:
1.决定数据库实体的空间分配;
2.设置数据库用户的空间份额;
3.控制数据库部分数据的可用性;
4.分布数据于不同的设备之间以改善性能;
5.备份和恢复数据。
以oracle为准,oracle系统里有多少基本的表空间。
select * from dba_tablespaces;
系统中默认创建的几个表空间:
SYSTEM 系统表空间
SYSAUX 系统辅助表空间
USERS 用户表空间
UNDOTBS1 回滚表空间
EXAMPLE
TEMP 临时表空间
系统中必须的表空间有那几个?
答案: SYSTEM、SYSAUX、TEMP、UNDO, 像USERS、EXAMPLE等表空间是可有可无的。
表空间的分类:(按存储时间分)
1.永久表空间 存放永久性的数据,如表,索引等。
2.临时表空间 存放临时数据,保存PGA内存溢出时的数据排序,分组产生的临时数据
3.UNDO表空间 保存数据修改前的镜像。(修改数据之前,oracle会拷贝一份到UNDO表空间)
表空间的管理方式:
A.本地管理表空间(LMT)
B.数据字典管理表空间(DMT)
A.本地管理表空间:一种比较先进的管理扩展(extent)的方式;当使用本地管理表空间时是使用6个块
(从第三个到第八个)来标识整个表空间里的每一个扩展(extent);
B.字典管理表空间:这种方式是为了与之前版本兼容而提供的。11g里是不能创建字典管理表空间的
,被强制推荐,只能倒入老版本中的字典管理表空间。
--------------------------------------------------------------------
表空间增删查改相关操作:
——创建表空间:
1.创建包含一个初始大小为10M的数据文件,每次自增长1M,最大自增长为20M的表空间。
SQL> create tablespace tbs
2 datafile ‘/oracle/tbs01.dbf‘ size 10M autoextend on next 1M maxsize 20M;
2.创建包含两个数据文件的表空间,第一个数据文件初始大小为20m,每次自增长为1M,自增长最大为30M;
第二个数据文件初始大小为10M,每次自增长为5M,无限制大小;
SQL> create tablespace ts
2 datafile ‘/oracle/ts01.dbf‘ size 20M autoextend on next 1M maxsize 30M,
3 ‘/oracle/ts02.dbf‘ size 10M autoextend on next 5M;
——扩展表空间;
当表超过表空间大小时,要对表空间进行扩充。(增加表空间大小的方法有三种)
(1)添加数据文件。
(2)改变数据文件大小。
(3)允许数据文件自动扩展。
a.添加数据文件:
语句:alter tablespace tablespace_name add datafiel ‘path_dbf‘ size 大小;
--为ts表空间添加一个初始大小为3M不自增长的数据文件;
SQL> alter tablespace ts
2 add datafile ‘/oracle/ts03.dbf‘ size 3M;
思考——
SQL> alter tablespace ts
2 add datafile ‘/oracle/ts04.dbf‘ size 2M autoextend on next 2M maxsize 10M
3 /
b. 改变数据文件的大小
alter database datafile ‘path_.dbf‘ resze 大小;
-为ts表空间的数据文件增加8m;
SQL> alter database datafile ‘/oracle/ts04.dbf‘ resize 8M;
c.允许数据文件自动扩展
alter database datafile ‘path_.dbf‘ autoextend on next size_大小 maxsize size_大小;
-改变tbs表空间01号数据文件为自增长,每次自增长1M,最大限制为10M;
SQL> alter database datafile ‘/oracle/tbs01.dbf‘ autoextend on next 1M maxsize 10M;
-------如何为新建表指定表空间;
两个例子:
SQL> create table c1(a int,b char)
2 tablespace tbs
3 /
SQL> create table c2
2 tablespace ts
3 as select * from dept;
----------把表迁移到另外一个表空间里;
语句:alter table table_name move tablespace new_tablespace_name;
SQL> alter table c2 move tablespace tbs;
----另------
语句:alter table table_name move;
整理表空间碎片;
-------------删除表空间:
删除ts表空间;
SQL>drop tablespace tq;
删除表空间,一并删除数据文件;
语句:drop tabelpaces tablespace_name including contents and datafiles;
SQL> drop tablespace tq including contents and datafiles;
--------修改表空间名称
SQL> alter tablespace ts rename to ts1;
--------------查询表空间相关:
稍微回顾一下:学习至今,学了几个oracle视图?
1.user_constraint 约束相关视图
2.recyclebin 回收站视图
3.dba_tables 表属性视图
4.dba_tablespaces 表空间视图
5.dba_data_files 数据文件视图
以几个常用查询为例:
----查询该表属于哪个表空间;
SQL>select table_name,tablespace_name from dba_tables where table_name=‘‘;
--包含数据库中所有表空间的描述信息
SQL> select * from dba_tablespaces;
--包含当前用户的表空间的描叙信息
SQL> select * from user_tablespaces;
--包含从控制文件中获取的表空间名称和编号信息
SQL> select * from v$tablespace;
查看数据文件
--包含数据文件以及所属的表空间的描述信息
SQL> select * from dba_data_files;
--包含临时数据文件以及所属的表空间的描述信息
SQL> select * from dba_temp_files;
--包含从控制文件中获取的数据文件的基本信息,包括它所属的表空间名称、编号等
SQL> select * from dba_temp_files;
--包含所有临时数据文件的基本信息
SQL> select * from v$datafile;