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
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
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