oracle 11g 数据库结构

1. 表空间与数据文件

Oracle数据库的表空间tablespace是一个逻辑上的存储概念,如我们创建一个表,必须要指明将表存在哪个表空间中。实际上的数据物理存储在硬盘上的文件中,我们称它叫数据文件data file。一个tablespace可以由一个或多个data file组成,当然一个data file只能隶属于一个tablespace(不能劈腿哦)。

更详细点。
tablespace由多个段sengment组成,oracle把占空间的对象(如表,索引,簇cluster等)统一称为segment。Segment是由多个区间extent构成,extent又有多个块block组成,block的编号地址相邻。所以block是oracle基本的存储单元。
datafile也是由称为块单元组成,但是他们是系统块os block,windows总的os block大小一般是2048KB。
oracle block一般是os block的倍数,如8192KB。

SQL> show parameter db_block_size

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_block_size integer 8192

  • SYSTEM表空间用于存放系统内部表和数据字典的数据。
  • SYSAUX表空间是11g以后新增的,主要用于存储系统内部常用样例用户的对象,如CRM用户的表和索引等。
  • UNDOTBS1撤销表空间,用于存储修改前的数据。
  • USERS表空间,用户可以在这个空间上创建对象。
  • TEMP临时表空间,系统用于临时存放数据(如排序),处理完后即可释放。

SQL> select file_name, tablespace_name from dba_data_files;

FILE_NAME TABLESPACE_NAME
-------------------------------------------------------------------------------- ------------------------------
C:\ORACLE\ORADATA\ORCL\USERS01.DBF USERS
C:\ORACLE\ORADATA\ORCL\UNDOTBS01.DBF UNDOTBS1
C:\ORACLE\ORADATA\ORCL\SYSAUX01.DBF SYSAUX
C:\ORACLE\ORADATA\ORCL\SYSTEM01.DBF SYSTEM
C:\ORACLE\ORADATA\ORCL\EXAMPLE01.DBF EXAMPLE

SQL> select file_name, tablespace_name from dba_temp_files;

FILE_NAME TABLESPACE_NAME
-------------------------------------------------------------------------------- ------------------------------
C:\ORACLE\ORADATA\ORCL\TEMP01.DBF TEMP

2. 控制文件control file

我们平时所指的oracle数据库,主要由两部分组成,数据库database和实例instance。
database就是物理硬盘上我们看得到的各种文件,如datafile,control file,redo log file,它们保存着所有数据。
instance则是由内存(SGA)和进程组成。当oracle启动时,它将数据加载到内存中,然后通过各种进程(PMON,SMON,DBWR,LGWR,CKPT)同database保持一致(读写数据)。所以我们操作oralce实际上是在和instance打交道,然后由它来更新数据库

其中比较重要的是控制文件control file,它是存储着oracle instance信息,datafile,log file信息的内部二进制文件。
出于安全考虑,control file不止1个,它们保存着相同的内容,如果一个control file坏了,咱们还有备份。建议不要将所有的control file放在一个地方。
数据库启动次序:读取初始化参数文件SPFILE -> 为系统全局区(SGA)分配内存 -> 读取control file,然后找到数据文件和日志文件并打开使用。

SQL> select name, status from v$controlfile;

NAME STATUS
-------------------------------------------------------------------------------- -------
C:\ORACLE\ORADATA\ORCL\CONTROL01.CTL
C:\ORACLE\ORADATA\ORCL\CONTROL02.CTL
C:\ORACLE\ORADATA\ORCL\CONTROL03.CTL

3. 日志文件

日志文件分为重做日志文件(redo log file)和归档日志文件(archive log file)。

SQL> select group#, status, member from v$logfile;

GROUP# STATUS MEMBER
---------- ------- --------------------------------------------------------------------------------
3 C:\ORACLE\ORADATA\ORCL\REDO03.LOG
2 C:\ORACLE\ORADATA\ORCL\REDO02.LOG
1 C:\ORACLE\ORADATA\ORCL\REDO01.LOG

redo log fiel有多个组group构成。一个group中能包括不止一个log file,日志信息是写到group的每个logfile中,所以一个group中的log file存储着一样的信息。当一个group写满之后就转到下一个group中,称之为日志切换。

当所有group都写满了后,就重头开始从第一个group开始,原来的内容将被覆盖丢失。如果不想被丢失,可以采用归档模式,即将数据保存到archive log file中。归档模式会给系统带来一定的性能问题。

查看database采用哪种模式:
SQL> select dbid,name,log_mode from v$database;

DBID NAME LOG_MODE
---------- --------- ------------
1232416663 ORCL NOARCHIVELOG

归档日志路径由SPFILE的log_archive_dest参数确定。

SQL> show parameter log_archive_dest;

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest string
log_archive_dest_1 string
log_archive_dest_10 string
log_archive_dest_2 string
log_archive_dest_3 string
log_archive_dest_4 string
log_archive_dest_5 string
log_archive_dest_6 string
log_archive_dest_7 string
log_archive_dest_8 string
log_archive_dest_9 string
log_archive_dest_state_1 string enable
log_archive_dest_state_10 string enable
log_archive_dest_state_2 string enable
log_archive_dest_state_3 string enable
log_archive_dest_state_4 string enable
log_archive_dest_state_5 string enable
log_archive_dest_state_6 string enable
log_archive_dest_state_7 string enable
log_archive_dest_state_8 string enable
log_archive_dest_state_9 string enable

警告日志文件alert_sid.log保存着例行的信息和错误信息,它的路经是:

SQL> select value from v$parameter where name='background_dump_dest';

VALUE
--------------------------------------------------------------------------------
c:\oracle\diag\rdbms\orcl\orcl\trace

SQL> show parameter background_dump_dest;

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
background_dump_dest string c:\oracle\diag\rdbms\orcl\orcl\trace


用户跟踪文件是oracle出现异常时自动创建的文本文件,它与警告文件一起构成了完整的故障信息描述体系。

SQL> select value from v$parameter where name='user_dump_dest';

VALUE
--------------------------------------------------------------------------------
c:\oracle\diag\rdbms\orcl\orcl\trace

SQL> show parameter user_dump_dest;

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
user_dump_dest string c:\oracle\diag\rdbms\orcl\orcl\trace

4. SGA

系统全局区(system global area)主要由3个区组成。

  • 数据高速缓存区(data buffer cache):存放着系统最近使用的数据块。它有3种类型:脏区(dirty buffers, 已经修改需要写回数据文件的数据块),自由区(free buffers, 不包含任何数据并可以写入的区),保留区(pinend buffers, 包含正在处理的或明确保留的区)。
  • 重做日志缓冲区(redolog buffer): 保存日志信息,并在检查点checkpoint或buffer达到一定块数时由进程LGWR写入重做日志文件。
  • 共享池(shared pool):用于存储sql,pl/sql,package,dictionary,lock,character set等。分为library cache和dictionary cache。
  • 大池(large pool):可选的,可供备份和恢复操作。


4. 后台进程

  • DBWn数据库写入器: 在SPFILE中的DB_WRITER_PROCESSES参数设置进程数目。
  • CKPT检查点参数:可选, 重做日志切换switch时产生。修改SPFILE中的CHECKPOINT_PROCESS参数为TRUE来启动检查点进程。
  • LGRW日志写入器
  • SMON系统监控器:执行恢复必须的进程。
  • PMON进程监控器:清除实效的用户进程,释放资源。
  • ARCH归档器: 可选,参数LOG_ARCHIVE_MAX_PROCESSES用来设置进程数。
  • LCKn锁:可选,并行服务器下可出现多个进程以便于通信。
  • RECO恢复器:分布式数据库下的可选进程。
  • Dnnn调度: 共享模式下的可选进程。一般多种通信协议情况下,每种协议至少创建一个调度进程(像路由,负责用户与服务器间的连接)。
  • SNPn快照进程: 可启动多个,参数JOB_QUEUE_PROCESS。
  • Pnnn并行查询进程: 参数PARALLEL_MIN_SERVERS设定启动数量。

oracle不同版本的后台进程数目不同,11g有200多个。

SQL> select name, description from v$bgprocess;

NAME DESCRIPTION
----- ----------------------------------------------------------------
PMON process cleanup
VKTM Virtual Keeper of TiMe process
DIAG diagnosibility process
.........................................
212 rows selected

5. 程序全局区PGA

PGA: process global area或者 program global area,保存私有信息和正在使用的操作系统资源信息。

SQL> show parameter pga

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_target big integer 0


6. 数据字典

数据字典的格式(前缀)

  • USER_: 记录用户自己的对象
  • ALL_: 用户可以访问的所有对象
  • DBA_: 数据库的所有对象
  • V$_: 动态视图
  • GV_:分布式环境下的同台视图(global V$)

基本的数据库字典

DBA_TABLES(=TABS) 所有表
DBA_TAB_COLUMNS(=COLS)
所有表的列信息
DBA_VIEWS 所有视图
DBA_SYNONYMS(=SYN) 所有同义词
DBA_SEQUENCES(=SEQ) 序列
DBA_CONSTRAINTS 约束
DBA_INDEXS(=IND) 索引的简要信息
DBA_IND_COLUMNS 索引的列信息
DBA_TRIGGERS 触发器
DBA_SOURCE 存储过程
DBA_SEGMENTS
DBA_EXTENTS 区间
DBA_OBJECTS 所有对象
CAT 当前用户能访问的所有基表
TAB 当前用户创建的表,视图,同义词
DICT 构成数据字典的所有表信息


按数据库组件分类的数据字典

数据库 V$DATABASE  
表空间
DBA_TABLESPACES  

DBA_DATA_FILES  

DBA_FREE_SPACE  
控制文件 V$CONTROLFILE  
  V$PARAMETER  
  V$CONTROLFILE_RECORD_SECTION  
数据文件 DBA_DATA_FILES  
  V$DATAFILE  
  V$FILESTAT  
  V$DATAFILE_HEADER  
DBA_SEGMENTS  
扩展 DBA_EXTENTS  
日志 V$THREAD  
  V$LOG  
  V$LOGFILE  
归档状态 V$DATABASE  
  V$LOG  
  V$ARCHIVED_LOG  
  V$ARCHIVED_DEST  
实例 V$INSTANCE  
  V$PARAMETER  
  V$SYSTEM_PARAMETER  
内存状态 V$SGA  
  V$SGASTAT  

V$DB_OBJECT_CACHE

  V$SQL  
  V$SQLTEXT  
  V$SQLAREA  
后台进程 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占一行),包括sql语句在内存,分析及执行准备的统计文本限制在1000个字符内
V$SQLTEXT 在sga中属于共享sql游标的sql语句内容
V$SYSSTAT 包括基本的实例统计信息
V$SYSTEM_EVENT 包括一个事件的总等待时间
V$WAITSTAT 列出块竞争统计数据


转载地址http://space.itpub.net/10336955/viewspace-659689

猜你喜欢

转载自liuguofeng.iteye.com/blog/1593499