[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/ ,如需转载,请注明出处,否则将追究法律责任。