Oracle 系统的物理存储结构比较具体和直观,它用来描述 Oracle 数据在磁盘上的物理组成情况。Oracle 系统的数据在逻辑上存储在表空间中,而在物理上存储在表空间所包含的物理文件(即数据文件)中。

  Oracle 数据库的物理存储结构由多种物理文件组成,主要由数据文件、控制文件、重做日志文件、归档日志文件、参数文件、口令文件和警告日志文件等。

一、数据文件

  数据文件时用于保存用户应用程序数据和 Oracle 系统内部数据的文件,这些文件在操作系统中就是普通的系统文件, Oracle 在创建表空间的同时会创建数据文件。Oracle 数据库在逻辑上由表空间组成,每个表空间可以包含一个或多个数据文件,一个数据文件只能隶属于一个表空间。

  在创建表空的同时,Oracle 会创建该表空间的数据文件。在表空间中创建数据对象(如表、索引、序列等)时,用户是无法指定使用哪一个数据文件来进行存储的,只能由 Oracle 系统负责为数据对象选择集体的数据文件,并在其中分配物理存储空间。一个数据对象的数据可以全部存储在一个数据文件中,也可以分布存储在一个表空的多个数据文件中。

  在读取数据时,Oracle系统首先从数据文件中读取数据,并将数据存储在内存的高数缓冲区中。如果用户要读取数据库的某些数据,而请求的数据又不在内存的高速数据缓冲区中,则需要从相应的数据文件中读取数据并存储在缓冲区中。当修改和插入数据时,Oracle 不会立即将数据写入数据文件,而是把这些数据保存在数据缓冲区中,然后由 Oracle 的后台进程 DBWR 决定如何将其写入相应的数据文件。这样的存取方式减少了磁盘的 I/O 操作,提高了系统的响应性能。

  数据文件又可以分为3种类型:系统数据文件(system01.dbf 和 sysaux01.dbf )、撤销数据文件(undotbs01.dbf)和用户数据文件(users01.dbf、example01.dbf、tbsp_1.dbf和 tbsp_2.dbf)。

  1、系统数据文件

  用于存放“特殊” 的用户数据和 Oracle 系统本身的数据,如用户建立的表名、列名及字段类型等,这些属于用户数据范畴,这些数据将存放在系统表空间所包含的数据文件中;而 Oracle 系统内部的数据字典、系统表中所存储的数据属于 Oracle 系统的内部数据,这些数据也存放在系统表空间所包含的数据文件中。

  2、撤销数据文件

  撤销数据文件隶属于撤销表空间。如果修改 Oracle 数据库中的数据,那么就必须使用撤销段,撤销段用来临时存放修改前的旧数据,而撤销段通常存放一个单纯的撤销表空间中,这个撤销表空间所包含的数据文件就是撤销数据文件。

  3、用户数据文件

  用户数据文件用于存放用户应用系统的数据,这些数据包括与应用系统有关的所有相关信息。

二、控制文件

  控制文件时一个二进制文件,记录了数据库的物理结构,其中主要包含数据库名、数据文件与日志文件的名字和位置、数据库建立日期等信息。控制文件一般在 Oracle 系统安装时或创建数据库时自动创建,控制文件所存放的路径由服务器参数文件 spfileorcl.ora 的 control_files 参数值来指定。

  由于控制文件存放有数据文件、日志文件等的相关信息,因此, Oracle 实例在启动时必须访问控制文件。只有控制文件正常,实例才能加载并打开数据库;但若控制文件中记录了错误的信息,或者实例无法找到一个可用的控制文件,则实例无法正常启动。

  当 Oracle 实例在正常启动时,系统首先要访问的初始化参数文件 spfile,然后 Oracle 为系统全局区(SGA) 分配内存。这时, Oracle 实例处于安装状态,并且控制文件处于打开状态;接下来 Oracle 会自动读出 “控制文件” 中的所有数据文件和日志文件的信息,并打开当前数据库中所有的数据文件和所有的日志文件以供用户访问。

  每个数据库至少拥有以供控制文件,以供数据库可以同时拥有多个控制文件,但是以供控制文件只能属于一个数据库。控制文件内部除了存放数据库名及其创建日期、数据文件、日志文件等的相关的信息之外,在系统运行过程中,还存放系统更改好、检查点信息及归档的当前状态等信息。

  出于安全考虑,在安装 Oracle 数据库或创建数据库时,Oracle 数据库系统会自动创建两个或3个控制文件,每个控制文件记录相同的信息。这样可确保在数据库运行时,如果某个控制文件损坏, Oracle 会自动使用另外一个控制文件,当所有的控制文件都损坏时,系统将无法工作。

三、日志文件

  日志文件的主要功能是记录对数据所作的修改,对数据库所作的修改几乎都记录在日志文件中。在出现问题时,可以通过日志文件得到原始数据,从而保障不丢失已有操作成果。 Oracle 的日志文件包括重做日志文件(Redo Log File)和归档日志文件(Archive Log File),它们是 Oracle系统的主要文件之一,尤其是重做日志文件,它是 Oracle 数据库系统正常运行所不可或缺的。

  1、重做日志文件

  重做日志文件用来记录数据库所有发生过的更改信息(修改、添加、删除等信息)及由 Oracle内部行为(创建数据表、索引等)而引起的数据库变化信息。在数据库恢复时,可以从该日志文件中读取原始记录。在数据库运行期间,当用户执行 commit 命令(数据库提交命令)时,数据库首先将每次曹锁的原始记录写入到日志文件中,写入日志文件成功后,才把新的记录传递给应用程序。所以,在日志文件上可以随时读取原始记录以恢复某些数据。

  为了保障数据库系统的安全,每个 Oracle 实例都启用一个日志线程来记录数据库的变化。日志线程由若干“日志组”构成,每个日志组又由一个或者多个日志文件构成。

  通过对表或者整个表空间设定 nologging 属性时,使基于表空间所有的 DML操作(如创建表、删除视图、修改索引等操作)都不会生成日志信息,这样就会减少信息的产生。

  Oracle 系统在运行过程中产生的日志信息,首先被临时存放在系统全局区的“重做日志缓冲区”中,当发出 commit 命令(或日志缓冲区信息满1/3)时,LGWR 进程(日志写入进程)将日志信息从“重做日志缓冲区” 中读取出来,并将“读取的日志信息” 写入到日志文件组中序列号较小的文件里,一个日志组写满后接着写另外一个日志组。当 LGWR 进程将所有能用的日志文件都使用过一遍之后,它将再次转向第一个日志组重新覆写。

  2、归档日志文件

  当所有的日志文件被写入一遍之后,LGWR 进程将再次转向第一个日志组进行重新覆写,这样势必会导致一部分较早的日志信息覆盖掉,但 Oracle 通过归档日志文件解决了这个问题。

  Oracle 数据库可以运行在两种模式下,即归档模式和非归档模式。非归档模式是指在系统运行期间,所产生的日志信息不断地记录到日志文件组中,当所有重做日志组被写满后,又重新从第一个日志组开始覆写。归档模式是在各个日志文件都被写满而即将被覆盖之前,先由归档进程(ARCH)将即被覆盖的日志文件中的日志信息读出,并将 “读出的日志信息” 写入到归档日志文件中,而这个过程又被称为归档操作。

  在归档操作进行的过程中,日志写入进程(ARCH)需要等待归档进程(ARCH)的结束才能开始覆写日志文件,这样就延迟了系统的响应时间,而且归档日志文件本身又会占用大量的磁盘空间,这些都会影响系统的整体性能。所以在默认情况下,Oracle 系统不采用归档模式运行。

四、服务器参数文件

  服务器参数文件文件(Server parameter File)是二进制文件,用来记录了 Oracle 数据库的基本参数信息。数据库实例在启动之前,Oracle 系统首先会读取 SPFILE 参数文件中设置的这些参数,病根据这些初始化参数来配置和启动实例。例如:设着标准数据块的大小(即参数 db_block_size 的值)、设置日志缓冲区的大小(即参数 log_buffer的值)等,所以 SPFILE 参数文件非常重要。服务器参数文件在安装 Oracle 数据库系统时由系统自动创建,文件的名称为 SPFILEsid.ora ,sid 为所创建的数据库实例名。

  如果需要对某些参数进行修改,则尽可能不要直接对 SPFILE 进行编辑,最好通过企业管理器(OEM)或 alter  system  命令来修改,所修改过的参数文件会自动写到 SPFILE 文件中。

  1、查看服务器参数

  用户可以通过如下两种凡事查看数据库的服务器参数。

  (1)查看试图 v$parameter,可利用该动态性能试图来确定参数的默认值是否被修改过,以及是否可以用 alter  system  和 alter  session  命令修改。

  (2)可以使用 SQL*Plus 的show  parameter 命令显示服务器的参数

  2、修改服务器参数

  修改数据库的服务器参数,主要通过企业管理器(OEM) 或 alter system 命令来实现。

  (1)通过企业管理器(OEM)修改,首先使用 system 用户登录 OEM,然后选择 ”服务器“ 页面中的 ”初始化参数“ 项,在 ”初始化参数“ 页面,在该页面的 ”值“ 列表中就可以修改参数值

  (2)使用 alter system  命令修改服务器参数

alter  system  set  db_block_size = 4096

  通过 alter system 命令修改标准数据块的大小为4096字节。

五、密码文件、警告文件和跟踪文件

  1、密码文件

  密码文件是 Oracle 系统用于验证 sysdba 权限的二进制文件,当远程用户以  sysdba 或 sysoper 连接到数据库时,一般要用密码文件进行验证。

  Oracle 11g 密码文件的默认存放位置在 %dbhome_1%\database 目录下,密码文件的命名格式为 PWD<sid>,其中 sid 表示数据库实例名。创建密码文件既可以在创建数据库实例时自动创建,也可以使用 Orapwd.exe 工具手动创建,创建密码文件的命令格式如下:

C:\> orapwd file=<filename> password=<password> entries=<max_users>
  •   filename:表示密码文件名称
  • password:表示设置 internal/sys 账户口令。
  • max_users:表示密码文件中可以存放的最大用户数,对应允许以 sysdba/sysoper 权限登录数据库的最大用户数

  创建了密码文件后,需要设置初始化参数remote_login_passwordfile 来控制密码文件的使用状态,通常有3中状态值:NONE 表示只要通过操作系统验证,就不用通过 Oracle 密码文件验证; SHARED 表示多个数据库实例都可以采用此密码文件验证;EXCLUSIVE 表示只有一个数据库实例可以使用此密码文件验证。

  例如:创建一个密码文件,其 sys 口令为 0123456

C:\> orapwd file=E:\app\Admin\product\11.2.0\dbhome_1\database\PWDorcl.ora password=0123456 entries=40

  2、警告文件

  警告文件(警告日志文件)是一个存储在 Oracle 系统目录下的文本文件(通常名为alert_orcl.log),它用来记录 Oracle 系统的允许信息和错误信息。运行信息一般包括 Oracle 实例的启动与关闭、建立表空间、增加数据文件等;错误信息包括空间扩展失败、启动实例失败等。

  当 Oracle 安装完毕后,其实例日常运行的基本信息都会记录在警告文件中。警告文件的路径可通过 Oracle 系统的background_dump_dest  参数值来查看,并且该参数值由服务器进程和后台进程写入。

  例如:在 v$parameter 试图中查看当前实例的警告的路径。

SQL> select name,value from v$parameter where name='background_dump_dest';

  3、跟踪文件

  跟踪文件包括后台进程跟踪文件和用户进程跟踪文件。后台进程跟中文件用于记录后台进程的警告或错误消息。后台进程跟踪文件的磁盘位置又初始化参数 background_dump_dest 确定,后台进程跟踪文件的命名格式为 <sid>_<processname>_<spid>,trc。用户进程跟踪文件用于记载于用户进程相关的信息。它主要用于跟踪 SQL 语句。通过用户进程跟踪文件,可以判断 SQL 语句的执行性能。用户进程和跟踪文件的位置由初始化参数 user_dump_dest  确定,用户进程跟踪文件的命名格式为<sid>_ora_<spid>.trc。

  例如:在 v$parameter 试图中查看当前实例的用户跟踪文件的路径。

SQL> select value from v$parameter where name='user_dump_dest';

  

Oracle 11g 物理存储结构的更多相关文章

  1. 学习笔记:oracle学习一:oracle11g体系结构之物理存储结构

    目录 1.物理存储结构 1.1 数据文件 1.2 控制文件 1.3 日志文件 1.3.1 重做日志文件 1.3.2 归档日志文件 1.4 服务器参数文件 1.4.1 查看服务器参数 1.4.2 修改服 ...

  2. InnoDB的表类型,逻辑存储结构,物理存储结构

    表类型 对比Oracle支持的各种表类型,InnoDB存储引擎表更像是Oracle中的索引组织表(index organized table).在InnoDB存储引擎表中,每张表都有个主键,如果在创建 ...

  3. Atitit.数据库表的物理存储结构原理与架构设计与实践

    Atitit.数据库表的物理存储结构原理与架构设计与实践 1. Oracle和DB2数据库的存储模型如图: 1 1.1. 2. 表数据在块中的存储以及RowId信息3 2. 数据表的物理存储结构 自然 ...

  4. (1.3)学习笔记之mysql体系结构(C/S整体架构、内存结构、物理存储结构、逻辑结构)

    目录 1.学习笔记之mysql体系结构(C/S架构) 2.mysql整体架构 3.存储引擎 4.sql语句处理--SQL层(内存层) 5.服务器内存结构 6.mysql如何使用磁盘空间 7.mysql ...

  5. 算法与数据结构(四) 图的物理存储结构与深搜、广搜(Swift版)

    开门见山,本篇博客就介绍图相关的东西.图其实就是树结构的升级版.上篇博客我们聊了树的一种,在后边的博客中我们还会介绍其他类型的树,比如红黑树,B树等等,以及这些树结构的应用.本篇博客我们就讲图的存储结 ...

  6. Oracle 11g 物理Dataguard日常操作维护(二)

    Oracle 11g 物理Dataguard日常操作维护(二) 2017年8月25日 14:34 3.3 3.3.1 查看备库进程状态 SYS(125_7)@fpyj123> select pr ...

  7. Oracle 体系结构四 逻辑和物理存储结构之间的关系

    Oracle数据库从物理存储中完全抽象出逻辑存储.逻辑数据存储采用“段”的形式.段的类型有很多种:典型的段是“表”.这些段以物理形式存储在数据文件中.通过表空间将逻辑存储从物理存储中抽象出来.逻辑结构 ...

  8. Innodb物理存储结构系列1

    本篇先介绍 下Innodb表空间,文件相关的内存数据结构. 1. 数据结构 Innodb的tablespace和文件的关系,是一对多的关系,先来看三个结构体 1. fil_system_struct: ...

  9. Mysql-Innodb : 从一个字节到整个数据库表了解物理存储结构和逻辑存储结构

    首先要从Innodb怎么看待磁盘物理空间说起   一块原生的(Raw)物理磁盘,可以把他看成一个字节一个字节单元组成的物理存储介质   如果要在这块原生物理空间中插入一条记录,不能单单只插入数据,还需 ...

随机推荐

  1. mark_rabbitMQ

    一.1.6 和1.7的区别 二.63跟65好像有点差异 有些jar包问题 三.预取策略 https://blog.csdn.net/hry2015/article/details/79078312 四 ...

  2. MySQL免安装配置步骤

    此方式为直接解压压缩包安装MySQL 1.下载相关压缩包 官网下载地址:https://dev.mysql.com/downloads/mysql/ 下载后将压缩包解压至自己想要的文件路径即可 2.新 ...

  3. 微信小程序上架需要增值电信业务经营许可证ICP?

    很多小程序的开发者最近都遇到了类似的问题,那就是辛辛苦苦开发出来的小程序上线不了,要求提供一些特殊资质,比方说:增值电信业务许可证(下面有数十种分类),网络文化经营许可证等类似证件,这对于创业团队来说 ...

  4. qtcreator 添加 cppreference 离线文档

    https://en.cppreference.com/w/File:qch_book_20190607.zip 下载后放到 D:\Qt\Qt5.10.0\Docs\Qt-5.10.0目录下, 并在q ...

  5. Python多进程和多线程是鸡肋嘛?【转】

    GIL是什么 Python的代码执行由 Python虚拟机(也叫解释器主循环,CPython版本)来控制,Python在设计之初就考虑到在解释器的主循环中,同时只有一个线程在运行.即每个CPU在任意时 ...

  6. SQLServer newID()

    一直想找个除了newid() 外高效取随机数的方法, 有点遗憾,木有找到,谁有除了newid()以外更高效的 请留言,谢谢 从A表随机取2条记录,用SELECT TOP 10 * FROM ywle ...

  7. latex怎样生成table字样和caption换行的表格

    \begin{table}  \caption{\newline The results of running algorithm parallel using MapReduce.} \hline  ...

  8. SAP 更新模块1

    RSM13000 / RSM13000 / 5.747FORM / VB_CALL_FUNC CALL 'ThVBCall' ID 'OPCODE' FIELD vb_update_modul_pro ...

  9. pycharm 2019.2 安装包失败

    简介: 最近使用学生账号注册了pycharm,貌似全家桶都可以免费用了,就升级了pycharm到最新版. 但是在使用包管理,安装包的时候出错了 提示没有匹配的版本,下面还提示一个 --trusted- ...

  10. 【VS开发】#pragma pack(push,1)与#pragma pack(1)的区别

    这是给编译器用的参数设置,有关结构体字节对齐方式设置, #pragma pack是指定数据在内存中的对齐方式. #pragma pack (n)             作用:C编译器将按照n个字节对 ...