def mvs_file_backup(dsn, bk_dsn): """Create a backup data set for an MVS data set Arguments: dsn {str} -- The name of the data set to backup. It could be an MVS PS/PDS/PDSE/VSAM(KSDS), etc. bk_dsn {str} -- The name of the backup data set. Raises: BackupError: When backup data set exists. BackupError: When creation of backup data set fails. """ dsn = _validate_data_set_name(dsn).upper() bk_dsn = _validate_data_set_name(bk_dsn).upper() if not bk_dsn: hlq = Datasets.hlq() bk_dsn = Datasets.temp_name(hlq) cp_rc = _copy_ds(dsn, bk_dsn) # The data set is probably a PDS or PDSE if cp_rc == 12: # Delete allocated backup that was created when attempting to use _copy_ds() # Safe to delete because _copy_ds() would have raised an exception if it did # not successfully create the backup data set, so no risk of it predating module invocation Datasets.delete(bk_dsn) if Datasets.move(dsn, bk_dsn) == 0: _allocate_model(dsn, bk_dsn) else: raise BackupError("Unable to backup data set {0} to {1}".format( dsn, bk_dsn))
def __init__(self): """VIO DD type to be used in a DDStatement. VIO uses DASD space and system I/O more efficiently than other temporary data sets. A temporary data set will be created for use in cases where VIO is unavailable. Defaults for VIODefinition should be sufficient. """ hlq = Datasets.hlq() name = Datasets.temp_name(hlq) super().__init__(name)
def _create_temp_data_set(hlq): """Create a temporary data set. Arguments: hlq {str} -- The HLQ to use for the temporary data set's name. Returns: str -- The name of the temporary data set. """ temp_data_set_name = Datasets.temp_name(hlq) _create_data_set( temp_data_set_name, {"type": "SEQ", "size": "5M", "format": "FB", "length": 80}, ) return temp_data_set_name
def temp_data_set(self, reclen, space_u): """Creates a temporary data set with the given record length and size Arguments: size {str} -- The size of the data set lrecl {int} -- The record length of the data set Returns: str -- Name of the allocated data set Raises: OSError: When any exception is raised during the data set allocation """ size = str(space_u * 2) + "K" hlq = Datasets.hlq() temp_ps = Datasets.temp_name(hlq) rc = Datasets.create(temp_ps, "SEQ", size, "VB", "", reclen) if rc: raise OSError( "Failed when allocating temporary sequential data set!") return temp_ps
def mvs_file_backup(dsn, bk_dsn=None): """Create a backup data set for an MVS data set Arguments: dsn {str} -- The name of the data set to backup. It could be an MVS PS/PDS/PDSE/VSAM(KSDS), etc. bk_dsn {str} -- The name of the backup data set. Raises: BackupError: When backup data set exists. BackupError: When creation of backup data set fails. """ dsn = _validate_data_set_name(dsn).upper() if is_member(dsn): if not bk_dsn: bk_dsn = extract_dsname(dsn) + "({0})".format(temp_member_name()) bk_dsn = _validate_data_set_name(bk_dsn).upper() if Datasets.copy(dsn, bk_dsn) != 0: raise BackupError("Unable to backup {0} to {1}".format( dsn, bk_dsn)) else: if not bk_dsn: bk_dsn = Datasets.temp_name(Datasets.hlq()) bk_dsn = _validate_data_set_name(bk_dsn).upper() cp_rc = _copy_ds(dsn, bk_dsn) if cp_rc == 12: # The data set is probably a PDS or PDSE # Delete allocated backup that was created when attempting to use _copy_ds() # Safe to delete because _copy_ds() would have raised an exception if it did # not successfully create the backup data set, so no risk of it predating module invocation Datasets.delete(bk_dsn) _allocate_model(bk_dsn, dsn) rc, out, err = _copy_pds(dsn, bk_dsn) if rc != 0: raise BackupError( "Unable to backup data set {0} to {1}".format(dsn, bk_dsn)) return bk_dsn