实例与数据库的区别:
数据库是一组文件集合,这些文件用来存储和管理相关数据。
实例指的是一系列进程,它们一起运行来操作数据库。共同访问被称为系统全局区(SGA)的内存中的一块区域。SGA也被称为实例的一部分。
线程与进程的概念,联系?
进程是具有一定独立特定功能的程序关于某个数据集合上的一次活动,是操作系统动态执行的基本单元,基本的分配单元和执行单元,是系统进行资源分配和调度的一个独立单位。
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己不拥有资源,只拥有在运行中必不可少的资源,但是可以与同属一个进程的其他线程共享进程所拥有的全部资源。
一个程序至少有一个进程,一个进程至少有一个线程。
进程在执行过程过拥有独立的内存单元,多个线程共享内存,极大提高程序的运行效率。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。线程不能独立执行,必须依存在应用程序上,由应用程序提供多个线程执行控制。
Oracle总体结构:内存结构、进程结构、存储结构
1.1 内存结构:SGA、PGA、UGA
1.2 进程结构:前台进程、后台进程
前台进程(服务进程、用户进程):根据实际需要运行,需要结束后立刻结束。
后台进程:Oracle数据库启动后,自动运行的几个操作系统进程。
1.3 存储结构:物理存储结构、逻辑存储结构。
逻辑存储结构:块、区、段、表空间
物理存储结构:参数文件、数据文件、控制文件、重做日志文件、口令文件、临时文件、后台进程跟踪文件、服务进程跟踪文件等。
Oracle数据库的例程由SGA和后台进程组成。Oracle总是“先日志后文件”或“先内存后磁盘”
一、内存结构
SGA(System Global Area)系统全局区
PGA(Process Global Area)进程全局区
UGA(User Global Area)用户全局区
1 SGA:
例程内存结构的主要组成部分,每个例程只有一个SGA区。当多个用户同时连接到一个例程时,所有的用户进程、服务进程都可以共享使用SGA区,是不同用户进程与服务进程进行通信的中心,数据库的各种操作主要都在SGA中进行。
SGA区可以分为以下几个部分:
1.1数据高速缓存:
保存最近从数据文件中读取的数据块,其中的数据可以被所有用户共享。由许多大小相等的缓存块组成。主要分为三大类:
脏缓存块(dirty buffers):保存已经被修改过的缓存块。
空闲缓存块(free buffers):没有数据,它在等待写入数据。
命中缓存块(pinned buffers):保存最近正在被访问的缓存块。始终被保留在数据告诉缓存块中,不会被写入数据文件
1.2重做日志高速缓存:
用于存储重做记录的缓存。大小由log_buffer初始化参数指定。当执行Insert、Update、delete语句或执行create、alter、drop时,Oracle都会为这些操作生成重做记录。
查看重做日志缓存大小命令:show parameter log_buffer;
1.3 共享池:
保存最近执行的SQL语句、PL/SQL程序和数据字典信息,是对SQL语句、PL/SQL程序进行语法分析、编译、执行的内存区。主要由数据字典缓存(dictionary cache)、库缓存(library cache)组成。大小由shared_pool_size初始化参数决定。
1.3.1数据字典缓存:保存最常使用的数据字典信息,如:数据库用户的账户、数据库的结构信息。保存的是一条一条的记录,而其他缓存区保存的是数据块。
1.3.2库缓存:把欧尼最近解析过的SQL语句、PL/SQL程序。
读取数据字典缓存成功命中与失败的次数:
select sum(gets),sum(getmisses) from v$rowcache;
1.4大池:
用于为需要大内存的操作提供相对独立的内存空间,以便提高这些操作的性能。大池的大小由初始化参数large_pool_size确定。
需要大量内存的操作包括:
2.1.4.1数据库的备份和恢复,如使用RMAN(Recovery Manager,恢复管理器)在磁带设备上执行备份、转储、恢复等操作
2.1.4.2具有大量排序操作的SQL语句
2.1.4.3并行化的数据库操作。
如果没有在SGA区中建立大池,以上操作所需的内存将占据共享池的内存,从而影响共享池的使用效率。
1.5 JAVA池:
用于存放Java代码、Java语句的语法分析表、Java语句的执行方案和Java程序开发。
2 PGA:
用户进程连接到数据库,并创建一个对应的会话时,由Oracle为服务进程分配的,专门用于当前会话的内存区。该内存区是非共享的,只有服务进程本身才能访问它自己的PGA区。大小由操作系统决定,分配后保持不变。当会话结束后,Oracle会自动释放PGA区所占用的内存区。
2.1、排序区:用于存放排序操作所产生的临时数据,影响PGA区大小的主要因素,由初始化参数SORT_AREA_SIZE定义。
2.2、会话区:保存会话所具有的权限、角色、性能统计信息。
2.3、游标区:在打开游标是被创建,关闭游标时被关闭。通过设置初始化参数OPEN_CURSORS,可以限制用户能够同时打开的游标数目。
2.4、堆栈区:保存会话的绑定变量(bind variable)、会话变量(session variable)以及SQL语句运行时的内存结构等信息。
当使用专用服务器连接Oracle时,UGA从PGA中分配;在MTS(多线程)模式下,UGA从SGA中分配
二、后台进程:
1、 DBWR(database writer,数据库写进程)
数据库块写入器(DBWn,Database Block Writer)
管理数据库高速缓存区,以便服务进程总能找到空闲缓存块,用于保存从数据文件中读取的数据块。
在满足一定条件后,将dirty列表中的最近为被访问的脏缓存块成批地写入数据文件中,以便获得更多的空闲缓存快。
使用LRU算法将最近正在使用的缓存块(命中缓存块)继续保留在LRU列表中,一面重新读取数据文件才能获取这些缓存块中的数据。
通过延迟写来优化磁盘读写操作。
2、 LGWR(log writer,日志写进程)
负责管理重做日志高速缓存区的一个后台进程,用于将重做记录从重做日志高速缓冲区写入日志文件。每个例程只有一个LGWR进程。
3、 CKPT(checkpoint,检查点进程):执行检查点(数据库检查点、表空间检查点、时间检查点)
更行控制文件与数据文件,使其同步。
触发DBWR进程,使其将藏缓存块写入数据文件的任务。
4、 SMON(System monitor,系统监视进程)
在例程启动时负责对数据库进行恢复。
清理不再使用的临时段
将各个表空间的空闲空间碎片合并在一起,使之更容易分配
5、 PMON(process monitor,进程监视进程)
恢复中断或失败的用户进程,服务进程。
清除非正常中断的进程留下的孤儿会话
回退为提交事务
释放进程所占用的各种资源
监视服务进程和调度进程,如果他们失败,则自动重新启动它们。
6、 ARCn(archive,归档进程)
负责在重做日志文件切换后将已经写满的重做日志文件复制到归档日志文件中,以防止循环写入重做日志文件,将其覆盖
三、存储结构:逻辑存储结构、物理存储结构
逻辑存储结构:块、区、段、表空间
物理存储结构:参数文件、数据文件、控制文件、重做日志文件、口令文件、临时文件、后台进程跟踪文件、服务进程跟踪文件等。
1、 参数文件(parameter file,也称为初始化参数文件):通常称为init文件或init.ora文件。分为文本参数文件(pfile)、服务器参数文件(spfile)告诉Oracle实例在哪里寻找控制文件,如果没有参数文件,就不能启动数据
2、数据文件:实际存储插入到数据库表中的实际数据的操作系统文件。系统(SYSTEM)数据文件,用户(USERS)数据文件
一个表空间在物理上对应若干个数据文件,而一个数据文件只能属于一个表空间。Oracle用于保存数据库对象的存储单元:表空间(tablespace)、段(segement)、盘区(extent)、块(block)
2.1块(block):最小的数据管理单位,即Oracle的所有存储的I/O操作都是以块为单位的。大小为操作系统块的整数倍。
2.2区(extent):在文件中一个连续的分配空间。Oracle存储分配的最小单位,一个区只能属于一个数据文件,一个段中的各个区可以分别在多个数据文件中。
当在数据库中创建带有实际存储结构的方案对象(表、索引、簇)时,Oracle将为该方案对象分配若干个区(视该方案对象的初始大小而定),以便组成一个对应的段,来为该方案对象提供初始的存储空间。当段中已分配的区都写满后,Oracle就要该方案对象所在的表空间中位该段分配“下一个”新的空白的区。
2.3段:数据库对象,由一个或多个盘区组成,用于存储表空间中某一特定的具有独立存储结构的对象的所有数据,消耗存储空间,每一个消耗内存空间的对象最终将被存储到一个单一的段中(表段、回滚段、临时段、聚簇段、索引段等)。
2.3.1表段(数据段):存储表中的所有数据,用户创建表时,就会该用户的默认表空间中位该表分配一个与表名相同的数据段。
查询scott用户使用的数据段存储在哪个表空间、大小、有几个区,可以查询数据字典USER_EXTENS-----SELECT segment_name(数据段名),tablespace_name(表空间名),bytes,block FROM USER_EXTENS;
2.3.2索引段:存储索引的所有信息。
查询scott用户使用的索引信息USER_INDEXS:
SELECT index_name,table_name,tablespace_name FROM USER_INDEXS;
2.3.3临时段:存储排序操作所产生的临时数据
使用如下操作时会产生临时段:create index、select…order by、select…group by,select distinct…、select …union、select…intersect、select…minus、analyze
2.3.3回滚段:存储数据修改之前的位置和值。
2.4表空间:最大的逻辑单位。一个数据库由多个表空间组成,一个表空间可以包含多个数据文件(但一个数据文件只能属于一个表空间)。任何方案对象(定义、数据)被逻辑的存储在表空间中,同时被物理的存储在数据文件中
SYSTEM表空间、SYSAUX表空间、TMEP表空间、USERS表空间、UNDOTBS1表空间(重做表空间)
表空间与数据文件的对应关系
表空间 | 数据文件 |
EXAMPLE | oracle\product\10.1.0\oradata\oamis\EXAMPLE01.DBF |
SYSAUX | oracle\product\10.1.0\oradata\oamis\SYSUX01.DBF |
SYSTEM | oracle\product\10.1.0\oradata\oamis\SYSTEM01.DBF |
TEMP | oracle\product\10.1.0\oradata\oamis\TEMP01.DBF |
UNDOTBS1 | oracle\product\10.1.0\oradata\oamis\UNDOTBS01.DBF |
USERS | oracle\product\10.1.0\oradata\oamis\USERS01.DBF |
SYSTEM表空间存放的信息:
表空间名称、控制文件、数据字典、数据文件等管理信息
方案对象(表、索引、同义词、序列)的定义信息。
所有PL/SQL程序的源代码和解析代码,包括存储过程、函数、包等。
SYSTEM撤销段
SYSAUX表空间(辅助系统表空间,Oracle10g新引进)
存储与Oracle供给特性相关的方案对象,比如Oracle Spatial(空间数据)、XMLDB(eXtensible Markup Language DataBase,扩展标置语言数据库)或Intermedia辅助系统表空间,减少系统表空间的负荷
TEMP表空间:用于执行大型的分类操作
UNDOTBS1(重做表空间):存放数据库有关重做的信息和数据
EXAMPLE(实例表空间):存放案例数据库的方案对象信息及培训资料
USERS(用户表空间):存放永久性用户对象和私有信息,因此也憋称为数据表空间。每个数据库都应该有一个用户表空间,以便在创建用户是将其分配给用户,否则将使用SYSTEM表空间。
3、临时文件:当内存不足以在RAM中保存一个大规模排序操作的中间结果或结果集时,Oracle使用临时文件来存储它们。永久数据对象(表或索引)不会存储到临时文件中。
4、控制文件:很小的文件(一般在1~5MB,最大可为64MB),为二进制文件。只有控制文件正常,才能“装载”,“打开”数据库。
存储的信息:数据库的名称(与db_name.ora参数匹配)、数据文件和重做日志文件的名称、位置和大小、发生磁盘故障或用户错误时用于恢复数据库的信息。
安装完毕后,自动创建的3个控制文件
product\10.1.0\oradata\oamis\CONTROL1.CTL
product\10.1.0\oradata\oamis\CONTROL2.CTL
product\10.1.0\oradata\oamis\CONTROL3.CTL
5、重做日志文件:数据库的事物日志,唯一的作用是在实例或介质失败时使用,或作为维护用于数据库故障恢复的后备数据库的方法。分为:联机重做日志和归档重做日志
当用户对数据进行修改时,Oracle先在内存中进行修改,过一段时间后,再集中将内存中的修改结果成批地写入数据文件中。如果在写入数据文件之前发生故障,这些修改结果将丢失,Oracle用“重做日志文件”来随时保存这些修改结果,即Oracle随时将内存中的修改结果保存到“重做日志文件”中。
product\10.1.0\oradata\oamis\REDO1.CTL
product\10.1.0\oradata\oamis\REDO2.CTL
product\10.1.0\oradata\oamis\REDO3.CTL
5.1、联机重做日志
每一个Oracle数据库至少有两个联机重做日志,大小固定,并以循环的方式使用。
检查点(checkpointing)
数据库缓冲区高速缓存:数据库块临时存储数据的地方。
数据库块写入器(DBWn,Database Block Writer):在缓冲区溢出的时候创造空间
5.2、归档重做日志
6、口令文件(password file):二进制文件,用于验证特权用户(具有sysoper、sysdba权限的特殊数据库用户)。
口令文件的名称都带有相应Oracle例程的SID (Site Identifier,站点标示符),如:
Oracle\product\10.1.0\db_1\database\PWDoamissid.ora