Oracle的文件系统

本文详细介绍了Oracle数据库的文件系统,包括控制文件(.CTL)、数据文件(.DBF)、日志文件(.LOG)以及参数文件。数据文件存储数据库中的数据,日志文件记录数据库更改,控制文件保存数据库物理状态。文章还深入讨论了日志文件的类型,如在线重做日志和归档重做日志,并阐述了如何进行各种日志操作。同时,讲解了控制文件的重要性和管理,以及参数文件的作用和位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Oracle的文件结构图如下:

Oracle的文件系统主要分成以下的四大块:

  1>   控制文件(.CTL)

  2>   数据文件(.DBF)

  3>   日志文件(.LOG)

  4>   其他文件

  前三种文件系是Oracle文件系统的主要组成部分,一般在以下路径可以找到:

  $ORACLE_HOME$\oradata\orcl

    .CTL文件为控制文件

    .DBF 文件为数据文件

    .LOG 文件为日志文件

  除了前三种文件还有一种参数文件,参数文件不是数据库系统中的有效组成部分,在启动数据库时,参数文件不直接参与工作,只是控制文件是由参数文件寻找的。参数文件位置:

  $ORACLE_HOME$\admin\orcl\pfile

1.1   数据文件

  真正存储数据库中的数据,包括表,索引,试图等

  通常情况下数据文件的后缀名都是.DBF,但这只是约定俗成的一种做法,实际上数据库并不要求数据文件以.DBF为后缀,只是便于区分,建议建立数据文件的时候都加上。

  查看所有数据文件的文件号、状态和文件名

    SQL> select  *  from v$datafile;

1.2   日志文件

  分三大类:

    alert log files        --警报日志

    trace log files       --跟踪日志 (用户和进程)

    redo log file         --重做日志(记录数据库的更改)。

1.2.1       重做日志文件

  重做日志的简单原理:在数据更新操作commit前,将更改的SQL脚本写入重做日志。主要用于数据库的增量备份和增量恢复。重做日志直接对应于硬盘的重做日志文件(有在线和归档二种),重做日志文件以组(Group)的形式组织,一个重做日志组包含一个或者多个日志文件

  重做日志分为

    在线重做日志      -- online Redo log files

    归档重做日志      -- archive Redo log files

1.2.1   在线重做日志(online Redo log files)

   又称联机重做日志,指Oracle以SQL脚本的形式实时记录数据库的数据更新,换句话说,实时保存已执行的SQL脚本到在线日志文件中(按特定的格式)。

   在线重做日志的原理:

      对于在线重做日志,Oracle 11g默认对于每个数据库实例,建立3个在线日志组,每组一个日志文件,文件名称为REDO01.LOG,REDO02.LOG和REDO03.LOG。(用户可以通过视图操作添加/修改/删除日志组和日志文件来自定义在线重做日志)每组内的日志文件的内容完全相同,且保存在不同的位置,用于磁盘日志镜像,以做多次备份提高安全性。默认情况这3组通常只有一组处于活动状态,不断地同步写入已操作的脚本,当日志文件写满时(达到指定的空间配额),如果当前数据库处于归档模式,则将在线日志归档到硬盘,成为归档日志;若当前数据库处于非归档模式,则不进行归档操作,而当前在线日志的内容会被下一次重新写入覆盖而无法保存。因此,通常数据库在运行时,是处于归档模式下的,以保存数据更新的日志。当前归档日志组写满后,Oracle会切换到下一日志组,继续写入,就这样循环切换;当处于归档模式下,切换至原已写满的日志组,若该日志组归档完毕则覆盖写入,若没有则只能使用日志缓冲区,等待归档完毕之后才能覆盖写入。当然,处于非归档模式下是直接覆盖写入的。(关于数据库归档模式的设置,我会在另外的博文中讲到)。Oracle提供了2个视图用于维护在线重做日志:V$LOG 和  V$LOGFILE,我们可以通过这两个视图查看和修改在线日志。当然,还可以通过ALTER DATABASE ADD 、delete等命令增加/修改/删除在线日志或日志组.

1.2.2       Archive Redo log files--归档重做日志

  简称归档日志,指当条件满足时,Oracle将在线重做日志以文件形式保存到硬盘(持久化)。

  其实,所谓的归档,就是指将在线日志进行归档、持久化到成固定的文件到硬盘,便于以后的恢复和查询。

  当然,前提条件是数据库要处于归档模式。Oracle 11g 默认是为归档日志设定2个归档位置,这2个归档位置的的归档日志的内容完全一致,但文件名不同。

1.2.3       常见的日志文件操作

  查询系统使用的是哪一组日志文件:

     select * from v$log;

  查询正在使用的组所对应的日志文件:

     select * from v$logfile;

  强制日志切换:

     alter system switch logfile;

  查询历史日志:

     select * from v$log_history;

  查询日志的归档模式:

     select dbid,name,created,log_mode from v$database;

  查询归档日志的信息:

     select recid,stamp,thread#,sequence#,name from v$archived_log;

  增加与删除日志文件组

     alter database add logfile group 1 ('c:\log1a.log'), size 100M;

     alter database drop logfile group 1;

  增加与删除日志成员

     alter database add logfile member 'log1a.log' to group 1;

     alter database drop logfile member ' c:\log1a.log' ;

  日志文件移动

     alter database rename file 'C:\log1a.log' to 'C:\ log1b.log';

     注意:执行该命令之前必须保证该日志文件物理上已经移动到新目录

  清除日志文件

     alter database clear logfile C:\log1a.log';

     注意:该命令用于不能用删除组及组成员命令删除日志时使用

1.3       控制文件

     控制文件是定义当前数据库物理状态的二进制文件,每个oracle数据库至少有一个控制文件。控制文件由DBA管理维护

1.3.1   其特性为

  1)控制文件若丢失需要恢复

  2)在MOUNT状态可以读取

  3)数据库运行期间控制文件不断地被更新

  4)每个控制文件都只关联一个数据库

  5)应该被多元化

  6)维护数据库实体

  7)由CREATE DATABASE语句初始化大小

1.3.2    控制文件包含主要内容

  1)数据库名及数据库唯一标识

  2)数据文件和日志文件标识

  3)数据库恢复所需的同步信息,即检查点号

  4)数据库创建时间

  5)表空间名

  6)当前重做日志文件SCN

  7)回滚段的开始和结束

  8)重做日志归档信息

  9)备份信息

1.3.1       控制文件的常用操作

  对oracle控制文件的管理主要包括:

    1> 控制文件的备份

    2> 控制文件的移动

    3> 控制文件的重建

    4> 控制文件的修改(重命名数据库)

1.3.1.1    备份控制文件

  有三种方法:

    创建备份控制文件                    alter database backup controlfile to 'C:\controlfile01.ctl';

    通过创建跟踪文件来创建           alter database backup controlfile to trace;

    rman配置自动备份控制文件       configure controlfile autobackup on;

1.3.2.2  移动控制文件

  确定移动的位置;

  启动数据库实例,startup mount或startup;

  若用的是PFILE则修改控制文件的路径;若用的是SPFILE

  则:alter system set control_files='PATH1,PATH2,PATH3' scope=spfile;

  关闭数据库 shutdown immediate;

  物理移动控制文件到新的位置;

  重启数据库 startup.

1.2.2.3  重建控制文件

  存在以下存在几种情况

  1)控制文件部分丢失

       shutdown abort;

       cp -p 未丢失的控制文件 已丢失的控制文件

       startup nomount;

       alter database mount;

       alter database open;

  2)控制文件丢失

     若rman中存在备份,可以通过rman进行恢复控制文件

    startup nomount;

    restore controlfile from autobackup;

     若rman中没有备份,通过数据库备份控制文件来重建控制文件

    shutdown immediate;

    cp

    alter database mount;

    alter database open using backup controlfile;

  3)通过跟踪文件重建

       alter database backup controlfile to trace

       编辑此跟踪文件并用SQL执行;

  4)手工创建控制文件(需要知道的信息:数据库名称,在每个重做日志给中至少一个成员的位置和名称,所有数据文件的名称和位置)

    CREATE CONTROLFILE REUSE DATABASE "PRDB"

       NORESETLOGS NOARCHIVELOG

       MAXLOGFILES 16

       MAXLOGMEMBERS 3

       MAXDATAFILES 100

       MAXINSTANCES 8

       MAXLOGHISTORY 292

  LOGFILE

     GROUP 1 '/oracle/oradata/prdb/redo01.log' SIZE 50M,

     GROUP 2 '/oracle/oradata/prdb/redo02.log' SIZE 50M,

     GROUP 3 '/oracle/oradata/prdb/redo03.log' SIZE 50M

   DATAFILE

     '/oracle/oradata/prdb/system01.dbf',

     '/oracle/oradata/prdb/undotbs01.dbf',

     '/oracle/oradata/prdb/sysaux01.dbf',

     '/oracle/oradata/prdb/users01.dbf';

1.3.2.4  重命名数据库

  alter database backup controlfile to trace;

  show parameter user_dump_dest

  select name,values from v$parameter

  where name='user_dump_dest';

  cp ***.trc controlfile.sql

  vi controlfile.sql

  more controlfile.sql

  CREATE CONTROLFILE set DATABASE "PRDB" RESETLOGS FORCE LOGGING ARCHIVELOG

  MAXLOGFILES 16

  MAXLOGMEMBERS 3

  MAXDATAFILES 100

  MAXINSTANCES 8

  MAXLOGHISTORY 292

  LOGFILE

  GROUP 1 '/oracle/oradata/prdb/redo01.log' SIZE 50M,

  GROUP 2 '/oracle/oradata/prdb/redo02.log' SIZE 50M,

  GROUP 3 '/oracle/oradata/prdb/redo03.log' SIZE 50M

  DATAFILE

  '/oracle/oradata/prdb/system01.dbf',

  '/oracle/oradata/prdb/undotbs01.dbf',

  '/oracle/oradata/prdb/sysaux01.dbf',

  '/oracle/oradata/prdb/users01.dbf'

  CHARACTER SET ZHS16GBK;

  shutdown immediate;

  先对原数据库进行一次全备;

  startup nomount;

  @controlfile.sql

  recover database

  alter database open restlogs;

  alter database rename global name to newdbname.mydomain.com;

  backup database;

1.3.2       参数文件

  参数文件(10g中的参数文件)

  主要用来记录数据库的配置文件,在数据库启动时,Oracle读取参数文件,并根据参数文件中的参数设置来配置数据库。如内存池的分配,允许打开的进程数和会话数等。

  两类参数文件:

       pfile:文本文件的参数文件,可以使用vi,vim等编辑器修改,文件名通常为init<sid>.ora

       spfile:二进制的参数文件,不能直接修改,只能存放在Oracle服务器端,可以使用EM或指令来修改

  优先级别:

       Oracle 启动读取参数文件的顺序,如果个文件都不存在,则Oracle会报错

       spfile<sid>.ora --> spfile.ora -->init<sid>.ora

  参数文件的路径:

       spfle:$ORACLE_HOME/dbs/spfile$ORACLE_SID.ora

       pfile(9i):$ORALCE_HOME/dbs/init$ORALCE_SID.ora          //10g以后一般不用init<sid>.ora

       pfile(10g):$ORALCE_BASE/admin/$ORACLE_SID/pfile       //仅当数据库初始化时使用

             pfile:$ORACLE_HOME/dbs/init.ora                                //默认

1.3.3       密码文件

  作用:主要进行DBA权限的身份认证

  密码文件的位置

      Linux:$ORACLE_HOME/dbs/orapw<sid>

      Windows::$ORACLE_HOME/database/PW<sid>.ora

  密码文件查找的顺序

  --->orapw<sid>--->orapw--->Failure

   导致密码文件内容修改的几种方式:

      1.使用orapwd建立,修改密码文件,不建议使用

      2.使用alter user sys identified by <>

          3.使用grant sysdba to <> 或grant sysoper to <> 或revoke sysdba |sysoper from <>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值