表空间和数据文件
逻辑上数据存储在段(一般是表)中,物理上讲,数据存储在数据文件(datafile)中.
表空间是二者的抽象,一个表空间可能包含多个段,并由多个数据文件组成,段和数据文件没有直接关系.数据文件可以作为文件 系统中的文件存在,10g开始也可以作为自动存储管理(automatic storage management ASM)设备上的文件而存在.
虚线表示段和数据文件的多对多关系,应避免这种情况存在.
典型的段是表一个段可以仅存在于一个表空间中.
oracle块是数据库的基本I/O单元,数据文件设置为连续编号的oracle块.对于表空间来说,oracle块大小固定不变,默认8KB
多个块组成了区间extent,区间是一个数据文件中一组连续编号的oracle块.
一定要避免操作系统块大小超过oracle块大小!
数据存储在段中,视图DBA_SEGMENTS描述数据库中每个段:
select segment_type,count(1) from dba_segments group by segment_type order by segment_type
SEGMENT_TYPE COUNT(1)
----------------------------------------
CLUSTER 10
INDEX 1698
INDEX PARTITION 276
LOB PARTITION 1
LOBINDEX 551
LOBSEGMENT 551
NESTED TABLE 11
ROLLBACK 1
TABLE 1332
TABLE PARTITION 128
TYPE2 UNDO 10
TABLE 包含数据行的堆结构表,典型的段是表,但不能说表就是段,还有更复杂的表组织使用其他段类型.
INDEX 索引是键值的有序列表,相应的指针rowid指向每行的物理位置,rowid指定行位于哪个数据文件的哪个oracle块中,并指定行在块中的编号
TYPE2 UNDO 撤销段,存储数据的更改前版本,为了提供完整性(回滚,读取一致性和隔离),这些是必须的.
ROLLBACK 9i开始,引入了基于撤销段的自动撤销管理,总有一个回滚段保护用于创建数据库的事务
TABLE PARTITION 可将表分成多个区,可将一个表分不到多个表空间中.
INDEX PARTITION 默认是一个索引在一个段中,但也可对索引进行分区,如果对表进行分区,通常也会对这些表上的索引进行分区.
LOBSEGMENT LOBINDEX LOB PARTITION 如果将列定义为大对象数据类型,那么仅在表本身存储一个指针,指向列数据实际所在的不同段中的条目,
LOB可以拥有在此基础上构建的索引以便快速访问对象中的数据,也可以对LOB进行分区.
CLUSTER cluster段包含多个表,分区将一个表分布在多个段中,而cluster相反,允许将多个表反规范化(denormalize)为一个段.
NESTED TABLE 如果一个表列定义为本身就具有的列用户定义的对象类型,那么列可以作为嵌套表,存储在自身的段中.
每个段都有一个或多个区间,创建段时oracle将在指定的任何表空间中为其分配区间,最后随着数据的输入,区间被填满.此后 oracle将在同一表空间(不一定在同一个数据文件中)分配第二个区间.
一个区间由一组连续编号的块组成.
文件存储技术
数据文件可保存在四类设备上:本地文件系统,群集文件系统,原始设备和ASM磁盘组.
本地文件系统上的文件:最简单的数据文件,磁盘目录结构的普通操作系统文件.
群集文件系统上的文件:群集文件系统是外部磁盘,同时安装在多个计算机上.群集文件系统调停群集中所有计算机上运行的进程到磁盘的访问. 使用群集文件系统是一种RAC实现方法:数据库必须位于要打开它的所有实例可以访问的磁盘上. oracle公司的OCFS(oracle clustered file system oracle群集文件系统)是个好选择,OCFS最先为没有适当群集文件系统的linux和windows编写,10g被迁移到其它所有主流 操作系统上.
原始设备上的文件:还可能在根本没有文件系统的磁盘上创建数据文件.
ASM设备上的文件:ASM是10g引入的功能,是文件系统的替代品,基于数据文件存储.
有人认为原始设备性能最好,在现代磁盘和文件系统技术前,此观点无法立足,而且难以管理,会被淘汰.
ASM:oracle提供的逻辑卷管理器,与数据库绑定在一起,通常的做法是购买一组原始磁盘,将磁盘交给oracle,让oracle处理,系统管理员 根本不需要考虑如何创建文件系统.ASM只能存储数据库文件,不能存储二进制文件,始终必须将oracle主目录保存在常规文件系统上.
练习,看看数据库的物理结构
控制文件的名称和大小
select name,block_size*file_size_blks bytes from v$controlfile
NAME BYTES
-------------------------------------------------------------------------------------------------------
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\CONTROL01.CTL 7340032
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\CONTROL02.CTL 7340032
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\CONTROL03.CTL 7340032
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\CONTROL04.CTL 7340032
确定联机重做日志文件成员名称,大小:
select member,bytes from v$log join v$logfile using (group#);
MEMBER BYTES
----------------------------------------------------------------------------------------------------
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\REDO03.LOG 52428800
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\REDO02.LOG 52428800
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\REDO01.LOG 52428800
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\REDO01A.LOG 52428800
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\REDO02A.LOG 52428800
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\REDO03A.LOG 52428800
确定数据文件和临时文件的名称,大小:
select name,bytes from v$datafile
union all
select name,bytes from v$tempfile
NAME BYTES
----------------------------------------------------------------------------------------------------------
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\SYSTEM01.DBF 503316480
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\UNDOTBS01.DBF 36700160
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\SYSAUX01.DBF 272629760
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\USERS01.DBF 5242880
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\EXAMPLE01.DBF 104857600
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\BOBTEST.DBF 1048576
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\TEMP01.DBF 20971520
逻辑上数据存储在段(一般是表)中,物理上讲,数据存储在数据文件(datafile)中.
表空间是二者的抽象,一个表空间可能包含多个段,并由多个数据文件组成,段和数据文件没有直接关系.数据文件可以作为文件 系统中的文件存在,10g开始也可以作为自动存储管理(automatic storage management ASM)设备上的文件而存在.

虚线表示段和数据文件的多对多关系,应避免这种情况存在.
典型的段是表一个段可以仅存在于一个表空间中.
oracle块是数据库的基本I/O单元,数据文件设置为连续编号的oracle块.对于表空间来说,oracle块大小固定不变,默认8KB
多个块组成了区间extent,区间是一个数据文件中一组连续编号的oracle块.
一定要避免操作系统块大小超过oracle块大小!
数据存储在段中,视图DBA_SEGMENTS描述数据库中每个段:
select segment_type,count(1) from dba_segments group by segment_type order by segment_type
SEGMENT_TYPE COUNT(1)
----------------------------------------
CLUSTER 10
INDEX 1698
INDEX PARTITION 276
LOB PARTITION 1
LOBINDEX 551
LOBSEGMENT 551
NESTED TABLE 11
ROLLBACK 1
TABLE 1332
TABLE PARTITION 128
TYPE2 UNDO 10
TABLE 包含数据行的堆结构表,典型的段是表,但不能说表就是段,还有更复杂的表组织使用其他段类型.
INDEX 索引是键值的有序列表,相应的指针rowid指向每行的物理位置,rowid指定行位于哪个数据文件的哪个oracle块中,并指定行在块中的编号
TYPE2 UNDO 撤销段,存储数据的更改前版本,为了提供完整性(回滚,读取一致性和隔离),这些是必须的.
ROLLBACK 9i开始,引入了基于撤销段的自动撤销管理,总有一个回滚段保护用于创建数据库的事务
TABLE PARTITION 可将表分成多个区,可将一个表分不到多个表空间中.
INDEX PARTITION 默认是一个索引在一个段中,但也可对索引进行分区,如果对表进行分区,通常也会对这些表上的索引进行分区.
LOBSEGMENT LOBINDEX LOB PARTITION 如果将列定义为大对象数据类型,那么仅在表本身存储一个指针,指向列数据实际所在的不同段中的条目,
LOB可以拥有在此基础上构建的索引以便快速访问对象中的数据,也可以对LOB进行分区.
CLUSTER cluster段包含多个表,分区将一个表分布在多个段中,而cluster相反,允许将多个表反规范化(denormalize)为一个段.
NESTED TABLE 如果一个表列定义为本身就具有的列用户定义的对象类型,那么列可以作为嵌套表,存储在自身的段中.
每个段都有一个或多个区间,创建段时oracle将在指定的任何表空间中为其分配区间,最后随着数据的输入,区间被填满.此后 oracle将在同一表空间(不一定在同一个数据文件中)分配第二个区间.
一个区间由一组连续编号的块组成.
文件存储技术
数据文件可保存在四类设备上:本地文件系统,群集文件系统,原始设备和ASM磁盘组.
本地文件系统上的文件:最简单的数据文件,磁盘目录结构的普通操作系统文件.
群集文件系统上的文件:群集文件系统是外部磁盘,同时安装在多个计算机上.群集文件系统调停群集中所有计算机上运行的进程到磁盘的访问. 使用群集文件系统是一种RAC实现方法:数据库必须位于要打开它的所有实例可以访问的磁盘上. oracle公司的OCFS(oracle clustered file system oracle群集文件系统)是个好选择,OCFS最先为没有适当群集文件系统的linux和windows编写,10g被迁移到其它所有主流 操作系统上.
原始设备上的文件:还可能在根本没有文件系统的磁盘上创建数据文件.
ASM设备上的文件:ASM是10g引入的功能,是文件系统的替代品,基于数据文件存储.
有人认为原始设备性能最好,在现代磁盘和文件系统技术前,此观点无法立足,而且难以管理,会被淘汰.
ASM:oracle提供的逻辑卷管理器,与数据库绑定在一起,通常的做法是购买一组原始磁盘,将磁盘交给oracle,让oracle处理,系统管理员 根本不需要考虑如何创建文件系统.ASM只能存储数据库文件,不能存储二进制文件,始终必须将oracle主目录保存在常规文件系统上.
练习,看看数据库的物理结构
控制文件的名称和大小
select name,block_size*file_size_blks bytes from v$controlfile
NAME BYTES
-------------------------------------------------------------------------------------------------------
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\CONTROL01.CTL 7340032
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\CONTROL02.CTL 7340032
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\CONTROL03.CTL 7340032
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\CONTROL04.CTL 7340032
确定联机重做日志文件成员名称,大小:
select member,bytes from v$log join v$logfile using (group#);
MEMBER BYTES
----------------------------------------------------------------------------------------------------
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\REDO03.LOG 52428800
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\REDO02.LOG 52428800
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\REDO01.LOG 52428800
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\REDO01A.LOG 52428800
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\REDO02A.LOG 52428800
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\REDO03A.LOG 52428800
确定数据文件和临时文件的名称,大小:
select name,bytes from v$datafile
union all
select name,bytes from v$tempfile
NAME BYTES
----------------------------------------------------------------------------------------------------------
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\SYSTEM01.DBF 503316480
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\UNDOTBS01.DBF 36700160
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\SYSAUX01.DBF 272629760
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\USERS01.DBF 5242880
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\EXAMPLE01.DBF 104857600
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\BOBTEST.DBF 1048576
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\TEMP01.DBF 20971520
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25025926/viewspace-1067848/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/25025926/viewspace-1067848/