一、Oracle体系结构概述
体系结构是对一个系统的框架描述,是设计一个系统的宏观工作。数据库系统结构设计了整个数据库的组成和各部分组件的功能,这些组件相互协调完成数据的管理和数据维护工作。
二、Oracle数据库洗体系结构
Oracle体系结构包括:
- 实例(instance)
- 数据库文件
- 用户进程(User process)
- 服务器进程(Server process)
- 以及其他文件:参数文件(paramater file)、密码文件(password file)和归档日志文件(archived log file)等
如下图:
(1)Oracle服务器和实例
Oracle服务器和实例是两个非常重要的概念:
- Oracle实例(instance):是有一些内存区和后台进程组成;
内存包括:数据库高速缓存、redolog缓存、共享池、流池
后台进程包括 :smon、pmon、dbwr、lgwr、ckpt
数据库启动过程可以在告警日志(alertSID.ora)中看到详细过程;
从 Oracle 11g 开始,Oracle 以 XML与传统的文本两种格式提供 Alert日志。
新的日志位置由 Automatic Diagnostic Repository (ADR)决定。
可以通过新的初始化参数 DIAGNOSTIC_DEST控制 ADR BASE的位置。
如果没有设定这个初始化参数的位置,而设置 ORACLE_BASE环境变量的话,那么,如果没有设定ORACLE_BASE ,则 ORACLE_HOME/log即为 DIAGNOSTIC_DEST。
Alert Log 文件父目录的位置在:ADR_BASE/diag/product_type{eg:rdbms}}/product_id{eg:11g}/instance_id
这个目录下有 alert/trace/bdump之类的子目录。就是 Log的具体位置了。alert下是 XML文件:
可在v$diag_info视图中用如下命令查到:
select * from v$diag_info where name ='Diag Alert'; select * from v$diag_info where name ='Diag Trace'; select * from v$diag_info;
- Oracle服务器:有数据库实例和数据库文件组成
数据库服务器出了维护实例和数据库文件外,还在用户建立与服务器的连接时启动服务器进程并分配PGA。
(2)Oracle数据库物理结构(文件组成)
数据文件(Data files)、控制文件(control files)、重做日志文件(redo files)
》数据文件(Data files):数据文件包含数据库中的实际数据、为数据库操作中数据库最终存储位置
》控制文件(control files):包含维护数据库和验证数据库完整性的信息,它是二进制文件
》重做日志(redo files):重做日志包含数据库发生变化的记录,在发生故障时用户数据恢复。
(3)参数文件、密码文件和归档日志文件
这三个文件是oracle不可或缺的三个文件。
》参数文件(parameter file):定义了数据库市里的特性,在三处文件中包含SGA中内存解构分配空间参数;
》密码文件(password file):在刚安装数据库是,oracle的默认用户和密码就存储在密码文件中,oracle可以借此判断用户的操作权限。
》归档日志文件(archive log files):归档日志文件是日志文件的脱机备份,在发生故障进行数据回复时可能使用该文件。
三、数据库连接与回话
(1)数据库连接(connection)
连接只用户进程和数据库服务器之间的通信途径,一个连接诶可以有多个对话。Oracle提供了3中数据库连结方式:基于主机的方式(Host-Based)、基于客户机-服务器的方式(Client-Server)、客户-应用服务器-数据库服务器方式(Client-Application Server);
》基于主机的方式(Host-Based):服务器和客户端运行在同一台计算机上,用户可以直接连接数据库服务器;
》基于客户机-服务器的方式(Client-Server):客户端和数据库服务器运行在不同的主机上,通过网络连接数据库服务器。
》客户-应用服务器-数据库服务器方式(Client-Application-Server):这种方式称为三层访问模式,用户访问应用服务器,然后由应用服务器连接连接数据库服务器,应用服务器就如一个中介,完成客户和数据库的交互。
(2)会话(session)
会话指一个明确的数据库连接。在(1)中提到的3种方式,一旦用户采用了一种连接方式,就把这样的连接称为会话。
四、Oracle数据库内存结构
Oracle内存结构有两部分组成,一个SGA,一个是PGA。
》PGA:程序全局区,不是数据库实例的一部分,当服务器进程启动时,才分配PGA。
》SGA:系统全局区,数据库实例的一部分,数据库实例启动时,首先分配系统全局区,在系统全局起中包含几个重要的内存区:数据库高速缓存(Database buffer cache)、重做日志缓存(redo log buffer cache)、共享池(shared pool)、large pool、java pool。
(1)共享池(chared pool)
Oracle引入共享池目的是共享SQL或则PL/SQL代码。包含:Library cache、data dict cache;
》Library cache:存储了最近使用过的SQL和PL/SQL语句。LRU算法进行缓存管理;不能直接设置这个区域的大小,只能通过设置共享池(chared_pool_size)大小,间接设置Library cache大小。
alter system set shared_pool_size = 50M; show parameter shared_pool_size;
》data dict cache:缓存区存储了数据文件、表、索引、列、用户、权限信息和其他一些数据对象的定义。不能直接设置这个区域的大小,只能通过设置共享池(chared_pool_size)大小,间接色设置data dict cache大小。
(2)数据库告诉缓冲区(database buffer cache)
》缓存最近从数据文件中读取到的数据以及用护轨更改后需要会写到数据库的数据信息;
》LRU算法管理该区域;
》管理参数:DB_BLOCK_SIZE * DB_BLOCK_BUFFERS;修改这两个参数需要重启数据生效;
9i以上的版本db_cache_size = DB_BLOCK_SIZE * DB_BLOCK_BUFFERS 修改db_cache_size不需要重启数据库服务;
SQL> show parameter db_block NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_block_buffers integer 0 db_block_checking string FALSE db_block_checksum string TYPICAL db_block_size integer 8192 SQL> show parameter db_cache NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_cache_advice string ON db_cache_size big integer 0 SQL>
11g sga自动管理,所以db_cache_size 和db_block_bufers都为0;
可以试用show sga查看数据库告诉缓冲去的分配的内存大小;
SQL> show sga Total System Global Area 1185853440 bytes Fixed Size 2212776 bytes Variable Size 738200664 bytes Database Buffers 436207616 bytes Redo Buffers 9232384 bytes SQL>
上述,database buffer为数据库缓存区的大小;
oracle中引入了。buffer cache advisory parameter,起目的是让oracle对于数据库缓存去的内存分配提供一些建议;
db_cache_advice OFF | ON | READY
SQL> show parameter db_cache_advice; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_cache_advice string ON SQL> select id, name, block_size,size_for_estimate,buffers_for_estimate from v$db_cache_advice; ID NAME BLOCK_SIZE SIZE_FOR_ESTIMATE BUFFERS_FOR_ESTIMATE ---------- -------------------- ---------- ----------------- -------------------- 3 DEFAULT 8192 32 3940 3 DEFAULT 8192 64 7880 3 DEFAULT 8192 96 11820 3 DEFAULT 8192 128 15760 3 DEFAULT 8192 160 19700 3 DEFAULT 8192 192 23640 3 DEFAULT 8192 224 27580 3 DEFAULT 8192 256 31520 3 DEFAULT 8192 288 35460 3 DEFAULT 8192 320 39400 3 DEFAULT 8192 352 43340 3 DEFAULT 8192 384 47280 3 DEFAULT 8192 416 51220 3 DEFAULT 8192 448 55160 3 DEFAULT 8192 480 59100 3 DEFAULT 8192 512 63040 3 DEFAULT 8192 544 66980 3 DEFAULT 8192 576 70920 3 DEFAULT 8192 608 74860 3 DEFAULT 8192 640 78800 20 rows selected. Elapsed: 00:00:00.02 SQL>
(3)重做日志高速缓存区(redo buffer cache)
log_buffer,该参数不能动态修改;
SQL> show parameter log_buffer NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ log_buffer integer 8847360 SQL> alter system set log_buffer = 10M 2 ; alter system set log_buffer = 10M * ERROR at line 1: ORA-02095: specified initialization parameter cannot be modified Elapsed: 00:00:00.04 SQL>
(4)Large pool和java pool
Large pool是sga的一段可选内存区,只在共享服务器环境中配置。
通过 large_pool_size修改改区域大小,可以动态修改,不需要重启服务;
SQL> show parameter large_pool_size NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ large_pool_size big integer 0 SQL> show parameter java_pool_size NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ java_pool_size big integer 0 SQL>
11g中这两个参数都是sga自动管理,所以值都是0;
(5)streaming pool
通过stream_pool_size设置
(6)PGA(进程全局区)和UGA(用户全局区)
》PGA,是服务器进程专用的一块聂村,它是操作系统进程专用的内存,系统中的其他进程是无法访问这块内存的。PGA独立于SGA,PGA不会在SGA中出现,他是有操作系统在本地分配的。
PGA中存储了服务器进程或者单独的后台进程的数据信息和控制信息。它随着服务器进程创建而被分配内存,随着进程的终止而释放内存。
PGA是不是一个共享区域,而是服务器进程专有的区域。在专有服务器(与共享服务器相对的概念)配置中包括如下组件:
-排序区:对某些的SQL语句执行结果进行排序。
-会话信息:包含本次会话的用户权限喝性能统计信息。
-游标状态:表名当前会话执行的SQL语句的处理阶段。
-堆栈区:包含其他会话变量。
在共享服务器配置中,多个用户进程共享一个服务器进程,上述的这些内存区域可能出现在SGA中分配,如果创建了largepool,这些内存结果就存储在large pool中,否这它们存储在shared pool中。
》UGA(用户全局区),在共享服务器模式下,UGA存储在每个共享服务器都可以访问的SGA中,这样任何服务器都可以试用用户会话的数据和其他信息。而在专用服务器模式下,用户会话状态不需要共享,用户进程与服务器进程是一一对应的关系,所以UGA总是在PGA中进行分配。
》PGA内存管理,从9i开始oracle提供了两种办法管理PGA,手动和自动。
如果手动管理,必须指定sort_area_size参数告诉oracle使用多大内存进行排序;自动管理则不需要。
SQL> show parameter sort_area_size; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ sort_area_size integer 65536 SQL>
(7)如何活得内存缓冲区的信息
SQL> show sga Total System Global Area 1185853440 bytes Fixed Size 2212776 bytes Variable Size 738200664 bytes Database Buffers 436207616 bytes Redo Buffers 9232384 bytes SQL> show parameter sga_max_size; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ sga_max_size big integer 1136M SQL>SGA是oracle所有进程共享的一段内存区其中共享了数据库信息(数据库高速缓冲区中的数据、共享次中的library cache中的sql语句等)。
Data base buffers、redo buffers前面已经介绍过了,接下来看看fixed size和variable size。
Fixed size:大小用户无法控制,存储SGA中其他组件的变量。
Variable Size:该部分包含shared pool、java pool、large pool,Variable size必须大于三者之和,因为total sga中出去db_cache_size部分也包括在variable size之中。
五、Oracle服务器进程和用户进程
服务器进程和用户进程,是用户试用数据库连接工具同数据库服务器建立连接时,涉及的两个概念。
(1)服务器进程:代表客户会话完成工作的进程。应用向数据库发送的SQL语句最后就要由这些进程接收并执行。dedicated server连接
会在服务器上得到针对这个连接的一个专用进程。数据库连接与服务器上的一个进程之间存在一对一的映射。shared server多个会话可以共享一个服务器进程池,其中的进程由Oracle实例生成和管理。你所连接的是一个数据库调度器(dispatcher),而不是特意为连接创建的一个专用服务器进程。
(2)用户进程:是一个需要与Oracle Server交互的程序运行于客户端当用户运行某个工具或应用程序(如SQL*Plus)时创建,当用户退出上述程序时结束用户进程向Oracle Server发出调用,但它并不与Oracle Server直接交互,而是通过Server Process与Oracle Server进行交互。
六、Oracle数据库后台进程
DBWR、LGWR、PMON、SMON、CKPT。
(1)系统监控进程(SMON):系统监控进程的主要作用就是数据库实例恢复。
当数据库遭遇异常时,比如,操作系统重启数据库异常停机,此时实例SGA中的所有没有写到磁盘的信息都将丢失。当数据库重新启动后,系统监控进程自动恢复实例:
包括3个步骤:
①、前滚所有没有写入数据文件而记录已经在redolog的数据。
②、打开数据库,此时系统监控进程的redo操作还没有完成,oracle这样的做的目的是方便用户及时登录,避免前滚周期过长,影响用户的行为,此时用户可以操作没有被前滚锁的数据。
③、回滚未提交事务。
(2)进程监控进程(PMON):负责服务器进程的管理和维护工作,在进程失败或者连接异常发生时该进程负责一些清理工作。
未完。。。
相关推荐
本书从实用的角度出发,系统地介绍了Oracle 11g的使用和管理,并对它的体系结构和常规管理进行了重点描述。本书对深奥的理论知识不作过多的讨论,重点突出实用性,在每章中都提供了许多实用的例子,力求帮助读者更好...
《Oracle Database 9i/10g/11g编程艺术:深入数据库体系结构(第2版)》是一本专为Oracle数据库开发者和管理员精心编写的权威指南。这本书全面覆盖了Oracle数据库9i、10g和11g版本的核心技术和最佳实践,旨在帮助...
第1章 Oracle Database 11g体系结构概述 3 1.1 Oracle产品系列 4 1.1.1 Oracle服务器系列 4 1.1.2 Oracle开发工具 7 1.1.3 Oracle应用程序 9 1.2 预备知识 9 1.2.1 Oracle概念 10 1.2.2 SQL概念 10 1.2.3 ...
《ORACLE_11g权威指南》是一本深入解析Oracle 11g数据库技术的专业书籍,旨在为初学者和有经验的数据库管理员(DBA)提供全面的学习资源。Oracle 11g是Oracle公司推出的一个重要的数据库版本,它在功能、性能和管理...
Oracle 11gR2是Oracle数据库的一个重要版本,提供了许多高级特性和功能。这份官方文档的中英对照版详细阐述了Oracle数据库的核心概念和技术,包括其体系结构、索引、数据完整性和并发控制等关键方面。以下是对这些...
"Windows上的Oracle Database 11g架构"这部分文档将详细介绍在Windows操作系统环境下Oracle 11g数据库的体系结构。这通常包括进程结构、内存结构、数据文件、控制文件、重做日志、表空间等核心概念,以及如何配置和...
《Oracle 9i&10g编程艺术:深入数据库体系结构》是一本专注于Oracle数据库9i和10g版本的深度解析书籍,旨在为读者提供关于Oracle数据库内部工作原理及编程技巧的详尽指南。该书由多个章节构成,覆盖了从数据库基本...
这些知识点涵盖了 Oracle Database 10g 的数据库管理、实例管理、内存结构、进程、物理数据库结构、OMF、逻辑和物理数据库结构、数据库体系结构、RMAN 等方面的内容,为 DBA 提供了一个全面的知识体系。
### Oracle 10g DBA 宝典:安装与配置指南 #### 1. 安装前的准备工作 ##### 1.1 Oracle Universal Installer (OUI) 介绍 Oracle Universal Installer (OUI) 是一种基于 Java 技术的图形用户界面工具,用于标准化...
第1章 oracle database 11g 体系结构 第2章 安装oracle database 11g 和创建数据库 第3章 升级到oracle database 11g 第4章 规划oracle 应用程序——方法、风险和标准 第ⅱ部分 sql 和sql*plus 第5章 sql...
总之,Oracle 11g官方中文文档集萃是一套全面的指南,无论是初学者还是经验丰富的DBA,都能从中获取宝贵的参考资料,深入了解Oracle 11g数据库的各个方面。通过深入学习和实践,你将能够有效地管理和维护Oracle 11g...
│ oracle体系结构.txt │ oracle学习 - zgh2002007的专栏 - CSDN博客.mht │ Oracle学习笔记(chstone原创).mht │ ORACLE学习笔记(一) - lvhuiqing的专栏 - CSDN博客.mht │ ORACLE学习笔记(一) - lvhuiqing...
### Oracle 11g 面向DBA的新功能学习指南之SQL计划管理详解 #### 一、引言 随着数据库技术的不断发展,Oracle 11g 的推出为数据库管理员(DBA)带来了诸多新的功能与改进。其中一项重要的增强功能便是SQL计划管理...
首先,书中的内容涵盖了Oracle数据库的基础知识,包括数据库体系结构、表空间管理、数据文件、控制文件、重做日志、回滚段等核心概念。这些基础知识是每个DBA都需要扎实掌握的,无论是在日常维护还是在问题排查中都...
无论你是程序员还是dba,要创建和管理稳定、高质量的oracle系统,归根结底都需要理解oracle数据库的体系结构。 本书是讲述oracle数据库毋庸置疑的权威指南,凝聚了世界顶尖的oracle专家thomas kyte数十年的宝贵...
《Oracle Database Concepts》(Oracle数据库概念)是Oracle 11g的核心理论指南,它详细阐述了数据库的基础知识和Oracle的体系结构。该文档涵盖以下几个关键知识点: 1. **数据库基础**:介绍数据库的基本概念,如...