第2章 oracle 数据库体系结构
目录:
—————————————
—————————————
2.1---------------------------------------------------- 物理存储结构----------------------------------------------------------------
Oracle数据库在物理上由3中类型的文件组成:数据文件(.dbf), 控制文件(.ctl), 重做日志文件(.log);
2.1.1数据文件:存储数据库数据的文件。包括表的记录和索引等,若被频繁访问,则存储在内存缓冲区。
特点:一个表空间由一个或多个数据文件组成。
一个数据文件只对应一个数据库,一个数据库包括多个数据文件。
数据文件可设置自动扩展参数,实现自动扩展的功能。
数据文件的数据字典:dba_data-file 和 v$datafile(记录数据文件动态信息)
dba_data-file主要字段如下:
* file_name:数据文件名称,路径。
* file_id: 数据文件在数据库中的id号
* tablespace_name:数据文件表空间名
* bytes:数据文件大小
* blocks:所占块数
* status: 数据文件状态
* autoextensible: 是否可扩展
v$datafile主要字段如下:
* file#:存放数据文件编号
* status:数据文件状态
* checkpoint#:数据文件同步号,随系统的运行自动修改,以维持所有数据文件的同步。
* bytes: 数据文件大小
* block:数据文件所占数据块数
* name:数据文件名称,路径。
提示:数据字典字段的查看方法 describe/desc + 数据字典:如 desc v$datafile;
例子1-dba_data-file:
以system用户登录进oracle之后:
SQL> column file_name format A50;
SQL> column tablespace_name format A50;
SQL> select file_name,tablespace_name,autoextensible from dba_data_file where tablespace_name ='SYSTEM';
(注意:"tablespace_name ='SYSTEM' "中,SYSTEM 这个用户名要大写)
例子2-v$datafile:
SQL> column name format A50;
SQL> select file#,name,checkpoint_change# from v$datafile;
2.1.2控制文件:很小的二进制文件,用于描述和维护数据库的物理结构,存放有数据库文件盒控制文件的信息,很重要。
一旦控制文件受损,数据库可能无法正常运行
SQL> column name format A50; SQL> select name from v$controlfile;
运行效果跟前面类似,这里不列举效果图。
Oracle一般默认创建3个相同的控制文件,来保证数据库可及时调用其他备用控制文件继续工作。
2.1.3重做日志文件:记录数据库中所有修改信息的文件,简称“日志文件”
其中,修改信息,包括数据的修改和数据库结构的修改。而查询 ,不会记录到日志文件中。
日志文件是数据库系统最最重要的文件之一,它可以保证数据库的安全,是进行数据库备份和恢复的重要手段
一旦日志文件受损,数据库可能无法正常运行
工作方式:数据库出现修改信息时,修改后的信息首先存储到内存的 日志缓冲区 中,对应的日志信息则存储在日志缓冲区,一定数量时,由Oracle后台进程LGWR将日志写到日志文件中。
提交修改信息后,数据文件只保留修改后的数据,而日志文件中,既保留修改后,也保留修改前的数据,以备数据恢复。so,日志文件这么重要,自然有多份。
实际应用中,允许对日志文件进行镜像,日志文件与镜像文件构成一个 日志文件组,一个组中的日志文件最好放在不同磁盘。镜像最多5个。
当所有日志文件组空间填满后,系统重新切换到第一个日志文件组,切换时,组中已有的日志信息是否覆盖,取决于十几块的运行模式。(归档/非归档模式,如果是归档,则先写到归档日志文件中,再被新内容覆盖;如果非归档模式,则直接覆盖)
2.1.4其他文件:参数文件,备份文件,归档重做日志文件,警告、跟踪日志文件。
参数文件:记录oracle数据库基本参数,包括文本参数文件(Parameter File, PFILE),服务器参数文件(Server Parameter File, SPFILE)
备份文件:文件受损失,可借助备份文件进行修复。还原过程,就是备份文件替换该文件的过程。
归档重做日志文件:用于对写满的日志文件进行复制并保存,由归档进程ARCn实现,该进程负责将写满的重做日志文件复制到归档日志目标中。
警告、跟踪日志文件:当一个进程发现了一个内部错误,将错误信息存到它的跟踪文件中。警告文件则是一种特殊的跟踪文件,它包含错误事件的说明,随之产生的跟踪文件则记录该错误的详细信息。
2.2---------------------------------------------------- 逻辑存储结构----------------------------------------------------------------
从逻辑结构上,oracle包括:表空间--段--区--数据块。
表空间是Oracle中最大的逻辑存储结构,它与物理上的一个或多个数据文件相对应,每个Oracle数据库都至少拥有一个表空间,表空间的大小等于构成该表空间的所有数据文件大小的总和。表空间用于存储用户在数据库中创建的所有内容。
在安装Oracle时,Oracle数据库系统一般会自动创建一系列表空间(如system)。可以通过数据字典dba_tablespaces查看表空间的信息
例子3-通过数据字典dba_tablespace查看当前数据库的所有表空间名称:
SQL> select tablespace_name from dba_tablespaces;
以上结果,显示6个表空间。
表空间 | 说明 |
sysaux |
辅助系统表空间。用于减少系统表空间的负荷,提高系统的作业效率。该表空间由Oracle系统内部自动维护,一般不用于存储用户数据 |
system |
系统表空间,用于存储系统的数据字典、系统的管理信息和用户数据表等 |
temp | 临时表空间。用于存储临时的数据,例如存储排序时产生的临时数据。一般情况下,数据库中的所有用户都使用temp作为默认的临时表空间。临时表空间本身不是临时存在的,而是永久存在的,只是保存在临时表空间中的段是临时的。临时表空间的存在,可以减少临时段与存储在其他表空间中的永久段之间的磁盘I/O争用 |
undotbs1 |
撤消表空间。用于在自动撤消管理方式下存储撤消信息。在撤消表空间中,除了回退段以外,不能建立任何其他类型的段。所以,用户不可以在撤消表空间中创建任何数据库对象 |
users |
用户表空间。用于存储永久性用户对象和私有信息 |
段是一组盘区,组成了被oracle视为一个单位的数据库对象,如表或索引。so,段,是数据库终端用户将处理的最小存储单位。段满,oracle分配另一数据区,段的数据区在磁盘上可不连续。
段,分为:数据段.索引段.临时段.回退段
2.2.3区(Extent)
2.3---------------------------------------------------- Oracle进程----------------------------------------------------------------
2.3.1 DBWn进程
2.3.2 LGWR进程
2.3.2 CKPT进程
2.3.4 SMON进程
2.3.5 PMON进程
2.3.6 ARCn进程
2.3.7 RECO进程
SQL> show parameter sga_max_size;
如果没有指定sga_max_size参数,而是指定了sga_target,oracle会自动调整SGA区域的内存大小,使总量等于sga_target的值。
SQL> show parameter db_cache_size;
SQL> show parameter log_buffer;
SQL> show parameter shared_pool_size;
SQL> show parameter large_pool_size;
SQL> show parameter java_pool_size;
表空间 | 说明 |
User视图 |
USER视图的名称以user_为前缀,用来记录用户对象的信息。例如user_tables视图,它记录用户的表信息 |
ALL视图 |
ALL视图的名称以all_为前缀,用来记录用户对象的信息以及被授权访问的对象信息。例如all_synonyms视图,它记录用户可以存取的所有同义词信息 |
DBA视图 |
DBA视图的名称以dba_为前缀,用来记录数据库实例的所有对象的信息。例如dba_tables视图,通过它可以访问所有用户的表信息 |
V$视图 |
V$视图的名称以v$为前缀,用来记录与数据库活动相关的性能统计动态信息。例如v$datafile视图,它记录有关数据文件的统计信息 |
GV$视图 |
GV$视图的名称以gv$为前缀,用来记录分布式环境下所有实例的动态信息。例如gv$lock视图,它记录出现锁的数据库实例的信息 |
字典名称 |
说 明 |
dba_tables |
所有用户的所有表的信息 |
dba_tab_columns |
所有用户的表的字段信息 |
dba_views |
所有用户的所有视图信息 |
dba_synonyms |
所有用户的同义词信息 |
dba_sequences |
所有用户的序列信息 |
dba_constraints |
所有用户的表的约束信息 |
dba_indexes |
所有用户的表的索引简要信息 |
dba_ind_columns |
所有用户的索引的字段信息 |
dba_triggers |
所有用户的触发器信息 |
dba_sources |
所有用户的存储过程信息 |
dba_segments |
所有用户的段的使用空间信息 |
dba_extents |
所有用户的段的扩展信息 |
dba_objects |
所有用户对象的基本信息 |
cat |
当前用户可以访问的所有基表 |
tab |
当前用户创建的所有基表、视图和同义词等 |
dict |
构成数据字典的所有表的信息 |
数据库组件 |
数据字典中的表或视图 |
说 明 |
数据库 |
v$datafile |
记录系统的运行情况 |
表空间 |
dba_tablespaces |
记录系统表空间的基本信息 |
dba_free_space |
记录系统表空间的空闲空间的信息 |
|
控制文件 |
v$controlfile |
记录系统控制文件的基本信息 |
v$controlfile_record_section |
记录系统控制文件中记录文档段的信息 |
|
v$parameter |
记录系统各参数的基本信息 |
|
数据文件 |
dba_data_files |
记录系统数据文件以及表空间的基本信息 |
v$filestat |
记录来自控制文件的数据文件信息 |
|
v$datafile_header |
记录数据文件头部分的基本信息 |
|
段 |
dba_segments |
记录段的基本信息 |
数据区 |
dba_extents |
记录数据区的基本信息 |
日志 |
v$thread |
记录日志线程的基本信息 |
v$log |
记录日志文件的基本信息 |
|
v$logfile |
记录日志文件的概要信息 |
|
归档 |
v$archived_log |
记录归档日志文件的基本信息 |
v$archive_dest |
记录归档日志文件的路径信息 |
|
数据库实例 |
v$instance |
记录实例的基本信息 |
v$system_parameter |
记录实例当前有效的参数信息 |
|
内存结构 |
v$sga |
记录SGA区的大小信息 |
v$sgastat |
记录SGA的使用统计信息 |
|
v$db_object_cache |
记录对象缓存的大小信息 |
|
v$sql |
记录SQL语句的详细信息 |
|
v$sqltext |
记录SQL语句的语句信息 |
|
v$sqlarea |
记录SQL区的SQL基本信息 |
|
后台进程 |
v$bgprocess |
显示后台进程信息 |
v$session |
显示当前会话信息 |
视图名称 |
说 明 |
v$fixed_table |
显示当前发行的固定对象的说明 |
v$instance |
显示当前实例的信息 |
v$latch |
显示锁存器的统计数据 |
v$librarycache |
显示有关库缓存性能的统计数据 |
v$rollstat |
显示联机的回滚段的名字 |
v$rowcache |
显示活动数据字典的统计 |
v$sga |
显示有关系统全局区的总结信息 |
v$sgastat |
显示有关系统全局区的详细信息 |
v$sort_usage |
显示临时段的大小及会话 |
v$sqlarea |
显示SQL区的SQL信息 |
v$sqltext |
显示在SGA中属于共享游标的SQL语句内容 |
v$stsstat |
显示基本的实例统计数据 |
v$system_event |
显示一个事件的总计等待时间 |
v$waitstat |
显示块竞争统计数据 |