外观
Oracle 核心配置文件
Oracle 核心配置文件概述
Oracle数据库的核心配置文件是DBA日常运维工作中必须掌握的重要内容。这些文件控制着数据库的启动、运行、监听、安全等各个方面。了解和正确配置这些文件对于确保数据库的稳定运行、性能优化和安全管理至关重要。
Oracle的核心配置文件主要包括:
- 初始化参数文件
- 监听配置文件
- 密码文件
- 告警日志文件
- 跟踪文件
- 审计文件
初始化参数文件
初始化参数文件是Oracle数据库启动时读取的第一个配置文件,它定义了数据库实例的基本配置,包括内存分配、文件位置、日志配置等。
初始化参数文件的类型
Oracle数据库支持两种类型的初始化参数文件:
- 文本初始化参数文件(init.ora):传统的文本格式参数文件,需要手动编辑
- 服务器参数文件(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 = AL16UTF16spfile.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_TARGET | SGA的目标大小 | 自动内存管理模式下不需要手动设置 |
| PGA_AGGREGATE_TARGET | PGA的目标大小 | 自动内存管理模式下不需要手动设置 |
| 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(推荐) |
初始化参数文件的管理
查看当前使用的参数文件:
sqlSHOW PARAMETER spfile;查看参数值:
sqlSHOW PARAMETER <parameter_name>;修改参数:
sqlALTER SYSTEM SET <parameter_name>=<value> SCOPE=<scope>;
监听配置文件
监听配置文件用于配置Oracle Net Listener,它负责接收客户端的连接请求并将其转发给相应的数据库实例。
监听配置文件的类型
Oracle监听配置文件主要包括:
- listener.ora:监听器配置文件
- tnsnames.ora:客户端连接字符串配置文件
- 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/oracletnsnames.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)监听配置文件的管理
启动监听器:
bashlsnrctl start [listener_name]停止监听器:
bashlsnrctl stop [listener_name]查看监听器状态:
bashlsnrctl status [listener_name]重新加载监听器配置:
bashlsnrctl reload [listener_name]
密码文件
密码文件用于存储Oracle数据库的SYS和SYSTEM等特权用户的密码,以及其他具有SYSDBA或SYSOPER权限的用户信息。
密码文件的作用
密码文件的主要作用是:
- 允许远程用户以SYSDBA或SYSOPER权限连接到数据库
- 允许在数据库未启动时以SYSDBA权限连接到实例
- 控制哪些用户可以以特权身份连接到数据库
密码文件的位置
- Linux:
$ORACLE_HOME/dbs/orapw<sid> - Windows:
%ORACLE_HOME%\database\PWD<sid>.ora
密码文件的创建和管理
创建密码文件:
bashorapwd file=$ORACLE_HOME/dbs/orapworcl password=sys_password entries=10查看密码文件中的用户:
sqlSELECT * FROM V$PWFILE_USERS;授予用户SYSDBA权限:
sqlGRANT SYSDBA TO <username>;撤销用户SYSDBA权限:
sqlREVOKE SYSDBA FROM <username>;
密码文件的最佳实践
- 使用强密码保护密码文件
- 定期更换密码文件中的密码
- 限制具有SYSDBA或SYSOPER权限的用户数量
- 确保密码文件的权限设置正确(Linux下为600)
告警日志文件
告警日志文件是Oracle数据库的重要日志文件,它记录了数据库的启动、关闭、错误信息、警告信息、DDL操作等。
告警日志文件的作用
告警日志文件的主要作用是:
- 记录数据库的启动和关闭过程
- 记录数据库的错误和警告信息
- 记录DDL操作(如创建表空间、用户等)
- 记录数据库参数的修改
- 记录数据库的备份和恢复操作
告警日志文件的位置
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(文本格式)。
告警日志文件的管理
查看告警日志文件的位置:
sqlSHOW PARAMETER DIAGNOSTIC_DEST; SELECT value FROM V$DIAG_INFO WHERE name='Diag Alert';查看告警日志内容:
bashtail -f $ORACLE_BASE/diag/rdbms/orcl/orcl/alert/alert_orcl.log清理告警日志文件:
- Oracle会自动管理告警日志文件,旧的日志会被压缩和归档
- 可以通过ADRCI工具管理告警日志:bash
adrci ADRCI> set homepath diag/rdbms/orcl/orcl ADRCI> purge -age 7200 -type alert
跟踪文件
跟踪文件是Oracle数据库生成的详细日志文件,用于记录数据库进程的执行情况、错误信息、SQL执行计划等。
跟踪文件的类型
Oracle的跟踪文件主要包括:
- 后台进程跟踪文件:记录后台进程的执行情况和错误信息
- 服务器进程跟踪文件:记录用户会话的执行情况和错误信息
- SQL跟踪文件:记录SQL语句的执行计划、绑定变量、执行时间等
- 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
跟踪文件的管理
启用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';生成执行计划:
sqlEXPLAIN PLAN FOR SELECT * FROM employees WHERE department_id=10; SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY());使用TKPROF工具分析跟踪文件:
bashtkprof <trace_file>.trc <output_file>.txt explain=sys/sys_password sys=no sort=exeela,fchela清理跟踪文件:
bashadrci ADRCI> set homepath diag/rdbms/orcl/orcl ADRCI> purge -age 7200 -type trace
审计文件
审计文件用于记录Oracle数据库的审计信息,包括用户登录、权限变更、数据访问等操作。
审计文件的作用
审计文件的主要作用是:
- 记录用户的登录和注销信息
- 记录用户的权限变更
- 记录用户对敏感数据的访问
- 记录DDL和DML操作
- 帮助进行安全审计和合规检查
审计文件的类型
Oracle支持两种类型的审计文件:
- 数据库审计:审计信息存储在数据库的审计表中
- 文件审计:审计信息存储在操作系统的审计文件中
审计文件的位置
- 数据库审计:存储在SYS.AUD$表中
- 文件审计:
- Linux:
$ORACLE_BASE/diag/rdbms/<db_unique_name>/<instance_name>/audit - Windows:
%ORACLE_BASE%\diag\rdbms\<db_unique_name>\<instance_name>\audit
- Linux:
审计文件的配置
启用审计:
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;配置审计策略:
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;查看审计信息:
sql-- 查看数据库审计信息 SELECT * FROM SYS.AUD$ WHERE USERNAME='<username>'; -- 查看审计日志视图 SELECT * FROM DBA_AUDIT_TRAIL WHERE USERNAME='<username>';
审计文件的管理
清理数据库审计表:
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$;清理文件审计:
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及以后:引入了统一审计功能,增强了审计的安全性和灵活性
核心配置文件的最佳实践
- 定期备份配置文件:定期备份所有核心配置文件,以便在出现问题时快速恢复
- 使用版本控制:对配置文件进行版本控制,记录每次修改的内容和原因
- 遵循最小权限原则:确保配置文件的权限设置正确,防止未授权访问
- 定期检查配置文件:定期检查配置文件的内容,确保配置符合最佳实践
- 文档化配置变更:详细记录每次配置变更的原因、内容和影响
- 测试配置变更:在测试环境中充分测试配置变更,然后再应用到生产环境
- 使用自动化工具:使用自动化工具管理配置文件,减少人为错误
常见问题(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: 可以通过以下步骤排查:
- 检查listener.ora文件的配置是否正确
- 检查端口是否被占用
- 查看监听日志文件($ORACLE_HOME/network/log/listener.log)
- 使用lsnrctl status命令查看监听器状态
- 使用lsnrctl trace命令开启监听跟踪,查看详细的错误信息
Q4: 如何修改SYS用户的密码?
A: 可以通过以下方法修改:
使用sqlplus修改:
sqlALTER USER SYS IDENTIFIED BY new_password;使用orapwd工具重新创建密码文件:
bashorapwd file=$ORACLE_HOME/dbs/orapworcl password=new_password force=y;
Q5: 告警日志文件增长过快,如何处理?
A: 可以通过以下方法处理:
- 检查数据库中是否存在大量的错误或警告信息
- 优化数据库性能,减少错误和警告的产生
- 配置ADRCI自动清理旧的告警日志
- 定期手动清理旧的告警日志文件
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: 可以通过以下步骤配置:
- 根据合规要求确定需要审计的事件和对象
- 启用适当的审计类型(DB或OS)
- 配置详细的审计策略
- 定期查看和分析审计信息
- 定期清理旧的审计记录
- 确保审计数据的安全性和完整性
总结
Oracle数据库的核心配置文件是DBA日常运维工作中必须掌握的重要内容。本文详细介绍了初始化参数文件、监听配置文件、密码文件、告警日志文件、跟踪文件和审计文件的作用、位置、配置示例、最佳实践和常见问题。
通过合理配置和管理这些核心配置文件,可以确保Oracle数据库的稳定运行、性能优化和安全管理。DBA应该定期检查和维护这些配置文件,确保它们符合最佳实践,并能够快速响应和解决可能出现的问题。
