3.1 Client/Server

Oracle 采取的是 Client/Server 架构

oracle 服务端分为两部分:

  1. Instance 实例
  2. Database 数据库

实例, 又称为数据库引擎,由 SGA(System Global Area, 系统全局区) 一系列后台进程 组成。它需要启动才会生成,用来加载并管理一个数据库。

数据库, 是保存在硬盘上的文件集合,它是数据的主要载体。

$OracleBase\oradata\[数据库名字]\

3.2 实例启动过程

服务启动的大致过程:

  1. [读取] 读取系统的 ORACLE_SID 环境变量,确定要启动的实例名字,比如为 xxoo
  2. [加载] 从 $ORABASE/admin/xxoo$ORA_HOME/database/SPFILEXXOO.ora 等位置加载相关配置文件。配置文件的名字是根据 sid 来定义的。
  3. [启动] 从配置文件中,读取相关信息,比如数据库名字、数据库控制文件位置、SGA 等信息,并根据这些,初始化数据库加载需要的 内存空间(SGA)相关进程
  4. [装载] 根据配置文件中读取的数据库信息,找到各种数据文件位置,并装载数据库。
  5. [启动] 进行数据校验等,如果没有问题,启动数据库。

可以通过查看启动过程协助理解:

-- 首先,登录 sys 用户,只有管理员才有完全操纵数据库的权力
-- shutdown 用来关闭。如果不带参数,默认为 normal
---- immediate 表示立即关闭,如果有未处理完操作,回滚并断开
---- normal 表示等待所有连接断开才关闭数据库
---- transaction 表示等事务介绍才断开
shutdown immediate; -- 启动数据库,分解为三个动作:
---- 启动实例
---- 利用启动的实例去挂载数据库
---- 校验并打开数据库
-- 只有完全打开,才能进行完全的数据操作
-- 也可以指定参数,启动到某个阶段。这是在维护数据库中使用的命令。
startup -- 如果不加参数,
startup nomount -- 启动到 nomount 阶段
startup mount -- 启动到 mount 阶段 -- 当然,也可以这样分步启动:
startup nomount
alter database mount
alter database open

3.3 数据库的物理组件

数据库是保存在操作系统的一系列文件。

默认安装情况下,这些文件都在 $ORACLE_BASE/oradata 文件夹下:

oradata/
└── orcl [数据库的名字]
├── CONTROL01.CTL
├── CONTROL02.CTL
├── EXAMPLE01.DBF
├── REDO01.LOG
├── REDO02.LOG
├── REDO03.LOG
├── SYSAUX01.DBF
├── SYSTEM01.DBF
├── TEMP01.DBF
├── UNDOTBS01.DBF
└── USERS01.DBF

从文件角度分析,一个数据库包含下面几类(组件):

  1. 控制文件(control file)。记录数据库的物理结构和其他信息,如数据库名称、各种文件位置等。多副本。

    select * from v$controlfile;
    
  2. 数据文件(data file)。用来存储数据的文件,会自动扩张。数据以块为单位进行保存。
    select name, status, enabled from v$datafile;
    
  3. 重做日志文件(redo log)。用来记录用户的所有操作,为了备份恢复。一个数据库至少有两个日志组,每个日志组至少有一个成员,成员之间是镜像关系。用户的操作会记录到 redo log 中,当一个组记录满了,会自动切换到下一个组。轮流循环。
    -- 需要理解 Oracle 日志的思路:
    -- 它采取了【多个分组,轮流循环写入;每组多成员,互为镜像;保存更多信息,使用归档模式】的方式,保证了记录安全性。
    -- 在生产环境中,需要日志调整到不同的磁盘中,这样,即使某个文件损坏,或某块磁盘损坏,都可以通过镜像的日志文件对数据进行恢复。 -- 查看 redo log 日志组
    select * from v$log;
    select * from v$logfile; -- 增加/删除 日志组
    alter database add logfile 'd:/sss.rlog' size 100m;
    alter database drop logfile 'd:/sss.rlog'; -- 清空日志组
    alter database clear logfile group 1;
    alter database clear unarchived logfile group 1; -- 为日志组 增加/重命名/删除 成员
    alter database add logfile member 'd:/ssss.log' to group 1;
    alter database rename file 'd:/ssss.log' to 'd:/ssss.rlog';
    alter database drop logfile member 'd:/ssss.rlog'; -- 日志组一般是在写满的时候自动切换。
    -- 我们也可以手动切换
    alter system switch logfile;
  4. 归档日志文件。是重做日志的补充(redo log 记录的记录是有限的),可以把写满的 redo log 进行备份。
    -- Oracle 的归档模式默认是关闭的
    -- 归档模式会占用大量空间
    -- 但他们用更多的空间,保存更多的历史记录,保障更大的安全性 -- 查看状态
    archive log list; -- 切换数据库到归档模式
    alter database archivelog; -- 启动
    archive log start; -- 查看状态
    archive log list;
  5. 其他文件

3.4 数据库的逻辑组件

从 Oracle 内部管理数据的角度,可以将 Oracle 分为4个组件:

  1. 表空间(tablespace)
  2. 段(Segment)
  3. 区(Extend)
  4. 块(Block)

最新文章

  1. Python 正则表达式入门(中级篇)
  2. Linux下GNOME桌面的安装
  3. 【LeetCode OJ】Recover Binary Search Tree
  4. PHP生成二维码图片
  5. PHP设计模式(一)
  6. VS快捷键的简单总结
  7. calico for kubernetes
  8. To be transfered
  9. Oracle session连接数和inactive的问题记录
  10. Python开发之--前端 HTML基础
  11. Redis起步
  12. magento中对获取的数据在前台进行分页显示
  13. 前端的UI设计与交互之布局篇
  14. idea 下 encodings.xml 的正确位置
  15. jenkins Manage and Assign Roles使用
  16. android开发学习笔记系列(5)--fragment与viewpage
  17. Python Web学习笔记之TCP的3次握手与4次挥手过程
  18. 算法之路 level 01 problem set
  19. ActiveMQ (一):安装启动及测试
  20. [BZOJ4557][JLOI2016]侦察守卫(树形DP)

热门文章

  1. Python实现比较两个列表(list)范围
  2. sql type subtype 统计
  3. 第十届山东省acm省赛补题(2)
  4. 【Linux开发】Linux下jpeglib库的安装详解
  5. CentOS7.查看进程占用端口情况
  6. 华硕RT-AC86U路由器 AP模式实现多路由器组网,扩展主路由器的无线网范围
  7. js五种不同的遍历 (filter, map,foreach,every, some,)
  8. HTTP请求状态码为400时的原因
  9. 多线程14-Barrier
  10. 洛谷P3366【模板】最小生成树-克鲁斯卡尔Kruskal算法详解附赠习题