Oracle数据库结构
表空间和数据文件
1、表空间是一个数据库的磁盘逻辑空间。
2、每个表空间由一个或多个数据文件组成。
3、一个数据文件只能属于一个表空间。
完成Oracle系统安装并创建Oracle实例后,Oracle系统会自动创建多个表空间和数据文件。
SELECT FILE_NAME, TABLESPACE_NAME, BYTES FROM DBA_DATA_FILES;
临时表空间和临时文件
临时表空间是Oracle系统用于存放与排序有关的特殊表空间。当操作中需要排序时,Oracle系统会将排序的数据存放在改表空间中,排序完成后释放所占空间。
SELECT FILE_NAME, TABLESPACE_NAME, BYTES FROM DBA_TEMP_FILES;
存储结构
Oracle创建数据文件时实际上是将磁盘的操作系统快重新格式化为Oracle数据块,并且每个数据块都有唯一标识。
用户设计数据库结构时会将表、索引等存储到一个已存在的表空间上,表、索引等都是占用空间的对象,统称为段。段是由多个区间构成,区间是由多个连续的数据块构成。
控制文件
控制文件是存储有Oracle实例、数据文件、日志文件信息的内部二进制文件。
Oracle正常启动时,首先访问初始化参数文件SPFILE,然后为系统全局区(SGA)分配内存, 接下来Oracle会自动读出控制文件中所有的数据文件、日志文件的信息。
Oracle出于安全考虑,在安装Oracle数据库或创建实例时,系统会自动创建多个控制文件,确保运行时一个控制文件损坏,系统仍能使用另一个控制文件而正常工作。
查看V$CONTROLFILE视图的结构
DESC V$CONTROLFILE;
查询控制文件的信息
SELECT NAME, STATUS FROM V$CONTROLFILE;
日志文件
重做日志文件
该日志文件用来记录数据库所有发生过的事务(Transaction)信息,以及由Oracle内部行为引起的数据库变化信息。在数据库恢复时可以从该日志文件中读取发生过的事务的数据。数据库运行期间,当用户发出COMMIT命令时,数据库会将每个事务信息记录在日志文件中,写入日志文件成功后才将完成信息返回给用户。
每个Oracle实例用一个日志线程来记录数据库的变化。日志线程由多个日志组构成,日志组由多个日志成员构成。
Oracle实例运行时产生日志信息,首先被记录在系统全局区(SGA)的日志缓冲区中,当发出COMMIT命令时,LGWR进程将日志信息从日志缓冲区读出并写入到日志文件组序列号最小的文件中,一个日志组写满后写下一个日志组。当LGWR进程将所有能用的日志文件都是用过后,又回到第一个日志组重新覆盖写日志信息。当LGWR写满一个日志组去写另一个日志组时称为日志切换,日志切换时会在警告日志文件(alter_sid.log)中记录相应信息。
SELECT GROUP#, MEMBER FROM V$LOGFILE;
归档日志文件
Oracle系统运行有两种模式,归档模式和非归档模式。非归档模式就是当各个日志组被记录满后转而向第一个日志组重新覆盖写日志信息,归档模式就是在覆盖写日志之前将即将被覆盖的日志读出并写到归档日志文件中。系统默认的使用非归档日志模式。
SELECT DBID, NAME, LOG_MODE FROM V$DATABASE;
如果系统运行在归档模式下,归档文件路径由服务器参数文件SPFILE的LOG_ARCHIVE_DEST参数确定。
SHOW PARAMETER LOG_ARCHIVE_DEST;
服务器参数文件
服务器参数文件SPFILE(Server Paramter File)是一个二进制文件,他记录Oracle实例的基本参数信息,包括数据库实例名(DB_NAME)、控制文件(CONTROL_FILES)所在路径、进程等。服务器参数文件在Oracle系统安装时以默认的方式创建。文件名为SPFILEsid.ora,sid为数据库实例名。
如果希望对参数进行修改可通过企业管理器(Oracle Enterprise Manager)或ALTER SYSTEM命令来修改。