ORACLE数据库基础知识
sql oracle mysql 数据库 基础 知识 窗口函数 lag与lead函数 LISTAGG函数 connect by 结构化查询 备份和恢复 mysql5.7 mysql8.0 oracle_11g docker
ORACLE数据库基础知识
Oracle 简介
Oracle数据库系统是美国Oracle公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目
前最流行的客户/服务器(client/server)或B/S体系结构的数据库之一。Oracle数据库是目前世界上使
用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系
型数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能,但它的所有知识,只
要在一种机型上学习了Oracle知识,便能在各种类型的机器上使用它。
Oracle 的特点
- 大量性
- 持久性
- 数据的共享性
- 安全性
- 开放性
Oracle 体系结构
几个重要的Oracle术语
-
Oracle服务器:即Oracle server,由Oracle实例和Oracle数据库组成。
-
Oracle实例:即Oracle instance,是在Oracle启动的第一个阶段根据参数文件,生成的一系列的后台进程和一块共享内存SGA共同组成。
-
Oracle数据库:即Oracle database,是由Oracle所有的物理文件所组成。其中最关键的有:控制文件、数据文件、redo log文件等。
Oracle实例与Oracle数据库进行交互,Oracle实例来对数据库进行各种操作,从而对外提供数据库的存储和检索服务。
database结构
物理结构
-
数据文件(data files):数据文件包含数据库中的实际数据,是数据库操作中数据的最终存储位置。
-
控制文件(control files):包含维护数据库和验证数据库完整性的信息,它是二进制文件。
-
重做日志文件(redo files):重做日志文件包含数据库发生变化的记录,在发生故障时用于数据恢复。
-
参数文件(parameter file):参数文件中定义了数据库实例的特性。在参数文件中包含为SGA中内存结构分配空间的参数,如分配数据库高速缓冲区的大小等,参数文件是正文文件,可以使用操作系统文本编辑器查看,如在Windows操作系统中使用记事本工具。
-
归档日志文件(archive log files):归档日志文件是日志文件的脱机备份,在发生故障后进行数据恢复时可能使用该文件。
通过查询语句查看数据文件、控制文件、日志文件的物理路径SQL> select * from dba_data_files;
通过查询语句查看数据文件、控制文件、日志文件的物理路径SQL> show parameter spfile;
逻辑结构
- 表空间(tablespace),是数据库的逻辑组成部分。表空间是数据库的最大逻辑存储结构,和物理数据文件相对应,一个表空间可以由多个数据文件组成,一个数据文件只能属于一个表空间 。
- 段(Segment),用于存放特定的逻辑对象(表、簇、索引等)的所有数据,它由一个或多个区组成的。如表段、索引段、临时段、undo段等。
- 区(extent),是Oracle进行空间分配的逻辑单元,它由相邻的数据块组成。
- Oracle 块,数据块,是Oracle 在数据文件上执行I/0的最小单位,其尺寸应该为OS块的整数倍。
instance结构
内存结构
内存结构包括sga和pga(主要给server process用,程序起来时分配)
instance只是 sga
主要包括: share pool, db buffer cache, redo log buffer, large pool, java pool
Sga的大小由sga_max_size parameter由granules(颗粒)大小来决定。
sga(system global area)
SGA(System Global Area)
由一组内存结构组成,它是由所有用户进程共享的一块内存区域。启动例程时,Oracle自动分配SGA,关闭例程时,oracle自动释放SGA所占用的内存空间。
SGA占物理内存的1/3--1/2,大小可由参数文件内参数计算shared pool(共 享池),
database buffer cache
(数据缓冲区),redo log buffer
(重做日志缓冲区) (如以下图所示)
SGA = share_pool_size + db_block_size * db_block_buffers + log_buffers
-
ORACLE 10g
中的SGA_MAX_SIZE
与SGA_TARGET
参数SGA_MAX_SIZE
指的是可动态分配的最大值﹐而SGA_TARGET
是当前已分配的最大sga
。 -
Oracle 11g
之后加入新特性:Memory_target
与自动内存管理MEMORY_MAX_TARGET,MEMORY_TARGET
参数:将PGA+SGA
作为整体内存使用被一致的纳入自动管理
共享池(Shared pool)
Oracle
引入共享池的目的就是共享SQL
或PL/SQL
代码,即把解析得到的SQL
代码的结果在这里缓存,其中PL/SQL
代码不仅在这里缓存,同时在这里共享。共享池由两部分组成,即库高速缓存(Libray cache)
和数据字典高速缓存(Data dict cache)
数据库高速缓存区
数据库高速缓冲中存储了最近从数据文件读入的数据块信息或用户更改后需要写回数据库的数据信息,此时这些没有提交给数据库的更改后的数据称为脏数据。
数据库缓冲区存储DML与查询的所有数据;
数据库缓冲区存放的对象有表、索引、簇、大对象段、回滚段、临时段等;
数据库缓冲区以块为单位来分配与管理;
重做日志高速缓冲区
当用户执行了如INSERT、UPDATE、DELETE、CREATE、ALTER或DROP操作后,数据发生了变化,这些变化了的数据在写入数据库高速缓存之前会先写入重做日志缓冲区,同时变化之前的数据也放入重做日志高速缓存,这样在数据恢复时Oracle就知道哪些需要回滚。
pga(program global area)
用于存放服务器进程的数据和控制信息,独立于SGA的一块内存区域。自己进程私有的内存空间当用户连接到Oracle Server时,Oracle server会为每个服务器进程分配相应的PGA.SGA是所有服务器进程都可共享那个的一块内存区域,而每个服务器进程都具有私有的PGA内存空间。 客户端在通过sql语句连接database时,必须通过实例Instance来连接和管理数据库。Connection:客户端进程和服务端进程建立通讯。Session:当用户经过Oracle server认证后开始建立会话,直到用户退出登录,会话结束。
进程结构
主要包括: user process, server process,background process
user process和server process是连接时产生background process主要包括: dbwn、gwr、pmon、smon、ckpt等 (arcn)
Oracle的进程主要有后台进程和Server process(其实按照Linux的严格意义来说,Server process也是属于后台进程)。后台进程主要对Oracle数据库进程各种维护和操作,而Server process主要来处理用户的请求:
用户进程通过监听器来访问Oracle instacne,那么就会触发生成一个Server process进程,来对该用户进程的请求进程处理。后台进程一般有:LGWR, DBWR, ARCN, CKPT, SMON, PMON等等。
-
DBWR(database writer数据库写):
主要作用是将被修改过的buffer cache按照一定的条件写入物理磁盘。 -
LGWR(log writer,日志写):
主要作用是将log buffer中的redo log记录按照一定的条件写入联机的redo log文件。 -
CKPT(checkpoint,检查点进程):
主要作用是将检查点位置(checkpoint position)写入控制文件和数据文件的头部。 -
SMON(system monitor,系统监控进程):
主要作用是在数据库启动时,判断实例上次是否正常关闭,如果是非正常关闭,则进程实例恢复。另外,还会合并相连的可以空间。 -
PMON(process monitor,进程监控):
监控Server process, 如果Server process非正常关闭,则PMON负责清理它占用的各种资源。
问题:一个数据库软件可以被多个实例访问么?
问题:一个数据库实例,只允许一台台服务器,一个用户进行连接(session)么?