Have you ever tried to modify the ASM diskstring with the srvctl utility. I mean, not changing the diskstring, but adding a new one to it. Due to the documentation, the asm_diskstring parameter specifies a comma delimited list of strings that limits the set of disks that an Oracle ASM instance discovers.
https://docs.oracle.com/en/database/oracle/oracle-database/21/ostmg/init-params-asm-instance.html
So … if it works for the parameter file, why shouldn’t it work with the srvctl utility. The simple thing I want to do, is to change the ASM diskstring from /dev/sd* to /dev/sd* , /dev/nvme0*.
[grid@ocm199 oracleasm]$ srvctl config asm ASM home: <CRS home> Password file: +DATA/orapwasm Backup of Password file: ASM listener: LISTENER Spfile: +DATA/ASM/ASMPARAMETERFILE/registry.253.1135337751 ASM diskgroup discovery string: /dev/sd* [grid@ocm199 oracleasm]$
[grid@ocm199 oracleasm]$ srvctl modify asm -diskstring "/dev/sd* , /dev/nvme0*" PRKF-1125 : multiple values specified for the single value option "diskstring": /dev/sd*,/dev/nvme0* [grid@ocm199 oracleasm]$ srvctl modify asm -diskstring '/dev/sd*','/dev/nvme0*' PRKF-1125 : multiple values specified for the single value option "diskstring": /dev/sd*,/dev/nvme0*
It doesn’t matter how I specify the diskstring, I always do get the error: PRKF-1125 : multiple values specified for the single value option “diskstring”: /dev/sd*,/dev/nvme0*
The second option to change the ASM diskstring, is the asmcmd utiliy. The asmcmd utility comes with the commands dsget (diskstring get) and dsset (diskstring set).
ASMCMD> help dsget
dsget
Retrieves the discovery diskstring value that is
used by the Oracle ASM Instance and its clients
Synopsis
dsget [ --normal | --profile [ -f ] | --parameter ]
Description
The options for the dsget command are described below.
--normal - Retrieves the discovery string from the Grid Plug
and Play (GPnP) profile and the one that is set in
the Oracle ASM instance. It returns one row each for
the profile and parameter setting. This is the
default setting.
--parameter - Retrieves the ASM_DISKSTRING parameter setting of
the Oracle ASM instance.
--profile - Retrieves the discovery string from the GPnP
profile.
-f - If -f is specified, retrieves the discovery string
from the local GPnP profile. This parameter
can only be specified if --profile is specified.
Examples
The following example uses dsget to retrieve the current discovery
diskstring value from the GPnP profile and the ASM_DISKSTRING parameter.
ASMCMD [+] > dsget
profile: /devices/disk*
parameter: /devices/disk*
See Also
dsset
ASMCMD> help dsset
dsset
Sets the discovery diskstring value that is used by the Oracle ASM
instance and its clients. The specified diskstring must be valid for
existing mounted disk groups. The updated value takes effect
immediately.
Synopsis
dsset [ --normal | --parameter | --profile [ -f ] ] <diskstring>
Description
The options for the dsset command are described below.
--normal - Sets the discovery string in the Grid Plug
and Play (GPnP) profile and in the Oracle
ASM instance. The update occurs after the
Oracle ASM instance has successfully
validated that the specified discovery
string has discovered all the necessary disk
groups and voting files. Note that this
command fails if the instance is not using
a server parameter file (SPFILE). This is
the default setting.
--profile - Specifies the discovery diskstring that is
pushed to the GPnP profile without any
validation by the Oracle ASM instance,
ensuring that the instance can discover
all the required disk groups. The update
is guaranteed to be propagated to all the
nodes that are part of the cluster
-f - If -f is specified, the specified
diskstring is pushed to the local GPnP
profile without any synchronization with
other nodes in the cluster. Note that this
command option updates only the local profile
file. This option should only be used in the
case of recovery. The command fails if the
Oracle Clusterware stack is running. This
option can be specified only if --profile is
specified.
--parameter - Specifies that the diskstring is updated in
memory after validating that the discovery
diskstring discovers all the current mounted
disk groups and voting files. The diskstring
is not persistently recorded in either the
SPFILE or the GPnP profile.
diskstring - Specifies the value for the discovery
diskstring
Examples
The following example uses dsset to set the current value of the
discovery diskstring in the GPnP profile.
ASMCMD [+] > dsset /devices/disk*
See Also
dsget
ASMCMD>
OK. Let’s try them out.
[grid@ocm199 oracleasm]$ asmcmd dsget parameter:/dev/sd* profile:/dev/sd* [grid@ocm199 oracleasm]$ [grid@ocm199 oracleasm]$ asmcmd dsset '/dev/sd*','/dev/nvme0*' [grid@ocm199 oracleasm]$ [grid@ocm199 oracleasm]$ asmcmd dsget parameter:/dev/sd*, /dev/nvme0* profile:/dev/sd*,/dev/nvme0*
[grid@ocm199 oracleasm]$ srvctl config asm ASM home: <CRS home> Password file: +DATA/orapwasm Backup of Password file: ASM listener: LISTENER Spfile: +DATA/ASM/ASMPARAMETERFILE/registry.253.1135337751 ASM diskgroup discovery string: /dev/sd*,/dev/nvme0*
Cool. It worked. 🙂
Conclusion
In Oracle you will find ofter different ways to reach your goal. My workaround this time was to switch from the srvctl to the asmcmd utility.