ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

物理存储结构

2022-04-07 10:04:46  阅读:198  来源: 互联网

标签:文件 存储 数据文件 数据库 归档 Oracle 日志 物理 结构


             逻辑存储结构是为了便于管理 Oracle 数据而定义的具有逻辑层次关系的抽象概念,不容易理解;但物理存储结构比较具体和直观,它用来描述 Oracle 数据在磁盘上的物理组成情况。从大的角度来讲,Oracle 的数据在逻辑上存储在表空间中,而在物理上存储在表空间所包含的物理文件(即数据文件)中。
    Oracle 数据库的物理存储结构由多种物理文件组成,主要有数据文件、控制文件、重做日志文件、归档日志文件、参数文件、口令文件和警告日志文件等,如图所示。下面将对这些物理文件进行讲解。

 

 

1.数据文件

  数据文件是用于保存用户应用程序数据和 Oraole 系统内部数据的文件,这些文件在操作系统中就是普通的操作系统文件,Oracle 在创建表空间的同时会创建数据文件。Oraale 数据库在逻辑上由表空间组,每个表空间可以包含一个或多个数据文件,一个数据文件只能隶属于一个表空间,上图所示的数据文件部分。在创建表空间的同时,Oracle 会创建该表空间的数据文件。在表空问中创建数据对象(如表、索引、簇等)时,用户是无法指定使用哪一个数据文件来进行存储的,只能由 Oracle 系统负责为数据对象选择具体的数据文件,并在其中分配物理存储空间。一个数据对象的数据可以全部存储在一个数据文件中,也可以分布存储在同一个表空问的多个数据文件中。在读取数据时,Oracle 系统首先从数据文件中读取数据,并将数据存储在内存的高速数据缓冲区中。如果用户要读取数据库中的某些数据,而请求的数据又不在内存的高速数据缓沖区中,则需要从相应的数据文件中读取数据并存储在缓冲区中。当修改和插入数据时,Oracle不会立即将数据写入数据文件,而是把这些数据保存在数据缓冲区中,然后由 Oracle 的后合进程 DBWR 决定如何将其写入相应的数据文件这样的存取方式减少了磁盘的I\O操作,提高了系统的响应性能。

可通过查询dba_data_files 或v$datafile 数据字典来查询oracle系统文件的信息

 

 上图中可以看到4种类型的数据文件:系统数据文件 (SXSTEMO1.DBF 和 SYSAUX01.DBF)、撇销数据文件 CUNDOTBS1,DBF) 和用户数据文件(USERSI.DBF、EXAMPLE01.DBF、TBSP_1.DBF和 TBSP_2.DBF),和创建的 (TBS_TEST.DBF )下面对 3种类型的数据文件进行介绍。

1. 系统数据文件

  用于存放“特殊”的用户数据和 Oracle 系统本身的数据,如用户建立的表名、列名及宇段类型等,这些属于用户数据范時,这些数据被存放在系统表空间所包含的数据文件中,而 Oracle 系统内部的数据宇典、系统表(如dba_ data_ ies、dba temp tiles 等)中所存储的数据屆于 Oracle 系统的内部数据,这些数据也存放在系统表空间所包含的数据文件中。

2.撤销数据文件

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

3.用户数据文件

   用户数据文件用于存放用户应用系统的数据,这些数据包括与应用系统有关的所有相关信息,比如,上图中的 TBSP 1.DBF 和TRSP 2.DBF 文件就是一个具体应用系统的两个数据文件。在上图 中并没有看到临时表空间所包含的数据文件,这是由于临时数据文件本身的特殊性,从Oracle 9i 以/后,Oracle 将临时表空间所对应的临时数据文件与一般数据文件分开,要了解 Oracle 系统的临时数据文件信息,可以从 dba temp_ files 或 wStempfile 数据宇典中查询。

 

 

2.控制文件

  控制文件是一个二进制文件,它记录了数据库的物理结构,其中主要包含数据库名、数据文件与日志文件的名字和位量、数塔库建立日期等信息。控制文件一般在 Oracle 系统安装时或创建数据库时自动创建,控制文件所存放的路径由服务器参数文件sptileorcl.ora 的control files 参数值来指定。由于控制文件存放有数据文件、日志文件等的相关信息,因此,Oracle 实例在启动时必须访问控制文件。只有控制文件正常,实例才能加载并打开数据库;但若控制文件中记录了错误的信息,或者实例无法找到一个可用的控制文件,则实例无法正常启动。

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

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

  基于安全考虑,在安装oracle数据库或创建数据库时,oracle数据库系统会自动创建两个或三个控制文件,每个控制文件记录信息相同。这样可确保在数据库运行时,若某个数据库文件挂掉,oracle会自动更换另一控制文件,当所有控制文件都挂了,系统也就挂了

 3.日志文件

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

3.1重做日志文件

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

通过对表或表空间设置NOLOGING属性,使表或表空间所有DML操作都不会生成日志信息

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

  可通过v$logfile视图实现

 

 

 

  Oracle 系统在运行过程中产生的日志信息,首先被临时存放在系统全局区的“重做日志缓冲区”中,当发出 Commit 命令(或日志缓冲区信息满 1/3)时,LGWR 进程(日志写入进程)将日志信息从“重做日志缓冲区〞中读取出来,并将“读取的日志信息”写入到日志文件组中序列号较小的文件里,一个日志组写满后接着写另外一个日志组。当 LGWR 进程将所有能用的日志文件都使用过一遍之后;它将再次转向第一个日志组重新覆写。
2. 归档日志文件
  在所有的日志文件被写入一遍之后,LGWR进程将再次转向第一个日志组进行重新覆写,这样势必会导致一部分较早的日志信息被覆盖掉,但 Oracle 通过归档日志文件解决了这个问题。                     Oracle 数据库可以运行在两种模式 下,即归档模式和非归档模式。非归档模式是指在系统运行期间,所产生的日志信息不断地记录到日志文件组中,当所有重做日志组被写满后,又重新从第一个日志组开始覆写。归档模式是在各个日志文件都被写满而即将被覆盖之前,先由归档进程 (ARCH) 将即将被覆盖的日志文件中的日志信息读出,并将“读出的日志信息〞写人到归档日志文件中,而这个过程又被称为归档操作。
  在归档操作进行的过程中,日志写入进程(ARCH) 需要等待归档进程(ARCH)的结束才能开始覆写日志文件,这样就延迟了 系统的响应时间,而且归档日志文件本身又会占用大量的磁盘空间,这些都会影响系统的整体性能。所以在默认情况 下,Oracle 系统不采用归档模式运行

  通过 v$database 视图来查看当前 Oracle 系统是否采用归档模式。

 

 

 若oracle数据库系统设置成归档模式下运行,则可以通过服务器参数文件spfile的log_archive_dest参数来确定归档日志文件的所在路径

 

 

 

4.服务器参数文件

  服务器参数文件 SPFILE (Server parameter File)是二进制文件,用来记录了 Oracle 数据库的基本参数信息(如数据库名、控制文件所在路径、日志缓冲大小等)。数据库实例在启动之前,Oracle 系统首先会读取 SPFILE参数文件中设置的这些参数,并根据这些初始化参数来配置和启动实例。比如,设置标准数据块的大小(即参数 db_block_size 的值)、设置日志缓冲区的大小(即参数 1og_buffer 的值)等,所以 SPFILE 参数文件非常重要。服务器参数文件在安装 Oracle 数据库系统时由系统自动创建,文件的名称为 SPFILEsid.ora, sid 为所创建的数据库实例名。与早期版不的初始化参数文件 INITsid.ora 不同的是,SPFILE 中的参数由 Oracle 系统自动维护,如是要为某些参数进行修改,则尽可能不要直接对 SPFILE 进行编辑,最好通过企业管理器 (OEM)或SUTER SYSTEM 命会来修改,所修改过的会数会自动写到 SPFILE中。

1. 查看服务器参数

可以通过v$parameter查询name,value,ismodified来确定默认值是否被修改过

 

 也可以通过show parameter命令查询

2.修改服务器参数

可以通过企业管理器(OEM)或 ALTER SYSTEM 命令实现修改

 

5.密码文件、警告文件、跟踪文件

  Oracle 系统运行时,除了必需的数据文件、控制文件、日志文件及服务器参数文件外,还需要一些辅助文件,如密码文件、警告文件和跟踪文件,下面将对这些辅助文件进行简单的介绍。

1. 密码文件

  密码文件是 Oracle 系统用于验证 sysdba 权限的二进制文件,当远程用户以 sysdba 或 sysoper 连接到数据库时,一般要用密码文件验证。Oracle 11g(这里以发行版2为例)密码文件的默认存放位置在%dbhome 1%ldatabase 目录下,密码文件的命名格式为 PWD<sid>,其中 sid 表示数据库实例名。创建密码文件既可以在创建数据库实例时自动创建,也可以使用 ORAPWD.EXE 工具手动创建,创建密码文件的命令格式如下:

C.I>ORAPWD FILE=<filename> PASSWORD=<password> ENTRIES=<max_users>

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

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

2.警告文件
  警告文件(即警告日志文件)是一个存储在Oracle 系统目录下的文本文件(名称通常为 alert_ orcl.log),它用来记录 Oracle 系统的运行信息和错误信息。运行信息一般包括 Oracle 实例的启动与关闭、建立表空间、增加数据文件等;错误信息包括空间扩展失败、启动实例失败等。当 Oracle 系统安装完牛后,其实例日常运行的基本信息都会记录在警告文件中。警告文件的路径可通过 Oracle 系统的 background_dump_ dest 参数值来查看,并且该参数值由服务器进程和后台进程写入。

在vSparameter 视图中查看当前实例的警告文件的路径,代码及运行结果如下。

 

 

 注意:随着时间推移,警告文件会越来越大,数据库管理员应该定期清理警告文件。

3.跟踪文件

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

 

 

标签:文件,存储,数据文件,数据库,归档,Oracle,日志,物理,结构
来源: https://www.cnblogs.com/sunzhichaoshilanchong/p/16007668.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有