学习
路无止境!

没有伞的孩子要学会努力奔跑!


  • 首页

  • 归档

  • 关于我

  • 公益404

  • 搜索

Oracle基本概念和结构

  1. 什么是关系型数据库? 基于关系模型的数据库,即基于二维表(行、列)存储数据的库。
  2. 什么是数据库? 数据库是存储介质上的文件—>物理存储结构
  3. 什么是实例instance? 内存中运行的数据库进程,包括读入内容的数据库文件; 数据库和实例可用是1:1,也可用是1:N的关系

DE22FBD4-EA19-46CC-B0B2-A8D082C887E5.jpeg

架构-存储结构

Untitled

物理存储结构

#实验的数据目录和文件
[root@oracle-12 prod]# pwd
/oracle_data/prod
[root@oracle-12 prod]# ll
total 2428380
-rw-r----- 1 oracle oinstall   10600448 May 17 16:50 control01.ctl
-rw-r----- 1 oracle oinstall   10600448 May 17 16:50 control02.ctl
-rw-r----- 1 oracle oinstall  104865792 May 17 15:05 lmtbsq1.dbf
-rw-r----- 1 oracle oinstall  209715712 May 17 16:50 redo01.log
-rw-r----- 1 oracle oinstall  209715712 May 17 00:15 redo02.log
-rw-r----- 1 oracle oinstall  209715712 May 17 15:00 redo03.log
-rw-r----- 1 oracle oinstall  576724992 May 17 16:50 sysaux01.dbf
-rw-r----- 1 oracle oinstall 1073750016 May 17 16:46 system01.dbf
-rw-r----- 1 oracle oinstall   33562624 May 17 10:49 temp01.dbf
-rw-r----- 1 oracle oinstall   73408512 May 17 16:46 undotbs01.dbf
-rw-r----- 1 oracle oinstall    5251072 May 17 15:05 users01.dbf
  • 数据文件(*.DBF) 数据文件是一个二进制文件,是用于保存用户应用程序数据和Oracle系统内部数据的文件,这些文件在操作系统中就是普通的操作系统文件。 Oracle在创建表空间的同时会创建数据文件。

    必须存在的数据文件:

    • system01.dbf 系统的数据文件
    • sysaux01.dbf 系统的辅助数据文件,数据字典,AWR信息(性能诊断和调优使用)
    • undotbs01.dbf 还原历史数据的记录文件
    • temp.dbf 临时数据文件,排序等

    可选数据文件:

    • 用户数据文件lmtbsq1.dbf
  • 日志文件(*.LOG) 日志文件在Oracle数据库中分为重做日志(Redo Log File)文件和归档日志文件两种。重做日志文件是Oracle数据库正常运行不可缺少的文件。重做日志文件主要记录了数据库操作过程。用于备份和还原数据库,以达到数据库的最新状态。

Oracle推荐: - 使用日志组来管理日志文件 - 每组至少两个成员 - 写日志以日志组为单位 - 默认有三个日志组

默认情况下,使用非归档模式

```bash
SYS@prod>archive log list;
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            /u01/app/oracle/product/db/dbs/arch
Oldest online log sequence     5
Current log sequence           7
```

![9A724247-9619-4EF5-B5A9-A77A04DDB364.jpeg](Oracle%E5%9F%BA%E6%9C%AC%E6%A6%82%E5%BF%B5%E5%92%8C%E7%BB%93%E6%9E%84%20a9f74459f431436b9d5e9897ce3d3a92/9A724247-9619-4EF5-B5A9-A77A04DDB364.jpeg)

如果使用归档模式,在覆盖组1会进行归档拷贝

查看默认情况下log表:

![Untitled](Oracle%E5%9F%BA%E6%9C%AC%E6%A6%82%E5%BF%B5%E5%92%8C%E7%BB%93%E6%9E%84%20a9f74459f431436b9d5e9897ce3d3a92/Untitled%201.png)

```bash
SYS@prod>select group#,members from v$log;

    GROUP#    MEMBERS
---------- ----------
         1          1
         2          1
         3          1
#现在的log组有三个,每组一个成员
```

**数据文件和日志文件的关系(非常重要)**

![95B9A1C8-14E6-4B29-8357-64790FD7FE37.jpeg](Oracle%E5%9F%BA%E6%9C%AC%E6%A6%82%E5%BF%B5%E5%92%8C%E7%BB%93%E6%9E%84%20a9f74459f431436b9d5e9897ce3d3a92/95B9A1C8-14E6-4B29-8357-64790FD7FE37.jpeg)
  1. 客户端,如sqlplus 执行DML commit
  2. 将事务写入日志文件,如果日志写入成功,就算客户端的commit操作成功。

此时: 1. 数据还在检查点队列,尚未写入存储中的数据文件 2. 如果此时内存发生崩溃等情况,可用通过log文件恢复丢失的数据,称作实例恢复 3. 当触发了检查点Checkpoint的时候,会以最高优先级唤醒数据库的写进程。来写脏数据到数据文件

什么是检查点?checkpoint 检查点是一个时间概念,分为完全检查点和增量检查点 1、完全检查点 (*)正常关机; (*)切换日志组alter system switch logfile; (*)alter system checkpoint; 2、增量检查点(9i以后) (*)每隔3秒 (*)当日志达到了1/3满的时候

  • 控制文件(.CTL) 控制文件是一个二进制文件,它主要记录数据库的名称、数据库的数据文件存放位置等信息。一个控制文件只能属于一个数据库。 如果控制文件丢失,这数据库就无法操作。

    • 数据文件和Log文件的位置
    • 在启动过程中,系统会找tcl文件定位数据文件和log文件
    • rman备份的元信息也存放在ctl文件中
    • Oracle推荐多路复用机制—多存几份,应当放到不同的物理存储位置
    SQL> desc v$controlfile
    Name                  Type          Nullable Default Comments
    --------------------- ------------- -------- ------- --------
    STATUS                VARCHAR2(7)   Y                         
    NAME                  VARCHAR2(513) Y                         
    IS_RECOVERY_DEST_FILE VARCHAR2(3)   Y                         
    BLOCK_SIZE            NUMBER        Y                         
    FILE_SIZE_BLKS        NUMBER        Y                         
    CON_ID                NUMBER        Y                         
    
    SQL> select name from v$controlfile;
    NAME
    --------------------------------------------------------------------------------
    /oracle_data/prod/control01.ctl
    /oracle_data/prod/control02.ctl
    

逻辑存储结构

通过逻辑存储结构管理物理存储结构

Untitled

  1. 数据库
  2. 表空间,重点关注表空间
  3. 段Segment
  4. 区Extent
  5. 数据块 8K default
SQL> show parameter db_block_size;
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_block_size                        integer     8192
  • 一个block - 8k,数据仓库 16k
  • extent 若干连续的bolck

架构-进程结构

**Oracle 进程**是运行 Oracle 数据库代码的执行单元。在多线程体系结构中,Oracle 进程可以是操作系统进程,也可以是操作系统进程中的线程。Oracle 进程包括以下子类型:

  • 后台进程从数据库实例开始,执行维护任务,如执行实例恢复、清理进程、将重做缓冲区写入磁盘等。
  • **服务器进程**根据客户端请求执行工作(1-3)。

F69F4F92-D39B-4AE9-BA2E-AA8255D4F16C.jpeg

[oracle@oracle-12 prod]$ ps -ef |grep ora_ |grep -v grep
**oracle   21078     1  0 May15 ?        00:00:08 ora_pmon_prod**
oracle   21081     1  0 May15 ?        00:00:02 ora_clmn_prod
oracle   21083     1  0 May15 ?        00:00:16 ora_psp0_prod
oracle   21085     1  0 May15 ?        00:14:28 ora_vktm_prod
oracle   21090     1  0 May15 ?        00:00:09 ora_gen0_prod
oracle   21092     1  0 May15 ?        00:00:05 ora_mman_prod
oracle   21096     1  0 May15 ?        00:00:42 ora_gen1_prod
oracle   21100     1  0 May15 ?        00:00:04 ora_diag_prod
oracle   21102     1  0 May15 ?        00:00:02 ora_ofsd_prod
oracle   21106     1  0 May15 ?        00:01:13 ora_dbrm_prod
oracle   21108     1  0 May15 ?        00:00:17 ora_vkrm_prod
oracle   21110     1  0 May15 ?        00:00:04 ora_svcb_prod
oracle   21112     1  0 May15 ?        00:00:13 ora_pman_prod
oracle   21114     1  0 May15 ?        00:03:08 ora_dia0_prod
**oracle   21116     1  0 May15 ?        00:00:11 ora_dbw0_prod
oracle   21118     1  0 May15 ?        00:00:05 ora_lgwr_prod**
**oracle   21120     1  0 May15 ?        00:00:31 ora_ckpt_prod**
oracle   21122     1  0 May15 ?        00:00:03 ora_lg00_prod
**oracle   21124     1  0 May15 ?        00:00:02 ora_smon_prod**
oracle   21126     1  0 May15 ?        00:00:01 ora_lg01_prod
oracle   21128     1  0 May15 ?        00:00:08 ora_smco_prod
oracle   21130     1  0 May15 ?        00:00:01 ora_reco_prod
oracle   21134     1  0 May15 ?        00:00:04 ora_lreg_prod
oracle   21138     1  0 May15 ?        00:00:02 ora_pxmn_prod
oracle   21142     1  0 May15 ?        00:01:51 ora_mmon_prod
oracle   21144     1  0 May15 ?        00:01:22 ora_mmnl_prod
oracle   21146     1  0 May15 ?        00:00:01 ora_d000_prod
oracle   21148     1  0 May15 ?        00:00:01 ora_s000_prod
oracle   21150     1  0 May15 ?        00:00:01 ora_tmon_prod
oracle   21163     1  0 May15 ?        00:00:01 ora_tt00_prod
oracle   21165     1  0 May15 ?        00:00:01 ora_tt01_prod
oracle   21167     1  0 May15 ?        00:00:03 ora_tt02_prod
oracle   21172     1  0 May15 ?        00:00:01 ora_aqpc_prod
oracle   21176     1  0 May15 ?        00:00:03 ora_p000_prod
oracle   21178     1  0 May15 ?        00:01:06 ora_cjq0_prod
oracle   21180     1  0 May15 ?        00:00:04 ora_p001_prod
...
oracle   21430     1  0 May15 ?        00:00:03 ora_p01b_prod
oracle   21521     1  0 May15 ?        00:00:01 ora_qm02_prod
oracle   21525     1  0 May15 ?        00:00:01 ora_q002_prod
oracle   21527     1  0 May15 ?        00:00:01 ora_q003_prod
oracle   23523     1  0 22:00 ?        00:00:00 ora_w007_prod
oracle   24563     1  0 22:15 ?        00:00:00 ora_w009_prod
oracle   24896     1  0 22:20 ?        00:00:00 ora_w006_prod
  1. ora_dbw0_prod 写进程,默认只有一个

    1. 参数:
    SQL> show parameter writer
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    db_writer_processes                  integer     1
    
    • 原则:写进程的个数一般不超过CPU的核数
  2. ora_lgwr_prod 写日志进程

    1. 日志组为单位
    2. 看前面的日志文件内容
  3. ora_ckpt_prod Checkpoint进程

    1. 完全检查点
    2. 增量检查点
  4. ora_smon_prod 系统的监控进程 System Monitor

    1. Oracle的核心进程
    2. 关闭Oracle最快的方式:kill -9 smon进程号
  5. ora_pmon_prod Process Monitor

    1. 当系统出现错误的时候,负责清理现场
  6. 其他

Database Concepts

架构-内存结构

  1. SGA System Global Area
SQL> show parameter sga
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
allow_group_access_to_sga            boolean     FALSE
lock_sga                             boolean     FALSE
pre_page_sga                         boolean     TRUE
sga_max_size                         big integer 41216M
sga_min_size                         big integer 0
sga_target                           big integer 41216M
unified_audit_sga_queue_size         integer     1048576

SYS@prod>show sga;

Total System Global Area 4.3218E+10 bytes
Fixed Size                 15710000 bytes
Variable Size            5637146832 bytes
Database Buffers         3.7447E+10 bytes
Redo Buffers              118505472 bytes

sga_target big integer 41216M,这是在数据库配置的时候设定的值;

默认情况,sga_target 为 0,表示sga的值有系统自动指定

75218C39-F4D4-421A-B8BC-BD2D25B54E47.jpeg

1.1 SGA-BufferCache

3A5BFF0F-5DBB-4D58-B5E6-978C8020A91E.jpeg

1、客户端在buffercache中查询数据 2、BufferCache如果有数据,称为一次命中 3、如果没有数据,读取数据文件*.dbf直接返回数据

查看buffercache大小,0表示有Oracle自动指定

SQL> show parameter cache_size
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
client_result_cache_size             big integer 0
data_transfer_cache_size             big integer 0
db_16k_cache_size                    big integer 0
db_2k_cache_size                     big integer 0
db_32k_cache_size                    big integer 0
db_4k_cache_size                     big integer 0
db_8k_cache_size                     big integer 0
**db_cache_size                        big integer 0**
db_flash_cache_size                  big integer 0
db_keep_cache_size                   big integer 0
db_recycle_cache_size                big integer 0

1.2 SGA-Shared Pool

数据字典、SQL、执行计划,

SQL> show parameter shared_pool
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
shared_pool_reserved_size            big integer 224M
shared_pool_size                     big integer 0

1.3 SGA-log Buffer

有明确的值

SQL> show parameter log_buffer
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
log_buffer                           big integer 112120K

1.4 其他pool

SQL> show parameter java_pool
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
java_pool_size                       big integer 0

SQL> show parameter large_pool
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
large_pool_size                      big integer 0

SQL> show parameter streams_pool
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
streams_pool_size                    big integer 0
  1. PGA:Process Global Area
SQL> show parameter pga
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_limit                  big integer 20564M
pga_aggregate_target                 big integer 10282M

#默认情况,sga_target  为 0

11g以后提供2个功能。

  • AMM,Automatic memory management。设置一个总内存,让Oracle自动分配SGA和PGA。memory_target = SGA + n*PGA
SQL> show parameter memory
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
hi_shared_memory_address             integer     0
inmemory_adg_enabled                 boolean     TRUE
inmemory_clause_default              string      
inmemory_expressions_usage           string      ENABLE
inmemory_force                       string      DEFAULT
inmemory_max_populate_servers        integer     0
inmemory_query                       string      ENABLE
inmemory_size                        big integer 0
inmemory_trickle_repopulate_servers_percent integer 1
inmemory_virtual_columns             string      MANUAL
memory_max_target                    big integer 0
memory_target                        big integer 0
optimizer_inmemory_aware             boolean     TRUE
shared_memory_address                integer     0
  • ASMM(Automatic Shared Memory Management)自动分配SGA内部的各部分内存使用。
  • 文章目录
  • 站点概览
Etaon

Etaon

Kepp Going!

80 日志
15 分类
43 标签
GitHub CSDN
友情链接
  • Kubernetes
  • Cisco
  • W3School
  • 廖雪峰
标签云
  • Mysql
  • Aws
  • Dql
  • Hadoop
  • Kubernetes
  • Nsx t
  • Redis
  • Azure
  • Cicd
  • Git
  • 架构-存储结构
    • 物理存储结构
    • 逻辑存储结构
  • 架构-进程结构
  • 架构-内存结构
© 2010 - 2023 路无止境!
Powered by - Hugo v0.101.0 / Theme by - NexT
/
Storage by Azure static web apps /
0%