Skip to content

Oracle 核心配置文件

Oracle 核心配置文件概述

Oracle数据库的核心配置文件是DBA日常运维工作中必须掌握的重要内容。这些文件控制着数据库的启动、运行、监听、安全等各个方面。了解和正确配置这些文件对于确保数据库的稳定运行、性能优化和安全管理至关重要。

Oracle的核心配置文件主要包括:

  1. 初始化参数文件
  2. 监听配置文件
  3. 密码文件
  4. 告警日志文件
  5. 跟踪文件
  6. 审计文件

初始化参数文件

初始化参数文件是Oracle数据库启动时读取的第一个配置文件,它定义了数据库实例的基本配置,包括内存分配、文件位置、日志配置等。

初始化参数文件的类型

Oracle数据库支持两种类型的初始化参数文件:

  1. 文本初始化参数文件(init.ora):传统的文本格式参数文件,需要手动编辑
  2. 服务器参数文件(spfile.ora):二进制格式参数文件,可以通过SQL命令动态修改

初始化参数文件的位置

  • init.ora:默认位置为 $ORACLE_HOME/dbs(Linux)或 %ORACLE_HOME%\database(Windows)
  • spfile.ora:默认位置为 $ORACLE_HOME/dbs(Linux)或 %ORACLE_HOME%\database(Windows)

初始化参数文件的命名规则

  • init.ora:命名格式为 init<sid>.ora,例如 initorcl.ora
  • spfile.ora:命名格式为 spfile<sid>.ora,例如 spfileorcl.ora

初始化参数文件示例

init.ora 示例

text
# Oracle Database Server Parameter File

# 基本配置
DB_NAME = orcl
DB_UNIQUE_NAME = orcl
INSTANCE_NAME = orcl

# 内存配置
MEMORY_TARGET = 8G
MEMORY_MAX_TARGET = 12G

# 控制文件配置
CONTROL_FILES = (/u01/app/oracle/oradata/orcl/control01.ctl, /u01/app/oracle/fast_recovery_area/orcl/control02.ctl)

# 日志配置
DB_BLOCK_SIZE = 8192
LOG_BUFFER = 33554432

# 进程配置
PROCESSES = 300
SESSIONS = 400

# 审计配置
AUDIT_TRAIL = db

# 字符集配置
NLS_LANGUAGE = AMERICAN
NLS_TERRITORY = AMERICA
NLS_CHARACTERSET = AL32UTF8
NLS_NCHAR_CHARACTERSET = AL16UTF16

spfile.ora 的创建和修改

spfile.ora 是二进制文件,不能直接编辑,需要通过SQL命令进行创建和修改。

sql
-- 从init.ora创建spfile
CREATE SPFILE FROM PFILE;

-- 从spfile创建init.ora
CREATE PFILE FROM SPFILE;

-- 修改spfile中的参数(需要数据库处于MOUNT或OPEN状态)
ALTER SYSTEM SET MEMORY_TARGET=8G SCOPE=SPFILE;
ALTER SYSTEM SET PROCESSES=300 SCOPE=BOTH;

初始化参数的作用域

  • SCOPE=SPFILE:只修改spfile,需要重启数据库才能生效
  • SCOPE=MEMORY:只修改内存中的参数,数据库重启后失效
  • SCOPE=BOTH:同时修改内存和spfile,立即生效且永久保存

常用初始化参数

参数名称描述建议值
MEMORY_TARGET自动内存管理的总内存大小根据服务器内存大小设置,建议为服务器内存的40%-70%
MEMORY_MAX_TARGET自动内存管理的最大内存大小大于等于MEMORY_TARGET
SGA_TARGETSGA的目标大小自动内存管理模式下不需要手动设置
PGA_AGGREGATE_TARGETPGA的目标大小自动内存管理模式下不需要手动设置
PROCESSES最大进程数根据实际需求设置,默认300
SESSIONS最大会话数通常为PROCESSES的1.1-1.5倍
DB_BLOCK_SIZE数据库块大小8K(OLTP系统),16K或32K(数据仓库)
CONTROL_FILES控制文件位置至少2个,分散存储在不同磁盘上
LOG_BUFFER日志缓冲区大小32M-128M
AUDIT_TRAIL审计配置db(数据库审计)或 none(禁用审计)
NLS_CHARACTERSET字符集AL32UTF8(推荐)

初始化参数文件的管理

  1. 查看当前使用的参数文件

    sql
    SHOW PARAMETER spfile;
  2. 查看参数值

    sql
    SHOW PARAMETER <parameter_name>;
  3. 修改参数

    sql
    ALTER SYSTEM SET <parameter_name>=<value> SCOPE=<scope>;

监听配置文件

监听配置文件用于配置Oracle Net Listener,它负责接收客户端的连接请求并将其转发给相应的数据库实例。

监听配置文件的类型

Oracle监听配置文件主要包括:

  1. listener.ora:监听器配置文件
  2. tnsnames.ora:客户端连接字符串配置文件
  3. sqlnet.ora:SQL*Net配置文件

监听配置文件的位置

默认位置为 $ORACLE_HOME/network/admin(Linux)或 %ORACLE_HOME%\network\admin(Windows)

listener.ora 配置

listener.ora 文件定义了监听器的基本配置,包括监听器名称、监听地址、监听端口、服务映射等。

listener.ora 示例

text
# listener.ora Network Configuration File: /u01/app/oracle/product/19.3.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.

LISTENER =  
  (DESCRIPTION_LIST =  
    (DESCRIPTION =  
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))  
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))  
    )  
  )

SID_LIST_LISTENER =  
  (SID_LIST =  
    (SID_DESC =  
      (GLOBAL_DBNAME = orcl)  
      (ORACLE_HOME = /u01/app/oracle/product/19.3.0/dbhome_1)  
      (SID_NAME = orcl)  
    )  
  )

ADR_BASE_LISTENER = /u01/app/oracle

tnsnames.ora 配置

tnsnames.ora 文件定义了客户端连接到数据库的连接字符串,包括服务名、主机名、端口号等。

tnsnames.ora 示例

text
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/19.3.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

ORCL =  
  (DESCRIPTION =  
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))  
    (CONNECT_DATA =  
      (SERVER = DEDICATED)  
      (SERVICE_NAME = orcl)  
    )  
  )

ORCL_PDB =  
  (DESCRIPTION =  
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))  
    (CONNECT_DATA =  
      (SERVER = DEDICATED)  
      (SERVICE_NAME = orclpdb)  
    )  
  )

sqlnet.ora 配置

sqlnet.ora 文件定义了SQL*Net的基本配置,包括认证方式、超时设置、日志配置等。

sqlnet.ora 示例

text
# sqlnet.ora Network Configuration File: /u01/app/oracle/product/19.3.0/dbhome_1/network/admin/sqlnet.ora
# Generated by Oracle configuration tools.

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
SQLNET.AUTHENTICATION_SERVICES= (ALL)
SQLNET.ENCRYPTION_SERVER= REQUIRED
SQLNET.ENCRYPTION_TYPES_SERVER= (AES256)
SQLNET.CRYPTO_CHECKSUM_SERVER= REQUIRED
SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER= (SHA256)

监听配置文件的管理

  1. 启动监听器

    bash
    lsnrctl start [listener_name]
  2. 停止监听器

    bash
    lsnrctl stop [listener_name]
  3. 查看监听器状态

    bash
    lsnrctl status [listener_name]
  4. 重新加载监听器配置

    bash
    lsnrctl reload [listener_name]

密码文件

密码文件用于存储Oracle数据库的SYS和SYSTEM等特权用户的密码,以及其他具有SYSDBA或SYSOPER权限的用户信息。

密码文件的作用

密码文件的主要作用是:

  1. 允许远程用户以SYSDBA或SYSOPER权限连接到数据库
  2. 允许在数据库未启动时以SYSDBA权限连接到实例
  3. 控制哪些用户可以以特权身份连接到数据库

密码文件的位置

  • Linux:$ORACLE_HOME/dbs/orapw<sid>
  • Windows:%ORACLE_HOME%\database\PWD<sid>.ora

密码文件的创建和管理

  1. 创建密码文件

    bash
    orapwd file=$ORACLE_HOME/dbs/orapworcl password=sys_password entries=10
  2. 查看密码文件中的用户

    sql
    SELECT * FROM V$PWFILE_USERS;
  3. 授予用户SYSDBA权限

    sql
    GRANT SYSDBA TO <username>;
  4. 撤销用户SYSDBA权限

    sql
    REVOKE SYSDBA FROM <username>;

密码文件的最佳实践

  1. 使用强密码保护密码文件
  2. 定期更换密码文件中的密码
  3. 限制具有SYSDBA或SYSOPER权限的用户数量
  4. 确保密码文件的权限设置正确(Linux下为600)

告警日志文件

告警日志文件是Oracle数据库的重要日志文件,它记录了数据库的启动、关闭、错误信息、警告信息、DDL操作等。

告警日志文件的作用

告警日志文件的主要作用是:

  1. 记录数据库的启动和关闭过程
  2. 记录数据库的错误和警告信息
  3. 记录DDL操作(如创建表空间、用户等)
  4. 记录数据库参数的修改
  5. 记录数据库的备份和恢复操作

告警日志文件的位置

Oracle 11g及以后版本,告警日志文件的位置由DIAGNOSTIC_DEST参数控制,默认路径为:

  • Linux:$ORACLE_BASE/diag/rdbms/<db_unique_name>/<instance_name>/alert
  • Windows:%ORACLE_BASE%\diag\rdbms\<db_unique_name>\<instance_name>\alert

告警日志文件的命名

告警日志文件的命名格式为 log.xml(XML格式)和 alert_<instance_name>.log(文本格式)。

告警日志文件的管理

  1. 查看告警日志文件的位置

    sql
    SHOW PARAMETER DIAGNOSTIC_DEST;
    SELECT value FROM V$DIAG_INFO WHERE name='Diag Alert';
  2. 查看告警日志内容

    bash
    tail -f $ORACLE_BASE/diag/rdbms/orcl/orcl/alert/alert_orcl.log
  3. 清理告警日志文件

    • Oracle会自动管理告警日志文件,旧的日志会被压缩和归档
    • 可以通过ADRCI工具管理告警日志:
      bash
      adrci
      ADRCI> set homepath diag/rdbms/orcl/orcl
      ADRCI> purge -age 7200 -type alert

跟踪文件

跟踪文件是Oracle数据库生成的详细日志文件,用于记录数据库进程的执行情况、错误信息、SQL执行计划等。

跟踪文件的类型

Oracle的跟踪文件主要包括:

  1. 后台进程跟踪文件:记录后台进程的执行情况和错误信息
  2. 服务器进程跟踪文件:记录用户会话的执行情况和错误信息
  3. SQL跟踪文件:记录SQL语句的执行计划、绑定变量、执行时间等
  4. RMAN跟踪文件:记录RMAN备份和恢复操作的详细信息

跟踪文件的位置

跟踪文件的位置与告警日志文件相同,默认路径为:

  • Linux:$ORACLE_BASE/diag/rdbms/<db_unique_name>/<instance_name>/trace
  • Windows:%ORACLE_BASE%\diag\rdbms\<db_unique_name>\<instance_name>\trace

跟踪文件的命名

跟踪文件的命名格式为:

  • 后台进程:<instance_name>_<process_name>_<pid>.trc
  • 服务器进程:<instance_name>_ora_<pid>.trc
  • SQL跟踪:<instance_name>_ora_<pid>.trc
  • RMAN跟踪:<instance_name>_rman_<pid>.trc

跟踪文件的管理

  1. 启用SQL跟踪

    sql
    -- 启用当前会话的SQL跟踪
    ALTER SESSION SET SQL_TRACE=TRUE;
    
    -- 启用特定会话的SQL跟踪
    EXEC DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION(<sid>, <serial#>, TRUE);
    
    -- 使用10046事件获取更详细的跟踪信息
    ALTER SESSION SET EVENTS '10046 trace name context forever, level 12';
  2. 生成执行计划

    sql
    EXPLAIN PLAN FOR SELECT * FROM employees WHERE department_id=10;
    SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY());
  3. 使用TKPROF工具分析跟踪文件

    bash
    tkprof <trace_file>.trc <output_file>.txt explain=sys/sys_password sys=no sort=exeela,fchela
  4. 清理跟踪文件

    bash
    adrci
    ADRCI> set homepath diag/rdbms/orcl/orcl
    ADRCI> purge -age 7200 -type trace

审计文件

审计文件用于记录Oracle数据库的审计信息,包括用户登录、权限变更、数据访问等操作。

审计文件的作用

审计文件的主要作用是:

  1. 记录用户的登录和注销信息
  2. 记录用户的权限变更
  3. 记录用户对敏感数据的访问
  4. 记录DDL和DML操作
  5. 帮助进行安全审计和合规检查

审计文件的类型

Oracle支持两种类型的审计文件:

  1. 数据库审计:审计信息存储在数据库的审计表中
  2. 文件审计:审计信息存储在操作系统的审计文件中

审计文件的位置

  • 数据库审计:存储在SYS.AUD$表中
  • 文件审计:
    • Linux:$ORACLE_BASE/diag/rdbms/<db_unique_name>/<instance_name>/audit
    • Windows:%ORACLE_BASE%\diag\rdbms\<db_unique_name>\<instance_name>\audit

审计文件的配置

  1. 启用审计

    sql
    -- 启用数据库审计
    ALTER SYSTEM SET AUDIT_TRAIL=DB SCOPE=SPFILE;
    
    -- 启用文件审计
    ALTER SYSTEM SET AUDIT_TRAIL=OS SCOPE=SPFILE;
    
    -- 启用混合审计
    ALTER SYSTEM SET AUDIT_TRAIL=DB,EXTENDED SCOPE=SPFILE;
  2. 配置审计策略

    sql
    -- 审计SYSDBA权限的使用
    AUDIT SESSION BY SYS BY ACCESS;
    
    -- 审计特定用户的所有操作
    AUDIT ALL BY <username> BY ACCESS;
    
    -- 审计表的DML操作
    AUDIT SELECT, INSERT, UPDATE, DELETE ON <table_name> BY ACCESS;
  3. 查看审计信息

    sql
    -- 查看数据库审计信息
    SELECT * FROM SYS.AUD$ WHERE USERNAME='<username>';
    
    -- 查看审计日志视图
    SELECT * FROM DBA_AUDIT_TRAIL WHERE USERNAME='<username>';

审计文件的管理

  1. 清理数据库审计表

    sql
    -- 创建审计表的副本(可选)
    CREATE TABLE SYS.AUD$_BACKUP AS SELECT * FROM SYS.AUD$;
    
    -- 清理审计表
    DELETE FROM SYS.AUD$ WHERE TIMESTAMP# < SYSDATE - 30;
    COMMIT;
    
    -- 或使用TRUNCATE命令(谨慎使用)
    TRUNCATE TABLE SYS.AUD$;
  2. 清理文件审计

    bash
    # 手动清理旧的审计文件
    find $ORACLE_BASE/diag/rdbms/orcl/orcl/audit -name "*.aud" -mtime +30 -delete

核心配置文件的版本差异

不同版本的Oracle数据库在核心配置文件方面存在一些差异,主要包括:

1. 初始化参数文件

  • Oracle 9i及以前:只支持init.ora文本参数文件
  • Oracle 10g及以后:引入了spfile.ora二进制参数文件,支持动态参数修改
  • Oracle 11g及以后:增强了自动内存管理功能,引入了MEMORY_TARGET参数
  • Oracle 12c及以后:引入了多租户架构,增加了CDB和PDB相关的初始化参数

2. 监听配置文件

  • Oracle 10g及以前:使用传统的监听器配置
  • Oracle 11g及以后:引入了SCAN监听器,支持RAC集群的负载均衡
  • Oracle 12c及以后:增强了监听器的安全功能,支持SSL/TLS配置

3. 告警日志和跟踪文件

  • Oracle 10g及以前:告警日志和跟踪文件存储在$ORACLE_HOME/admin/<db_name>/bdump目录
  • Oracle 11g及以后:引入了ADR(自动诊断仓库),统一管理告警日志和跟踪文件

4. 审计文件

  • Oracle 11g及以前:主要使用传统审计
  • Oracle 12c及以后:引入了统一审计功能,增强了审计的安全性和灵活性

核心配置文件的最佳实践

  1. 定期备份配置文件:定期备份所有核心配置文件,以便在出现问题时快速恢复
  2. 使用版本控制:对配置文件进行版本控制,记录每次修改的内容和原因
  3. 遵循最小权限原则:确保配置文件的权限设置正确,防止未授权访问
  4. 定期检查配置文件:定期检查配置文件的内容,确保配置符合最佳实践
  5. 文档化配置变更:详细记录每次配置变更的原因、内容和影响
  6. 测试配置变更:在测试环境中充分测试配置变更,然后再应用到生产环境
  7. 使用自动化工具:使用自动化工具管理配置文件,减少人为错误

常见问题(FAQ)

Q1: 如何确定数据库使用的是init.ora还是spfile.ora?

A: 可以通过以下SQL命令查看:

sql
SHOW PARAMETER spfile;

如果结果显示spfile的值为NULL,则使用的是init.ora;否则使用的是spfile.ora。

Q2: 如何在数据库启动时指定使用特定的初始化参数文件?

A: 可以使用以下命令指定:

bash
# 使用指定的init.ora文件启动
startup pfile='$ORACLE_HOME/dbs/initorcl.ora';

# 使用指定的spfile文件启动
startup spfile='$ORACLE_HOME/dbs/spfileorcl.ora';

Q3: 监听器启动失败,如何排查问题?

A: 可以通过以下步骤排查:

  1. 检查listener.ora文件的配置是否正确
  2. 检查端口是否被占用
  3. 查看监听日志文件($ORACLE_HOME/network/log/listener.log)
  4. 使用lsnrctl status命令查看监听器状态
  5. 使用lsnrctl trace命令开启监听跟踪,查看详细的错误信息

Q4: 如何修改SYS用户的密码?

A: 可以通过以下方法修改:

  1. 使用sqlplus修改

    sql
    ALTER USER SYS IDENTIFIED BY new_password;
  2. 使用orapwd工具重新创建密码文件

    bash
    orapwd file=$ORACLE_HOME/dbs/orapworcl password=new_password force=y;

Q5: 告警日志文件增长过快,如何处理?

A: 可以通过以下方法处理:

  1. 检查数据库中是否存在大量的错误或警告信息
  2. 优化数据库性能,减少错误和警告的产生
  3. 配置ADRCI自动清理旧的告警日志
  4. 定期手动清理旧的告警日志文件

Q6: 如何启用和禁用SQL跟踪?

A: 可以通过以下命令启用和禁用:

sql
-- 启用SQL跟踪
ALTER SESSION SET SQL_TRACE=TRUE;

-- 禁用SQL跟踪
ALTER SESSION SET SQL_TRACE=FALSE;

-- 启用10046事件获取更详细的跟踪信息
ALTER SESSION SET EVENTS '10046 trace name context forever, level 12';

-- 禁用10046事件
ALTER SESSION SET EVENTS '10046 trace name context off';

Q7: 如何查看当前会话的跟踪文件位置?

A: 可以通过以下SQL命令查看:

sql
SELECT value FROM V$DIAG_INFO WHERE name='Default Trace File';

Q8: 如何配置审计以满足合规要求?

A: 可以通过以下步骤配置:

  1. 根据合规要求确定需要审计的事件和对象
  2. 启用适当的审计类型(DB或OS)
  3. 配置详细的审计策略
  4. 定期查看和分析审计信息
  5. 定期清理旧的审计记录
  6. 确保审计数据的安全性和完整性

总结

Oracle数据库的核心配置文件是DBA日常运维工作中必须掌握的重要内容。本文详细介绍了初始化参数文件、监听配置文件、密码文件、告警日志文件、跟踪文件和审计文件的作用、位置、配置示例、最佳实践和常见问题。

通过合理配置和管理这些核心配置文件,可以确保Oracle数据库的稳定运行、性能优化和安全管理。DBA应该定期检查和维护这些配置文件,确保它们符合最佳实践,并能够快速响应和解决可能出现的问题。