1. Oracle引入逻辑结构的目的:为了更好的管理物理磁盘上的数据文件;增加了Oracle的可移植性;减少了Oracle从业人员的学习难度。
1)表空间(Tablespace):对应的物理结构就是一个或者多个数据文件。在逻辑上将是存放表,索引的地方。一个表空间可以有多个数据文件,但是一个数据文件只能属于一个表空间。
2)段(Segment):可以理解成我们熟悉的表,索引。一个数据文件中是包含多个段的。一个段可以分布在多个数据文件中。
3)数据扩展(Extent):多个Extent可以构成一个段。比如说对一个段进行数据添加(对表进行添加记录),是以Extent的形式进行的。一个Extent 不能跨越多个数据文件,否则如果一个Extent分布在多个数据文件中,就不是连续的空间了。
区(Extents):区是磁盘空间分配最小单位。每一个区的大小都是数据块的整数倍。
4)数据块(data block):最基本的逻辑单位了。若干个连续的数据块构成一个数据扩展(Extent)。
5)直接的关系:每个数据库是由一个或多个表空间组成的;每个表空间基于一个或多个操作系统的数据文件;每个表空间可以存放在一个或多个段;每个段是由一个或多个区段组成的;每个区段是由一个多个连续的Oracle数据库组成;每个Oracle数据库是由一个或多个连续的操作系统数据库组成;每个操作系统数据文件是由一个或多个区段所组成;每个操作系统数据文件是由一个或多个操作系统数据块所组成。
2. Oracle数据库有两类表空间:系统表空间和非系统表空间。系统表空间是与数据库一起建立的,在系统表空间中存有数据字典,包含系统还原段。
3. 数据字典管理的表空间
4. 本地管理的表空间
create tablespace xiaoming_index datafile 'D:\orcl\xiaoming\xiaoming_index.dbf' size 50m
extent management local
uniform size 1m;
注意:创建一个名为xiaoming_index的索引表空间,只给予一个数据文件。文件名D:\orcl\xiaoming\xiaoming_index.dbf,其大小50MB,使用本地管理的表空间(extent management local),每个extent的大小为1MB(uniform size 1m);
5. 还原表空间。Oracle 9i引入的,用来自动管理还原(回滚)数据的
create undo tablespace xiaoming_undo datafile 'D:\orcl\xiaoming\xiaoming_undo.dbf' size 20m;
注意:创建一个名为:xiaoming_undo的还原表空间,大小20m。
6. 临时表空间,是作为排序操作使用的
1)当用户使用诸如oder by子句时Oracle服务器就需要对所选的数据进行排序,这时如果排序的数据量很大,内存的排序区就可能装不下,因此Oracle服务器就要把一些中间的排序结果写到磁盘上,即临时表空间。
2)临时表空间可以由多个用户共享,在其中不能包含任何永久对象,临时表空间中排序段是在实例启动后当有一个排序操作时创建
create temporary tablespace xiaoming_temp tempfile 'D:\orcl\xiaoming\xiaoming_temp.dbf' size 10m
extent management local
uniform size 2m;
3)本地管理的临时表空间是基于临时数据文件,与普通文件的区别:临时数据文件的状态不能设置为只读;不能将临时数据文件重新命名;临时数据文件总是置为nologging状态;不能使用alter database命令创建临时数据文件;以只读方式运行的数据库需要临时数据文件;介质恢复是不能恢复临时数据文件的。
7. 默认临时表空间
1)查询当前默认临时表空间
select * from database_properties where property_name like 'DEFAULT%';
2)设置默认临时表空间
alter database default temporary tablespace xiaoming_temp;
3)默认临时表空间必须是临时表空间或是系统表空间,所以不能将默认临时表空间改为一个永久表空间,也不能将默认临时表空间设置为脱机
8. 设置表空间为脱机
1)将表空间设置为脱机状态,以进行数据库的维护,包括:在数据库处于打开状态下移动数据文件;在数据库处于打开状态下恢复一个表空间或一个数据文件;执行对表空间的脱机备;使数据库的一部分不可以被访问,而其它部分可以被正常访问。
2)一下表空间不能被设置为脱机状态:系统表空间;上面有活动的还原/回滚段的表空间;默认临时表空间
3)alter tablespace xiaoming offline; 设置为脱机状态
select tablespace_name,status,contents from dba_tablespace;
select file#,name,status from v$datafile;
4)alter tablespace xiaoming online;
9. 只读表空间
1)alter tablespace xiaoming read only;
2)alter tablespace xiaoming read write;
10. 改变表空间的存储设置
1)alter tablespace 表空间名
[minimun extent 正整数] [default 存储自子句]
2)alter tablespace xiaoming minimum extent 100k;
alter tablespace xiaoming default storage( initial 100k next 100k maxextents 200);
注意:xiaoming表空间的存储参数做如下的修改:minimun extent 为100k,initial和next设置为100k,而maxextents为200
11. 增加表空间的大小
1)改变数据文件的大小。在创建表空间时使用autoextend on 自动地改变数据文件的大小;在创建表空间之后使用带有autoextend on选项的alter database命令手动改变数据文件大小。
alter database datafile 'D:\ORCL\XIAOMING\XIAOMING_INDEX.DBF' autoextend on next 1m;
2)使用alter tablespace 语句增加数据文件
a)手动将表空间所对应的数据文件增加到100MB
alter database datafile 'D:\ORCL\XIAOMING\XIAOMING.DBF' resize 100m;
select file_name,tablespace_name,bytes/(1024*1024) from dba_data_files;
b)添加新的数据文件的方式增加表空间的大小
alter tablespace xiaoming add datafile 'D:\ORCL\XIAOMING\XIAOMING.DBF' SIZE 80M;
12. 移动数据文件的方法
1) alter tablespace 表空间名 rename datafile '文件名'[,'文件名'].... to '文件名'[,'文件名']...
注意:只适合于没有活动的还原数据或临时段的非系统表空间中的数据文件。表空间必须为脱机状态且目标文件必须存在,因为该语句只修改控制文件中指向数据文件的指针。
步骤:使用数据字典获取所需的表空间和数据文件的相关信息;将表空间置为脱机;使用操作系统命令移动或复制要移动的数据文件;执行alter tablespace rename datafile命令;将表空间置为联机;使用数据字典获取所需的表空间和数据文件的相关信息;如果需要,使用操作系统命令删除无用的数据文件。
2) alter database 表空间名 rename file '文件名'[,'文件名'].... to '文件名'[,'文件名']...
注意:适用于系统表空间和不能置为脱机的表空间中的数据文件,要求在使用该语句时,数据库必须运行在加载(mount)状态且目标数据文件必须存在
步骤:使用数据字典获取所需的表空间和数据文件的相关信息;关闭数据库系统;使用操作系统命令移动或复制要移动的数据文件;将数据库置为加载状态;执行alter tablespace rename file 命令;打开数据库系统;使用数据字典获取所需的表空间和数据文件的相关信息;如果需要,使用操作系统命令删除无用的数据文件。
13. 移动数据文件的应用实例
1)非系统表空间中的数据文件的移动
a)获得数据库中数据文件的分布情况,查看是否存在I/O竞争
select file_id,file_name,tablespace_name from dba_data_files order by file_id;
b)获得当前表空间的状态
select tablespace_name,status,contents from dba_tablespaces;
c)设置为脱机状态
alter tablespace users offline;
alter tablespace indx offline;
d)复制数据文件
host copy D:\winXP\oracle9i\oradata\oracle\USERS01.DBF D:\winXP\backup\oradata\
host copy D:\winXP\oracle9i\oradata\oracle\INDX01.DBF D:\winXP\backup\oradata\
e)使用命令重新命名表空间对应的数据文件名
alter tablespace users rename datafile 'D:\winXP\oracle9i\oradata\oracle\USERS01.DBF' to 'D:\winXP\backup\oradata\USERS01.DBF'
alter tablespace users rename datafile 'D:\winXP\oracle9i\oradata\oracle\INDX01.DBF' to 'D:\winXP\backup\oradata\INDX01.DBF'
f)将表空间的状态重新改为联机
alter tablespace users online;
alter tablespace indx online;
g)确认无误后,删除操作系统中无用的数据文件
2)系统表空间中的数据文件的移动
a)关闭数据库,将数据库置为加载状态
shutdown immediate;
startup mount;
b)复制数据文件
host copy D:\winXP\oracle9i\oradata\oracle\SYSTEM01.DBF D:\winXP\backup\oradata\
c)使用命令重新命名表空间system所对应的数据文件
alter database rename file 'D:\winXP\oracle9i\oradata\oracle\SYSTEM01.DBF' to 'D:\winXP\backup\oradata\SYSTEM01.DBF';
d)将数据库的状态置为打开
alter database open;
f)确认移动操作是否成功,确认无误后删除操作系统中无用的数据文件。
14. 删除表空间(系统表空间和活动端的表空间不能删除)
1)drop tablespace 表空间名
[including contents] [and datafiles] [cascade constraints]
a)[including contents]子句用来删除段;
b)[and datafiles]子句用来删除数据文件;
c)[cascade constraints]子句用来删除所有的引用完整性约束。
15. 利用OMF管理表空间(Oracle 9i引入,简化了表空间和他们所对应的数据文件的管理和维护)
1)设定数据文件存放的目录
alter system set db_create_file_dest='d:\orcl\oradata';
2)创建表空间(默认大小为100MB,且autoextend参数被设置为unlimited)
create tablespace xiaoming;
3)给xiaoming添加新的数据文件
alter tablespace xiaoming add datafile size 50m;
4)查看数据文件
select file_id,file_name,tablespace_name,bytes/(1024*1024) MB from dba_data_files;
5)删除表空间
drop tablespace xiaoming;
16. 数据文件,表空间和数据库之间的区别
数据文件是数据库的物理存储单位,而表空间TableSpace则是数据库的逻辑组成部分。数据库的数据是存储在表空间中的,而一个表空间可以由一个或多个数据文件组成,一个数据文件只能属于一个表空间。一旦数据文件被加入到某个表空间后,就不能删除这个文件,如果要删除某个数据文件,只能删除其所属于的表空间才行。
1)数据库,表空间,数据文件是紧密关联的,但它们有着重要的区别:
a)数据库和表空间
一个Oracle数据库由一个或多个叫做表空间的逻辑存储单元组成,表空间存储了所有数据库的数据。
b)表空间和数据文件
在Oracle数据库中的每一个表空间由一个或多个叫做数据文件的文件组成,文件是遵守Oracle运行的操作系统的物理结构。
c)数据库和数据文件
数据库的数据是集中存放在组成数据库的每个表空间的数据文件中。例如,最简单的Oracle数据库应该有一个表空间和一个数据文件。另一个数据库可以有三个表空间,每一个可以有两个数据文件(一共六个数据文件)。