Oracle 学习总结 - 物理结构
参考了很多文章,学习自网络
数据库 = 实例(数据库启动时初始的进程和内存结构,进程会作用到对应的内存区域-数据写入器到写入内存缓冲区,日志写入器到日志缓冲区等) + 数据库(物理文件-控制文件,数据文件,日志文件)
内存结构分为每个实例分配一个可共享的SGA(系统全局),不可共享,每个用户会话一块的PGA(用户全局)
SGA: 包含数据库缓冲区缓存,存放数据库中数据块的拷贝DB_BLOCK_BUFFER,日志缓冲区,共享池SHARED_POOL_SIZE包含特定sql语句所用的信息等,Oracle使用最近最少使用(LRU,leastrecentlyused)算法来管理可用空间
PGA: 包含用户登陆相关的session,执行排序语句如果内存不够则使用临时表空间
一条查询语句:
1. 服务器端监听请求; 2. 客户端发起请求; 3. 监听器收到请求,建立服务器进程; 4. 服务器检查缓冲区,如果有包含关键字的数据库,则返回,如果没有,则先将行返回到缓冲区,再返回
一条更新语句:
服务器会先在缓冲区中查找,如果有则更新,块变脏,如果没有,则先将行从磁盘复制到缓冲区再更新
会话数据都是操作缓冲区,之后缓冲区与磁盘数据不一致,由数据库写入器写入到磁盘,DB_WRITER_PROCESS 可以定义写入进程的个数,写入条件(缓冲区满,脏块多,3s,检查点)
写入不实时,通过重做日志来保证数据不丢失,当执行(I/U/D)时写入重做日志文件,保证数据不丢失,同时有日志缓冲区,减少磁盘io和用户等待,日志同样有日志写入进程,执行逻辑(commit/日志缓冲区大于1/3/数据写入器写入脏数据之前)
共享池: sql多次执行编译后缓存,数据字典,plsql
Oracle 后台进程: SMON(System Monitor) - 安装打开恢复, PMON(Process Monitor), DBWR(数据缓冲区管理), CKPT(Checkpoint Process), MMON(ManageAblity Monitor) - 会话性能统计, ARCN(Archiver)),

物理文件类型:
数据文件(存储数据*.dbf),日志文件(存日志Log*.dbf),控制文件(记录数据库的物理结构*.ctl),配置文件(*.ora)
| 物理意义 | Parameter Name | Result |
| 查看回滚段设定 | show parameter undo | NAME TYPE VALUE -------------------- ----------- ---------------------- undo_management string AUTO undo_retention integer 900 undo_tablespace string UNDOTBS1 |
| 查看sga参数 | show parameter sga | NAME TYPE VALUE ------------------- ----------- ----------------------- lock_sga boolean FALSE pre_page_sga boolean FALSE sga_max_size big integer 576M sga_target big integer 576M |
| 查看共享池设置 | show parameter shared_pool | NAME TYPE VALUE ---------------------------------- ----------- --------- shared_pool_reserved_size big integer 17M shared_pool_size big integer 0 |
| 查看缓冲池设置 | show parameter db_cache_size | NAME TYPE VALUE ------------------- ----------- ------------------------ db_cache_size big integer 0 |
| 查看日志缓冲区设置 | show parameter log_buffer | NAME TYPE VALUE -------------------- ----------- ------------------------------ log_buffer integer 3244032 |
| 查看实例/数据库名称 | show parameter instance_name/db_name | NAME TYPE VALUE ------------------- ----------- ------------------------------ instance_name string XE |
| 查看归档文件 | show parameter recovery | NAME TYPE VALUE ------------------------------- ----------- ------------------------------ db_recovery_file_dest string /u01/app/oracle/fast_recovery_area db_recovery_file_dest_size big integer 10G recovery_parallelism integer 0 |
| 查看控制文件 | show parameter control | NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ control_file_record_keep_time integer 7 control_files string /u01/app/oracle/oradata/XE/control.dbf control_management_pack_access string NONE |
| 有多少后台写线程 | show parameter db_writer_processes | NAME TYPE VALUE ----------------------- ----------- ------------------------------ db_writer_processes integer 1 |
| 修改数据库写线程数 | alter system set db_writer_processes=20 scope=spfile; | |
| 查看数据库参数视图 | select * from v$parameter | |
| 查看控制文件 | select * from v$controlfile | |
| 查看数据文件 | select * from v$datafile | |
| 查看数据库文件 | select file_name from dba_data_files | FILE_NAME -------------------------------------------------------------------------------- /u01/app/oracle/oradata/XE/users.dbf /u01/app/oracle/oradata/XE/sysaux.dbf /u01/app/oracle/oradata/XE/undotbs1.dbf /u01/app/oracle/oradata/XE/system.dbf /usr/local/oracle/bbdata/BBLEARN_admin_data_file1.dbf /usr/local/oracle/bbdata/BBLEARN_admin_indx_file1.dbf /usr/local/oracle/bbdata/BBLEARN_data_file1.dbf /usr/local/oracle/bbdata/BBLEARN_indx_file1.dbf /usr/local/oracle/bbdata/BBLEARN_stats_data_file1.dbf /usr/local/oracle/bbdata/BBLEARN_stats_indx_file1.dbf /usr/local/oracle/bbdata/BBLEARN_CMS_DATA_file1.dbf FILE_NAME |
| 查看日志文件-1 | select group#,member from v$logfile | GROUP# MEMBER ---------- ---------------------------------------- 2 /u01/app/oracle/fast_recovery_area/XE/on linelog/o1_mf_2_dxrhc3rx_.log 1 /u01/app/oracle/fast_recovery_area/XE/on |
| 查看日志文件-2状态 | select group#,status from v$log | GROUP# STATUS ---------- ---------------- 1 INACTIVE 2 CURRENT |
| 日志文件状态切换 | alter system switch logfile; | |
| 查看归档类型 | select log_mode from v$database; | |
| 查看归档文件 | archive log list | Database log mode No Archive Mode Automatic archival Disabled Archive destination USE_DB_RECOVERY_FILE_DEST Oldest online log sequence 61 Current log sequence 62 |
| 设置归档路径 | alter system set log_archive_dest_1='/temp/archivelog ' | |
| 打开归档日志 | alter database archivelog | |
| 切换归档文件 | alter system switch logfile | |
| 清空共享池 | alter system flush shared_pool | |
| 修改系统参数 | alter system set sga_target = 200m scope = memory | |
| 查看后台进程 | select * from v$bgprocess | Name Null? Type ----------------------- -------- ---------------------------- PADDR RAW(8) PSERIAL# NUMBER NAME VARCHAR2(5) DESCRIPTION VARCHAR2(64) ERROR NUMBER |
| 查找正在使用的后台进程 | SELECT name,description FROM v$bgprocess WHERE paddr<>'00' | NAME DESCRIPTION ----- ---------------------------------------------------------------- PMON process cleanup VKTM Virtual Keeper of TiMe process GEN0 generic0 DIAG diagnosibility process DBRM DataBase Resource Manager VKRM Virtual sKeduler for Resource Manager PSP0 process spawner 0 DIA0 diagnosibility process 0 MMAN Memory Manager DBW0 db writer process 0 LGWR Redo etc. NAME DESCRIPTION |
逻辑表示:
数据库 -> 表空间 -> 段 -> 区 -> 数据块(对应硬盘上的一个或多个数据块 db_block_size/pctfree/pctuse)

数据块是Oracle最小的存储单位DB_BLOCK_SIZE,每次请求都是以块为最小单位,块头表明物理地址,表目录记录当前块中存储的相关表,行目录记录行信息,行数据即为真实数据,自由空间是为了防止数据插入或更新后变大预留出了一部分自由空间,当删除或更新也可能缩小自由空间,但不是连续的,当需要的空间不足才会合并不连续空间
行连接Row Chaining,就是一行数据不能被存储在一个数据块中,读取会需要扫描多个数据块
行迁移Row Migrating,当update一个数据行,导致本来在一个块里能存的下的数据现在存不下了,那么就直接找到一个新的数据块存储数据,原数据块持有指向新数据块的链接,所以rowid是不变的,读取会需要扫描多个数据块
pctused参数设置了数据块是否是空闲的界限。当数据块的使用空间低于pctused的值时,此数据块标志为空闲,该空闲空间仅用于插入新的行。如果数据块已经达到了由pctfree所确定的上边界时,Oracle就认为此数据块已经无法再插入新的行。所以,如果pctused设置过高,则会降低磁盘的利用率导致行迁移;若pctused设置过低,则浪费磁盘空间,增加全表扫描时的I/O输出
pctfree指定一个空闲百分比,pctfree值越小,则为现存行更新所预留的空间越少。因此,如果pctfree设置得太高,则在全表扫描期间增加I/O,浪费磁盘空间;如果pctfree设置得太低,则会导致行迁移。

Oracle 学习总结 - 物理结构的更多相关文章
- Oracle学习笔记三 SQL命令
SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)
- Oracle学习线路
出自huyangg的博客,地址是:oracle学习路线图 1.sql.pl/sql(网上有很多的视频,可以做一个简单的入手,然后看几本书,多做实验) 作为oracle的基本功,需要大家对sql和 ...
- Oracle学习指南
Oracle学习指南 你走的那天,我决定不落泪,迎着风撑着眼帘用力不眨眼 创建数据库.创建用户.创建表空间.创建表.插入数据..... 1.用系统用户登录,任选系统用户 代码: >>sql ...
- oracle 学习
一.数据库语言部分1. SQL语言:关系数据库的标准语言2. PL/SQL:过程化语言Procedural Language3. SQL*Plus:简单的报表,操作系统接口 4. Oracle 8.0 ...
- Oracle学习系列1-7
Oracle学习系列1 两个服务必须启动: OracleOraDb10g*TNListener 和 OracleService*** 使用sqlplusw先进行环境的设置 set linesize 3 ...
- Oracle学习系列7
Oracle学习系列7 ************************************************************************************ 关联表 ...
- Oracle学习系列6
Oracle学习系列6 ************************************************************************************ 删除约 ...
- Oracle学习系列5
Oracle学习系列5 ************************************************************************************ ,掌握 ...
- Oracle学习系列4
Oracle学习系列4 ************************************************************************************ 数据库 ...
随机推荐
- 廖雪峰Java2面向对象编程-6Java核心类-2StringBuilder
字符串操作过程中,每次用 + 拼接字符串,有以下问题: 每次循环都会创建新的对象 绝大部分都是临时对象.浪费内存 影响GC效率 String s = ""; for(int i=0 ...
- MySQL学习----unsigned 无符号的总结
unsigned 为“无符号”的意思, unsigned,zerofill 既为非负数,用此类型可以增加数据长度, 例如如果 int最大是65535,那 ...
- python之路——1
王二学习python的笔记以及记录,如有雷同,那也没事,欢迎交流,wx:wyb199594 学习内容 python的历史: python2 源码不标准,混乱,重复代码太多, python3 统一 标准 ...
- [UE4]世界坐标和相对坐标
一.世界坐标:相对于整个世界的坐标 二.相对坐标是相对于组件父级的坐标.如下图: 1.Mesh组件和CameraPositionArrow组件的相对坐标是相对于Root组件的坐标 2.Cube组件的相 ...
- RedHat使用Centos的yum仓库
RedHat使用Centos的yum仓库 卸载红帽yum源 [root@zhouwanchun ~]# rpm -qa | grep yum [root@zhouwanchun ~]# rpm -e ...
- 【 MAKEFILE 编程基础之三】详解 MAKEFILE 变量的定义规则使用!
本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/gcc-makefile/770.html ...
- svn在commit后报错:is scheduled for addition, but is missing
删除文件夹后点commit提交,但是报错,报错内容如下: 提示 "svn: Commit failed (details follow): svn: '/***/xxx.c' is sche ...
- tp5 计算两个日期之间相差的天数
//两个日期之间相差的天数 function diffBetweenTwoDays ($day1, $day2) { $second1 = strtotime($day1); $second2 = s ...
- Linux服务器安装Nginx
Nginx 安装 一.安装编译工具及库文件 yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel 二.首先 ...
- Linux 安装redis 基本配置 发布订阅,安全配置,持久化 rdb ,aof
redis redis相关配置1.yum 源码 rpm yum 快速,间接,高效,解决依赖关系,(自动安装到某个路径,不可控),通过yum安装的软件查询命令 rpm -ql nginx yum源 ...