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. [Caddy2] Caddyfile 概念预览

    结构 块: 所有的指令必须在 { } 块中,如果只有一个站点,则块标记可以省略. 全局的配置块可以放在最上方,其次是站点的配置块. 指令: 指令是服务于站点配置的关键词. 关键词和引号: 空格在 Ca ...

  2. [FAQ] Error: Component series.bar not exists. Load it first. (echarts)

    以上错误出现在使用 echarts 组件时,未导入或者使用不正确的情况下. 检查是否导入 line 或者 bar 这一类具体的 chart,比如: import 'echarts/lib/chart/ ...

  3. dotnet 提升 ToUpper 性能

    在应用软件启动过程中,客户端应用软件是对性能敏感的.比如在解析命令行参数的时候,有时候需要进行字符串处理逻辑.一般来说命令行参数都是语言文化无关的,在需要进行全大写或全小写转换过程中,采用 ToUpp ...

  4. (数据科学学习手札160)使用miniforge代替miniconda

    本文已收录至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,conda作为Python数据科学领域 ...

  5. 这几个好用的 Google 搜索技巧,让你飞起!

    搜索能力是被绝大多数人低估一项基本素质,绝大部分做编程技术相关的朋友应该都知道如何使用 Google,但是并不知道如何利用它的潜力.其实不管是 Google 还是 百度,会搜索的人一样都可以查找到需要 ...

  6. golang sort —— 排序算法

    该包实现了四种基本排序算法:插入排序.归并排序.堆排序和快速排序. 但是这四种排序方法是不公开的,它们只被用于sort包内部使用.所以在对数据集合排序时不必考虑应当选择哪一种排序方法,只要实现了sor ...

  7. Critical Expression

    什么是Critical Expression 所谓Critical Expression就是一个表达式依赖的值,必须出现在这个表达式前面.比如: times (label-$) db 0 ;times ...

  8. three.js案例-web3d三维地图大屏炫酷3D地图下钻地图-附源码

    炫酷3D地图效果如下: 代码注释非常详细: create() { // 添加雾,随着距离线性增大,只能看到一个小是视野范围内的场景,地图缩小很多东西就会看不清 //this.scene.fog = n ...

  9. avue-crud字段之间的动态交互效果以及接口数据的获取赋值

    一.form表单下拉表单类型字段数据获取 1.通过配置系统字典接口获取数据并渲染 { label: "经纪人", prop: "broker", type: & ...

  10. 智能运维|AIRIOT智慧光伏管理解决方案

    ​ 随着新能源发展到今天,我国的能源产业已经形成产业化规模化的发展,"光伏能源"被广泛应用于电力.农业.市政照明甚至是军事领域. 以光伏电站为例,大量铺设的太阳能板运维成本相当高, ...