0、生产侧定时平台上传数据库11g hang,修改无法startup
厂商统一发放的虚拟机作为前置机导入平台后,直接开机使用。主机在虚拟化平台中,实例卡死后,按照虚拟机系统64G,原SGA=2g,不知哪个大聪明给默认设置的。保守计划修改为16G
小伙伴一顿操作,修改的内存远大于可用内存,实例无法startup
1、修改SGA、PGA
现场和生产也许会因为各式各样的要求,例如:业务要求、其他厂商提出等(需要修改最大的内存使用)去修改Oracle数据库的初始化参数,但如果修改错误,重启之后就会导致数据库无法启动。
比如参数sga_max_size=32G、sga_target=24G,某位手抖修改成sga_max_size=16G、sga_target=24G,数据库启动的时候提示sga_target大于sga_max_size,无法启动。
于是需要修改初始化参数,由于数据库没有办法启动到任何阶段,无法使用alter system修改parameter。祭出手动大法,修改数据库文本参数文件。
2、spfile文件位置
默认Oracle是使用spfile启动,这个文件二级制文件,看见的是一堆乱码(极端情况也有修改后保存成pfile的,非极端不必要挑战)对于DBA看是不能直接修改的。大家能修改的是init.ora这个文件,属于文本类型,需要先行进行参数文件的转换。操作如下:
是不是大部分人都SID都是orcl,这个全省发放的前置机sid就是orcl
查找spfile文件位置,切换到该目录下
默认位置:
Linux,oracle用户记得查看.bash_profile定义的$ORACLE_HOME
$ORACLE_HOME/dbs/spfileorcl.ora
Windows:
%ORACLE_HOME%\database\spfileorcl.ora
cd $ORACLE_HOME/dbs
3、操作步骤
登录sqlplus
sqlplus / as sysdba
1、create pfile from spfile;
生成的initorcl.ora,可修改的文本类型的初始化参数文件(路径位于:$ORACLE_HOME/dbs/)
2、更正initorcl.ora里面错误的参数(vim修改参数为设置之前的那部分)
alter system set sga_max_size=16G scope=spfile;
alter system set sga_target=16G scope=spfile;
sga_max_size=16G
sga_target=16G
alter system set pga_aggregate_target=8196M scope=spfile;
/u01/app/oracle/product/11.2.0/db_01/dbs
startup pfile='/u01/app/oracle/product/11.2.0/db_01/dbs/initorcl.ora';
3、重新登录
提示connect to idle instance
数据库执行启动:startup pfile='/u01/app/oracle/product/11.2.0/db_01/dbs/initorcl.ora';
能够正常启动后确认参数没有错误,按照业务使用再调整。
4、最后再执行create spfile from pfile
执行任何修改前,务必备份任何要修改的文件,cp一次,比什么都好。
4、SGA和PGA最佳实践(OCM也是必考):
-
总内存分配,按照64g测算
物理内存的80% 分配给Oracle(约51.2GB),剩余20%保留给操作系统及其他进程。
公式:Oracle可用内存 = 64GB × 80% = 51.2GB,换成MB后很多老师按照习惯再减-1, -
这个部分的典故。“+1MB”的由来与适用性
-
在早期版本(如Oracle 8i/9i),SGA计算公式包含额外1MB的固定开销:
SGA = (db_block_buffers × block_size) + (shared_pool_size + ...) + 1MB这是为SGA内部管理预留的空间。 -
10g及以上:
自动内存管理(AMM/ASMM)已动态处理此开销,无需手动减1MB。
不过若手动配置组件(如shared_pool_size),仍需确保总和 ≤ SGA_MAX_SIZE,但无需额外扣除。 -
直接使用目标值,验证设置
-
--设置SGA_TARGET或SGA_MAX_SIZE时,直接指定目标值(单位可为GB/MB): --设置SGA_MAX_SIZE=36G(64G物理内存的OLTP场景) ALTER SYSTEM SET SGA_MAX_SIZE=36G SCOPE=SPFILE; ALTER SYSTEM SET SGA_TARGET=36G SCOPE=BOTH;
--重启数据库后,通过视图确认实际分配: -- 检查动态组件分配 SELECT * FROM V$SGA_DYNAMIC_COMPONENTS; SYS@orcl> SELECT * FROM V$SGA_DYNAMIC_COMPONENTS; COMPONENT CURRENT_SIZE MIN_SIZE MAX_SIZE USER_SPECIFIED_SIZE OPER_COUNT LAST_OPER_TYP LAST_OPER LAST_OPER_TIME GRANULE_SIZE ---------------------------------------------------------------- ------------ ---------- ---------- ------------------- ---------- ------------- --------- ------------------- ------------ shared pool 2046820352 1979711488 2046820352 0 1 GROW DEFERRED 2025-05-29 01:05:38 33554432 large pool 167772160 167772160 1207959552 0 1 SHRINK DEFERRED 2025-05-27 15:55:31 33554432 java pool 134217728 134217728 134217728 0 0 STATIC 33554432 streams pool 0 0 0 0 0 STATIC 33554432 DEFAULT buffer cache 1.4328E+10 1.3355E+10 1.4395E+10 0 2 SHRINK DEFERRED 2025-05-29 01:05:38 33554432 KEEP buffer cache 0 0 0 0 0 STATIC 33554432 RECYCLE buffer cache 0 0 0 0 0 STATIC 33554432 DEFAULT 2K buffer cache 0 0 0 0 0 STATIC 33554432 DEFAULT 4K buffer cache 0 0 0 0 0 STATIC 33554432 DEFAULT 8K buffer cache 0 0 0 0 0 STATIC 33554432 DEFAULT 16K buffer cache 0 0 0 0 0 STATIC 33554432 DEFAULT 32K buffer cache 0 0 0 0 0 STATIC 33554432 Shared IO Pool 0 0 0 0 0 STATIC 33554432 ASM Buffer Cache 0 0 0 0 0 STATIC 33554432 14 rows selected.
5、动态性能视图监控:
SGA使用:SELECT * FROM V$SGASTAT;
PGA使用:SELECT * FROM V$PGASTAT WHERE name='maximum PGA allocated';
建议调整:
SELECT * FROM V$SGA_TARGET_ADVICE;
SELECT * FROM V$PGA_TARGET_ADVICE;
SYS@orcl> SELECT * FROM V$PGASTAT WHERE name='maximum PGA allocated';
NAME VALUE UNIT
---------------------------------------------------------------- ---------- ------------
maximum PGA allocated 475544576 bytes
SYS@orcl> SELECT * FROM V$SGA_TARGET_ADVICE;
SGA_SIZE SGA_SIZE_FACTOR ESTD_DB_TIME ESTD_DB_TIME_FACTOR ESTD_PHYSICAL_READS
---------- --------------- ------------ ------------------- -------------------
4000 .25 17598 1.0743 4496031
6000 .375 16902 1.0318 3253636
8000 .5 16587 1.0126 2988942
10000 .625 16435 1.0033 2757537
12000 .75 16392 1.0007 2696598
14000 .875 16383 1.0001 2686129
16000 1 16381 1 2684518
18000 1.125 16381 1 2684518
20000 1.25 16381 1 2684518
22000 1.375 16381 1 2684518
24000 1.5 16381 1 2684518
26000 1.625 16381 1 2684518
28000 1.75 16352 .9982 2634586
30000 1.875 16348 .998 2634586
32000 2 16348 .998 2634586
15 rows selected.
SYS@orcl> SELECT * FROM V$PGA_TARGET_ADVICE;
PGA_TARGET_FOR_ESTIMATE PGA_TARGET_FACTOR ADV BYTES_PROCESSED ESTD_TIME ESTD_EXTRA_BYTES_RW
----------------------- ----------------- --- --------------- ---------- -------------------
ESTD_PGA_CACHE_HIT_PERCENTAGE ESTD_OVERALLOC_COUNT
----------------------------- --------------------
2097152000 .125 ON 3.6002E+10 742998 0
100 0
4194304000 .25 ON 3.6002E+10 742998 0
100 0
8388608000 .5 ON 3.6002E+10 742998 0
100 0
1.2583E+10 .75 ON 3.6002E+10 742998 0
100 0
1.6777E+10 1 ON 3.6002E+10 742998 0
100 0
2.0133E+10 1.2 ON 3.6002E+10 742998 0
100 0
2.3488E+10 1.4 ON 3.6002E+10 742998 0
100 0
2.6844E+10 1.6 ON 3.6002E+10 742998 0
100 0
3.0199E+10 1.8 ON 3.6002E+10 742998 0
100 0
3.3554E+10 2 ON 3.6002E+10 742998 0
100 0
5.0332E+10 3 ON 3.6002E+10 742998 0
100 0
6.7109E+10 4 ON 3.6002E+10 742998 0
100 0
1.0066E+11 6 ON 3.6002E+10 742998 0
100 0
1.3422E+11 8 ON 3.6002E+10 742998 0
100 0
14 rows selected.
SYS@orcl>