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)设置不当,可能会导致数据库卡顿。例如当前在线重做日志还没有完成归档,而且发生下一轮日志切换,重新要清空当前在线重做日志文件,但是无法清空,需要等待当前在线重启日志完成归档。

oracle数据库文件的更多相关文章

  1. 统计Oracle数据库文件的大小

    1. 统计数据文件.暂时文件.日志文件大小 select sum(bytes)/1024/1024/1024 as GB from dba_data_files; select sum(bytes)/ ...

  2. Oracle数据库文件路径变更

    环境:RHEL 6.4 + Oracle 11.2.0.3 情景一:只是部分普通数据文件迁移,可以在线操作. 1.将对应表空间offline,移动数据文件到新路径 2.数据文件alter databa ...

  3. Oracle 【IT实验室】数据库备份与恢复之:如何对Oracle数据库文件进行恢复与备份

    任何数据库在长期使用过程中,都会存在一定的安全隐患.对于数据库管理员来说不能仅寄希望于计算机操作系统的安全运行,而是要建立一整套的数据库备份与恢复机制.当数据库发生故障后,希望能重新建立一个完整的数据 ...

  4. Oracle数据库文件恢复与备份思路

    怎样才能对Oracle数据库进行备份?如何才能对删除的数据再进行恢复?这是困扰着很多人的问题.大家都知道,任何数据库在长期使用过程中,都会存在一定的安全隐患.对于数据库管理员来说不能仅寄希望于计算机操 ...

  5. 如何使用impdp导入oracle数据库文件

    1.首先,安装好oracle数据库. 2.使用sqlplus进入sysdba权限,sqlplus "/as sysdba", 例如: 3.创建用户framework,例如: CRE ...

  6. Oracle数据库文件导出为CSV格式的方法

    1 安装PLSQL Developer,并连接Oracle数据库. 2 执行sql语句,将要导出的表格显示出来. select * from table名; 3 如下点击导出查询结果,选择数据格式,即 ...

  7. 导入本地的oracle数据库文件

    1. 创建表空间 create tablespace charge_zang datafile 'F:\app\zang\oradata\orcl\charge_zang.dbf' size 50M ...

  8. 迁移ORACLE数据库文件到ASM

    迁移数据文件到ASM 数据库一致性情况下迁移:将数据库启动到mount状态,生成rman copy 语句,然后在rman中执行: SQL> startup mount SQL> selec ...

  9. Oracle 数据库知识汇总篇

    Oracle 数据库知识汇总篇(更新中..) 1.安装部署篇 2.管理维护篇 3.数据迁移篇 4.故障处理篇 5.性能调优篇 6.SQL PL/SQL篇 7.考试认证篇 8.原理体系篇 9.架构设计篇 ...

  10. PLSQL连接本地oracle或远程oracle数据库,实现随意切换

    转: PLSQL连接本地oracle或远程oracle数据库,实现随意切换 置顶 2018年01月12日 19:36:45 前方一片光明 阅读数 43542   版权声明:本文为博主原创文章,未经博主 ...

随机推荐

  1. 阿里云消息队列 RocketMQ 5.0 全新升级:消息、事件、流融合处理平台

    ​简介: RocketMQ5.0 的发布标志着阿里云消息从消息领域正式迈向了"消息.事件.流"场景大融合的新局面.未来阿里云消息产品的演进也将继续围绕消息.事件.流核心场景而开展. ...

  2. 6个实例带你解读TinyVue 组件库跨框架技术

    本文分享自华为云社区<6个实例带你解读TinyVue 组件库跨框架技术>,作者: 华为云社区精选. 在DTSE Tech Talk <手把手教你实现mini版TinyVue组件库&g ...

  3. 04.Java 流程控制

    1.用户交互 Scanner Scanner 对象:获取用户的输入 基本语法:Scanner s = new Scanner(System.in); 通过 Scanner 类的 next() 和 ne ...

  4. validator库在gin中的使用

    目录 封装语言包翻译器 tag中设置验证规则 控制层验 curl请求 返回结果 封装语言包翻译器 package validator import ( "fmt" "ne ...

  5. ansible(15)--ansible的mount模块

    1. mount模块 功能:管理被控端设备挂载: 主要参数如下: 参数 说明 src 本地或远程设备的路径 path 设备挂载至本地的路径 fstype 挂载的文件系统类型,xfs.nfs... op ...

  6. nim 7. nimble--制作包

    1. nim的包管理工具: nimble nim的包管理工具,是nimble. 在安装nim的时候,已经自带了nimble. nible通常需要使用git服务器存储包,因此,本地需要git命令的支持. ...

  7. VNC 远程桌面很卡,替代方案如下

    VNC 远程桌面是一款古老的远程桌面软件,是基于 Unix 和 Linux 操作系统的免费的开源软件.免费开源很好,但是 VNC 也存在一些缺点. 1.VNC 远程桌面很卡 想白嫖 VNC,就要接受卡 ...

  8. C语言中四舍五入问题总结

    C语言中四舍五入问题的总结 在C语言中大部分情况下都是不需要四舍五入的. 除了一种情况:在使用输出函数 printf()限制浮点型输出的小数位个数 eg: printf("%0.2f&quo ...

  9. 推荐一款微信公众平台Python开发神器!

    1.引言 在当今数字化时代,微信公众平台成为了企业和个人连接用户的重要渠道.为了高效地管理和与用户互动,开发者需要一个强大而灵活的工具. Weixin-Python 正是这样一个为微信公众平台量身打造 ...

  10. centos 7网卡配置文件详解(ifcfg-ens33)

    centos 7网卡配置文件详解(ifcfg-ens33) [root@xuegod63 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE ...