1.2 Oracle 参数类型
Oracle参数主要分为以下类型:
- 静态参数:修改后需要重启数据库才能生效
- 动态参数:可以在数据库运行时修改,立即生效
- 派生参数:由其他参数计算得出的参数值
- 操作系统相关参数:与操作系统相关的参数
1.3 Oracle 参数文件类型
Oracle参数文件有两种类型:
- PFILE(Parameter File):文本格式的参数文件,可以使用文本编辑器编辑
- SPFILE(Server Parameter File):二进制格式的参数文件,只能通过SQL命令修改
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 修改静态参数
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 创建和备份参数文件
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 参数文件备份脚本
# 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 内存参数详解
# 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 优化器参数调优
# 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 参数文件损坏恢复
# 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数据库工具推荐
1. SQL*Plus
– 功能:查看和修改参数
– 优点:官方工具,功能完整
– 适用:日常参数管理
2. Enterprise Manager
– 功能:图形化参数管理
– 优点:界面友好,操作简单
– 适用:生产环境参数管理
3. DBCA
– 功能:创建数据库时设置参数
– 优点:向导式配置
– 适用:数据库创建
# 第三方工具
1. TOAD
– 功能:图形化参数查看和修改
– 优点:功能强大,界面友好
– 适用:开发和DBA使用
2. PL/SQL Developer
– 功能:参数管理
– 优点:与开发环境集成
– 适用:开发人员使用
# 自定义工具
1. Shell/Python脚本
– 功能:自动备份和检查参数
– 优点:灵活、可定制
– 适用:自动化管理
2. cron/scheduled tasks
– 功能:定期执行备份和检查
– 优点:系统自带,配置简单
– 适用:定期任务
更多学习教程公众号风哥教程itpux_com
from oracle:www.itpux.com
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
