def postMasterOracleInstance()

in VMBackup/main/workloadPatch/WorkloadPatch.py [0:0]


    def postMasterOracleInstance(self, commandPath, instanceIndex):
        global daemonProcess

        if "daemonProcess" in self.instance_list[instanceIndex]:
            daemonProcess = self.instance_list[instanceIndex]["daemonProcess"]

        self.logger.log("WorkloadPatch: Entering post mode for master")
        try:
            if (self.instance_list[instanceIndex]["dbOpen"] == True) and (daemonProcess is None or daemonProcess.poll() is not None):
                self.logger.log("WorkloadPatch: Not app consistent backup")
                self.error_details.append(ErrorDetail(CommonVariables.FailedWorkloadQuiescingTimeout,"not app consistent"))
            elif daemonProcess.poll() is None:
                self.logger.log("WorkloadPatch: pre connection still running. Sending kill signal")
                daemonProcess.kill()
        except Exception as e:
            self.logger.log("WorkloadPatch: exception in daemon process indentification" + str(e))
        
        postSuccess = False
    
        oracleInstance = self.instance_list[instanceIndex]
        self.logger.log("WorkloadPatch: Post- Inside oracle post for instance with SID: " + oracleInstance["sid"] + " HOME: " + oracleInstance["home"])
        postOracle = commandPath + "sqlplus" + " -S -R 2 /nolog @" + os.path.join(self.temp_script_folder, self.scriptpath + "/postOracleMaster.sql ")
        envExport = "export ORACLE_SID=" + oracleInstance["sid"] + "; export ORACLE_HOME=" + oracleInstance["home"] + "; export PATH=" + oracleInstance["home"] + "/bin:${PATH}; export ORACLE_UNQNAME=" + oracleInstance["sid"] + "; " 
        args =  "su - "+self.linux_user+" -c "+"\'"+ envExport + postOracle+"\'"
        self.logger.log("WorkloadPatch: argument passed for post script:"+str(args))
        process = subprocess.Popen(args, stdout=subprocess.PIPE, shell=True)
        wait_counter = 5
        while process.poll()==None and wait_counter>0:
            wait_counter -= 1
            sleep(2)
        while True:
            line= process.stdout.readline()
            line = Utils.HandlerUtil.HandlerUtility.convert_to_string(line)
            if(line != ''):
                self.logger.log("WorkloadPatch: post completed with output "+line.rstrip(), True)
            else:
                break
            if 'END BACKUP succeeded' in line:
                self.logger.log("WorkloadPatch: post succeeded")
                postSuccess = True
                self.instance_list[instanceIndex]["postSuccess"] = True
                break
            if('LOG_MODE=' in line):
                line = line.replace('\n','')
                line_split = line.split('=')
                self.logger.log("WorkloadPatch: log mode set is "+line_split[1], True)
                if(line_split[1] == "ARCHIVELOG"):
                    self.post_log_mode = "ARCHIVELOG"
                    self.logger.log("WorkloadPatch: Archive log mode for oracle")
                else:
                    self.post_log_mode = "NOARCHIVELOG" 
                    self.logger.log("WorkloadPatch: No archive log mode for oracle")
            if('STATUS=' in line):
                line = line.replace('\n', '')
                line_split = line.split('=')
                self.logger.log("WorkloadPatch: database status is "+line_split[1], True)
                if(line_split[1] == "OPEN"):
                    self.post_database_status = "OPEN"
                    self.logger.log("WorkloadPatch: Database is open")
                else:##handle other DB status if required
                    self.post_database_status = "NOTOPEN"
                    self.logger.log("WorkloadPatch: Database is not open")
        if((oracleInstance["noArchive"] == True and self.post_log_mode == "ARCHIVELOG") or (oracleInstance["noArchive"] == False and self.post_log_mode == "NOARCHIVELOG")):
            self.logger.log("WorkloadPatch: Database log mode changed during backup")
            self.error_details.append(ErrorDetail(CommonVariables.FailedWorkloadLogModeChanged, "Database log mode changed during backup"))
        if(postSuccess == False):
            if(oracleInstance["dbOpen"] == False and self.post_database_status == "NOTOPEN"):
                self.logger.log("WorkloadPatch: Database in closed status, backup is app consistent")
            elif((oracleInstance["dbOpen"] == True and self.post_database_status == "NOTOPEN") or (oracleInstance["dbOpen"] == False and self.post_database_status == "OPEN")):
                self.logger.log("WorkloadPatch: Database status changed during backup")
                self.error_details.append(ErrorDetail(CommonVariables.FailedWorkloadDatabaseStatusChanged, "Database status changed during backup"))
            else:
                self.error_details.append(ErrorDetail(CommonVariables.FailedWorkloadPostError, "Workload Post failed"))
        
        self.logger.log("WorkloadPatch: Post- Completed")
        self.callLogBackup()