スクリプトを記述するお手伝いをするため、この項ではデータベースのパスワードを変更するサンプル・スクリプトを分析します。
セキュリティ・コンプライアンスのために定期的にデータベース・パスワードを再設定する場合、例4-3が役立ちます。ターゲット・データベースのデータベース・パスワードを変更する場合、そのターゲット・データベースのEnterprise Managerモニタリングを使用できません。一貫したモニタリングを確保するには、Enterprise Manager Cloud Control UIにログインして、必要なデータベース・ターゲットを選択し、非常に時間がかかるデータベースごとのパスワードの変更を行う必要があります。
例4-3を使用して、いくつかのデータベースをグループに追加すると、そのグループ内のすべてのデータベースのパスワードを変更できます。
注意:
表4-2での行番号は、説明目的でのみ提供されています。コピー対応のスクリプトは、「サンプル・スクリプト」の「例A-6」を参照してください。
例4-3 dbPasswordChange.py
#Disclaimer #EXCEPT WHERE EXPRESSLY PROVIDED OTHERWISE, THE SITE, AND ALL CONTENT PROVIDED ON #OR THROUGH THE SITE, ARE PROVIDED ON AN "AS IS" AND "AS AVAILABLE" BASIS. ORACLE #EXPRESSLY DISCLAIMS ALL WARRANTIES OF ANY KIND, WHETHER EXPRESS OR IMPLIED, #INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS #FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT WITH RESPECT TO THE SITE AND ALL #CONTENT PROVIDED ON OR THROUGH THE SITE. ORACLE MAKES NO WARRANTY THAT: (A) THE #SITE OR CONTENT WILL MEET YOUR REQUIREMENTS; (B) THE SITE WILL BE AVAILABLE ON AN #UNINTERRUPTED, TIMELY, SECURE,OR ERROR-FREE BASIS; (C) THE RESULTS THAT MAY BE #OBTAINED FROM THE USE OF THE SITE OR ANY CONTENT PROVIDED ON OR THROUGH THE SITE #WILL BE ACCURATE OR RELIABLE; OR (D) THE QUALITY OF ANY CONTENT PURCHASED OR #OBTAINED BY YOU ON OR THROUGH THE SITE WILL MEET YOUR EXPECTATIONS. #ANY CONTENT ACCESSED, DOWNLOADED OR OTHERWISE OBTAINED ON OR THROUGH THE USE OF #THE SITE IS USED AT YOUR OWN DISCRETION AND RISK. ORACLE SHALL HAVE NO #RESPONSIBILITY FOR ANY DAMAGE TO YOUR COMPUTER SYSTEM OR LOSS OF DATA THAT #RESULTS FROM THE DOWNLOAD OR USE OF CONTENT. #ORACLE RESERVES THE RIGHT TO MAKE CHANGES OR UPDATES TO, AND MONITOR THE USE OF, #THE SITE AND CONTENT PROVIDED ON OR THROUGH THE SITE AT ANY TIME WITHOUT NOTICE. 1 from emcli import * 2 from emcli.exception import VerbExecutionError 3 import sys 4 import time 5 6 def check_job_status(job): 7 count=0 8 while (count < 10): 9 count = count + 1 10 obj = emcli.get_jobs(job_id=job) 11 #print obj.out() 12 for entry in obj.out()['data']: 13 l_status = entry['Status ID'] 14 l_exec_id = entry['Execution ID'] 15 #print entry['Status ID'] 16 if (l_status == '5'): 17 print "Job completed successfully" 18 count=100 19 elif (l_status == '4'): 20 l_resp = get_job_execution_detail(execution=l_exec_id, showOutput=True, xml=True) 21 print "Job failed, error details " 22 print "Output " + str(l_resp.out()) 23 count=100 24 else: 25 time.sleep(2) 26 27 def update_db_pwd_for_target(p_target_name, p_target_type, p_old_password, p_new_password): 28 l_target_name = p_target_name 29 l_target_type = p_target_type 30 print "Changing the password for member : name = " + l_target_name + " type = " + l_target_type 31 try : 32 l_resp = update_db_password (target_name=l_target_name, 33 target_type = l_target_type, 34 change_at_target="yes", 35 user_name="dbsnmp", 36 old_password=p_old_password, 37 new_password=p_new_password, 38 retype_new_password=p_new_password) 39 l_job_submitted = l_resp.out()['JobId'] 40 check_job_status(l_job_submitted) 41 except emcli.exception.VerbExecutionError, e: 42 print "ERROR : Change Password failed for name = " + l_target_name + " type = " + l_target_type 43 print "ERROR : " + e.error() 44 45 def update_db_pwd_for_group(p_group, p_old_password, p_new_password): 46 print "Changing the password for group - " + p_group + " from " + p_old_password + " to " + p_new_password 47 members = get_group_members(name=p_group).out()['data'] 48 for member in members: 49 l_target_name = member['Target Name'] 50 l_target_type = member['Target Type'] 51 update_db_pwd_for_target(l_target_name, l_target_type, p_old_password, p_new_password) 52 53 54 #Set the OMS URL to connect to 56 set_client_property('EMCLI_OMS_URL','https://myoms.com/em') 57 #Accept all the certificates 58 set_client_property('EMCLI_TRUSTALL','true') 59 60 login(username=sys.argv[0]) 61 62 63 l_grp_name = 'maurGroup' 64 65 l_group_members = ['db1:oracle_database','db2:oracle_database','db3:rac_database'] 66 67 68 69 res = create_group(name = l_grp_name, add_targets = l_group_members) 70 71 print "Listing members for group " + l_grp_name 72 73 for member in get_group_members(name=l_grp_name).out()['data']: 74 print member 75 76 77 y_n_input = raw_input('Now lets change the password for all the members in this group(y/n)') 78 if y_n_input != 'y': 79 exit(0) 80 81 l_tgt_username = "dbsnmp" 82 l_old_password = "secret1" 83 l_new_password = "secret2" 84 85 update_db_pwd_for_group(l_grp_name, l_old_password, l_new_password)