日期:2014-05-16  浏览次数:20458 次

1、Oracle 数据库结构
一、基本术语
1.区分数据库实例(instance)和数据库(database)
数据库实例:
ORACLE实例 = 进程 + 进程所使用的内存(SGA),表示数据库当时的状态!
System Global Area(SGA) 和 Background Process 称为数据库的实例。当数据库关闭,实例就不存在了!
数据库:
固定的,包含数据文件,控制文件,日志文件,参数文件和归档日志文件等
2.数据库服务器(database Server)
包含数据库软件部分(SqlPlus,OEM,EXP/IMP等),数据库和实例组成!
1.表空间和数据文件
表空间:用于存储数据库表,索引和回滚段等对象的磁盘逻辑空间
表空间类型:
SYSTEM 表空间
用于存储Oracle内部表和数据字典的数据,如表名,列名,用户名等。
SYSAUX表空间
这个是在11G中新增加的,主要存储Oracle系统内部常用的样例用户对象。这个表空间由 oracle系统内部自动维护
Undo Tablespace
撤销表空间(Undo Tablespace) 用于存储撤销信息的表空间,当对数据库表进行修改(insert,update,delete等操作),oracle系统自动的使用这个撤销表空间来临时的存放修改钱的数据(Before Image)。当修改操作完成并提交(commit)后,oracle系统可根据需要保留修改前得数据时间长短来释放撤销表空间的部分空间。
User 表空间
这个是用户自己建立的表空间,可在这个表空间上建立各种对象,如表,索引等。
2.数据文件
数据文件(Data File)用于保存用户对应数据和Oracle系统数据的文件。每个表空间可以包含一个或多个数据文件。
系统数据:
管理用户数据和Oracle系统本身的数据,如用户建立的表的名称,列的名称已经字段类型等属于用户数据,这些都自动的存放在系统表空间的 XXX.dbf 文件中
用户数据:
用户系统的数据,可使用SQL语句查询当前数据库的表空间和数据文件。
SQL> col file_name for a40; 
SQL> set linesize 140;
SQL> select file_name ,tablespace_name,(bytes/1024)as M from dba_data_files;
FILE_NAME                                TABLESPACE_NAME     M
D:\ORACLE\ORADATA\C_DB\SYSTEM01.DBF      SYSTEM              409600
D:\ORACLE\ORADATA\C_DB\UNDOTBS01.DBF     UNDOTBS1            204800

临时表空间和临时文件:
Temporary Tablespace 当在操作中需要进行排序等操作时,oracle系统就将排序的数据临时的存放在该空间中,当排序完成后释放排序所用到的空间。
SQL> col file_name for a35;
SQL> set linesize 120;
SQL> select tablespace_name,file_name from dba_temp_files;
TABLESPACE_NAME                FILE_NAME
TEMP                           D:\ORACLE\ORADATA\C_DB\TEMP01.DBF

3.Oracle 存储结构
oracle 创建表看空间时至少要创建一个以上的数据文件,Oracle创建数据文件时实际上将磁盘的操作系统块重格式化成Oracle数据块,并且每个数据库都有唯一的标识。一般Oracle数据库是操作系统块得倍数。如操作系统的系统大小为2048KB,而Oracle数据块得大小为8192KB(DB_BLOCK_SIZE=8192),这表示oracle数据块由4个操作系统块构成!
一般在设计数据库结构时,需要将表,索引或簇(cluster)存储到一个已存在的表空间中,而表,索引或簇都是占用空间的对象。
Oracle把占空间的对象统一称为:段(Segment),
而段由多个区间(Extent)组成的,
区间又由多个连续的(块得编号地址临近的)Oracle数据库组成!
所以在Oracle系统中,数据库是一个基本的处理单位!

4.控制文件
控制文件一般在oracle安装时自动创建,控制文件存放路径由服务器参数文件SPFILEsid.ora的coltrol_files参数值来确定。                                                               
当oracle实例在正常启动时,系统先访问的是初始化参数文件SPFILE,然后Oracle为系统全局区(SGA)分配内存,这时oracle实例处于安装状态,控制文件处于打开状态,然后Oracle自动读出控制文件中的所有数据文件中的所有数据文件和日志文件信息,并打开所有数据文件和所有日志文件信息以便所有的用户都可以访问。
为了安全,Oracle一般创建2-3个控制文件。如果某个控制文件损坏了,Oracle自动使用另外的一个控制文件,当所有的都损坏时,系统将停止工作。
查询控制文件信息:
SQL> desc v$controlfile;
名称          是否为空?                    类型
STATUS                                  VARCHAR2(7)
NAME                                    VARCHAR2(513)
SQL> select  name , status from v$controlfile;
NAME                                    STATUS
D:\ORACLE\ORADATA\C_DB\CONTROL01.CTL
D:\ORACLE\ORADATA\C_DB\CONTROL02.CTL
D:\ORACLE\ORADATA\C_DB\CONTROL03.CTL

5.日志文件:
Oracle 日志文件分为重做日志文件(Redo Log File)和归档日志文件。
重做日志文件:
又称为联机重做日志文件(Online Redo Log File),用来记录在数据库中发生过交易(Transaction)的所有信息,以及由Oracle内部行为而引起的数据库变化的信息。在数据库恢复时可以从该日志文件中读出原来的交易的数据!对表或者整个表空间设定NOLOGGING属性时,基于表或者表空间中所有的表