用户通过用户进程(如sqlplus、sqldevloper)凭借口令向oracle数据库实例建立连接,登录成功后,oracle就在服务器上创建一个服务器进程,这个服务器进程只能为这个用户进程服务。
用户进程向服务器进程发出请求,由服务器进程对数据库产生实际的操作(增删改数据到文件中),并把数据返回给用户进程。
一、存储结构
1.数据库的主要存储有外存(磁盘)和内存
内存:数据访问速度快、临时存储、价格贵
外存:数据访问速度慢、长期存储、价格便宜
2.存储结构分为逻辑存储结构和物理存储结构
(1)逻辑存储结构
①由数据库>表空间>段>区>数据块组成
②这里有一个小问题插曲:使用sqlplus system和system sysdba都无法连接到oracle,报错ORA-01033: ORACLE ???????? 但使用sqlplus / as sysdba可以连接
=>oracle实例未启动或异常退出,可以先使用sqlplus / as sysdba连接再用SELECT status FROM v$instance;查询数据库状态,发现状态是STARTED,说明数据库未挂载也未开放,因此用户无法连接。执行下面的命令挂载并开放数据库即可正常使用sqlplus system连接数据库
ALTER DATABASE MOUNT;
ALTER DATABASE OPEN;
SELECT status FROM v$instance;
再检查一次确认数据库状态是OPEN
------数据块Block
③数据块是读取数据的最小单位,可以这样查询数据块的大小
SQL> select name,value from v$parameter where name='db_block_size';
NAME VALUE
------------------------------ --------------------
db_block_size 8192
④数据块的结构
块头存配置,存储区存数据
---------数据区Extent
⑤数据区由连续的数据块组成,是存储分配的最小单位
----------段Segment
①分为数据段(存储表中所有数据)、索引段(存储表上最佳查询的所有索引数据)、临时段(存储排序操作期间产生的临时表的数据)、回滚段(存储修改之前的位置和值)。
ps:视图不存储数据,不是段。
----------表空间TableSpace
①表空间是数据库的最大逻辑划分区域
②一个表空间由一个或多个数据文件组成,一个数据文件只属于一个表空间。
③表空间的大小是它对应数据文件大小的总和。
③默认自带的表空间分为以下几种类型
系统表空间system tablespace:存放表名、列名、oracle管理文件、控制文件等等
辅助表空间sysaux tablespace:orcl11g新加的,是system tablespace的辅助表空间,提高效率
撤销表空间undo tablespace:临时存储撤销信息的表空间
用户表空间user tablespace:用户信息
一般自己建表不要创建在上述表空间中。
(2)物理存储结构
从物理角度来看,数据库包含3类文件:数据文件(x.DBF 包含数据字典)、控制文件(x.CTL)、重做日志文件()(x.LOG)。即数据库以文件形式存储在磁盘上。
--------数据文件(.DBF)
①可以通过数据字典查询oracle中有哪些数据文件
SQL> select file_name,tablespace_name from dba_data_files;
FILE_NAME
--------------------------------------------------
TABLESPACE_NAME
------------------------------------------------------------
D:\ORACLE19\ORADATA\ORCL\SYSTEM01.DBF
SYSTEM
D:\ORACLE19\ORADATA\ORCL\SYSAUX01.DBF
SYSAUX
D:\ORACLE19\ORADATA\ORCL\USERS01.DBF
USERS
FILE_NAME
--------------------------------------------------
TABLESPACE_NAME
------------------------------------------------------------
D:\ORACLE19\ORADATA\ORCL\UNDOTBS01.DBF
UNDOTBS1
②数据文件的种类:系统数据文件(SYSTEM01.DBF和SYSAUX01.DBF)、回滚数据文件(UNDOTBS01.DBF)、用户数据文件(USERS01.DBF、TBSP_1.DBF)、临时数据文件(TEMP02.DBF)。对应了不同的表空间。
-----------------控制文件(CTL)
①控制文件是数据库中最小的文件,二进制。
②控制文件是数据库中最重要的文件。要启动实例必定会读取控制文件,Oracle通过控制文件找到日志文件和重做日志文件的路径,如此才能启动实例。
③orcale存储了两份控制文件,提高可靠性,控制文件的路径也记录在了控制文件中
如本地部署的oracle,控制文件路径配置就是
# File Configuration
###########################################
control_files=("D:\Oracle19\oradata\ORCL\control01.ctl","D:\Oracle19\oradata\ORCL\control02.ctl")
-------------日志文件(.LOG)
①作用是记录对数据所做的修改。
②日志文件包括重做日志文件和归档日志文件
③重做日志文件:
记录所有的数据变化,可用于数据恢复,读取原始的数据记录。
④归档日志文件:当重做日志文件写满了,就可以由归档进程将即将被覆盖的信息读出来放到归档日志文件中。归档日志模式分为归档模式(ARCHIVELOG)和非归档模式(NOARCHIVELOG),由用户设定。
>查询当前数据库采用的是那种归档模式:非归档模型,那么当重做日志文件1次写满,新内容覆盖后,老的日志就丢失了,对应部分的数据也就无法恢复了。
SQL> col name format a30
SQL> select dbid,name,log_mode from v$database;
DBID NAME LOG_MODE
---------- ------------------------------ ------------------------
1721573013 ORCL NOARCHIVELOG
--------其他文件
①服务器参数文件(orcl.ora)
②密码文件(PEDorcl.ora)
③警告文件(alert_orcl.log)
④跟踪文件
二、进程结构
(1)ORCL内存结构
分为两种:系统全局区(SGA)和程序全局区(PGA)
----------系统全局区(SGA)
SGA是所有用户进程共享的一块全局区,SGA随着数据库实例的启动而加载到系统内存当中,实例关闭则SGA区域消失。包括高速数据缓冲区、共享池、重做日志缓冲区、Java池、大型池、流池。、
①高速数据缓冲区(Data buffer cache):用来存放Oracle系统最近访问过的数据块。如果某些数据文件的数据被请求过,这些数据就会被装在高速数据缓冲区,这样当用户再次请求这些数据时,就可以直接从缓冲区读取这些数据,而无需去读取磁盘中的数据文件,性能更佳。
②共享池:存储最近执行过的sql语句和使用过的数据定义,包括库高速缓冲区和字典高速缓冲区。
其中库高速缓冲区又分为共享sql区(sql语句和执行计划)和私有sql区(存储sql的会话等)。
字典高速缓冲区用户存放数据字典(用户等信息)。
共享池可不是越大越好。
③重做日志缓冲区(Redo log buffer):用于记录数据改变的日志信息
④Java池:不是必须,安装后可以提供java虚拟机,使支持在数据块中运行java程序。
⑤大型池:用于数据块的备份、恢复、大数据量排序。
⑥流池:用于数据块和数据块之间的信息共享,不是必须。
小练习:Oracle执行sql查询语句的步骤是什么?
=>
①编译:服务器进程将sql语句放进共享池的库高速缓冲区中(存放了历史sql和查询计划)
搜索是否在存的历史sql中,没有的话就检查是否存在语法错误,没有错误就检查数据字典(比如要查的字段是否在当前表中,要查的表是否属于当前用户),没有错误就将当前操作对象加上编译锁并检查对应权限(比如所查询表是否加密,当前用户是否有相应权限),然后就会生成相应的执行步骤,最后将sql语句和执行步骤放入共享池的库高速缓冲区中。
②执行
③提取数据:服务器进程将处理的数据返回给用户进程
-----------程序全局区(PGA)
一个用户进程只能访问属于自己的PGA,而PGA分为私有sql区和会话区(比如用户的登录用户名)。
(2)Oracle进程结构
进程结构是指在内存中正常运行的一段程序,oracle进程分为用户进程、服务器进程和后台进程。
--------用户进程
如sqlplus、sqldeveloper,能与数据库建立连接并生成sql语句,但并不直接与数据块库交互。
,而是通过服务器进程与数据库交互。
有两个重要概念:连接(通信渠道)和会话(建立连接后的交互方式)
--------服务器进程
处理sql命令,如解析、鉴权、创建执行计划、读取数据等操作
---------后台进程
协调内存和磁盘内容的一致性,分为以下几种:数据库写入进程(DBWR)、检查点进程(CKPT)、日志写入进程(LGWR)、归档进程(ARCH)、系统监控进程(SMON)、进程监控进程(PMON)。
①数据库写入进程(DBWR):
最多启动10个DBWR,负责识别缓冲区中被修改过的数据并将缓冲区的脏数据写入数据文件中。触发DBWR进程的条件:
DBWR超时3s;
系统缓冲区中没有多余的空间用来存放数据;
检查点进程(CKPT)触发。
②检查点进程(CKPT):
负责维护数据库的一致性,定期同步控制文件、数据文件和日志文件的时间点。
触发CKPT的条件:
日志切换(这里不太理解????=>LDWR将日志缓冲区的日志数据写入日志文件,是按组写入的,一组写满后才切换往下一组的日志文件中写入,换组这个动作就是日志切换)。
③日志写入进程(LGWR):
用于将重做日志缓冲区中的数据写入到重做日志中(日志组——日志文件)。
LDWR触发条件:
用户发出commit命令;
重做日志缓冲区的信息满1/3;
日志信息存放超过3s。
④归档进程(ARCH)
数据库处于归档模式才会启动,作用是日志文件组全都写满时覆盖之前,读取日志文件中的数据并写入到归档文件中。
ARCH触发条件:
发生日志切换时被LGWR唤醒。
⑤系统监控进程(SMON):
负责实例恢复、清理临时段以释放空间,总结就是负责回滚rollback未提交的事务。
触发条件:
定期被唤醒;
被其他事务主动唤醒。
⑥进程监控进程(PMON):
负责监控其他进程状态,比如有进程启动识别,PMON会负责清理以释放资源;向监听程序动态的注册实例。
触发条件:
定时被唤醒;
其他进程主动唤醒。
三、内存结构
明日再来~数据字典