Oracle 数据库文件类型全解

Oracle 数据库文件类型全解

适用版本:Oracle Database 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07


1. 概述

Oracle 数据库由多种物理文件组成,每类文件承担不同职责[1]:

文件类型必需作用多路复用
数据文件(Data File)存储表/索引数据
控制文件(Control File)物理结构元数据推荐
在线 Redo Log记录变更,用于恢复推荐
归档 Redo LogRedo Log 历史副本推荐
参数文件(PFILE/SPFILE)实例启动配置
密码文件(orapwd)SYSDBA 认证
警报日志(alert.log)诊断信息
跟踪文件(.trc)错误诊断

2. 数据文件(Data File)

2.1 作用

存储表、索引、Undo 等段数据,是数据库的主体[1]。

2.2 类型

类型说明
普通数据文件存储业务数据
临时数据文件临时段,排序/哈希用
Undo 数据文件Undo 段,事务回滚用

2.3 查看

-- 普通数据文件
SELECT file#, name, status, bytes/1024/1024 AS mb, 
       autoextensible, maxbytes/1024/1024 AS max_mb
FROM v$datafile;

-- 临时数据文件
SELECT file#, name, status, bytes/1024/1024 AS mb
FROM v$tempfile;

-- 文件头信息(含 SCN)
SELECT file#, name, checkpoint_change#, status 
FROM v$datafile_header;

2.4 自动扩展配置

-- 启用自动扩展
ALTER DATABASE DATAFILE '/u01/oradata/orcl/users01.dbf'
  AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED;

-- 关闭自动扩展
ALTER DATABASE DATAFILE '/u01/oradata/orcl/users01.dbf'
  AUTOEXTEND OFF;

-- 调整文件大小
ALTER DATABASE DATAFILE '/u01/oradata/orcl/users01.dbf'
  RESIZE 2G;

3. 控制文件(Control File)

3.1 作用

二进制文件,记录数据库物理结构元数据[2]:

  • 数据库名称与 DBID
  • 数据文件、Redo Log 文件位置
  • 数据库字符集
  • RMAN 备份信息
  • 检查点 SCN

3.2 多路复用

-- 查看当前控制文件
SELECT name, status FROM v$controlfile;

-- 查看参数
SHOW PARAMETER control_files;

-- 增加多路复用
ALTER SYSTEM SET control_files=(
  '/u01/oradata/orcl/control01.ctl',
  '/u02/oradata/orcl/control02.ctl',
  '/u03/oradata/orcl/control03.ctl'
) SCOPE=SPFILE;

-- 关闭数据库
SHUTDOWN IMMEDIATE;

-- 复制控制文件到新位置
! cp /u01/oradata/orcl/control01.ctl /u03/oradata/orcl/control03.ctl

-- 启动
STARTUP;

详细操作见:Oracle 控制文件深度解析


4. 在线 Redo Log

4.1 作用

记录所有数据变更,用于实例恢复和介质恢复。

4.2 结构

Redo Log Group 1: [member 1, member 2]   ← 多路复用
Redo Log Group 2: [member 1, member 2]
Redo Log Group 3: [member 1, member 2]

   循环使用

4.3 查看

SELECT group#, thread#, sequence#, bytes/1024/1024 AS mb, 
       members, status, archived
FROM v$log;

SELECT group#, member, status 
FROM v$logfile;

详细内容见:Oracle 重做日志 Redo Log 机制详解


5. 归档 Redo Log

5.1 作用

Redo Log 切换后的历史副本,用于:

  • 介质恢复
  • Data Guard 同步
  • LogMiner 分析

5.2 配置

-- 查看归档模式
ARCHIVE LOG LIST;
-- 或
SELECT log_mode FROM v$database;

-- 启用归档模式(需 MOUNT 状态)
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;

-- 配置归档目的地
ALTER SYSTEM SET log_archive_dest_1='LOCATION=/u02/archive' SCOPE=BOTH;
ALTER SYSTEM SET log_archive_format='%t_%s_%r.dbf' SCOPE=SPFILE;

详细内容见:Oracle 归档日志 Archive Log 与归档模式


6. 参数文件(PFILE/SPFILE)

6.1 作用

实例启动时读取,定义 SGA 大小、控制文件位置等关键参数。

6.2 查找顺序

1. spfile<SID>.ora    (首选)
2. spfile.ora
3. init<SID>.ora

详细内容见:Oracle 参数文件 PFILE 与 SPFILE 详解


7. 密码文件(orapwd)

7.1 作用

存储 SYSDBA/SYSOPER 用户密码,用于操作系统层认证之外的远程认证。

7.2 创建

# 创建密码文件
orapwd file=$ORACLE_HOME/dbs/orapworcl 
  password=****** 
  entries=10 
  format=12

# 参数说明:
# file: 文件路径
# password: ****** 密码
# entries: 允许的 SYSDBA 用户数
# format: 12(推荐,支持多租户)

7.3 查看

-- 查看密码文件中的用户
SELECT * FROM v$pwfile_users;

-- 查看密码文件位置(19c+)
SHOW PARAMETER remote_login_passwordfile;
-- NONE: 不使用密码文件
-- EXCLUSIVE: 私有使用(默认)
-- SHARED: 共享(RAC 多实例共用)

8. 警报日志(alert.log)

8.1 作用

记录数据库关键事件,是 DBA 排错的首要信息源。

8.2 位置

-- 查找警报日志位置
SHOW PARAMETER diagnostic_dest;
-- 警报日志路径:
-- $diagnostic_dest/diag/rdbms/<db_unique_name>/<sid>/trace/alert_<sid>.log

8.3 关键事件

警报日志记录:

  • 启动/关闭事件
  • 检查点信息
  • 日志切换
  • 错误(ORA- 错误)
  • 参数修改
  • 表空间/数据文件变更
  • RMAN 操作
# 监控警报日志
tail -f $ORACLE_BASE/diag/rdbms/orcl/orcl/trace/alert_orcl.log

# 提取关键错误
grep "ORA-" alert_orcl.log | tail -50

9. 跟踪文件(.trc)

9.1 作用

记录进程的详细诊断信息,用于深度排错。

9.2 类型

类型触发位置
后台进程跟踪自动trace 目录
服务器进程跟踪自动/手动trace 目录
用户跟踪ALTER SESSION SET SQL_TRACEtrace 目录

9.3 启用

-- 启用会话级 SQL 跟踪
ALTER SESSION SET SQL_TRACE=TRUE;
-- 或使用 DBMS_MONITOR
EXEC DBMS_MONITOR.SESSION_TRACE_ENABLE;

-- 查找跟踪文件
SELECT value FROM v$diag_info WHERE name='Default Trace File';

10. OMF(Oracle Managed Files)

10.1 概念

OMF 让 Oracle 自动管理数据文件、Redo Log、控制文件的命名和位置。

10.2 配置

-- 启用 OMF
ALTER SYSTEM SET db_create_file_dest='/u01/oradata' SCOPE=BOTH;
ALTER SYSTEM SET db_create_online_log_dest_1='/u01/oradata' SCOPE=BOTH;
ALTER SYSTEM SET db_create_online_log_dest_2='/u02/oradata' SCOPE=BOTH;
ALTER SYSTEM SET db_recovery_file_dest='/u03/fra' SCOPE=BOTH;
ALTER SYSTEM SET db_recovery_file_dest_size=20G SCOPE=BOTH;

-- 创建表空间(自动命名数据文件)
CREATE TABLESPACE omf_ts;

11. 其他文件

11.1 Block Change Tracking File

加速 RMAN 增量备份:

-- 启用
ALTER DATABASE ENABLE BLOCK CHANGE TRACKING 
  USING FILE '/u01/oradata/orcl/bct.ctf';

-- 查看
SELECT filename, status, bytes FROM v$block_change_tracking;

11.2 Flashback Log

Flashback Database 用的日志:

-- 启用 Flashback Database
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE FLASHBACK ON;
ALTER DATABASE OPEN;

-- 查看
SELECT flashback_on, flashback_size, retention_target
FROM v$database;

11.3 Wallet 文件

TDE 透明数据加密的钱包:

# 路径:$ORACLE_BASE/admin/<db>/wallet

12. 常见坑与排错

12.1 数据文件丢失

现象ORA-01157: cannot identify/lock data file

修复

-- 1. 查看丢失文件
SELECT file#, name, status FROM v$datafile;

-- 2. 离线丢失文件
ALTER DATABASE DATAFILE 5 OFFLINE DROP;

-- 3. 打开数据库
ALTER DATABASE OPEN;

-- 4. 从备份恢复
RMAN> RESTORE DATAFILE 5;
RMAN> RECOVER DATAFILE 5;

-- 5. 在线
ALTER DATABASE DATAFILE 5 ONLINE;

12.2 Redo Log 丢失

现象ORA-00312: online log 1 thread 1: '/u01/redo01.log'

修复

-- 如果是 INACTIVE 状态的 Redo Log
ALTER DATABASE CLEAR LOGFILE GROUP 1;

-- 如果是 ACTIVE 状态
ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 1;

12.3 密码文件丢失

修复

# 重新创建密码文件
orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID \
  password=****** entries=10 format=12

13. 最佳实践

  1. 控制文件多路复用:至少 3 份,分布在不同磁盘
  2. Redo Log 多路复用:每组至少 2 个 member
  3. 启用归档模式:保证可恢复性
  4. 使用 OMF:简化文件管理
  5. 定期备份 SPFILE 和控制文件:RMAN 自动备份
  6. 监控警报日志:定期检查 ORA- 错误
  7. 合理规划 FRA:闪回区大小要充足

14. 参考资料

[1] Oracle Database Concepts 19c, “Physical Database Structures” https://docs.oracle.com/en/database/oracle/oracle-database/19/cncpt/physical-database-structures.html

[2] Oracle Database Administrator’s Guide 19c, “Managing Control Files” https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/managing-control-files.html