oracle里面的arcn,1_Oracle_Admin_Oracle的体系结构概述

一. Oracle数据库的组件结构概述

本章节只是概述,各组件的含义和作用将在后文中详解

acf7211011c5da37544e136fe76c5cff.png

8c63a7b64262a0b32b1c764a154dd3cb.png

Oracle数据库主要分成两部分,即Instance和Database。

0e7fda7d481877509b9df103858bd486.png

f4bcb4f0c573ca8c25dd7d964576b393.png

21e08872dd8dfe0c113e2cef4cd0be8e.png

5c6f5de9b4fd0af600509c2caa313640.png

[oracle@localhost ~]$ cd/oracle/oradata/orcl

[oracle@localhost orcl]$ lltotal 1591284

-rw-r-----. 1 oracle oinstall   9748480 Sep 8 21:50 control01.ctl

# 控制文件(ctl)

-rw-r-----. 1 oracle oinstall 104865792 Sep  8 19:57 example01.dbf

#数据文件(dbf)

-rw-r-----. 1 oracle oinstall  52429312 Sep 8 12:30 redo01.log

-rw-r-----. 1 oracle oinstall  52429312 Sep 8 19:00 redo02.log

-rw-r-----. 1 oracle oinstall  52429312 Sep 8 21:50 redo03.log

#日志文件(log)

-rw-r-----. 1 oracle oinstall 576724992 Sep  8 21:49 sysaux01.dbf

-rw-r-----. 1 oracle oinstall 713039872 Sep  8 21:48 system01.dbf

-rw-r-----. 1 oracle oinstall  20979712 Sep 8 18:34 temp01.dbf

-rw-r-----. 1 oracle oinstall  57679872 Sep 8 21:49 undotbs01.dbf

-rw-r-----. 1 oracle oinstall   5251072 Sep 8 19:06 users01.dbf

==============切换到shell查看进程==================

[oracle@localhost ~]$ ps -ef |grep oracleroot      6522  1372  017:18 ?        00:00:00 sshd: oracle[priv]

oracle    6526  6522  017:18 ?        00:00:01 sshd:oracle@pts/2

oracle    6527  6526  017:18 pts/2    00:00:00 -bash

root      6554  1372  017:18 ?        00:00:00 sshd: oracle[priv]

oracle    6558  6554  017:18 ?        00:00:03 sshd:oracle@pts/3

oracle    6559  6558  017:18 pts/3    00:00:00 -bash

oracle    6590  6527  017:19 pts/2    00:00:00 sqlplus

root      8470  1372  020:57 ?        00:00:00 sshd: oracle[priv]

oracle    8475  8470  020:57 ?        00:00:00 sshd:oracle@pts/0

oracle    8476  8475  020:57 pts/0    00:00:00 -bash

root      8505  1372  020:57 ?        00:00:00 sshd: oracle[priv]

oracle    8509  8505  020:57 ?        00:00:00 sshd:oracle@pts/1

oracle    8510  8509  020:57 pts/1    00:00:00 -bash

oracle    9038  8476  021:55 pts/0    00:00:00 sqlplus

oracle    9149  9038  021:56 ?        00:00:01 oracleorcl(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))

oracle    9175  9038  021:57 pts/0    00:00:00 /bin/bash

oracle    9205  9175  022:00 pts/0    00:00:00 sqlplus

oracle    9315  9205  022:00 ?        00:00:00 oracleorcl(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))

oracle    9429  8510  022:09 pts/1    00:00:00 ps -ef

oracle    9430  8510  022:09 pts/1    00:00:00 grep oracle...

-- 没有oracle 数据库的进程

=================启动数据库=====================

[oracle@localhost ~]$ sqlplus/nolog

SQL*Plus: Release 11.2.0.1.0 Production on Mon Sep 821:55:48 2014

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

SQL> conn / as sysdbaConnected to an idle instance.

SQL> startupORACLE instance started.

Total System Global Area 422670336 bytes

Fixed Size                 1336960 bytes

Variable Size            318769536 bytes

Database Buffers          96468992 bytes

Redo Buffers               6094848 bytes

Database mounted.

Database opened.

SQL>

--出现SQL>说明启动完成了

==============切换到shell查看进程==================

[oracle@localhost ~]$ ps -ef |grep oracleroot      6522  1372  017:18 ?        00:00:00 sshd: oracle[priv]

oracle    6526  6522  017:18 ?        00:00:01 sshd:oracle@pts/2

oracle    6527  6526  017:18 pts/2    00:00:00 -bash

root      6554  1372  017:18 ?        00:00:00 sshd: oracle[priv]

oracle    6558  6554  017:18 ?        00:00:03 sshd:oracle@pts/3

oracle    6559  6558  017:18 pts/3    00:00:00 -bash

oracle    6590  6527  017:19 pts/2    00:00:00 sqlplus

root      8470  1372  020:57 ?        00:00:00 sshd: oracle[priv]

oracle    8475  8470  020:57 ?        00:00:00 sshd:oracle@pts/0

oracle    8476  8475  020:57 pts/0    00:00:00 -bash

root      8505  1372  020:57 ?        00:00:00 sshd: oracle[priv]

oracle    8509  8505  020:57 ?        00:00:00 sshd:oracle@pts/1

oracle    8510  8509  020:57 pts/1    00:00:00 -bash

oracle    9038  8476  021:55 pts/0    00:00:00 sqlplus

oracle    9149  9038  021:56 ?        00:00:01 oracleorcl(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))

oracle    9175  9038  021:57 pts/0    00:00:00 /bin/bash

oracle    9205  9175  022:00 pts/0    00:00:00 sqlplus

#######-------------以下是Oracle 数据库的进程---------------######

oracle    9482     1  022:10 ?        00:00:00 ora_pmon_orcl

oracle    9484     1  122:10 ?        00:00:00 ora_vktm_orcl

oracle    9488     1  022:10 ?        00:00:00 ora_gen0_orcl

oracle    9490     1  022:10 ?        00:00:00 ora_diag_orcl

oracle    9492     1  022:10 ?        00:00:00 ora_dbrm_orcl

oracle    9494     1  022:10 ?        00:00:00 ora_psp0_orcl

oracle    9496     1  022:10 ?        00:00:00 ora_dia0_orcl

oracle    9498     1  022:10 ?        00:00:00 ora_mman_orcl

oracle    9500     1  022:10 ?        00:00:00 ora_dbw0_orcl

oracle    9502     1  022:10 ?        00:00:00 ora_lgwr_orcl

oracle    9504     1  022:10 ?        00:00:00 ora_ckpt_orcl

oracle    9506     1  022:10 ?        00:00:00 ora_smon_orcl

oracle    9508     1  022:10 ?        00:00:00 ora_reco_orcl

oracle    9510     1  222:10 ?        00:00:00 ora_mmon_orcl

oracle    9512     1  022:10 ?        00:00:00 ora_mmnl_orcl

oracle    9514     1  022:10 ?        00:00:00 ora_d000_orcl

oracle    9516     1  022:10 ?        00:00:00 ora_s000_orcl

oracle    9543  9205  622:10 ?        00:00:00 oracleorcl(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))

oracle    9545     1  022:10 ?        00:00:00 ora_qmnc_orcl

oracle    9559     1  022:10 ?        00:00:00 ora_cjq0_orcl

oracle    9561  8510  022:10 pts/1    00:00:00 ps -ef

oracle    9562  8510  022:10 pts/1    00:00:00 grep oracle

## 已经可以看到很多数据库的进程了

255cefe38395faa4b1ce0dd8e07eb6a3.png

cf7ad15bc49472efc99628b5e6335764.png

Server process和backgroundprocess不同,它主要用来处理用户和服务器的连接。一个Serverprocess就有一个PGA,但整个instance只有一个SGA。

=============查看当前系统的ipcs资源=================

[oracle@localhost ~]$ ipcs------ Shared Memory Segments --------

key        shmid      owner     perms      bytes      nattch    status

0x85abc748 229376    oracle     660         4096       0

------ Semaphore Arrays --------

key         semid      owner     perms      nsems

0x974edfd4 589826     oracle      660       154

------ Message Queues --------

key        msqid      owner     perms      used-bytes   messages

二.Oracle的内存结构概述

A. SGA概述

9f56e2c70e3a3866bdc6778e4cf4b4df.png

========================切到数据库查看SGA===========================

SQL> show sga;

Total System Global Area 422670336 bytes

Fixed Size                 1336960 bytes

Variable Size            318769536 bytes

Database Buffers          96468992 bytes

Redo Buffers               6094848 bytes

714856c224464354426fcf6456b14f81.png

可以动态调整SGA的值,随着用户发送的请求增多,SGA需要不断的扩张。故需要动态的变化,SGA是一个连续内存的分配区域。

SGA_MAX_SIZE决定了Oracle需要的SGA上限。

Oracle中SGA内存增大或缩小的单位是granules,granules的默认值是4MB。

=====================查看granules============================

SQL> select component,granule_size from v$sga_dynamic_components;

COMPONENT                                                       GRANULE_SIZE

--------------------------------------------------------------------

shared pool                                                       4194304

--可以看到granules是4MB

large pool                                                        4194304

java pool                                                         4194304

streams pool                                                      4194304

DEFAULT buffer cache                                              4194304

KEEP buffer cache                                                 4194304

RECYCLE buffer cache                                              4194304

DEFAULT 2K buffer cache                                           4194304

DEFAULT 4K buffer cache                                           4194304

DEFAULT 8K buffer cache                                           4194304

DEFAULT 16K buffer cache                                          4194304

DEFAULT 32K buffer cache                                          4194304

Shared IO Pool                                                    4194304

ASM Buffer Cache                                                  4194304

14 rows selected

a3b881232be4aa3dea3173d3c9fe6005.png

SGA的组件也有自己的size,可以通过联机文档查看各组件参数的含义和大小:

bc0c7fee5e581aecf3c19f097e43c202.png

098f9e2adf40b292072a27fff18fb2ec.png

cc20bb4a7e7acfc2d396fea49441d6fd.png

为简化操作,目前ORACLE可以自动分配组件尺寸的参数,且随着实际的应用,这些参数也会动态的变化。

===================== Share Pool ========================

3d4e7d54405e386cd4be3cc24dd1f711.png

操作数据库的SQL语句会被解析成原子结构,然后进行操作,这些已经被解析了SQL语句就储存在Shared Pool(共享池)中。

3c76e4122bdb7b4ddaf5f94ae74a90d9.png

e8c571a2517ff6e2bab48fc548788803.png

上文中查看的v$sga_dynamic_components就存储在DD(数据字典)中

====================DatabaseBuffer Cache=========================

72c4a96fe6732a7743c7bbec6ece08a9.png当数据库执行查询操作时,会首先在Database Buffer Cache中查找数据,如果找到了,就称为catch hit,没有找到称为catch miss,当catch miss时,Oracle只能到磁盘上去查找数据。因此要提高数据库的性能,就需要提高catch hit的几率。28f254f985036d7dc2f16e77f318aaad.png

===========================Redo LogBuffer===========================

53d0b69896df62679c22d4394f09c6a0.png============================LargePool===============================

c2495d72eeea5414218a2a66c107ed33.png

=====================Java Pool========================

6de2c73db826ebfb283aacb59fbb1fc8.png

Large Pool和JavaPool是可选项。

B.PGA概述

64a8514bc3d28477a9e565ff88cc9883.png

当进程启动了,PGA就启动了,当进程结束,PGA就终止了。

5b0ed69692e9f4e6eaa001052d9b0eda.png

Oracle的进程结构概述

9d6a3a6c9de0ff6eb6f80a4d2a3ed2fd.png

User Process简而言之,就是客户端发起的进程;而Serverprocess和Background Process都属于后台进程。

A. User Process

Oracle在Linux服务器上表现为多个进程,而在Windows上则表现为一个大的进程,其中包含了多个线程。

4e3e7587aaf2d55dd20634e383bc5b2a.png

==============演示Windows下不同工具连接数据库发起的进程==================

在命令行中用sqlplus连接数据库发起的进程

543147201e4e2ce9cfc2d0286fb4a51d.png

使用Toad连接数据库发起的进程:

d5eb02330704724d6632362947530bbd.png

上述两个进程都属于UserProcess。

B. Server Process

6ba7fc4b1dd78df3adf8d03018cb2f9f.png

============在Windows中使用sqlplus连接数据库=============

38c1caa3d611e3c8d6fac30ad8b0fb6b.png

============多了一个进程==============

72e7fd8c8e74a85156f0c2cbef4f07fd.png

该进程负责和windows下的sqlplus进行交互。

e9ebcfee2d53fa706bfcbec22d99217f.png

[oracle@localhost ~]$ ifconfigeth0      Link encap:Ethernet  HWaddr 08:00:27:72:C3:4A

inetaddr:192.168.56.101 Bcast:192.168.56.255 Mask:255.255.255.0

inet6 addr:fe80::a00:27ff:fe72:c34a/64 Scope:Link

UP BROADCASTRUNNING MULTICAST  MTU:1500  Metric:1

RX packets:70142errors:0 dropped:0 overruns:0 frame:0

TXpackets:13444 errors:0 dropped:0 overruns:0 carrier:0

collisions:0txqueuelen:1000

RXbytes:6398802 (6.1 MiB)  TX bytes:1746250(1.6 MiB)

lo        Linkencap:Local Loopback

# 本地回环的通讯设备,它的IP Address永远都是127.0.0.1

inetaddr:127.0.0.1  Mask:255.0.0.0

inet6 addr:::1/128 Scope:Host

UP LOOPBACKRUNNING  MTU:16436  Metric:1

RXpackets:1875 errors:0 dropped:0 overruns:0 frame:0

TXpackets:1875 errors:0 dropped:0 overruns:0 carrier:0

collisions:0txqueuelen:0

RXbytes:131872 (128.7 KiB)  TX bytes:131872(128.7 KiB)

本机连接数据库,可能用的是IPC协议,不同机器远程连接数据库则需要使用TCP/IP协议。

C. Background Process

9ec2b2da8b91f33308a3ea72aa374148.png

[oracle@localhost ~]$ ps -ef |grep oracleoracle    9482     1  022:10 ?        00:00:01 ora_pmon_orcl

oracle    9484     1  122:10 ?        00:01:05 ora_vktm_orcl

oracle    9488     1  022:10 ?        00:00:00 ora_gen0_orcl

oracle    9490     1  022:10 ?        00:00:00 ora_diag_orcl

oracle    9492     1  022:10 ?        00:00:00 ora_dbrm_orcl

# 这里 ora 指的是数据库名,orcl指的是Oracle的sid;中间的pmon等指的就是background process。

有些进程是必须的,有些是可选的,只有当某些服务被启动时才产生。

====================一些重要的进程========================

1)DBWn

48e719d2f4a991abfe6380867f3f76ef.png

DBWn(其中n表示数字)用来将缓冲区中的数据写入到磁盘文件中。

2)LGWR

81192a07845bc40229cb8bb9673acf60.png

所有的操作都会被记录到Redo Log files中,以备今后备份恢复,在DBWn进行写操作前,LGWR一定会先进行写操作,以确保DBWn写入了错误的数据还能回滚。Redo Log Files是个循环文件,即当该文件被写满了后,会从头开始写,这样就会导致最初的数据被覆盖。

3)SMON

ba5a21ddbfccab4c4bea2d9f24634ae4.png

SMON类似于清洁工,用来清理一些不必要的数据,但它不监控process。

4)PMON

f25ea25d48d9363adb315ce8fdb876aa.png

PMON和SMON的作用比较类似,也是进行清理工作,区别在于PMON清理的是进程而非数据。

5)CKPT

f45470521002586e0346cca0955a0f0a.png

早期CKPT的工作是由LGWR来完成的,但随着管理数据规模的增大,LGWR不堪重负,于是Oracle引入了CKPT,主要用来更新一些检查点的信息。

6)ARCn

fd50790da49ef3fc64b547e72ec30a49.png

ARCn(n表示数字)是一个可选项,但在实际生产环境中数据库都会运行在归档模式下,由ARCn用来将Redo log files中的数据进行归档,以便备份和恢复。

四、Oracle的逻辑结构

fe332759bc6cc08e34e1c5d667f60d72.png

Oracle的逻辑结果可以归纳为:

一个Oracle Server上只有一个OracleDatabase;一个Database可以有多个Tablespace;一个Tablespace可以有多个Segment;一个Segment可以由多个Extent组成,一个Extent是由一组连续的Blocks组成的,Oracle数据库中的Block是数据存储的最小单元。

460af6c932e8fd84a52ebc26d19f77d9.png

操作系统中的数据存储单元也称为block,而Oracle数据库中的Block是操作系统中block的整数倍。Oracle中的DB_BLOCK_SIZE决定了block的大小,通常为8k。

Oracle中的Datafile实际上是个物理结构,一个Tablespace可以由多个Datafile组成,一个Segment可以横跨Datafile,但Extent不能横跨Datafile。

五、Oracle中执行SQL语句的过程

412974587d16b3d18b51294414eb704f.png

Oracle执行SQL语句的基本过程可以归纳为:1.连接数据库;2.. 进行安全检查;3. 将SQL语句解析为原子操作(parsing);4. 进行变量绑定操作; 5. 执行语句;6. 将执行结果返还给用户。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值