一个表空间可以包含多个segments,也可以包含多个datafiles;
segments 和datafiles之间没有直接的关系;
数据文件可以保持在服务器的文件系统里面也可以保持在ASM设备中;
Oracle将一个 segment存储在多个数据文件中,一个数据文件包含多个segments的各个部分,而避免使用一个segment对应一个数据文件的方法,这样可以解决2个问题:
1、避免系统中出现成百上千个表或索引文件,增加了系统管理员的负担;
2、可以避免文件最大容量对单个segment的限制;
常见的segment有以下几种形式:table,index,undo segments
而PL/SQL procedures,views,sequences不是segments,他们不包含数据,存在于数据字典中;
对于Oracle数据库来说,基本单位是oracleblocks, 默认值为8K
同一个block当中可以存许多行记录;
在linux和windows系统上block size可以在2K-16K之间,而在其他一些系统上,可以为32K,受DB_BLOCK_SIZE初始化参数决定;这个参数在数据库创建后不能修改,它是组成SYSTEM表空间的block大小;
多个block可以组成一个extents
FAT格式的文件系统支持的最大文件为4G,每个目录中最多有512个文件
operating system block : 512B for NTFS, 1KB for ext3;
通过DBA_SEGMENTS可以查看到系统内所有的segments;
--查询系统中segments的情况
select * fromdba_segments;
select segment_type,count(1) from dba_segments
group by segment_typeorder by segment_type;
TABLE:表的存储形式可以有多种,最常见的是heap-structured tables
INDEX:
TYPE2 UNDO:就是undo类型数据
ROLLBACK:这种类型从9i以后就很少使用,应该使用automaticundo management;
TABLE PARTITION:一个表可以被分为多个partitions, 单个的partition可可以作为一种segments存在;
LOBSEGMENT, LOBINDEX, LOB PARTITION:如果一个列被定义为largeobject data type,那么在这个表中的列只存在这个大类型的一个指针,指向大类型数据的实际存储位置;
CLUSTER:A cluster is a segment that can contain several tables;它和partitioning的作用刚好相反,clustering lets you denormalize many tablesinto one segment;
NESTED TABLE:嵌套表
--确认某个segments所在位置的详细信息
select * fromdba_extents where owner='SJ' and segment_name='T';
--给表增加一个新的extent;
alter table Tallocate extent;
--确定某个segment所在的物理数据文件;
selecttablespace_name,file_name from dba_data_files where file_id=5;
--可以通过下面这个命令强制指定extent分配到具体哪个数据文件中;
altertable tablename allocate extent storage (datafile 'filename');
你可以通过查询DBA_TABLES来确定某个表在哪个表空间中,但是这个方法对partitioned tables不起作用,each partition is its own segment and can be in a differenttablespace.
partitioninglets one table(stored as multiple segments) span tablespaces;
文件存储技术
1、存储在local file system
2、存储在clustered file system:在RAC环境中使用的就是clustered file system. Oracle 公司的OCFS
3、存储在raw devices
4、存储在ASM devices:ASM is a logical volume manager designed for Oracle database files.
ASM可以管理的文件包括:controlfile, online redo log files, datafiles, backup files, archived redo logfiles, Data Pump files
ASM不可以管理的文件包括: Oralce Home, the alert log and the trace files;
确定三大文件信息的sql语句
--确定控制文件的信息
select name,block_size*file_size_blks bytes from v$controlfile;
--确定联机重做日志文件的信息
select member,bytesfrom v$log join v$logfile using (group#);
--确定数据文件和临时文件的信息
select name, bytesfrom v$datafile
union all
select name,bytesfrom v$tempfile;