srvctl setenv/unsetenv/getenv 命令的语法

这取决于版本。

对于 10.2 和 11.1:

Usage: srvctl getenv database -d [name] [-t "[name_list]"]
Usage: srvctl getenv instance -d [name] -i [inst_name] [-t "[name_list]"]
Usage: srvctl getenv service -d [name] -s [service_name] [-t "[name_list]"]
Usage: srvctl getenv nodeapps -n [node_name] [-t "[name_list]"]
Usage: srvctl setenv database -d [name] {-t [name]=[val][,[name]=[val],...] | -T [name]=[val]}
Usage: srvctl setenv instance -d [name] [-i [inst_name]] {-t "[name]=[val][,[name]=[val],...]" | -T "[name]=[val]"}
Usage: srvctl setenv service -d [name] [-s [service_name]] {-t "[name]=[val][,[name]=[val],...]" | -T "[name]=[val]"}
Usage: srvctl setenv nodeapps -n [node_name] {-t "[name]=[val][,[name]=[val],...]" | -T "[name]=[val]"}
Usage: srvctl unsetenv database -d [name] -t "[name_list]"
Usage: srvctl unsetenv instance -d [name] [-i [inst_name]] -t "[name_list]"
Usage: srvctl unsetenv service -d [name] [-s [service_name]] -t "[name_list]"
Usage: srvctl unsetenv nodeapps -n [node_name] -t "[name_list]"

对于 11.2:

Usage: srvctl getenv database -d [db_unique_name] [-t "[name_list]"]
Usage: srvctl getenv nodeapps [-a] [-g] [-s] [-t "[name_list]"]
Usage: srvctl getenv vip -i [vip_name] [-t "[name_list]"]
Usage: srvctl getenv listener [-l [lsnr_name]] [-t [name][, ...]]
Usage: srvctl getenv asm [-t [name][, ...]]
Usage: srvctl setenv database -d [db_unique_name] {-t [name]=[val][,[name]=[val],...] | -T [name]=[val]}
Usage: srvctl setenv nodeapps {-t "[name]=[val][,[name]=[val],...]" | -T "[name]=[val]"} [-v]
Usage: srvctl setenv vip -i [vip_name] {-t "[name]=[val][,[name]=[val],...]" | -T "[name]=[val]"} [-v]
Usage: srvctl setenv listener [-l [lsnr_name]] -t "[name]=[val] [,...]" | -T "[name]=[value]"
Usage: srvctl setenv asm -t "[name]=[val] [,...]" | -T "[name]=[value]"
Usage: srvctl unsetenv database -d [db_unique_name] -t "[name_list]"
Usage: srvctl unsetenv nodeapps -t "[name_list]" [-v]
Usage: srvctl unsetenv vip -i [vip_name] -t "[name_list]" [-v]
Usage: srvctl unsetenv listener [-l [lsnr_name]] -t "[name][, ...]"
Usage: srvctl unsetenv asm -t "[name][, ...]"

在上面的命令中:
-d [name] 数据库的唯一名称
-i [inst] 实例名称
-t "[name]=[val],..." 环境变量的名称和值
-T "[name]=[val]" 单个环境变量的名称和值
-s [服务] 服务名称

要打印出版本的语法,请使用“srvctl [command] -h”。
例如:

$ srvctl setenv -h

要获得详细的语法,请使用“srvctl [command] [object] -h”。
例如:

$ srvctl setenv database -h
on  it road.com

srvctl setenv 可以设置哪些变量

我们可以在 UNIX shell 中设置的任何变量,都可以使用 srvctl setenv/unsetenv 进行设置。
例如:

$ srvctl setenv database -d V102 -T "AIQNDY389SZ=WQOIUN38"
$ srvctl getenv database -d V102
TNS_ADMIN=/u01/app/oracle/product/10gR2/db/network/admin
AIQNDY389SZ=WQOIUN38
$ srvctl unsetenv database -d V102 -t "AIQNDY389SZ"
$ srvctl getenv database -d V102
TNS_ADMIN=/u01/app/oracle/product/10gR2/db/network/admin

10.2 和 11.1:我们可以使用 srvctl 为数据库、实例、服务和 nodeapps 设置环境变量。

11.2 : 我们可以使用 srvctl 为数据库、nodeapps、ASM、VIP &listener 设置环境变量。

查看 OCR 中设置的所有环境变量

要显示为资源设置的所有环境变量,请使用不带参数的 srvctl getenv,例如。

$ srvctl getenv database -d SPRD

要显示为资源设置的特定环境变量的值,请使用 -t,例如:

$ srvctl getenv database -d V102 -t "TNS_ADMIN"
TNS_ADMIN=/u01/app/oracle/product/10gR2/db/network/admin

通过srvctl设置环境变量的效果

使用 srvctl 为数据库、实例、服务或者 nodeapps 设置环境变量具有将该环境变量添加到该资源的 OCR 的效果。
然后,当我们使用 srvctl 启动资源时,srvctl 从 OCR 获取环境变量并在启动资源的会话中使用它们。

例如,如果我们使用 srvctl 为数据库设置变量 TNS_ADMIN,那么下次启动数据库(或者数据库的任何实例)时,它的行为就好像我们是从 sqlplus 使用主机环境变量 TNS_ADMIN 启动它一样放。

例如:

$ srvctl setenv database -d mydb -T "TNS_ADMIN=/etc"
$ srvctl start instance -d mydb -i mydb1

将使用相同的 TNS_ADMIN 设置启动数据库实例 mydb1,就像我们运行这些命令一样:

$ export ORACLE_SID=mydb1
$ export TNS_ADMIN=/etc
$ sqlplus "/ as sysdba"
SQL> startup open

但是,与在 shell 中设置环境变量不同,“srvctl setenv”设置是持久的。
也就是说,即使在我们注销、重新启动节点或者重新启动集群之后,使用 srvctl 设置的环境变量仍然会被设置。
它们在 OCR 中设置。
要清除 OCR 中设置的环境变量,我们必须使用“srvctl unsetenv”。

示例:设置、查看和取消设置数据库的 TNS_ADMIN

srvctl 通常用于设置数据库的 TNS_ADMIN 环境变量。
将数据库“orcl”的 TNS_ADMIN 设置为 /u01/etc:

$ srvctl setenv database -d orcl -T "TNS_ADMIN=/u01/etc"

要在 OCR 中为 orcl 显示所有环境变量设置:

$ srvctl getenv database -d orcl
orcl:
TNS_ADMIN=/u01/etc
NLS_LANG=AMERICAN_AMERICA.AL32UTF8

仅显示 orcl 的环境变量 TNS_ADMIN:

$ srvctl getenv database -d orcl -t "TNS_ADMIN"
orcl:
TNS_ADMIN=/u01/etc

仅取消设置 TNS_ADMIN 变量:

$ srvctl unsetenv database -d orcl -t "TNS_ADMIN"

然后再次检查环境变量显示只有 TNS_ADMIN 没有被上述命令设置:

$ srvctl getenv database -d orcl
orcl:
NLS_LANG=AMERICAN_AMERICA.AL32UTF8
Oracle 如何使用 Srvctl 设置环境变量

srvctl 实用程序可用于通过“srvctl setenv”命令为资源设置环境变量。
然后在资源启动时使用这些环境变量。
使用“srvctl setenv database”为数据库设置环境变量时,它会影响属于该数据库的所有实例。
举一个具体的例子,如果你运行这个命令:

$ srvctl setenv database -d mydb -T "TNS_ADMIN=/oracle/102/asm/network/admin"

然后,无论我们从哪个节点运行该命令,在启动该数据库的任何实例时都将使用此 TNS_ADMIN 设置。
换句话说,节点中没有数据库的概念;数据库与集群相关,因为节点与实例相关。
因此数据库设置对数据库实例所在的所有节点生效。

通过srvctl设置环境变量时,只影响srvctl启动,不影响手动启动。
如果我们需要在手动启动时设置环境变量,请按照正常方式在 shell 中设置它,例如:

$ export ORACLE_SID=mydb1
$ export TNS_ADMIN=/etc
$ sqlplus "/ as sysdba"
SQL> startup open
日期:2020-09-17 00:11:44 来源:oir作者:oir