1.数据库(放在操作系统上的静态文件)
oracle程序
oracle网络文件:用于提供服务端和客户端的通信
oracle密码文件:用于保存sysdba,sysoper权限的用户名和sys用户口令
oracle告警日志文件:用于记录数据库的重要活动以及发生的错误
oracle跟踪日志文件:用于记录用户进程,数据库后台进程等的运行情况
oracle初始化参数文件:用户设置数据库启动时的参数初始值,包含pfile和spfile
oracle数据库文件:
1.数据文件:用于存储数据库中的所有数据
数据文件视图:
dba_data_files:包含数据库中所有数据文件的信息,包括数据文件所属的表空间,数据文件编号等;
dba_temp_files:包含数据库中所有临时数据文件的信息
v$datafiles:包含从控制文件中获取的数据文件信息
v$tempfiles:包含所有临时文件的基本信息
2.控制文件
控制文件性质:用于记录和描述数据库的物理存储结构信息,控制文件是在创建数据库时候创建,每个
数据库至少有一个控制文件,在数据库启动时候,数据库实例依赖初始化参数文件定位控制文件,然后
根据控制文件信息,加载数据文件和重做日志文件,最后打开数据库。
控制文件内容:控制文件组合要存储与数据库结构相关的一些信息。包括:
1.数据库名称和标识,
2.数据库创建的时间,
3.表空间名称,
4.数据文件和重做日志文件的名称和位置,
5.当前重做日志文件序列号,
6.数据库检查点的信息,
7.回滚段的开始和结束,
8.重做日志的归档信息,
9.备份信息,
10.数据库恢复所需要的同步信息。
控制文件还包含了决定数据库规模的最大化参数:
1.maxlogfiles:最大重做日志文件组的数量
2.maxlogmembers:最大重做日志我呢见组最大成员数据量
3.maxloghistory:最大历史重做日志文件数量
4.maxdatafiles:最大文件数据量
5.maxinstances:可同时访问的数据库最大实例个数
与控制文件相关视图:
1.v$database:从控制文件中查看数据库信息
2.v$controlfile:包含控制文件名称和状态信息
3.v$controlfile_record_section:包含控制文件中记录文档段信息
4.v$parameter:可以获取初始化参数control_files的值。
3.重做日志文件:用于记录数据库的改变操作,与重做日志相关的视图:
1.v$log:包含从控制文件中获取的所有重做日志组文件的基本信息
2.v$logfile:包含重做日志文件组以及其成员文件的信息
3.v$log_history:包含重做日志文件的历史信息
oracle归档日志文件:重做日志文件全部被保存记录下来,就是归档日志文件,包含归档信息的数据字典视
图和动态性能视图
1.v$database:用于查询数据库是否处于归档模式
2.v$archived_log:包含从控制文件中获取的所有已归档日志的信息
3.v$archive_dest:包含所有归档目标信息,归档位置状态
4.v$archive_process:包含已启动的arch进程的状态信息
5.v$backup_redolog:包含已经备份的归档日志信息
oracle备份文件:用于存放数据库备份所产生的文件
2.表空间:
包含表空间信息的数据字典视图和动态性能视图
1.v$tablespace:从控制文件中获取表空间名称和编号
2.dba_tablespace:数据库中所有表空间信息
3.dba_tablespace_groups:表空间组以及包含的表空间信息
4.dba_segments:所有表空间中段的信息
5.dba_extents:所有表空间中区的信息
6.dba_free_space:所有表空间中空闲区的信息
7.v$datafile:所有数据文件信息,包括所属表空间的名称和编号
8.v$tempfile:所有临时表空间数据文件信息,包含所属表空间的名称和编号
9.dba_data_files:数据文件及其所属表空间信息
10.dba_tmep_files:临时文件及其所属表空间信息
11.dba_users:所有用户的默认表空关键和临时表空间信息
12.dba_ts_quotas:所有用户的表空间配额信息
13.v$sort_segment:数据库实例的每个排序段的信息
13.v$sort_user:用户临时排序段信息
3.数据库实例(动态变化的)
用户和应用程序是无法直接访问数据库文件的数据的,oracle服务器会启动实例,用户可以连接启动
的数据库实例访问并操作数据库,以便达到目的。数据库实例由两部分组成:内存区域+后台进程
3.1内存区域
内存区域包含系统全局区(system global aera)和程序全局区(program global area),系统全
局区是共享的,所有的服务器进程(server process)和后台进程(background process)共享,程序全
局区是私有的,每一个服务器进程(server process)和后台进程(background process)拥有自己的pga。
3.1.1在oracle10g,sga_target设置具体值,开启共享内存自动管理ASMM
SQL> show parameter memory;
NAME TYPE VALUE
------------------------------------ ----------- -----------
hi_shared_memory_address integer 0
shared_memory_address integer 0
SQL> show parameter sga;
NAME TYPE VALUE
------------------------------------ ----------- -----------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 1128M
sga_target big integer 1128M
SQL> show parameter pga;
NAME TYPE VALUE
------------------------------------ ----------- -----------
pga_aggregate_target big integer 500M
其中参数值:
sga_max_size:sga最大值
sga_target:sga可动态调整的值
pga_aggregate_target:pga累计最大值
设置方法(大约sga_max_size:pga_aggregate_target=3:1):
alter system set sga_max_size=1128M scope=spfile
alter system set sga_target=500M scope=spfile;
alter system set pga_aggregate_target=500M scope=spfile
3.1.2在oracle11g,memory_target设置具体值,开启内存自动管理AMM(sga+pga自动管理)
SQL> show spparameter memory;
SID NAME TYPE VALUE
-------- ----------------------------- ----------- ----------------------------
* hi_shared_memory_address integer
* memory_max_target big integer
* memory_target big integer 4G
* shared_memory_address integer
SQL> show spparameter sga;
SID NAME TYPE VALUE
-------- ----------------------------- ----------- ----------------------------
* lock_sga boolean
* pre_page_sga boolean
* sga_max_size big integer
* sga_target big integer
SQL> show spparameter pga;
SID NAME TYPE VALUE
-------- ----------------------------- ----------- ----------------------------
* pga_aggregate_target big integer
设置方法:
alter system set memory_target=4G scope=spfile;
alter system set sga_target='' scope=spfile
alter system set pga_aggregate_target='' scope=spfile;
重启数据库
3.1.3系统全局区(system global aera)被所有服务器进程和后台进程共享的内存区域,随着实例
的启动而分配,一个实例只有一个sga,共享给所有会话使用,sga有6个基本组件
1.数据缓冲区(database buffer cache)
1.1功能:
是从数据文件中检索出来的数据,共所有用户共享,当前用户要操作数据库中的数据库时,先由服务器
进程将数据从磁盘的数据文件中读取到数据高速缓冲区中,然后在缓冲区进行处理,用户粗话里后的结果
被存在数据告诉缓冲区中,最后由数据库写进程dbwr写入到磁盘数据文件中永久保存。
1.2缓存块类型
脏缓存块:保存的是已经被修改过的数据,最终被dbwr进程写入到数据文件,以永久保存
空闲缓存快:空闲缓存快红不包含任何数据,他们等待后台进程或服务器进程向其中写入数据,当oracle从
数据文件中读取数据时候,将会寻找空闲缓存块,以便将数据写入其中。
命中缓存块:是那些正在被使用,或者被显式地声明为保留的缓存块。
1.3缓存块的管理:
在数据库中采用藏缓存块列表和LRU列表来管理数据告诉缓冲区中的缓存快
1.脏缓存块:包含那些已经被修改但还没有写入数据文件的藏缓存块。
2.LRU列表:包含所有的空闲缓存块,命中缓存块和那些没有来的及一如到脏缓存块列表中的脏缓存块,
2.共享池(shared pool),是对sql,pl/sql 程序进行语法解析,编译,执行的内存区域,共享池由
以下三种区域直接影响数据库性能
1.库缓存(library cache)
存储最近使用过的信息
共享经常使用的句子
包含两个共享区
shared sql area
shared pl/sql area
决定shared pool 大小
share sql area
2.数据字典缓存(data directory cache)
缓存最近使用的数据字典信息,以备用户使用
3.结果缓存(server result cache)
存放服务器端的sql结果集和pl/sql函数返回值
3.日志缓冲区(redo log buffer)
3.大池(large pool)
5.java池(java pool)
6.流池(streams pool)
3.2后台进程
进程概念
进程是操作系统中一个独立的可以调度的活动,用于完成指定的任务,进程与程序的区别在于:
1.进程是动态的概念,即动态创建,完成任务后立即消亡,而程序是一个静态实体。
2.进程强调执行过程,而程序仅仅是指令的有序集合
进程类型:
在oracle数据库服务器中,进程分为用户进程(user process),服务器京城(server process),后
台进程(backupgroud process)
1.用户进程:当用户连接数据库执行一个应用程序,会创建一个用户进程,来完成用户所指定的任务,
oracle数据库中有两个与用户进程相关的概念:连接和会话
1.1.连接:指用户进程与数据库实例之间的一条通信路径,该路径由硬件线路,网络协议和操作系统完成。
1.2.会话:指用户到数据库的指定连接,在用户连接数据库的过程中,会话始终存在,直到用户断开连接
或者终止应用程序,
2服务器进程:
2.1服务器进程是由oracle自身创建,用于处理连接到数据库实例的用户进程所提出的请求,用户进程
只能通过服务器进程才能实现对数据库的访问和操作
服务器进程分为专有服务器进程(只能为一个用户提供服务)和共享服务器进程(多个用户提供服务)
2.2服务器进程主要任务
1.解析并执行用户提交的sql和plsql程序
2.在sga的数据高速缓冲区搜索用户进程所要访问的数据,如果数据不在缓冲区中,则需要从磁盘数据
文件中读取
3.所需要的数据,再将它们复制到缓冲区
4.将用户改变数据库的操作信息写入到日志缓冲区中
5.将查询或执行后台的结果数据返回给用户进程
3.后台进程
3.1后台进程的主要任务
1在内存与磁盘之间进行io操作
2监视各个服务器进程状态
3协调各个服务器进程的任务
4维护系统性能和可靠性
3.2后台进程包括:
1.SMON进程
SMON进程的主要功能包括
1.在实例启动时负责对数据库进行恢复
2.回收不再使用的临时空间:
3.将各个表空间的空闲碎片合并(表空间的存储参数 PCTINCREASE不为0时)。
SMON进程除了在实例启动时执行一次外,在实例运行期间,它会被定期唤醒,检查是否有工作需要
它来完成。如果有其他任何进程需要使用SMON进程的功能,它们将随时唤SMON进程。
2.PMON进程
PMON进程的主要功能包括:
1.负责恢复失败的用户进程或服务器进程,并且释放进程所占用的资源:
2.清除非正常中断的用户进程留下的孤儿会话,回退未提交的事务,释放会话所占用的锁、SGA、PGA
等资源
3.监控调度进程和服务器进程的状态,如果它们失败,则尝试重新启动它们,并释放它们所占用的各种
资源。与SMON进程类似,PMON进程在实例运行期间会被定期唤醒,检查是否有工作需要它来完成。如
果有其他任何进程需要使用PMON进程的功能,它们将随时唤醒PMON进程。
3.DBWR进程
数据库写入进程负责把数据高速缓冲区中已经被修改过的数据成批写入数据文件中永久保存,同时使
数据高速缓冲区有更多的空闲缓存块,保证服务器进程所需要的数据从数据文件中读取到数据高速缓
冲区,提高命中率,当下列条件满足时,DBWR进程将启动,将数据高速缓冲区中的脏数据写入数据文件:
1.服务器进程在数据高速缓冲区中搜索一定数据量的缓存块后,仍然没有找到可用的空闲缓存块,此时
dbwr进程将被启动
2.检查点发生时,将启动dbwr进程
3.当数据高速缓冲区中LRU列表长度达到初始化参数db_block_write_batch指定值一半时,dbwr进程将被启动
4.dbwr进程发生超时,dbwr进程被启动(dbwr进程数据不能超过cpu数目)
4.LGWR进程
负责把重做日志缓冲区的重做记录写入到重做日志文件中,永久保存,
dbwr进程在工作之前,需要了解lgwr进程是否已经把相关的日志缓冲区中的重做记录写入重做日志文件中,
如果还没有写入重做日志文件,dbwr进程通知lgwr进程完成相应的工作,然后dbwr进程开始写入,这压根可
以保证先将与脏缓存块相关的重做记录信息写入重做日志文件,然后将脏缓存块写入数据文件,先写重做日
志文件后写数据文件当满足下列条件时候,lgwr进程会将重做日志缓冲区的重做记录写入重做日志文件
1.用户提交commit;
2.重做日志缓冲区被写满1/3
3.dbwr开始将脏块写入数据文件
4.lgwr进程超时3s,lgwr进程将启动
事物提交机制:
1.快速提交:当用户提交一条commit语句时,lgwr进程会立即将一条提交记录写入到重做日志文件中,然后
开始写入与该事务相关的重做信息,而此时,这个事物所产生的脏缓存块并不会立刻被dbwr进程写入数据文件,
这是被称为快速提交
2.组提交:如果数据库中同时存在多个事物,则lgwr进程一次性将重做日志缓冲区的重做记录写入重做日志文件,
而不管事物是否已经提交,因为提交的事物有一个提交记录,而没有提交的事物没有提交记录。所以oracle可以
识别事物是否已经提交
5.CKPT进程
检查点的概念:
检查点是一个事件,当该事件发生时,dbwr进程把数据高速缓冲区中的脏缓存块写入数据文件中,同时oracle
将对数据库控制文件和数据文件头部的同步序号进行更新,记录以下当前的数据库结构和状态,保证数据的同步
当执行检查点事件之后,oracle知道所有已经提交的事物对数据库所做的更改已经全部被写入数据文件中,此时
数据库处于一个完整状态,当数据库崩溃之后。只需要将数据库恢复到上一个检查点执行时刻即可
CKPT进程的作用就是执行检查点,完成下列操作
1.更新控制文件与数据文件的头部,使其同步:
2.触发DBWR进程,将脏缓存块写入数据文件。
检查点的级别
在 Oracle数据库内部定义了许多基于特定操作的检查点,在不同时刻执行不同级别检查点
1.数据库检査点:每一次日志切換时,执行一个数据库检查点,DBWR进程将数据高速缓冲区中的脏缓存块写入数据文件中
2.表空间检查点:当一个表空间设置为脱机状态时,执行一个表空间检查点,DBWR进程把数据高速缓存中与该表空间相
关的脏缓存块写入数据文件中。
3.时间检查点:可以设置以时间为基础的检査点,每隔一段时间执行一次检查点,需要为检査点设置一个合适的执行间隔,
间隔太短,将会产生过多的使盆I/O操作:间隔太长据库的恢复将耗费太多时间。
与检查点相关的初始化参数
1.LOG CHECKPOINT TIMEOUT:用来指定每隔多长时间执行一次检查点,以秒为单位,比如将该参数设置为1800表示每隔1800
执行一次检查点:如果为0,表示将禁用基于时间的检查点。
2.LOG CHECKPOINT INTERVAL:用来指定执行检査点之前,必须写入重做日志文件的系统操作块的数量。例如,重做日志文
件大小为1MB,系统操作块为1KB,设置此参数500,则每当向重做日志文件中写入500KB时,执行一次检查点。
3.LOG CHECKPOINT TO_ ALERT:用于设置是否将检查点信息记录到警告日志中,如果该参数值为TRUE,则检查点信息将写
入数据库的警告文件。通过对 LOG CHECKPOINT TIMEOUT参数和 LOG CHECKPOINT INTERVAL参数设置可以控制检査点事
件发生的频率
6.ARCH进程
ARCH进程负责在日志切换后将已经写满的重做日志文件复制到归档目标,以防止写满的重做日志文件被覆盖只有当数据
库运行在归档模式,并且初始化参数 LOG ARCHIVE START设置为TRUE,即启动自动归档功能时,才能启动ARCH进程:否则当
重做日志文件全部被写满后,数据库将被挂起,等持DBA进行手动归档在默认情况下,一个实例只会启动一个ARCH进程。但
是在数据库运行过程中,为了加快重做日志文件归档的速度,避免数据库挂起等待,LGWR进程可以同时启动多个ARCH进程
(ARCH进程由LGWR进程启动,而不是由DBA启动)。在 Oraclelog数据库中最多可以同时启动10个归档进程
7. RECO
RECO进程负责在分布式数据库环境中自动解决分布式事务的故障。一个节点的RECO自动解决所有的悬而未决的事务。
当一个数据库服务器的RECO后台进程试图建立同一个远程服务器的通信时,如果该远程服务器不可用或者网络连接不能
建立时,RECO会自动地在一个时间间隔之后再次连接。当且仅当数据库配置为分布式事务处理,且初始化参数DISTRIBUTED TRANSACTIONS
的值大于0时,RECO进程才会自动启动
8. LCKN
LCKn进程用于 Oracle并行服务器环境中。在数据库中最多可以同时启动10个LCKn进程,主要用于实例间的封锁。
9. Dnnn
Dmn进程是多线程服务器( Multi Threaded Server,MTS)的组成部分,以后台进程的形式运行。调度进程接受用户进程请求,
将它们放入请求队列中,然后为请求队列中的用户进程分配一个服务器进程。最后,从响应队列中返回数据给用户进程
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




