ITPub博客

首页 > 数据库 > Oracle > [20260422]测试设置use_large_pages是否会启动dism.txt

[20260422]测试设置use_large_pages是否会启动dism.txt

原创 Oracle 作者:lfree 时间:2026-04-28 20:10:57 0 删除 编辑

[20260422]测试设置use_large_pages是否会启动dism.txt

--//前几天测试设置use_large_pages是否会启动oradism,每次手工设置切换执行非常麻烦,一些步骤非常容易遗漏做错,写一个测试脚
--//本,一次测试完成。

1.环境:
SYS@book> @ ver2
==============================
PORT_STRING                   : x86_64/Linux 2.4.xx
VERSION                       : 21.0.0.0.0
BANNER                        : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
BANNER_FULL                   : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0
BANNER_LEGACY                 : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
CON_ID                        : 0
PL/SQL procedure successfully completed.

SYS@book> @ pvalid use_large_pages
Display valid values for multioption parameters matching "use_large_pages"...
  PAR# PARAMETER        ORD VALUE                          DEFAULT
------ ---------------- --- ------------------------------ -------
   180 use_large_pages    1 TRUE                           DEFAULT
       use_large_pages    2 AUTO
       use_large_pages    3 ONLY
       use_large_pages    4 FALSE
       use_large_pages    5 AUTO_ONLY

--//测试利用执行strace -ff -o aaa sqlplus -s -l / as sysdba <<<"startup nomount"报错如下:
ORA-12791: The oradism utility does not have proper permissions.

2.测试前准备:

--//保证参数use_large_pages不存在spfile文件中。
SYS@book> alter system reset use_large_pages;
System altered.

--//建立初始参数文件/u01/app/oracle/dbs/initbook.ora_org。
$ cat /u01/app/oracle/dbs/initbook.ora_org
use_large_pages=aaaaa
SPFILE='/u01/app/oracle/dbs/spfilebook.ora'

--//注:这里犯了一点点小"错误",并不需要alter system reset use_large_pages,将use_large_pages=aaaaa写在最后就可以覆盖前面
--//设置的参数,我故意没有更正。

$ cat oradism.sh
#! /bin/bash

for i in TRUE AUTO ONLY FALSE AUTO_ONLY
do
    #echo "USE_LARGE_PAGES=$i"
    sed "s/aaaaa/$i/" /u01/app/oracle/dbs/initbook.ora_org >| /u01/app/oracle/dbs/initbook.ora
    head -1 /u01/app/oracle/dbs/initbook.ora
    strace -ff -o aaa sqlplus -s -l / as sysdba <<<"startup nomount pfile=/u01/app/oracle/dbs/initbook.ora"
done

3.测试:
$ . oradism.sh
use_large_pages=TRUE
ORA-12791: The oradism utility does not have proper permissions.
use_large_pages=AUTO
ORA-12791: The oradism utility does not have proper permissions.
use_large_pages=ONLY
ORA-12791: The oradism utility does not have proper permissions.
use_large_pages=FALSE
ORA-12791: The oradism utility does not have proper permissions.
use_large_pages=AUTO_ONLY
ORA-12791: The oradism utility does not have proper permissions.
--//可以发现use_large_pages如何设置都会执行oradism。

$ grep -i dism aaa.*  | grep execve
aaa.4749:execve("/u01/app/oracle/product/21.0.0/dbhome_1/bin/oradism", ["ora_dism_book"], [/* 74 vars */]) = 0
aaa.4760:execve("/u01/app/oracle/product/21.0.0/dbhome_1/bin/oradism", ["ora_dism_book"], [/* 74 vars */]) = 0
aaa.4771:execve("/u01/app/oracle/product/21.0.0/dbhome_1/bin/oradism", ["ora_dism_book"], [/* 74 vars */]) = 0
aaa.4782:execve("/u01/app/oracle/product/21.0.0/dbhome_1/bin/oradism", ["ora_dism_book"], [/* 74 vars */]) = 0
aaa.4793:execve("/u01/app/oracle/product/21.0.0/dbhome_1/bin/oradism", ["ora_dism_book"], [/* 74 vars */]) = 0
--//出现5次。

4.继续:
--//修改脚本:
$ cat oradism.sh
#! /bin/bash

for i in TRUE AUTO ONLY FALSE AUTO_ONLY
do
    #echo "USE_LARGE_PAGES=$i"
    sed "s/aaaaa/$i/" /u01/app/oracle/dbs/initbook.ora_org >| /u01/app/oracle/dbs/initbook.ora
    tail -1 /u01/app/oracle/dbs/initbook.ora
    #strace -ff -o aaa sqlplus -s -l / as sysdba <<<"startup nomount pfile=/u01/app/oracle/dbs/initbook.ora"
    sudo sysctl -w vm.nr_hugepages=530
    sqlplus -s -l / as sysdba <<<"startup nomount pfile=/u01/app/oracle/dbs/initbook.ora" > /dev/null
    pgrep -l oradism
    sqlplus -s -l / as sysdba <<<"shutdown immediate" > /dev/null
done
--//注:sudo第一次执行要需要输入口令,配置使用sudo需要一些设置,这里忽略,另外写一篇文章说明。
--//另外通过pgrep -l oradism判断是否存在后台进程,开始选择执行 pgrep -l ora_dism,发现即使启动了也没有显示,但是执行
--//pgrep -l oradism有输出,也另外写一篇文章说明。

$ . oradism.sh
use_large_pages=TRUE
vm.nr_hugepages = 530
use_large_pages=AUTO
vm.nr_hugepages = 530
use_large_pages=ONLY
vm.nr_hugepages = 530
use_large_pages=FALSE
vm.nr_hugepages = 530
use_large_pages=AUTO_ONLY
vm.nr_hugepages = 530
--//可以发现当vm.nr_hugepages充足时,启动完成实例后,并没有保留后台的ora_dism_<sid>进程。

5.再继续:
--//前面的测试配置vm.nr_hugepages充足,如果不充足呢?
--//修改脚本:
$ cat oradism.sh
#! /bin/bash

for i in TRUE AUTO ONLY FALSE AUTO_ONLY
do
    #echo "USE_LARGE_PAGES=$i"
    sed "s/aaaaa/$i/" /u01/app/oracle/dbs/initbook.ora_org >| /u01/app/oracle/dbs/initbook.ora
    head -1 /u01/app/oracle/dbs/initbook.ora
    #strace -ff -o aaa sqlplus -s -l / as sysdba <<<"startup nomount pfile=/u01/app/oracle/dbs/initbook.ora"
    sudo sysctl -w vm.nr_hugepages=520
    sqlplus -s -l / as sysdba <<<"startup nomount pfile=/u01/app/oracle/dbs/initbook.ora" > /dev/null
    pgrep -l oradism
    sqlplus -s -l / as sysdba <<<"shutdown immediate" > /dev/null
done

$ . oradism.sh
use_large_pages=TRUE
[sudo] password for oracle:  --//第1次执行需要输入oracle口令。
vm.nr_hugepages = 520
use_large_pages=AUTO
~~~~~~~~~~~~~~~~~~~~~
vm.nr_hugepages = 520
5027 oradism
use_large_pages=ONLY
vm.nr_hugepages = 520
use_large_pages=FALSE
vm.nr_hugepages = 520
use_large_pages=AUTO_ONLY
vm.nr_hugepages = 520
5294 oradism
~~~~~~~~~~~~~~~
--//注意看下划线,可以发现当vm.nr_hugepages不充足时,并且use_large_pages=AUTO或者AUTO_ONLY时,会保留ora_dism_<sid>进程。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-3116908/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
熟悉oracle相关技术,擅长sql优化,rman备份与恢复,熟悉linux shell编程。

注册时间:2008-01-03

  • 博文量
    4006
  • 访问量
    7969454