1. 首页 > Oracle教程 > 正文

Oracle教程FG009-Oracle数据库参数管理

1.2 Oracle 参数类型

Oracle参数主要分为以下类型:

  • 静态参数:修改后需要重启数据库才能生效
  • 动态参数:可以在数据库运行时修改,立即生效
  • 派生参数:由其他参数计算得出的参数值
  • 操作系统相关参数:与操作系统相关的参数

1.3 Oracle 参数文件类型

Oracle参数文件有两种类型:

  • PFILE(Parameter File):文本格式的参数文件,可以使用文本编辑器编辑
  • SPFILE(Server Parameter File):二进制格式的参数文件,只能通过SQL命令修改
风哥提示:SPFILE是Oracle推荐使用的参数文件格式,它具有自我验证、支持动态修改等优点,生产环境建议使用SPFILE。

Part02-生产环境规划与建议

2.1 Oracle数据库参数规划

参数规划要点:

# 内存参数规划
– SGA_TARGET/SGA_MAX_SIZE:根据物理内存和数据库负载规划
– PGA_AGGREGATE_TARGET:根据并发连接数和操作类型规划
– MEMORY_TARGET/MEMORY_MAX_SIZE:使用自动内存管理时设置

# 进程参数规划
– PROCESSES:最大并发进程数
– SESSIONS:最大并发会话数(通常是PROCESSES的1.1倍+5)
– TRANSACTIONS:最大并发事务数

# 日志参数规划
– LOG_BUFFER:重做日志缓冲区大小
– LOG_FILES:最大日志文件数
– FAST_START_MTTR_TARGET:实例恢复时间目标

# 优化器参数规划
– OPTIMIZER_MODE:优化器模式(ALL_ROWS, FIRST_ROWS等)
– OPTIMIZER_FEATURES_ENABLE:优化器特性版本
– CURSOR_SHARING:游标共享设置

2.2 Oracle数据库参数备份策略

参数备份建议:

# 备份频率
– 每次修改参数前:立即备份
– 每日:自动备份
– 每周:完整备份
– 每月:归档备份

# 备份内容
– 当前SPFILE文件
– 当前PFILE文件(从SPFILE生成)
– 参数变更记录
– 数据库版本信息

# 备份存储
– 本地备份:保留7天
– 远程备份:保留30天
– 归档备份:保留1年

# 备份验证
– 定期验证备份文件的完整性
– 测试从备份恢复参数的流程

2.3 Oracle数据库参数变更管理

参数变更管理流程:

  • 变更评估:评估变更的影响和风险
  • 测试验证:在测试环境中验证变更
  • 变更审批:获得变更审批
  • 执行变更:在维护窗口执行变更
  • 验证效果:验证变更是否达到预期效果
  • 文档记录:记录变更详情和结果
生产环境建议:参数变更应该有完整的流程控制,避免随意修改参数导致的问题。重要参数的变更应该在测试环境充分验证后再在生产环境实施。

Part03-生产环境项目实施方案

3.1 Oracle数据库查看参数

3.1.1 使用SHOW PARAMETER查看参数

# 查看所有参数
SQL> show parameter;# 查看包含特定字符串的参数
SQL> show parameter sga;NAME TYPE VALUE
———————————— ———– ——————————
sga_max_size big integer 4G
sga_target big integer 4G

# 查看特定参数
SQL> show parameter processes;NAME TYPE VALUE
———————————— ———– ——————————
processes integer 300

# 查看内存相关参数
SQL> show parameter memory;NAME TYPE VALUE
———————————— ———– ——————————
hi_shared_memory_address integer 0
memory_max_target big integer 0
memory_target big integer 0
shared_memory_address integer 0

3.1.2 查询V$PARAMETER视图

# 查看当前会话生效的参数
SQL> select name, value, isdefault, isses_modifiable, issys_modifiable
from v$parameter
where name like ‘%sga%’
order by name;NAME VALUE ISDEFAULT ISSES ISSYS_MOD
——————– ———- ——— —– ———
sga_max_size 4294967296 FALSE FALSE FALSE
sga_target 4294967296 FALSE FALSE IMMEDIATE

# 查看SPFILE中的参数
SQL> select name, value, issys_modifiable
from v$spparameter
where value is not null
order by name;NAME VALUE ISSYS_MOD
————————- ———- ———
audit_file_dest /oracle/a FALSE
compatible 19.0.0 FALSE
control_files /oracle/a FALSE
db_block_size 8192 FALSE
db_name fgedudb FALSE
processes 300 FALSE
sga_max_size 4G FALSE
sga_target 4G IMMEDIATE

# 查看参数修改历史
SQL> select name, value, update_comment, update_time
from v$parameter
where update_comment is not null;

3.2 Oracle数据库修改参数

3.2.1 修改动态参数

# 修改当前实例的参数(立即生效)
SQL> alter system set sga_target = 4G scope=memory;System altered.

# 修改SPFILE中的参数(需要重启生效)
SQL> alter system set sga_max_size = 6G scope=spfile;System altered.

# 同时修改内存和SPFILE中的参数
SQL> alter system set sga_target = 4G scope=both;System altered.

# 验证参数修改
SQL> show parameter sga;NAME TYPE VALUE
———————————— ———– ——————————
sga_max_size big integer 4G
sga_target big integer 4G

# 为特定会话修改参数
SQL> alter session set nls_date_format = ‘YYYY-MM-DD HH24:MI:SS’;Session altered.

# 验证会话参数
SQL> select sysdate from dual;SYSDATE
——————-
2026-03-31 23:00:00

3.2.2 修改静态参数

# 修改静态参数(只能修改SPFILE)
SQL> alter system set processes = 400 scope=spfile;System altered.

# 如果没有SPFILE,需要创建PFILE并修改
SQL> create pfile=’/tmp/initfgedudb.ora’ from spfile;File created.

# 编辑PFILE文件
# vi /tmp/initfgedudb.ora
# 修改processes参数
processes=400

# 从PFILE重新创建SPFILE
SQL> create spfile from pfile=’/tmp/initfgedudb.ora’;File created.

# 重启数据库使静态参数生效
SQL> shutdown immediate;Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> startup;ORACLE instance started.

Total System Global Area 4294967296 bytes
Fixed Size 8797296 bytes
Variable Size 2516584432 bytes
Database Buffers 1761607680 bytes
Redo Buffers 7977984 bytes
Database mounted.
Database opened.

# 验证参数修改
SQL> show parameter processes;NAME TYPE VALUE
———————————— ———– ——————————
processes integer 400

3.3 Oracle数据库参数文件管理

3.3.1 创建和备份参数文件

# 从SPFILE创建PFILE
SQL> create pfile=’/backup/initfgedudb_20260331.ora’ from spfile;File created.

# 验证PFILE文件
$ cat /backup/initfgedudb_20260331.ora

fgedudb.__data_transfer_cache_size=0
fgedudb.__db_cache_size=1761607680
fgedudb.__inmemory_extension_size=0
fgedudb.__java_pool_size=16777216
fgedudb.__large_pool_size=33554432
fgedudb.__oracle_base=’/oracle/app/oracle’
fgedudb.__pga_aggregate_target=1610612736
fgedudb.__sga_target=2684354560
fgedudb.__shared_io_pool_size=117440512
fgedudb.__shared_pool_size=671088640
fgedudb.__streams_pool_size=0
*.audit_file_dest=’/oracle/app/oracle/admin/fgedudb/adump’
*.audit_trail=’db’
*.compatible=’19.0.0′
*.control_files=’/oracle/app/oracle/oradata/fgedudb/control01.ctl’,’/oracle/app/oracle/fast_recovery_area/fgedudb/control02.ctl’
*.db_block_size=8192
*.db_name=’fgedudb’
*.db_recovery_file_dest=’/oracle/app/oracle/fast_recovery_area’
*.db_recovery_file_dest_size=10G
*.diagnostic_dest=’/oracle/app/oracle’
*.dispatchers='(PROTOCOL=TCP) (SERVICE=fgedudbXDB)’
*.log_buffer=7977984
*.memory_target=0
*.open_cursors=300
*.processes=300
*.remote_login_passwordfile=’EXCLUSIVE’
*.sga_max_size=4G
*.sga_target=4G
*.undo_tablespace=’UNDOTBS1′

# 从PFILE创建SPFILE
SQL> create spfile from pfile=’/backup/initfgedudb_20260331.ora’;File created.

# 查看当前使用的参数文件
SQL> show parameter spfile;NAME TYPE VALUE
———————————— ———– ——————————
spfile string /oracle/app/oracle/product/19c/db_1/dbs/spfilefgedudb.ora

3.3.2 参数文件备份脚本

#!/bin/bash
# parameter_backup.sh – 参数文件备份脚本
# from:www.itpux.com.qq113257174.wx:itpux-com
# web `http://www.fgedu.net.cn`

ORACLE_HOME=/oracle/app/oracle/product/19c/db_1
ORACLE_SID=fgedudb
BACKUP_DIR=/backup/parameter_backup
DATE=$(date +%Y%m%d_%H%M%S)
LOG_FILE=$BACKUP_DIR/parameter_backup_$DATE.log

# 创建备份目录
mkdir -p $BACKUP_DIR

echo “========================================” > $LOG_FILE
echo “Oracle Parameter Backup” >> $LOG_FILE
echo “Date: $(date)” >> $LOG_FILE
echo “Database: $ORACLE_SID” >> $LOG_FILE
echo “========================================” >> $LOG_FILE
echo “” >> $LOG_FILE

# 1. 生成PFILE备份
echo “1. Creating PFILE backup” >> $LOG_FILE
echo “————————-” >> $LOG_FILE
$ORACLE_HOME/bin/sqlplus -s / as sysdba << EOF >> $LOG_FILE 2>&1
create pfile=’$BACKUP_DIR/init${ORACLE_SID}_$DATE.ora’ from spfile;exit;EOF

if [ $? -eq 0 ]; then
echo “PFILE backup created successfully” >> $LOG_FILE
else
echo “ERROR: PFILE backup failed” >> $LOG_FILE
fi
echo “” >> $LOG_FILE

# 2. 备份SPFILE文件
echo “2. Backing up SPFILE” >> $LOG_FILE
echo “———————” >> $LOG_FILE
SPFILE=$($ORACLE_HOME/bin/sqlplus -s / as sysdba << EOF set heading off;set feedback off;select value from v\\$parameter where name='spfile';exit;EOF ) if [ -n "$SPFILE" ] && [ -f "$SPFILE" ]; then cp $SPFILE $BACKUP_DIR/spfile${ORACLE_SID}_$DATE.ora echo "SPFILE backed up: $SPFILE" >> $LOG_FILE
else
echo “WARNING: SPFILE not found or not in use” >> $LOG_FILE
fi
echo “” >> $LOG_FILE

# 3. 导出当前参数
echo “3. Exporting current parameters” >> $LOG_FILE
echo “——————————-” >> $LOG_FILE
$ORACLE_HOME/bin/sqlplus -s / as sysdba << EOF >> $BACKUP_DIR/parameters_$DATE.txt
set pagesize 0
set linesize 200
set heading off
set feedback off
select name || ‘=’ || value from v\\$parameter where value is not null order by name;exit;EOF
echo “Parameters exported” >> $LOG_FILE
echo “” >> $LOG_FILE

# 4. 清理旧备份(保留7天)
echo “4. Cleaning up old backups” >> $LOG_FILE
echo “—————————-” >> $LOG_FILE
find $BACKUP_DIR -name “init${ORACLE_SID}_*.ora” -mtime +7 -delete
find $BACKUP_DIR -name “spfile${ORACLE_SID}_*.ora” -mtime +7 -delete
find $BACKUP_DIR -name “parameters_*.txt” -mtime +7 -delete
find $BACKUP_DIR -name “parameter_backup_*.log” -mtime +7 -delete
echo “Old backups cleaned up” >> $LOG_FILE
echo “” >> $LOG_FILE

echo “========================================” >> $LOG_FILE
echo “Backup Completed” >> $LOG_FILE
echo “========================================” >> $LOG_FILE

echo “Parameter backup completed”
cat $LOG_FILE

Part04-生产案例与实战讲解

4.1 Oracle数据库重要参数详解

4.1.1 内存参数详解

# 场景:调整SGA大小

# 1. 查看当前内存配置
SQL> show parameter sga;NAME TYPE VALUE
———————————— ———– ——————————
sga_max_size big integer 4G
sga_target big integer 4G

SQL> show parameter pga;NAME TYPE VALUE
———————————— ———– ——————————
pga_aggregate_target big integer 1G

# 2. 检查系统可用内存
$ free -h
total used free shared buff/cache available
Mem: 62G 8.0G 50G 8.5M 3.9G 53G
Swap: 32G 0B 32G

# 3. 修改SGA_TARGET(动态参数)
SQL> alter system set sga_target = 8G scope=both;System altered.

# 4. 修改SGA_MAX_SIZE(静态参数,需要重启)
SQL> alter system set sga_max_size = 8G scope=spfile;System altered.

# 5. 修改PGA_AGGREGATE_TARGET
SQL> alter system set pga_aggregate_target = 2G scope=both;System altered.

# 6. 重启数据库(如果修改了静态参数)
SQL> shutdown immediate;SQL> startup;# 7. 验证新的内存配置
SQL> show parameter sga;NAME TYPE VALUE
———————————— ———– ——————————
sga_max_size big integer 8G
sga_target big integer 8G

SQL> show parameter pga;NAME TYPE VALUE
———————————— ———– ——————————
pga_aggregate_target big integer 2G

4.1.2 进程与会话参数详解

# 场景:增加最大会话数

# 1. 查看当前配置
SQL> show parameter processes;NAME TYPE VALUE
———————————— ———– ——————————
processes integer 300

SQL> show parameter sessions;NAME TYPE VALUE
———————————— ———– ——————————
sessions integer 472

# 2. 查看当前使用情况
SQL> select count(*) from v$session;COUNT(*)
———-
200

SQL> select count(*) from v$process;COUNT(*)
———-
210

# 3. 修改PROCESSES参数(静态参数)
SQL> alter system set processes = 500 scope=spfile;System altered.

# 4. SESSIONS参数会自动计算,也可以手动设置
SQL> alter system set sessions = 772 scope=spfile;System altered.

# 5. 重启数据库
SQL> shutdown immediate;SQL> startup;# 6. 验证新配置
SQL> show parameter processes;NAME TYPE VALUE
———————————— ———– ——————————
processes integer 500

SQL> show parameter sessions;NAME TYPE VALUE
———————————— ———– ——————————
sessions integer 772

4.2 Oracle数据库参数调优场景

4.2.1 优化器参数调优

# 场景:SQL执行计划不稳定

# 1. 查看当前优化器配置
SQL> show parameter optimizer;NAME TYPE VALUE
———————————— ———– ——————————
optimizer_dynamic_sampling integer 2
optimizer_features_enable string 19.1.0
optimizer_index_caching integer 0
optimizer_index_cost_adj integer 100
optimizer_mode string ALL_ROWS
optimizer_use_invisible_indexes boolean FALSE
optimizer_use_pending_statistics boolean FALSE
optimizer_use_sql_plan_baselines boolean TRUE

# 2. 修改优化器模式为FIRST_ROWS(适合OLTP系统)
SQL> alter system set optimizer_mode = FIRST_ROWS scope=both;System altered.

# 3. 调整优化器索引成本调整参数
SQL> alter system set optimizer_index_cost_adj = 50 scope=both;System altered.

# 4. 调整优化器索引缓存参数
SQL> alter system set optimizer_index_caching = 90 scope=both;System altered.

# 5. 调整动态采样级别
SQL> alter system set optimizer_dynamic_sampling = 4 scope=both;System altered.

# 6. 验证参数修改
SQL> show parameter optimizer;NAME TYPE VALUE
———————————— ———– ——————————
optimizer_dynamic_sampling integer 4
optimizer_features_enable string 19.1.0
optimizer_index_caching integer 90
optimizer_index_cost_adj integer 50
optimizer_mode string FIRST_ROWS

4.3 Oracle数据库问题解决方案

4.3.1 参数文件损坏恢复

# 场景:SPFILE损坏,数据库无法启动

# 1. 尝试启动数据库,报错
SQL> startup;ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file ‘/oracle/app/oracle/product/19c/db_1/dbs/initfgedudb.ora’

# 2. 检查SPFILE文件
$ ls -l /oracle/app/oracle/product/19c/db_1/dbs/total 20
-rw-rw—- 1 oracle oinstall 1544 Mar 31 22:00 hc_fgedudb.dat
-rw-r–r– 1 oracle oinstall 3079 Feb 28 10:00 init.ora
-rw-r—– 1 oracle oinstall 0 Mar 31 23:00 spfilefgedudb.ora

# 3. 从备份恢复PFILE
$ cp /backup/parameter_backup/initfgedudb_20260330.ora /oracle/app/oracle/product/19c/db_1/dbs/initfgedudb.ora

# 4. 使用PFILE启动数据库
SQL> startup pfile=’/oracle/app/oracle/product/19c/db_1/dbs/initfgedudb.ora’;ORACLE instance started.

Total System Global Area 4294967296 bytes
Fixed Size 8797296 bytes
Variable Size 2516584432 bytes
Database Buffers 1761607680 bytes
Redo Buffers 7977984 bytes
Database mounted.
Database opened.

# 5. 从PFILE重新创建SPFILE
SQL> create spfile from pfile;File created.

# 6. 重启数据库,使用SPFILE
SQL> shutdown immediate;SQL> startup;# 7. 验证使用SPFILE
SQL> show parameter spfile;NAME TYPE VALUE
———————————— ———– ——————————
spfile string /oracle/app/oracle/product/19c/db_1/dbs/spfilefgedudb.ora

Part05-风哥经验总结与分享

5.1 Oracle数据库最佳实践

  • 使用SPFILE:生产环境建议使用SPFILE,便于管理
  • 定期备份:定期备份参数文件,特别是修改前
  • 变更流程:建立参数变更流程,避免随意修改
  • 测试验证:重要参数变更先在测试环境验证
  • 文档记录:记录所有参数变更,包括原因和结果
  • 监控跟踪:监控参数变更后的性能和稳定性
  • 版本控制:对参数文件进行版本控制
  • 回滚计划:每次变更都要有回滚计划

5.2 Oracle数据库参数检查清单

检查项
频率
说明

备份参数文件
每次修改前
确保有回滚方案

验证参数有效性
每次修改后
确认参数值合理

检查内存参数
每周
确认内存分配合理

检查进程参数
每周
确认会话数充足

检查优化器参数
每月
确认优化器配置

参数变更文档
每次变更
记录变更详情

参数配置对比
每月
与基准配置对比

5.3 Oracle数据库工具推荐

# Oracle自带工具
1. SQL*Plus
– 功能:查看和修改参数
– 优点:官方工具,功能完整
– 适用:日常参数管理

2. Enterprise Manager
– 功能:图形化参数管理
– 优点:界面友好,操作简单
– 适用:生产环境参数管理

3. DBCA
– 功能:创建数据库时设置参数
– 优点:向导式配置
– 适用:数据库创建

# 第三方工具
1. TOAD
– 功能:图形化参数查看和修改
– 优点:功能强大,界面友好
– 适用:开发和DBA使用

2. PL/SQL Developer
– 功能:参数管理
– 优点:与开发环境集成
– 适用:开发人员使用

# 自定义工具
1. Shell/Python脚本
– 功能:自动备份和检查参数
– 优点:灵活、可定制
– 适用:自动化管理

2. cron/scheduled tasks
– 功能:定期执行备份和检查
– 优点:系统自带,配置简单
– 适用:定期任务

风哥提示:参数管理是Oracle数据库管理的重要组成部分,合理的参数配置对数据库的性能和稳定性至关重要。学习交流加群风哥微信: itpux-com

生产环境建议:建立参数配置基线,定期对比当前配置与基线的差异,及时发现异常变更。

风哥提示:修改参数前一定要备份,修改后要充分测试,确保参数修改不会带来负面影响。更多学习教程公众号风哥教程itpux_com

注意事项:修改静态参数需要重启数据库,要安排在维护窗口进行,并确保有回滚方案。

风哥提示:了解每个参数的作用和影响,不要盲目修改参数,建议先在测试环境验证。学习交流加群风哥QQ113257174

持续改进:定期review参数配置,根据业务增长和性能表现调整参数,持续优化数据库性能。

风哥提示:请根据实际情况调整配置和参数,确保生产环境的安全性和稳定性。学习交流加群风哥QQ113257174

更多学习教程公众号风哥教程itpux_com

from oracle:www.itpux.com

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息