diff --git a/OracleDatabase/RAC/OracleRealApplicationClusters/containerfiles/scripts/oracommon.py b/OracleDatabase/RAC/OracleRealApplicationClusters/containerfiles/scripts/oracommon.py index 030df6cb5..5e215fdde 100755 --- a/OracleDatabase/RAC/OracleRealApplicationClusters/containerfiles/scripts/oracommon.py +++ b/OracleDatabase/RAC/OracleRealApplicationClusters/containerfiles/scripts/oracommon.py @@ -291,7 +291,7 @@ def add_key(self,key,value,env_dict): env_dict[key] = value self.oenv.update_env_vars(env_dict) else: - msg='''Variable {0} value is not defined to add in the env variables. Exiting!'''.format(value) + msg='''Variable {0} value is not defined to add in the env variables. Exiting!'''.format(key) self.log_error_message(msg,self.file_name) self.prog_exit(self) @@ -1423,49 +1423,45 @@ def get_sw_cmd(self, key, rspfile, node, netmasklist): """ This function returns the installation command. """ + cmd="" giuser, gihome, gbase, oinv = self.get_gi_params() pwdparam = f'''oracle.install.asm.SYSASMPassword={"HIDDEN_STRING"} oracle.install.asm.monitorPassword={"HIDDEN_STRING"}''' copyflag = " -noCopy " if self.check_key("COPY_GRID_SOFTWARE", self.ora_env_dict) else "" prereq = " -ignorePreReq " if self.check_key("IGNORE_CRS_PREREQS", self.ora_env_dict) else " " - prereqfailure = " -ignorePrereqFailure " if self.check_key("IGNORE_CRS_PREREQS", self.ora_env_dict) else " " + prereqfailure = " -ignorePrereqFailure " if self.check_key("IGNORE_CRS_PREREQS_FAILURE", self.ora_env_dict) else " " snic = "-J-Doracle.install.crs.allowSingleNIC=true" if self.check_key("SINGLENIC", self.ora_env_dict) else "" if key == "INSTALL": runCmd = "gridSetup.sh" - # Running only in Oracle Restart in RU Patch scenario, else setup fails - # if self.check_key("APPLY_RU_LOCATION", self.ora_env_dict) and self.check_key("CRS_GPC", self.ora_env_dict): - # runCmd += f''' -applyRU "{self.ora_env_dict["APPLY_RU_LOCATION"]}"''' if self.check_key("DEBUG_MODE", self.ora_env_dict): runCmd += " -debug" self.log_info_message(f"runCmd set to : {runCmd}", self.file_name) if self.detect_k8s_env(): - cmd_parts = [] oraversion = self.get_rsp_version("INSTALL", None) version = oraversion.split(".", 1)[0].strip() distid_env = "" if int(version) == 19: distid_env = "export CV_ASSUME_DISTID=OL8; " if self.check_key("CRS_GPC", self.ora_env_dict): - gridCmd = f'''su - {giuser} -c "{distid_env}{gihome}/{runCmd} -waitforcompletion {copyflag} -silent -responseFile {rspfile} {prereqfailure}"''' - cmd_parts.append(gridCmd) - - if cmd_parts: - cmd = " && ".join(cmd_parts) + if int(version) <= 21: + cmd = f'''su - {giuser} -c "{distid_env}{gihome}/{runCmd} -waitforcompletion {copyflag} -silent -responseFile {rspfile} {prereq} {prereqfailure}"''' + else: + cmd = f'''su - {giuser} -c "{distid_env}{gihome}/{runCmd} -waitforcompletion {copyflag} -silent -responseFile {rspfile} {pwdparam} {prereq} {prereqfailure}"''' else: param1 = f'''oracle.install.crs.config.netmaskList={netmasklist}''' if netmasklist else \ '''oracle.install.crs.config.netmaskList=eth0:255.255.0.0,eth1:255.255.255.0,eth2:255.255.255.0''' - cmd = f'''su - {giuser} -c "{distid_env}{gihome}/{runCmd} -waitforcompletion {copyflag} -silent {snic} -responseFile {rspfile} {param1} {pwdparam} {prereqfailure}"''' + cmd = f'''su - {giuser} -c "{distid_env}{gihome}/{runCmd} -waitforcompletion {copyflag} -silent {snic} -responseFile {rspfile} {param1} {pwdparam} {prereq} {prereqfailure}"''' else: - cmd = f'''su - {giuser} -c "{gihome}/{runCmd} -waitforcompletion {copyflag} -silent {snic} -responseFile {rspfile} {prereq} {pwdparam}"''' + cmd = f'''su - {giuser} -c "{gihome}/{runCmd} -waitforcompletion {copyflag} -silent {snic} -responseFile {rspfile} {prereq} {prereqfailure} {pwdparam}"''' elif key == 'ADDNODE': status = self.check_home_inv(None, gihome, giuser) if status: copyflag = " -noCopy " else: copyflag = " " - cmd = f'''su - {giuser} -c "ssh {node} '{gihome}/gridSetup.sh -silent -waitForCompletion {copyflag} {prereq} -responseFile {rspfile}'"''' + cmd = f'''su - {giuser} -c "ssh {node} '{gihome}/gridSetup.sh -silent -waitForCompletion {copyflag} {prereq} {prereqfailure} -responseFile {rspfile}'"''' else: cmd = "" return cmd @@ -1491,11 +1487,6 @@ def crs_sw_install_on_node(self, giuser, copyflag, crs_nodes, oinv, gihome, giba self.log_info_message("disk" + version, self.file_name) self.opatch_apply(node) - # Returning only in Oracle Restart in RU Patch scenario, else below command fails in Oracle Restart - # if int(version) == 19 and self.check_key("APPLY_RU_LOCATION", self.ora_env_dict): - # if self.check_key("CRS_GPC", self.ora_env_dict): - # self.log_info_message("Oracle Restart RU patch scenario detected. Skipping crs_sw_install_on_node", self.file_name) - # return # Handle Oracle 19c (special case) if int(version) == 19: @@ -1505,12 +1496,18 @@ def crs_sw_install_on_node(self, giuser, copyflag, crs_nodes, oinv, gihome, giba self.log_info_message("Oracle RU Patch deployment detected.", self.file_name) apply_ru = ''' -applyRU "{0}" '''.format(self.ora_env_dict["APPLY_RU_LOCATION"]) - if self.check_key("ONEOFF_FOLDER_NAME", self.ora_env_dict) and self.check_key("ONEOFF_IDS", self.ora_env_dict): - one_off_ids=self.ora_env_dict["ONEOFF_IDS"] - one_off_ids_with_location="" - for id in one_off_ids: - one_off_ids_with_location=one_off_ids_with_location+","+self.ora_env_dict["APPLY_RU_LOCATION"]+"/"+id - apply_oneoff = ''' --applyOneOffs "{0}" '''.format(one_off_ids_with_location) + if self.check_key("ONEOFF_FOLDER_NAME", self.ora_env_dict) and self.check_key("GRID_ONEOFF_IDS", self.ora_env_dict): + grid_oneoff_ids = self.ora_env_dict["GRID_ONEOFF_IDS"] + oneoff_ids_with_location = "" + + # Split by comma to get individual oneoff IDs + for oneoff_id in grid_oneoff_ids.split(","): + if oneoff_ids_with_location: + oneoff_ids_with_location += "," + oneoff_ids_with_location += self.ora_env_dict["ONEOFF_FOLDER_NAME"] + "/" + oneoff_id.strip() + + apply_oneoff = ''' -applyOneOffs "{0}" '''.format(oneoff_ids_with_location) + if int(version) < 23: rspdata = '''su - {0} -c "ssh {10} '{11}{1}/gridSetup.sh {12} {13} {14} -waitforcompletion {2} -silent @@ -3235,6 +3232,15 @@ def getdbrdestdgname(self,dgname): """ return self.ora_env_dict["DB_RECOVERY_FILE_DEST"] if self.check_key("DB_RECOVERY_FILE_DEST",self.ora_env_dict) else dgname + +###### function to return DG Name for REDO LOG DESTINATION + def getredodestdgname(self,dgname): + """ + return REDO DG NAME + """ + return self.ora_env_dict["LOG_FILE_DEST"] if self.check_key("LOG_FILE_DEST",self.ora_env_dict) else dgname + + ##### Function to catalog the backup def catalog_bkp(self): """ diff --git a/OracleDatabase/RAC/OracleRealApplicationClusters/containerfiles/scripts/oramiscops.py b/OracleDatabase/RAC/OracleRealApplicationClusters/containerfiles/scripts/oramiscops.py index 6f090df70..0b868f060 100755 --- a/OracleDatabase/RAC/OracleRealApplicationClusters/containerfiles/scripts/oramiscops.py +++ b/OracleDatabase/RAC/OracleRealApplicationClusters/containerfiles/scripts/oramiscops.py @@ -350,7 +350,7 @@ def checkdbrole(self): osid=self.ora_env_dict["DB_NAME"] if self.ocommon.check_key("DB_NAME",self.ora_env_dict) else "ORCLCDB" scanname = self.get_scan_name() scanport=self.ora_env_dict["SCAN_PORT"] if self.ocommon.check_key("SCAN_PORT",self.ora_env_dict) else "1521" - connect_str=self.ocommon.get_sqlplus_str(dbhome,osid,osuser,"sys",'HIDDEN_STRING',scanname,scanport,osid,None,None,None) + connect_str=self.ocommon.get_sqlplus_str(dbhome,osid,osuser,"sys",None,scanname,scanport,osid,None,None,None) status=self.ocommon.get_db_role(osuser,dbhome,osid,connect_str) else: status="NOTAVAILABLE" @@ -403,7 +403,7 @@ def checkracsvc(self): osid=self.ora_env_dict["DB_NAME"] if self.ocommon.check_key("DB_NAME",self.ora_env_dict) else "ORCLCDB" scanname = self.get_scan_name() scanport=self.ora_env_dict["SCAN_PORT"] if self.ocommon.check_key("SCAN_PORT",self.ora_env_dict) else "1521" - connect_str=self.ocommon.get_sqlplus_str(dbhome,osid,osuser,"sys",'HIDDEN_STRING',scanname,scanport,osid,None,None,None) + connect_str=self.ocommon.get_sqlplus_str(dbhome,osid,osuser,"sys",None,scanname,scanport,osid,None,None,None) status=self.ocommon.get_dbinst_status(osuser,dbhome,osid,connect_str) if self.ocommon.check_substr_match(status,"OPEN"): mode="OPEN" @@ -915,7 +915,7 @@ def get_scan_name(self): if self.ocommon.check_key("CRS_GPC", self.ora_env_dict): return self.ocommon.get_public_hostname() else: - scanname=self.ora_env_dict["SCAN_NAME"] + scan_name=self.ora_env_dict["SCAN_NAME"] return scan_name def update_ons(self): diff --git a/OracleDatabase/RAC/OracleRealApplicationClusters/containerfiles/scripts/oraracprov.py b/OracleDatabase/RAC/OracleRealApplicationClusters/containerfiles/scripts/oraracprov.py index ff6e8c600..f05103662 100755 --- a/OracleDatabase/RAC/OracleRealApplicationClusters/containerfiles/scripts/oraracprov.py +++ b/OracleDatabase/RAC/OracleRealApplicationClusters/containerfiles/scripts/oraracprov.py @@ -213,7 +213,7 @@ def db_sw_install(self): lang=self.ora_env_dict["LANGUAGE"] if self.ocommon.check_key("LANGUAGE",self.ora_env_dict) else "en" edition= self.ora_env_dict["DB_EDITION"] if self.ocommon.check_key("DB_EDITION",self.ora_env_dict) else "EE" ignoreflag= " -ignorePrereq " if self.ocommon.check_key("IGNORE_DB_PREREQS",self.ora_env_dict) else " " - prereqfailure = " -ignorePrereqFailure " if self.ocommon.check_key("IGNORE_DB_PREREQS", self.ora_env_dict) else " " + prereqfailure = " -ignorePrereqFailure " if self.ocommon.check_key("IGNORE_DB_PREREQS_FAILURE", self.ora_env_dict) else " " copyflag=" -noCopy " if not self.ocommon.check_key("COPY_DB_SOFTWARE",self.ora_env_dict): @@ -242,91 +242,97 @@ def db_sw_install(self): #self.manage_thread() - def db_sw_install_on_node(self,dbuser,hostname,unixgrp,crs_nodes,oinv,lang,dbhome,dbase,edition,osdba,osbkp,osdgdba,oskmdba,osracdba,copyflag,node,ignoreflag,prereqfailure): - """ - Perform the db_install - """ - runCmd="" - export_line="" - if self.ocommon.check_key("APPLY_RU_LOCATION",self.ora_env_dict): - ruLoc=self.ora_env_dict["APPLY_RU_LOCATION"] - # runCmd='''runInstaller -applyRU "{0}/37960098" -applyOneOffs "{0}/37962946"'''.format(self.ora_env_dict["APPLY_RU_LOCATION"]) - runCmd='''runInstaller -applyRU "{0}"'''.format(self.ora_env_dict["APPLY_RU_LOCATION"]) - oraversion = self.ocommon.get_rsp_version("INSTALL", None) - version = oraversion.split(".", 1)[0].strip() - self.ocommon.log_info_message("disk" + version, self.file_name) - # Add CV_ASSUME_DISTID only if Oracle version is 19 - export_line = "export CV_ASSUME_DISTID=OL8; " if int(version) == 19 else "" - else: - runCmd='''runInstaller ''' - - - if self.ocommon.check_key("DEBUG_MODE",self.ora_env_dict): - dbgCmd='''{0} -debug '''.format(runCmd) - runCmd=dbgCmd - rspdata="" - - if self.ocommon.check_key("CRS_GPC", self.ora_env_dict): + def db_sw_install_on_node(self, dbuser, hostname, unixgrp, crs_nodes, oinv, lang, dbhome, dbase, edition,osdba, osbkp, osdgdba, oskmdba, osracdba, copyflag, node, ignoreflag, prereqfailure): + """ + Perform DB software installation using runInstaller + """ + runCmd = "" + export_line = "" + + # Check if RU location is provided + if self.ocommon.check_key("APPLY_RU_LOCATION", self.ora_env_dict): + ruLoc = self.ora_env_dict["APPLY_RU_LOCATION"] + runCmd = 'runInstaller -applyRU "{}"'.format(ruLoc) + oraversion = self.ocommon.get_rsp_version("INSTALL", None) + version = oraversion.split(".", 1)[0].strip() + self.ocommon.log_info_message("disk " + version, self.file_name) + # Add CV_ASSUME_DISTID only for Oracle 19 + export_line = "export CV_ASSUME_DISTID=OL8; " if int(version) == 19 else "" + else: + runCmd = "runInstaller" + + # Enable debug mode if specified + if self.ocommon.check_key("DEBUG_MODE", self.ora_env_dict): + runCmd = "{} -debug".format(runCmd) + + # Prepare DB one-offs if available + apply_db_oneoff = "" + if self.ocommon.check_key("DB_ONEOFF_IDS", self.ora_env_dict) and self.ocommon.check_key("ONEOFF_FOLDER_NAME", self.ora_env_dict): + db_oneoff_ids = self.ora_env_dict["DB_ONEOFF_IDS"].split(',') + oneoff_with_location = ",".join([ + self.ora_env_dict["ONEOFF_FOLDER_NAME"] + "/" + oid for oid in db_oneoff_ids if oid + ]) + apply_db_oneoff = '-applyOneOffs "{}"'.format(oneoff_with_location) + + # Construct the runInstaller command + if self.ocommon.check_key("CRS_GPC", self.ora_env_dict): rspdata = '''su - {0} -c "ssh {17} '{18}{1}/{16} {19} -waitforcompletion {15} -silent - oracle.install.option=INSTALL_DB_SWONLY - ORACLE_HOSTNAME={2} - UNIX_GROUP_NAME={3} - INVENTORY_LOCATION={5} - SELECTED_LANGUAGES={6} - ORACLE_HOME={7} - ORACLE_BASE={8} - oracle.install.db.InstallEdition={9} - oracle.install.db.OSDBA_GROUP={10} - oracle.install.db.OSBACKUPDBA_GROUP={11} - oracle.install.db.OSDGDBA_GROUP={12} - oracle.install.db.OSKMDBA_GROUP={13} - oracle.install.db.OSRACDBA_GROUP={14} - SECURITY_UPDATES_VIA_MYORACLESUPPORT=false - DECLINE_SECURITY_UPDATES=true'"'''.format( - dbuser, dbhome, hostname, unixgrp, crs_nodes, oinv, lang, dbhome, dbase, - edition, osdba, osbkp, osdgdba, oskmdba, osracdba, copyflag, runCmd, node, export_line, ignoreflag, prereqfailure + oracle.install.option=INSTALL_DB_SWONLY + ORACLE_HOSTNAME={2} + UNIX_GROUP_NAME={3} + INVENTORY_LOCATION={5} + SELECTED_LANGUAGES={6} + ORACLE_HOME={7} + ORACLE_BASE={8} + oracle.install.db.InstallEdition={9} + oracle.install.db.OSDBA_GROUP={10} + oracle.install.db.OSBACKUPDBA_GROUP={11} + oracle.install.db.OSDGDBA_GROUP={12} + oracle.install.db.OSKMDBA_GROUP={13} + oracle.install.db.OSRACDBA_GROUP={14} + SECURITY_UPDATES_VIA_MYORACLESUPPORT=false + DECLINE_SECURITY_UPDATES=true + {21}'"'''.format( + dbuser, dbhome, hostname, unixgrp, crs_nodes, oinv, lang, dbhome, dbase, + edition, osdba, osbkp, osdgdba, oskmdba, osracdba, copyflag, runCmd, node, export_line, + ignoreflag, prereqfailure, apply_db_oneoff ) - - else: + else: rspdata = '''su - {0} -c "ssh {17} '{18}{1}/{16} {19} -waitforcompletion {15} -silent - oracle.install.option=INSTALL_DB_SWONLY - ORACLE_HOSTNAME={2} - UNIX_GROUP_NAME={3} - oracle.install.db.CLUSTER_NODES={4} - INVENTORY_LOCATION={5} - SELECTED_LANGUAGES={6} - ORACLE_HOME={7} - ORACLE_BASE={8} - oracle.install.db.InstallEdition={9} - oracle.install.db.OSDBA_GROUP={10} - oracle.install.db.OSBACKUPDBA_GROUP={11} - oracle.install.db.OSDGDBA_GROUP={12} - oracle.install.db.OSKMDBA_GROUP={13} - oracle.install.db.OSRACDBA_GROUP={14} - SECURITY_UPDATES_VIA_MYORACLESUPPORT=false - DECLINE_SECURITY_UPDATES=true'"'''.format( - dbuser, dbhome, hostname, unixgrp, crs_nodes, oinv, lang, dbhome, dbase, - edition, osdba, osbkp, osdgdba, oskmdba, osracdba, copyflag, runCmd, node, export_line, ignoreflag, prereqfailure + oracle.install.option=INSTALL_DB_SWONLY + ORACLE_HOSTNAME={2} + UNIX_GROUP_NAME={3} + oracle.install.db.CLUSTER_NODES={4} + INVENTORY_LOCATION={5} + SELECTED_LANGUAGES={6} + ORACLE_HOME={7} + ORACLE_BASE={8} + oracle.install.db.InstallEdition={9} + oracle.install.db.OSDBA_GROUP={10} + oracle.install.db.OSBACKUPDBA_GROUP={11} + oracle.install.db.OSDGDBA_GROUP={12} + oracle.install.db.OSKMDBA_GROUP={13} + oracle.install.db.OSRACDBA_GROUP={14} + SECURITY_UPDATES_VIA_MYORACLESUPPORT=false + DECLINE_SECURITY_UPDATES=true + {21}'"'''.format( + dbuser, dbhome, hostname, unixgrp, crs_nodes, oinv, lang, dbhome, dbase, + edition, osdba, osbkp, osdgdba, oskmdba, osracdba, copyflag, runCmd, node, export_line, + ignoreflag, prereqfailure, apply_db_oneoff ) - cmd = rspdata.replace('\n', ' ') - - #dbswrsp="/tmp/dbswrsp.rsp" - #self.ocommon.write_file(dbswrsp,rspdata) - #if os.path.isfile(dbswrsp): - #cmd='''su - {0} -c "{1}/runInstaller -ignorePrereq -waitforcompletion -silent -responseFile {2}"'''.format(dbuser,dbhome,dbswrsp) - output,error,retcode=self.ocommon.execute_cmd(cmd,None,None) - self.ocommon.check_os_err(output,error,retcode,None) - #else: - # self.ocommon.log_error_message("DB response file does not exist at its location: " + dbswrsp + ".Exiting..",self.file_name) - # self.ocommon.prog_exit("127") - if len(self.mythread) > 0: - if node in self.mythread.keys(): - swthread_list=self.mythread[node] - value=swthread_list[0] - new_list=[value,'FALSE'] - new_val={node,tuple(new_list)} - self.mythread.update(new_val) + cmd = rspdata.replace('\n', ' ') + output, error, retcode = self.ocommon.execute_cmd(cmd, None, None) + self.ocommon.check_os_err(output, error, retcode, None) + + # Update thread status if applicable + if len(self.mythread) > 0 and node in self.mythread.keys(): + swthread_list = self.mythread[node] + value = swthread_list[0] + new_list = [value, 'FALSE'] + new_val = {node, tuple(new_list)} + self.mythread.update(new_val) + def run_rootsh(self): """ @@ -587,6 +593,7 @@ def get_init_params(self): dgname=self.ocommon.setdgprefix(self.ocommon.getcrsdgname()) dbdest=self.ocommon.setdgprefix(self.ocommon.getdbdestdgname(dgname)) dbrdest=self.ocommon.setdgprefix(self.ocommon.getdbrdestdgname(dbdest)) + redologdest=self.ocommon.setdgprefix(self.ocommon.getredodestdgname(dbrdest)) dbrdestsize=self.ora_env_dict["DB_RECOVERY_FILE_DEST_SIZE"] if self.ocommon.check_key("DB_RECOVERY_FILE_DEST_SIZE",self.ora_env_dict) else None cpucount=self.ora_env_dict["CPU_COUNT"] if self.ocommon.check_key("CPU_COUNT",self.ora_env_dict) else None dbfiles=self.ora_env_dict["DB_FILES"] if self.ocommon.check_key("DB_FILES",self.ora_env_dict) else "1024" @@ -600,7 +607,7 @@ def get_init_params(self): remotepasswdfile="REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE" lgformat="LOG_ARCHIVE_FORMAT=%t_%s_%r.arc" - initprm='''db_recovery_file_dest={0},db_create_file_dest={2},{3},{4},db_unique_name={5},db_files={6},LOG_BUFFER={7},DB_FLASHBACK_RETENTION_TARGET={8},DB_BLOCK_CHECKSUM={9},DB_LOST_WRITE_PROTECT={10},PARALLEL_THREADS_PER_CPU={11},DG_BROKER_CONFIG_FILE1={12},DG_BROKER_CONFIG_FILE2={13}'''.format(dbrdest,dbrdest,dbdest,remotepasswdfile,lgformat,dbuname,dbfiles,lgbuffer,dbrettime,dbblkck,dblwp,ptpc,dgbr1,dgbr2) + initprm='''db_recovery_file_dest={0},db_create_file_dest={2},{3},{4},db_unique_name={5},db_files={6},LOG_BUFFER={7},DB_FLASHBACK_RETENTION_TARGET={8},DB_BLOCK_CHECKSUM={9},DB_LOST_WRITE_PROTECT={10},PARALLEL_THREADS_PER_CPU={11},DG_BROKER_CONFIG_FILE1={12},DG_BROKER_CONFIG_FILE2={13},DB_CREATE_ONLINE_LOG_DEST_1={14}'''.format(dbrdest,dbrdest,dbdest,remotepasswdfile,lgformat,dbuname,dbfiles,lgbuffer,dbrettime,dbblkck,dblwp,ptpc,dgbr1,dgbr2,redologdest) if sgasize: initprm= initprm + ''',sga_target={0},sga_max_size={0}'''.format(sgasize)