首页 > 数据库 >oracle数据库文件

oracle数据库文件

时间:2024-06-02 16:44:24浏览次数:36  
标签:文件 spfile 数据库 参数 oracle 日志 重做

oracle数据库重要的文件包括参数文件,控制文件,数据文件,临时文件,重做日志文件。

1 参数文件

oracle的参数文件可以设置数据库的名称,SGA和PGA的大小,控制文件的路径等系统参数。这些参数可以通过V$PARAMETER视图进行查询。oracle有两类参数文件,分别为pfile参数文件和spfile参数文件。oracle优先使用spfile参数文件,如果没有spfile参数文件,才会读取pfile参数文件的数据。

1.1 pfile参数文件

pfile参数文件的目录在Linux上一般是$ORACLE_HOME/dbs,文件名格式为init$ORACLE_SID.ora。可以通过文本编辑器进行编辑,而且可以保存在客户端,客户端可以根据客户端的参数文件启动数据库。

1.2 spfile参数文件

spfile参数文件的目录在Linux上一般是$ORACLE_HOME/dbs,文件名格式为spfile$ORACLE_SID.ora。spfile参数文件的参数不可以通过文本编辑器编辑。只能通过sql命令alter system set 命令来对系统参数进行设置,只能存放在oracle服务端。

1.3 pfile和spfile创建

只要pfile和spfile文件在系统默认目录上,都可以根据对方进行创建。
spfile根据pfile创建命令如下:
create spfile from pfile;
pfile根据spfile创建命令如下:
create pfile='init_ora12crl_2014.ora' from spfile;
有时候会遇到oracle重启数据库后,数据库因为spfile的参数设置不当,导致重启失败。因为没有成功启动数据库,所以也根据无法使用aler system set命令设置spfile的参数。我们就可以先根据spfile创建一个临时的pfile。然后用文本编辑器修改临时pfile参数文件里面的参数。启动数据库时指定这个临时的pfile启动数据库。
create pfile='init_ora12crl_2014.ora' from spfile;
startup pfile=init_ora12crl_2014.ora

2 控制文件

控制文件会记录数据文件,重做日志的路径。oracle启动过程中,先找到参数文件,根据参数文件的控制文件路径找到控制文件,然后再根据控制文件上记录的数据文件路径和重做日志路径找到数据文件、重做日志,才会开始加载数据,修复数据。控制文件还会记录一些其他信息,例如检查点,SCN等。

3 数据文件

oracle数据文件是存储数据的地方,包括oracle元数据以及应用数据。一般以dbf结尾。使用oracle的自动存储管理(Automatic Storage Management, ASM )技术进行管理。可以通过视图DBA_DATA_FILES去查询具体的数据文件信息,包括文件位置信息。数据文件从oracled物理存储概念去理解的。如果从逻辑存储概念去理解oracle的存储体系,从小到大可分为块,区段,段,表空间。

3.1 块

块是oracle最小的空间分配单位。可以在创建数据时指定大小,也可以在创建表空间时指定块的大小,每个表空间可以设置不同的块大小。块大小一般设置为2KB、4KB、 8KB或16KB。从一般的表的块的结构来看,块可以拆分为首部,表目录,行目录,已用空间,空闲空间等。

  • 首部一般含有块所属对象类型的信息(例如表块,索引块)、块在磁盘上的位置信息,块上的事务信息。
  • 表目录记录这个块上包含哪些表
  • 行目录记录这个块上表的行的描述信息

3.2 区段

区段是文件的一段逻辑上连续的块。是oracle分配存储空间的基本单位。例如当插入数据到一张表里,这个表的空间已经满了,需要oracle分配空间,分配的单位是区段,根据需要分配多少个单位的区段。区段的大小可能不同,有点区段可能是一个块大小,最大可以到达2GB。一个区段必须分布在同一个数据文件中

3.3 段

段是oracle中占用存储空间的数据库对象。创建表时会创建一个段,创建索引也会创建一个段。需要注意的是,创建表时可能会创建多个段。例如创建一个表CREATE TEST(ID PRIMARY KEY)。TEST这个表会创建两个段,一个是TEST表本身,一个是为主键所创建的索引。段由一个或多个区段组成,不同的区段可分布在不同的数据文件中,因此一个段可以分布在同一个表空间上不同的数据文件上。

3.4 表空间

表空间是一个容器,包含多个段。 一个段不可以跨表空间存储。表空间由一个或者多个数据文件组成,一个数据文件不可以被多个表空间同时使用。下图显示了一个名为USER_DATA的表空间,其中包括2个数据文件user_data01. dbf和user_data02.dbf。在这个表空间中有3个段T1、T2和I1及其4个区段。段 T1包括两个区段,分别在不同的文件中;段T2和I1都各有一个区段。

4 临时文件

临时文件是临时表空间里面的文件,当oracle内存不足时,会使用临时文件存储临时数据。例如,当进行一些较大的排序的排序结果或者全局临时表的数据会使用到临时表空间,把数据放到临时文件上。使用视图DBA_TEMP_FILES可以查看具体的临时文件信息。
临时文件的数据有个特点,就是对临时文件数据的操作不会产生redo日志,但是会产生undo日志,进而生成保护undo的redo日志。因此在操作一个临时表时,操作本身不会产生redo,但会产生保护undo日志的redo日志。oralce 12c引入了一个参数TEMP_UNDO_ENABLED(会话和全局都可以设置),当这个参数设为TRUE时,全局临时表产生的undo会写入到临时表空间中。所以全局临时表就不会产生redo日志了。在一个存储过程中有临时表参与事务,可以在存储过程开头设置TEMP_UNDO_ENABLED为TRUNE。可以大大加快操作临时表的速度。
EXECUTE IMMEDIATE 'ALTER SESSION SET TEMP_UNDO_ENABLED = TRUE';

5 重做日志文件

重做日志最重要的功能是实例失败后,能够恢复已经提交的事务,保证数据的一致性和原子性。ORACLE上几乎所有的操作都会记录在重做日志文件中。例如当我们往一个表插入一条记录时,这条记录也会写入redo日志文件。可以通过字典v$logfile查询具体的重做日志信息。当然,一些操作也可以尽量减少redo日志的产生,用来加快操作的完成。例如在创建表和创建索引时使用nologging。重做日志可分为在线重做日志以及归档重做日志。

5.1 在线重做日志

  • 在线重做日志构成和日志切换
    在线重做日志在oracle中至少有两组重做日志,每组重做日志包含一个或者多个在线重做日志文件,同一组内的重做日志内容完全一样。日志切换是指当一组重做日志写满时,oracle清空下一组重做日志并在下一组写入重做日志。所以,重做日志是循环使用的。
  • 数据库高速缓存和重做日志缓存
    数据库高速缓存是临时存储数据库块的地方,当我们在查询数据库的数据时,会先从磁盘的数据文件里读取对应的块,并把块放到高速缓存。这样下一次读同样的数据时不需要再次从磁盘读取。重做日志缓存是临时存储重做日志的地方,我们修改数据时产生的redo日志会先存放到重做日志缓存中。当我们提交事务时,数据库会将事务对应的重做日志缓存的数据写入到在线重做日志文件,oracle不会将高速缓存中事务修改的块数据写入到数据文件中。当触发检查点时,才会将修改的块写入数据文件。
  • 检查点
    检查点的作用是要求数据库将高速缓存中的脏块写入磁盘。当我们写满日志文件组1并切换到日志文件组2时,Oracle就会启动一个检查点。此时,DBWn将日志文件组1所保护的所有脏块写至磁盘。
    检查点触发的条件一般有如下条件
    • A. 在线重做日志切换
    • B. 高速缓存快使用完时
    • C. 满足log_checkpoint_timeout,log_checkpoint_interval触发参数
  • 日志切换的悬停状态
    在发生日志切换时,如果要切换到的下一组的重做日志所保护的脏块还在快速缓存中,还没有全部写入磁盘,这时需要等待DBWn进程将脏块全部写入磁盘。等待DBWn进程将脏块全部写入磁盘后,悬停状态才会结束,才会清空下一组重做日志文件并写入数据。
    如果在跟踪文件目录的alter.log文件发现类似如下内容

Thread 1 cannot allocate new log, sequence 41801
Checkpoint not complete
说明发生日志切换悬停,需要增加重做日志组或者增大重做日志文件,避免因为日志切换悬停导致数据库卡顿。

5.2 归档重做日志

如果数据库处于归档模式,那当在线重做日志发生切换时,就会将当前写满的在线重做日志文件进行归档,复制在线重做日志数据到归档重做日志文件。如果归档进程参数(log_archive_max_processes)设置不当,可能会导致数据库卡顿。例如当前在线重做日志还没有完成归档,而且发生下一轮日志切换,重新要清空当前在线重做日志文件,但是无法清空,需要等待当前在线重启日志完成归档。

标签:文件,spfile,数据库,参数,oracle,日志,重做
From: https://www.cnblogs.com/study9196/p/18226222

相关文章

  • 利用AutoUnattend自动应答文件安装Windows Server 2025 26100正式版
    安装视频:https://www.bilibili.com/video/BV1ji421v7jZ/AutoUnattend自动应答文件,安装到第一个硬盘(容量大于100G),安装后登录用户Administrator的密码:pass1234AutoUnattend自动应答文件已经上传到:https://bbs.pcbeta.com/viewthread-2004613-1-1.html ......
  • 适合技术小白学习的项目1863java在线视频网站系统 Myeclipse开发mysql数据库web结构ja
    一、源码特点java在线视频网站系统是一套完善的web设计系统,对理解JSPjava编程开发语言有帮助采用了java设计,系统具有完整的源代码和数据库,系统采用web模式,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql,使用java语言开发。java在线视频......
  • 适合技术小白学习的项目1840java swing社团管理系统myeclipse开发Mysql数据库CS结构ja
    一、源码特点   javaswing社团管理系统是一套完善的窗体设计系统,对理解SWINGjava编程开发语言有帮助,系统具有完整的源代码和数据库,,系统主要采用C/S模式开发。应用技术:java+mysql开发工具:Myeclipse8.5、jdk。二、功能介绍社团管理系统要满足以下几个方面的功能需求......
  • 【云原生进阶之数据库技术】第二章-Oracle-使用-3.3.2-Oracle Data Guard原理
    2DataGuard原理解析2.1数据同步原理        DG的核心组件包括:主数据库:负责处理所有的写操作,并将这些操作记录在重做日志(RedoLogs)中。备用数据库:可以是物理备用数据库(PhysicalStandby)或逻辑备用数据库(LogicalStandby)。物理备用数据库通常是只读的,而逻辑备用......
  • 压缩包文件批量解压助手工具
    压缩包文件批量解压助手工具主要用于批量化解压压缩包文件,省去了繁琐的人工操作主要包含以下功能:自动获取文件夹内所有压缩包文件(支持:zip、tar、7z、uvz、rar格式)自动从密码本中匹配压缩包密码后自动解压压缩包支持解压完成后自动删除压缩包文件支持快速、标准、性能三种......
  • Linux目录的基本结构(RHEL8系统基本使用之文件操作)
    1.Linux的目录树结构2.各目录的功能介绍3.理解文件路径表示方法Who?——>当前登录的用户Where?——>路径我要在哪儿创建文件?我要删除什么地方的什么文件?我所要查看的文件在哪里?What?——>操作命令How?——>理清思路,找到方法,做就对了绝对路径1.一定是以"/"(根)开......
  • Android基础-数据库
    在Android系统中,数据库扮演着至关重要的角色,它负责存储、管理和检索应用程序所需的数据。随着移动应用的日益复杂和功能的不断增加,对数据库的需求也日益提高。在Android中,有多种数据库管理系统和工具可供选择,其中最为常见和广泛使用的是SQLite数据库。下面将详细介绍Android系......
  • 【C语言】文件操作(中卷)
    前言在文件操作(上卷)中,讲到的主要都是正式文件操作开始之前的前置知识,而这一卷中,我们将开始正式地操作文件。在上卷中我们已经说到,stdinstdoutstderr是三个C语言程序启动时默认打开的流。这三个流的类型是:FILE*,通常称为文件指针。而C语言,就是通过FILE*的文件指针来维护流的......
  • 数据库(入门)
    文章目录          一、数据库(DB)二、数据库管理系统(DBMS)三、SQL(结构化查询语言)四、三者的关系五、端口号(portnumber)一、数据库(DB)定义:按照一定格式存储数据的一些文件的组合。简单来说:存储数据的仓库,实际上就是一堆文件,这些文件中存储了具有......
  • 使用Python连接到SQLite3数据库进行数据更新和删除
    SQLite3是一种轻量级的嵌入式关系型数据库管理系统,广泛应用于移动应用、嵌入式设备以及小型Web应用等场景。Python内置了对SQLite3数据库的支持,通过sqlite3模块,可以方便地连接、操作SQLite3数据库。在本文中,我们将学习如何使用Python连接到SQLite3数据库,并进行数据更新和删......