L’outil ligne de commande (EMCLI) pour Enterprise Manager permet d’automatiser des opérations, notamment l’ajout de bases de données.
L’ajout d’une base de données avec un mot de passe de supervision contenant des caractères spéciaux pose problème.
Cet article présente la méthode pour gérer ce cas particulier.
Pour exécuter la commande « emcli add_target », il est nécessaire de se connecter :
sysman_password="" emcli login -username=SYSMAN -password=${sysman_password} emcli sync
La définition des propriétés est réalisée via des variables :
instance_name=host_name= dbhome_path=/opt/oracle/product/12.1/dbhome_1 instance_resname=${instance_name}_${host_name} user_name=DBSNMP user_role=Normal listener_name=LISTENER_${instance_name} listener_resname=LISTENER_${instance_name}_${host_name} listener_port=1521 db_properties="SID:${instance_name}" db_properties="${db_properties};Port:${listener_port}" db_properties="${db_properties};OracleHome:${dbhome_path}" db_properties="${db_properties};MachineName:${host_name}" db_credentials="UserName:${user_name};password: ;Role:${user_role}" lsnr_properties="LsnrName:${listener_name}" lsnr_properties="${lsnr_properties};ListenerOraDir:${dbhome_path}/network/admin" lsnr_properties="${lsnr_properties};Port:${listener_port}" lsnr_properties="${lsnr_properties};OracleHome:${dbhome_path}" lsnr_properties="${lsnr_properties};Machine:${host_name}"
La commande « emcli add_target » prend normalement la forme suivante :
emcli add_target \ -name="${instance_resname}" \ -type="oracle_database" \ -host="${host_name}" \ -credentials="${db_credentials}" \ -properties="${db_properties}" Error: Cannot save the target to the agent Missing Properties
Dans ce cas, le mot de passe avec des caractères spéciaux est ignoré.
Il faut modifier le mot de passe manuellement dans la console.
Pour gérer les mots avec des caractères spéciaux, il est nécessaire d’utiliser un fichier temporaire et d’utiliser la clause PWD_FILE.
Le mot de passe doit être entre double guillemets.
db_credentials="UserName:${user_name};password:PWD_FILE;Role:${user_role}" input_file="PWD_FILE:/tmp/user_passwd.txt" echo "\"\"" > /tmp/user_passwd.txt emcli add_target \ -name="${instance_resname}" \ -type="oracle_database" \ -host="${host_name}" \ -credentials="${db_credentials}" \ -properties="${db_properties}" \ -input_file="${input_file}" rm /tmp/user_passwd.txt emcli logout