Hola de nuevo! En la receta de hoy, explicaré como realizar las copias de seguridad desatendidas virtuales y sacarlas fuera del AS/400, sustituyendo en gran medida los cartuchos de cinta tradicionales, realizando los siguientes pasos:
CREACIÓN DEL CATALOGO DE CINTAS VIRTUAL
– Ejecutar el mandato:
CRTIMGCLG IMGCLG(TAPBACKUP) DIR('/TAPBACKUP') TYPE(*TAP)
Con ese mandato, hemos creado un catálogo de cintas llamado TAPBACKUP y las cintas virtuales las almacenará en la carpeta del IFS llamada /TAPBACKUP
– Si miramos los catálogos creados con WRKIMGCLG, entre otros veremos que TAPBACKUP ha sido creado sin problemas.
Fig. 1: Listado de catálogos virtuales en máquina
CREACIÓN DE LA CINTA VIRTUAL Y ASIGNACION AL CATALOGO
– Ejecutar el mandato:
ADDIMGCLGE IMGCLG(TAPBACKUP) FROMFILE(*NEW) TOFILE('TAPBACKUP.BIN') IMGSIZ(100000)
Con esto, hemos creado una cinta de 100 GB de tamaño RAW (aunque no los ocupará en disco, ya veremos luego que la ocupación real de la cinta dependerá del volumen de datos que allí se grabe).
– Para ver que la cinta se ha creado correctamente, desde WRKIMGCLG, seleccionamos nuestro catálogo TAPBACKUP y con un 12. Trabajar con entradas, vemos sus entradas:
Fig. 2: Listado de entradas del catálogo TAPBACKUP
CREACIÓN DEL DISPOSITIVO DE CINTA VIRTUAL
De la misma forma que existe el dispositivo de cinta físico llamado TAP01, vamos a crear un dispositivo de cinta virtual para que el catálogo de cintas virtuales pueda ser utilizado por dicho dispositivo. Para ello, con el siguiente mandato crearemos dicho dispositivo:
CRTDEVTAP DEVD(TAPVRT01) RSRCNAME(*VRT) ASSIGN(*YES)
Y con el siguiente mandato, lo pondremos en línea:
VRYCFG CFGOBJ(TAPVRT01) CFGTYPE(*DEV) STATUS(*ON)
CREACIÓN DE LA CARPETA COMPARTIDA EXTERNA
Para que la cinta virtual pueda ser exportada fuera de la máquina, necesitamos una carpeta compartida de un servidor Windows o una NAS con espacio y permisos suficientes para que el AS/400 la monte y copie los datos. Para ello, supongamos que el servidor de datos se llama SRVDATOS y la carpeta compartida se llama BACKUP. Es necesario compartir esta carpeta y, sobre todo, que el usuario QSECOFR tenga acceso a ella en modo lectura/escritura. Si hay un Directorio Activo que gobierna los permisos de dicho servidor, hay que crear un usuario llamado QSECOFR con la misma contraseña que el AS/400.
Una vez comprobado los accesos, procederemos al siguiente punto.
CREACIÓN DE LOS CLs de INICIALIZACIÓN y COPIA
Son 2: el CL de inicialización del catálogo y la cinta virtual, y el CL que monta la carpeta compartida, realiza la copia de seguridad y posteriormente copia la cinta a la carpeta compartida.
A continuación expongo el CL de INICINTAVR que inicializa la cinta virtual y su catálogo:
PGM LODIMGCLG IMGCLG(TAPBACKUP) OPTION(*LOAD) DEV(TAPVRT01) MONMSG MSGID(CPF0000) INZTAP DEV(TAPVRT01) NEWVOL(IBMIRD) CHECK(*NO) MONMSG MSGID(CPF0000) ENDPGM
Como se puede observar, el CL consta de dos mandatos: El primero de ellos, carga el catalogo virtual de cintas en una cinta virtual llamada TAPVRT01 y el segundo mandato, Inicializa la cinta para su posterior uso.
El CL de copia de seguridad es el que sigue, llamado SALVADOVR:
PGM DCL &DATE6 *CHAR LEN(6) DCL &DESTI *CHAR LEN(40) RTVSYSVAL QDATE RTNVAR(&DATE6) CHGVAR VAR(&DESTI) + VALUE('/QNTC/SRVDATOS/BACKUP/' *CAT + &DATE6 *CAT '.BIN') MKDIR DIR('/QNTC/SRVDATOS') MONMSG MSGID(CPF0000) SAVLIB LIB(*ALLUSR) DEV(TAPVRT01) ENDOPT(*LEAVE) + USEOPTBLK(*NO) DTACPR(*YES) MONMSG MSGID(CPF0000) SAVDLO DLO(*ALL) DEV(TAPVRT01) ENDOPT(*LEAVE) MONMSG MSGID(CPF0000) SAV DEV('/QSYS.LIB/TAPVRT01.DEVD') OBJ(('/*') + ('/QSYS.LIB' *OMIT) ('/QDLS' *OMIT)) + UPDHST(*YES) DTACPR(*YES) MONMSG MSGID(CPF0000 CPC0000 CPD0000) SAVSECDTA DEV(TAPVRT01) USEOPTBLK(*NO) DTACPR(*YES) MONMSG MSGID(CPF0000) SAVCFG DEV(TAPVRT01) USEOPTBLK(*NO) DTACPR(*YES) MONMSG MSGID(CPF0000) CPY OBJ('/TAPBACKUP/TAPBACKUP.BIN') + TOOBJ(&DESTI) TOCCSID(*CALC) REPLACE(*YES) MONMSG MSGID(CPF0000) ENDPGM
Lo primero que hace el CL es construir la ruta destino de la copia, con el fin de que, tomando la fecha del sistema, asigne un nombre a la cinta que se copia a la carpeta compartida, de manera que se vayan copiando las cintas por días y así poder recuperar llegado el caso una cinta concreta de un día concreto. Dicho path y nombre de fichero se guardará bajo la variable DESTI.
Lo siguiente que hace el CL es crear el directorio de montaje externo con un MKDIR. Ejecutando este mandato dentro de la carpeta /QNTC, es como si mapearamos en el IFS del AS/400 la carpeta compartida, por tanto, cuando posteriormente copiemos el fichero de cinta de una parte del IFS (/TAPBACKUP) a la /QNTC, estamos realmente copiando mediante la red el fichero a otra parte.
A continuación, realiza una copia de seguridad de todas las bibliotecas de usuario (*ALLUSR), las carpetas, los objetos, los datos de seguridad y por último, los datos de configuración del sistema.
Y por último, realiza la copia de la cinta creada (TAPBACKUP.BIN) a la carpeta compartida, mediante la variable DESTI descrita anteriormente.
Compilamos ambos CLs (el de inicialización lo he llamado INICINTAVR, y al de la copia de seguridad, SALVADOVR y los he dejado en la QGPL) y pasamos al último punto que es el de crear la planificación diaria de las copias de seguridad.
CREACIÓN DE LA PLANIFICACIÓN DE COPIA
Para planificar la ejecución diaria de estos dos CLs, utilizaremos el planificador del AS/400 para tal fin. Para ello, añadiremos las entradas con los siguientes mandatos, siendo usuario QSECOFR:
ADDJOBSCDE JOB(INICINTAVR) CMD(CALL PGM(QGPL/INICINTAVR)) FRQ(*WEEKLY) SCDDATE(*NONE) SCDDAY(*MON *TUE *WED *THU *FRI) SCDTIME('19:55:00')
Este mandato planifica la ejecución del CL llamado INICINTAVR que antes hemos compilado y dejado en la QGPL, y lo ejecuta de lunes a viernes a las 19:55 de la tarde.
ADDJOBSCDE JOB(SALVADOVR) CMD(CALL PGM(QGPL/SALVADOVR)) FRQ(*WEEKLY) SCDDATE(*NONE) SCDDAY(*MON *TUE *WED *THU *FRI) SCDTIME('20:00:00')
Y este otro mandato planifica la ejecución del CL llamado SALVADOVR que hemos compilado y dejado en la QGPL, y lo ejecutará de lunes a viernes a las 20:00 de la tarde.
NOTA IMPORTANTE: Es imperativo que exista tamaño en el ASP suficiente para poder albergar la cinta virtual, y obviamente, que exista tamaño suficiente en la carpeta compartida, máxime cuando se van a guardar copias diarias del sistema y se desea tener un histórico. En mi experiencia, por norma general el AS/400 realiza una compresión de datos que se acerca bastante al 2:1, es decir, que por cada 2 GB que copia, ocupa físicamente 1 GB, pero depende en gran medida de la naturaleza de los datos que se almacenan y cada cliente es un mundo. Por tanto, no es recomendable utilizar este método si nuestro ASP supera el 75% de ocupación ya que podríamos correr el riesgo de que dicho ASP se llene. En peor de los casos, en el que no exista compresión de ninguna clase, el ASP no debería superar el 50% de ocupación. En cualquier otro caso, no habría problema.
El catalogo de cintas virtual en vez de almacenarla en el propio AS400 se podria almacenar directamente en un recurso compartido (NFS)?
Si, pero es mas facil cear un recurso QNTC para poder compartirlo por SMB para una carpeta compartida Windows.
Buenas tardes Urtzi!!!
Estoy encantado con este blog y los vídeos en YouTube, tienes alguna formación COBOL DB2 CICS JCL en HÉRCULES, estoy interesado.
652619381 Madrid