lunes, 23 de octubre de 2023

Curso VDI FVMP. (1) Introducción e instalación de UDS DB Server, UDS Server y UDS Tunnel. Actor y cliente UDS

 0. Introducción

Conceptos básicos:

RDS (Remote Descktop Services) y Terminal Services: Acceso simultáneo a una sesión de escritorio remoto escritorio de uno o varios servidores.

VDI (Virtual Desktop Infraestructure): Aceso a un MV (Máquina Virtual).

Para Unix: Protocolo XRDP y escritorio gráfico ligero (XFCE, MATE o LXDE)

Aplicaciones remotas: Protocolo X2Go en Linux

Hardware VDI:

  1. Clusters de servidores 
  2. Electrónica de red
  3. Cabinas de almacenamiento (NAS)
  4. Cluster de tarjetas gráficas (Opcional) 
  5. Dispositivos clientes (Thin clients, zero client, PCs, tablets..)
Software VDI:
  1. Hyper Visor: Instalados en el cluster de servidores y asigna recursos a las MVs (memoria, procesador y disco). Ejemplos de Hioervisores son VMware vSphere, KVM,RHEV/oVirt, Microsoft Hyper-V, Citrix ,XenServer, vCloud, Microsoft Azure, OpenGnsys, OpenNebula, OpenStack, Proxmox y Nutanix Acropolis.
  2. MVs imágen, golden o master: Modelos de MVs a desplegar a los clientes.
  3. Broker de conexiones: En la UPV utilizan UDS Enterprise. Gestiona las conexiones, pools (grupos) de escritorios virtuales, cliclo de vida (sesiones temporales o permanentes, usuarios permitidos, horarios..), componentes externos de administración y software para los clientes (RDS,etc).
  4. S.O. del cliente
  5. Actor: Se instala en la VM (golden image) y sirve para:
    1. Desplegar los escritorios virtuales
    2. Presentar aplicaciones virtuales de RDS
    3. Controlar sesiones de usuarios en los equipos estáticos
  6. Cliente UDS: Se descarga desde la máquina física del cliente accediendo a la URL del UDS broker. Para cada SO hay una versión. Tambien hay una versión de navegador que no hace falta instalar nada (válida para tablets)

1. Instalación UDS enterprise 

Prerequisitos:
  1. Plataforma de virtualización (Hypervisores?) con usuario y contraseña de administrador, su IP y/o nombre del gestor.
  2. Servidor DNS y su IP (en este ejemplo 192.168.11.1)
  3. Servidor DHCP (para asignar IPs a los grupos de escritorios virtuales creados por UDS)
  4. Gateway y su IP (en este ejemplo 192.168.11.1 que es la misma que la del servidor DNS) 
  5. Nombre del DOMINIO si lo hubiera.
  6. 3 direcciones IP para UDS DB Server (MySQL),  UDS Server y UDS Tunnel  . Para nuestro ejemplo utilizaremos las IPs 192.168.11.70 a 72 y la máscara de 24 bits.

1.1 Instalación de UDS DB Server:

En FREE Edition y UDS Evaluation Edition permiten no disponer de un Servidor adicional para la base de datos:

  1. Si nos proporcionan el appliance (dispositivo) este, tiene de acceso (user:root y pwd: uds). Además tiene una instancia de BD llamada uds con user:uds y pws: uds . Hay que cambiar dichas contraseñas por temas de seguridad
  2. Modificar el fichero /etc/network/interfaces y en la parte de iface ens inet static le indicamos la IP de dicho servidor (192.168.11.70), la máscara (255.255.255.0) y la IP del gateway (192.168.11.1). 

  3. Modificar el fichero /etc/resolv.conf para dar los servidores DNS (ojo, en este ejemplo la IP del gateway es la misma que la del servidor DNS)

  4. Con user:root y pwd:uds creamos una nueva instancia de BD y creamos un usuario con permisos de administrador: 
    create database database_name character set utf8 collate utf8_general_ci;
    grant all on database_name.* to 'usuario'@'%' identified by 'password';
    
  5. Existe la herramienta Cockpit que permite administrar y monitorizar ciertos componentes del servidor.

1.2 Instalación de UDS Server:

  1. Si no disponemos de un servidor DHCP que proporcione la IP al UDS Server, se configurará la IP (192.168.11.71), máscara(24 bits), IP del gateway(192.168.11.1) ,nombre del servidor (udsserver) y servidor de DNS (192.168.11.1) de forma manual utilizando el comando:
    uds ip set 192.168.11.71/24 192.168.11.1 udsserver --dns 192.168.11.1
    
  2. Para configurar el UDS Server entramos en esta URL:
    http://192.168.11.234:9900
    
  3. Y nos pregunta: 
    1. Idioma
    2. Configuración de red (nombre del servidor, dominio,IP, máscara, IPs de gateway, servidor 1 y 2 de DNS)
    3. Idioma del teclado y zona horaria
    4. Dar la contraseña del usuario root de la consola local.
    5. Si disponemos de certificados de servidor se pide: Certificado PEM del servidor, clave privada PEM y opcionalmente la cadena de certificados PEM (chain file)
  4. Si queremos revisar algún parámetro se puede utilizar el comando uds. Para ver las opciones, ejecutar uds --help y nos muestra setup, cert, subscription, ip y help. Que són para:
    1. setup: Para acceder al setup via web
    2. cert: para suministrar los certificados PEM de servidor, clave privada y cadena
    3. subscription: consultar, renovar el tipo de subscripción
    4. ip: Para consultar, cambiar la IP

1.3 Instalación de UDS Tunnel:

Es muy parecida a la configuración de UDS Server.
  1. Si no disponemos de un servidor DHCP que proporcione la IP al UDS Tunnel, se configurará la IP (192.168.11.72), máscara(24 bits), IP del gateway(192.168.11.1) ,nombre del servidor (udstunnel) y servidor de DNS (192.168.11.1) de forma manual utilizando el comando:
    uds ip set 192.168.11.72/24 192.168.11.1 udstunnel --dns 192.168.11.1
    
  2. Para configurar el UDS Server entramos en esta URL:
    http://192.168.11.235:9900
    
  3. Y nos pregunta: 
    1. Idioma
    2. Configuración de red (nombre del servidor, dominio,IP, máscara, IPs de gateway, servidor 1 y 2 de DNS)
    3. Idioma del teclado y zona horaria
    4. Conexión al UDS Server: Indicar IP (192.168.11.71),y si es HTTP o HTTPS(si se instaló el certificado de servidor), y puerto (80)
    5. Si disponemos de certificados de servidor se pide: Certificado PEM del servidor, clave privada PEM y opcionalmente la cadena de certificados PEM (chain file)
  4. Si queremos revisar algún parámetro se puede utilizar el comando uds. Para ver las opciones, ejecutar uds --help y nos muestra setup, cert, subscription, ip y help. Que són para:
    1. setup: Para acceder al setup via web
    2. cert: para suministrar los certificados PEM de servidor, clave privada y cadena
    3. ip: Para consultar, cambiar la IP

2. Instalación de Actor y UDS client

2.1 Instalación de Actor 

Se instala desde el UDS Broker udsadmin-Downloads y aparecen diferentes opciones, que son muy parecidas. Cada una es para un tipo de conexión:
  1. UDSActorSetup-3.0.0.exe: Escritorios virtuales autogenerados Windows: El fichero exe indicado se instala en la Golden VM y nos pide:
    1. Idioma, validación SSL (certificado), IP del servidor UDS.
    2. Como características avanzadas podemos indicar scripts para : Preconnect (pre-conexión), Runonce(que se ejecuta una sola vez), PostConfig (tras la configuración del actor UDS)
    3. Inidicar bitácoras (logs): LogLevels (nivel de registros de logs)
  2. UDSActorUnmanagedSetup-3.0.0.exeEscritorios de IP estática Windows: Para controlar las sesiones de usuarios (login y logout) de una máquina concreta. El servicio a que pertenecen estas máquinas es de tipo Static Multiple IP. Y nos pide:
    1. Clave Service Token dada de alta en el servicio Static Multiple IP dentro del proveedor de servicios tipo Static IP Machines Provider, nombre y comentarios.Idioma,
    2. IP o nombre servidor UDS,  Clave Service Token (otra vez) , Log level
  3. Para linuxudsactor_3.0.0_all.deb (Debian), udsactor-3.0.0-1.noarch.rpm (Red Hat) y udsactor-opensuse-3.0.0-1.noarch.rpm (Suse). Se entra en aplicaciones (en la VM Golden) y se ejecuta UDS Actor Configuration y nos pide:
    1. Si queremos validacion por certificado (SSL validation), IP del servidopr UDS, tipo de autenticador (internal DB), username (administrador entorno UDS) y Password.
    2. Como características avanzadas podemos indicar scripts para : Preconnect (pre-conexión), Runonce(que se ejecuta una sola vez), PostConfig (tras la configuración del actor UDS)
    3. Inidicar bitácoras (logs): LogLevels (nivel de registros de logs)

2.2 Instalación del Cliente UDS 

Tal como se ha dicho en la introdución, se descarga desde la máquina física del cliente accediendo a la URL del UDS broker. Para cada SO hay una versión. Tambien hay una versión de navegador que no hace falta instalar nada (válida para tablets).

miércoles, 18 de octubre de 2023

Rendición de Cuentas de contabilidad. XSD a Pojo Eclips. Validación XML sobre esquema

 0. Introducción

Hay que enviar las cuentas a la Sindicatura de Cuentas. Para ello hay que adjuntar un fichero xml en base a un esquema xsd.

1. Localizar el esquema xsd

Googleando he encontrado esta url: https://www.pap.hacienda.gob.es/ficherosxsd/



2. Obtener clases java (pojos) a partir de xsd.

Ver el tutorial de JavaWebTutor 

Vamos a Eclipse y cremos un "package" por ejmplo "ximo.otherapps.sical2". Apretando el boton derecho del ratón sobre dicho paquete  y New-Other


JAXB Classes from Schema


Seleccionamos el proyecto, luego seleccionamos el fichero del esquema, y le indicamos el paquete y no indicamos nada mas

Y la siguiente pantalla la aceptamos tal como está

También aceptamos la siguiente pantalla tal como está

Luego nos avis que se pueden perder los ficheros de dicha carpeta y le decimos que si.

Y en la consola nos sale:

parsing a schema...
compiling a schema...
ximo/xotherapps/sical2/ApliPpriaGastos.java
ximo/xotherapps/sical2/ApliPpriaIngresos.java
ximo/xotherapps/sical2/ArrFinOtrOperaValoracion.java
ximo/xotherapps/sical2/ColsBalance.java
ximo/xotherapps/sical2/ColsContrAdmin.java
ximo/xotherapps/sical2/ColsCuenta.java
ximo/xotherapps/sical2/ColsEstCambPatri.java
ximo/xotherapps/sical2/ColsEstFlujoEfec.java
ximo/xotherapps/sical2/ColsEstPatrimonio.java
ximo/xotherapps/sical2/ColsMemModCoste.java
ximo/xotherapps/sical2/ColsMemModReval.java
ximo/xotherapps/sical2/ConceptoNoPresupuestario.java
ximo/xotherapps/sical2/CuentaNorm.java
ximo/xotherapps/sical2/EjActYAnt.java
ximo/xotherapps/sical2/EjActYAntOpc.java
ximo/xotherapps/sical2/NatAct.java
ximo/xotherapps/sical2/ObjectFactory.java
ximo/xotherapps/sical2/package-info.java

Y observamos que se han generado las clases en nuestro paquete.

3. Validar XML en base a un esquema

Adjunto una clase que contiene el método ValidateXML


package ximo.xotherapps.utils.basic;

import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;
import javax.xml.validation.Schema;
import org.xml.sax.SAXException;
import java.io.IOException;
import javax.xml.transform.stream.StreamSource;


public class JAXBUtils{
	
	
  /**
   * 
   * @param xmlFile
   * @param schemaFile is relative from resource folder
   * @return
   */
   public static boolean validateXML(String xmlFile, String schemaFile) {
        SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
        Schema schema = null;
        try {
            try {
            	schema = schemaFactory.newSchema(
            		new File(Thread.currentThread().getContextClassLoader().getResource(schemaFile).getPath()));
            } catch (Exception e1) {
            	schema = schemaFactory.newSchema(new File(schemaFile));
            }
            Validator validator = schema.newValidator();
            validator.validate(new StreamSource(new File(xmlFile)));
            return true;
            
        } catch (SAXException | IOException e) {
            e.printStackTrace();
            return false;
        }
    }
	
	
    public static void main (String[] args) {
	boolean ok=validateXML(
	"/home/ximo/contabilidad.xml",
	"/home/ximo/xsd/Cuenta-Norm-2019.xsd");

		
	if (ok) System.out.println("OK");
	else System.out.println("ERROR!");
    }

}	

4. Validador externo

En esta url: https://rendiciondecuentas.es/ValidacionExterior/home

Y llenamos los campos y seleccionamos el fichero y le damos a validar



Y en teroría el menos los efrrores estructurales no deberían aparecer (aunque los errores semánticos si que pueden haber)

5. Instrucciones de uso

Existe un pdf de instrucciones en la web del Consejo de Cuentas de Castilla y León.

martes, 17 de octubre de 2023

Ubuntu clonar disco duro con dd

0. Es recomendable arrancar el ordenador con un USB de Ubuntu y realizar estos pasos:


 1. Entrar en la herramienta disc y verlos dispositivos originales (/dev/sda) y los de copia (/dev/sdc) y comprobar que el disco que recibira la copia sea mayor que el original!


2. Ejecutar este comando para ver el progreso y esperar

sudo dd if=/dev/sda of=/dev/sdc bs=64K conv=noerror,sync status=progress

3. Cambiar los discos físicos , arrancar el ordenador y para que reconozca el nuevo tamaño de disco mayor hay que arancar con un USB con UBUNTU. y desde ahí en la herramienta gráfica disc podemos:

  1.  ampliar el tamaño del disco y 
  2.  reparar la unidad /dev/sda6 en mi caso

4. Comprobar que podemos escribir en dicho disco (por ejemplo haciendo ls>kk.txt)

5. Apagar el ordenador y quitar el USB y verificar que va bien

miércoles, 11 de octubre de 2023

Docker (13) : Retomar docker en 2022 (2). Copias de seguridad de imagenes y contenedores

1. Backup de imágenes

docker save imagen_id > nombre_fichero.tar 

2. Restauración de imágenes

docker load < nombre_fichero.tar

3. Crear y arrancar un contenedor a partir de la imagen descargada

Primero listamos las imagenes

docker images

Y despues arrancamos el contenedor, con todos los parámetros y opciones que haga faltapero en vez de darle el nombre de la imagen, le damos el id!

docker run parametros_varios imagen_id

4. Backup de contenedores

El backup de un contenedor genera una IMAGEN !!!, y además solo copia los file systems.
Además hay que buscar el command! Ver ServerFault
 
docker export contenedor_id > nombre_fichero.tar 

Para buscar el command hay que hacer 

docker ps -a

y devuelve en este caso

CONTAINER ID   IMAGE          COMMAND          CREATED          ...
109bfcb7caee   245e3fd12103   "./wrapper.sh"   2 minutes ago    ...

siendo pues el command ./wrapper.sh

5. Restaurar de contenedores

Como el backup de un contenedor genera una imagen, se tendrá que restaurar la imagen y luego crear un contenedor a partir de esta imagen y teniendo en cuenta el command 


docker import nombre_fichero.tar --change 'CMD ["./wrapper.sh"]' local:imp-image 

siendo local:imp-image el repositorio (local) y el nombre de la imagen (imp-image)
listamos la imágenes

docker images

REPOSITORY   TAG              IMAGE ID       CREATED          SIZE 
local        imp-image        06e277366ae7   4 seconds ago    132MB

Y despues arrancamos el contenedor, con todos los parámetros y opciones que haga falta pero en vez de darle el nombre de la imagen, le damos el id!

docker run parametros_varios imagen_id

docker run parametros_varios local:imp-image

6. Backup de volúmenes

Para  hacer backups de volúmenes, miramos el punto de montaje

docker volume inspect ximo-oracle-volume | grep Mount

y con este dato podemos copiar el contenido del volúmen a otra ubicación
 

jueves, 5 de octubre de 2023

Oracle 16- Nuevo enfoque (13). Oracle Enterprise con docker, La hora de la verdad. Restaurar una base de datos REAL de Datos tributarios

0. Introducción

 Nos han facilitado una copia de seguridad con estos ficheros:

  1. POBLACION_01.DUMP.gz
  2. POBLACION_02.DUMP.gz
  3. POBLACION_03.DUMP.gz
  4. exp_POBLACION.log
Donde POBLACION representa el nombre de nuestro municipio.

Vamos a empezar desde cero

Veamos los pasos a realizar

1. Crear un volumen de docker para compartir datos con el servidor

Veamos el proceso de creación de un volumen y mostrar información sobre su ubicación. En este caso se ha creado el volumen ximo-oracle-volume y la ubicacion en el servidor es en /var/lib/docker/volumes/my-volume/_data

#Manejo de un volumen 
#1 Crear un volumen
docker volume create ximo-oracle-volume
#2 Ver los volumenes creados docker volumen ls #3 Mostrar informacion del volumen docker volume inspect ximo-oracle-volume # Y obtenemos la ruta de montaje #[ # { # "CreatedAt": "2023-09-20T09:12:31+02:00", # "Driver": "local", # "Labels": null, # "Mountpoint": "/var/lib/docker/volumes/ximo-oracle-volume/_data", # "Name": "ximo-oracle-volume", # "Options": null, # "Scope": "local" # } #]

2. Descargar imagen y crear y arrancar el contenedor

Vamos a crear un contenedor a opartir de una imagen, aprovechando el volumen creado en el punto anterior. Los parámetros que le damos son:
  1. Imagen a descargar: container-registry.oracle.com/database/enterprise:latest
  2. Nombre del contendor a crear: oracle-enterprise 
  3. Mapeo del puerto 1521 a :  1111 
  4. Montaje de volumen del servidor: nombre del volúmen: ximo-oracle-volume  
  5. Montaje de volumen del servidor: punto de montaje del contenedor: /opt/ximo-volume  
  6. Contraseña de Oracle: myPassword 
  7. (Nuevo) Importante, para no tener problemas con el caracter set hay que darlññe la variable de entorno NLS_LANGUAGE=SPANISH_SPAIN.WE8ISO8859P1
docker run --name oracle-enterprise -p 1111:1521 -e ORACLE_PWD=myPassword -e NLS_LANGUAGE=SPANISH_SPAIN.WE8ISO8859P1 --mount source=ximo-oracle-volume,target=/opt/ximo-volume container-registry.oracle.com/database/enterprise:latest

Vamos a entrar en modo comandos y ver los contendores (BD de oracle) que tenemos. 

#ejecutamos en nuestro servidor local
docker exec -it oracle-enterprise /bin/bash

#estamos dentro del contenedor podman entramos en sqlplus como sysdba
bash-4.4$ sqlplus / as sysdba

#devuelve
#SQL*Plus: Release 21.0.0.0.0 - Production on Mon Sep 25 05:09:29 2023
#Version 21.3.0.0.0
#Copyright (c) 1982, 2021, Oracle.  All rights reserved.
#Connected to:
#Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
#Version 21.3.0.0.0

#ejecutamos la consulta de contenedores desde sqlplus
SQL> select con_id, name from v$containers;
#devuelve: CDB$ROOT, PDB$SEED, ORCLPDB1 

Y vemos que hay una base de datos creada ORCLPDB1 con la que vamos a trabajar (en entradas anteriores que trabajabamos en Oracle Express, la BD que tenimos era EXPDB1)

3. Conectarse con DBeaver

Actuamos igual que en entradas anteriores con Oracle Express.

1. Descargarse el driver jdbc de oracle desde https://www.oracle.com/database/technologies/appdev/jdbc-downloads.html y el driver descargado es ojdbc11.jar .

2. Entrar en DBeaver y en el menu Database Seleccionar Driver Manager 


Copiamos el driver de Oracle


Cambiamos el puerto a 1111 y hay que tener en cuenta que el default DB es ORCLPDB1 en vez de ORCL y la cambiamos



Vamos a la pestaña de libraries y le damos a Add File y buscamos el driver JDBC descargado


Y cuando le damos al boton  Find Class nos abre una pantalla de descarga que eleccionamos el último elemento


Ahora en la pantalla anterior indicamos Drivers class oracle.jdbc.OracleDriver y le dmos a OK y cerramos

Ahora en el Menu Database -> New Database Connection se elige una BD SQL y escogermos el nuevo driver Oracle-Enterprise y le damos al boton Next




Ahora le indicamos los parámetros marcados y le damos el pasword que le hemos dado "myPassword")




Debeis tener los parametros indicados en la pantalla.

Importante cambiar la BD a ORCLPDB1  !!! Y el usuario system !!! y el puerto 1111 (que por omisión es el 1511)


Le damos a test Connection y nos conecta






Y con DBeaver podemos ver los detalles de la BD:



4. Ver si tenemos un contenedor que nos valga.


Supongamos que ya hace dias que hemos creado el contenedor y lo tenemos parado. Necesitamos buscarlo y seleccionarlo 

docker ps -a
 
y obtenemos


Y vemos que nuestro contenedor es el primero 

5. Iniciar el contendor que está parado

Ejecutamos docker start "nombre del contenedor" ( o docker start "id del contenedor")

docker start oracle-enterprise

y comprobamos que el contenedor está arrancado con 

docker ps 

que devuelve:


Por tanto ya lo tenemos arrancado

6. Copiar ficheros de la copia de seguridad y ver informacion básica de la copia de seguridad

Para ello copiamos los ficheros del backup a la carpeta:

 /var/lib/docker/volumes/ximo-oracle-volume/_data/BKPS  

que se encuentra dentro de nuestro volumen docker. (si no existe, la creamos y le damos permisos 777)

Ahora descomprimimos los ficheros que estan comprimidos (extension .gz), pues he tenido problemas al cargar los ficheros comprimidos.

Ahora creamos un "directorio" de Oracle utilizando un script sql que se puede hacer desde DBeaver, y comprobamos que exista:

CREATE DIRECTORY oracle_backup_sql as '/opt/ximo-volume/BKPS';
SELECT * FROM ALL_DIRECTORIES; 

Para la BD documental se ha creado la carpeta BKPS_DOCUMENTAL con los ficheros enormes de documentos y hacemos
CREATE DIRECTORY oracle_backup_sql_doc as '/opt/ximo-volume/BKPS_DOCUMENTAL';

Ejecutamos el contenedor en modo shell.

docker exec -it fd4340afd331  /bin/bash

Creamos en nuestra máquina física la carpeta BKPS dentro de /var/lib/docker/volumes/ximo-oracle-volume/_data y le damos permisos a 777

Ahora queda descomprimir los ficheros indicados en la introducción (POBLACION_*.DUMP.gz) y copiarlos a /var/lib/docker/volumes/ximo-oracle-volume/_data/BKPS. Que se puede hacer desde la máquina física o desde docker. 

docker cp ruta_carpeta fd4340afd331:/opt/ximo-volume/BKPS

y ahora como dice stackoverflow podemos crear un fichero con el DDL y ver su contenido y modificando algunas cosillas. Para ello le damos la opción sqlfile=ddl_POBLACION.txt .Dentro del contenedor en la shell que estamos, ejecutamos:

impdp system/myPassword@ORCLPDB1 DIRECTORY = oracle_backup_sql dumpfile=POBLACION_01.DUMP,POBLACION_02.DUMP,POBLACION_03.DUMP logfile=carga_POBLACION.log sqlfile=ddl_POBLACION.txt

Hay que tener cuidado de no meter el mismo log que se nos ha proporcionado, pues escribe el nuevo log en el fichero que le indicamos y lo machaca.

Ese comando no hace cambios en la BD, pero el fichero generado es enorme tiene casi un millón de líneas!

7. Verificar el charset

Ejecutar en DBeaver:

SELECT PARAMETER, VALUE FROM V$NLS_PARAMETERS;
 

y comprobar que los valores sean : SPANISH_SPAIN.WE8ISO8859P1

NLS_NCHAR_CHARACTERSET  AL16UTF16  

NLS_CHARACTERSET       AL32UTF8   WE8ISO8859P1

NLS_TERRITORY          SPAIN    

NLS_LANGUAGE           SPANISH       

Si no es así, hay que cambiarlos ejecutando el siguiente script dentro de la sesion bash del contenedor. No se puede hacer con DBeaver.

Para entrar en sqlplus ejecutamos dentro de la shell del contenedor

sqlplus / as sysdba

Y debe aparecer 

SQL>

Y copiamos el siguiente script, (obtenido de Oracle y StackOverflow) que tarda bastante en ejecutar

SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
ALTER SYSTEM SET AQ_TM_PROCESSES=0;
ALTER DATABASE OPEN;
ALTER DATABASE CHARACTER SET INTERNAL_USE WE8ISO8859P1;
SHUTDOWN IMMEDIATE;
STARTUP;

Ahora con DBeaver ejecutar 

ALTER SESSION SET NLS_LANGUAGE = 'SPANISH';
ALTER SESSION SET NLS_TERRITORY = 'SPAIN';
ALTER SESSION SET NLS_DATE_LANGUAGE = 'SPANISH';

Y comprobamos otra vez con

SELECT PARAMETER, VALUE FROM V$NLS_PARAMETERS;
 
PARAMETER              |VALUE                     |
-----------------------+--------------------------+
NLS_LANGUAGE           |SPANISH                   |
NLS_TERRITORY          |SPAIN                     |
NLS_ISO_CURRENCY       |SPAIN                     |
NLS_NUMERIC_CHARACTERS |,.                        |
NLS_CALENDAR           |GREGORIAN                 |
NLS_DATE_FORMAT        |DD/MM/RR                  |
NLS_DATE_LANGUAGE      |SPANISH                   |
NLS_CHARACTERSET       |WE8ISO8859P1              |
NLS_SORT               |SPANISH                   |
NLS_TIME_FORMAT        |HH24:MI:SSXFF             |
NLS_TIMESTAMP_FORMAT   |DD/MM/RR HH24:MI:SSXFF    |
NLS_TIME_TZ_FORMAT     |HH24:MI:SSXFF TZR         |
NLS_TIMESTAMP_TZ_FORMAT|DD/MM/RR HH24:MI:SSXFF TZR|
NLS_NCHAR_CHARACTERSET |AL16UTF16                 |
NLS_COMP               |BINARY                    |
NLS_LENGTH_SEMANTICS   |BYTE                      |
NLS_NCHAR_CONV_EXCP    |FALSE                     |

Ahora por si acaso sale este error al pedir la copia de seguridad:

Connected to: Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production

ORA-39006: internal error

ORA-39213: Metadata processing is not available

Hay que ejecutar en SQLPLUS (no en DBeaver)

SQL> execute dbms_metadata_util.load_stylesheets;


7. Restaurar la copia de seguridad

Para ello utilizamos el comando anterior y le quitamos la opción sqlfile=ddl_POBLACION.txt . Y lo ejecutamos dentro de la shell abierta en el contenedor:

impdp system/myPassword@ORCLPDB1 DIRECTORY = oracle_backup_sql dumpfile=POBLACION_01.DUMP,POBLACION_02.DUMP,POBLACION_03.DUMP logfile=carga_POBLACION.log

o también más simple

impdp system/myPassword@ORCLPDB1 DIRECTORY = oracle_backup_sql dumpfile=POBLACION_%U.DUMP logfile=carga_POBLACION.log

En la BD documental hacemos
impdp system/myPassword@ORCLPDB1 DIRECTORY = oracle_backup_sql_doc dumpfile=ADE_POBLACION_GTTL_%U.dmp logfile=carga_ADE_POBLACION.log

Y nos salen los siguientes errores y avisos:

ORA-00959: tablespace 'DATOS10' does not exist
ORA-00959: tablespace 'DATOS11' does not exist
ORA-00959: tablespace 'DATOS12' does not exist
ORA-00959: tablespace 'TOOLS' does not exist
ORA-00959: tablespace 'LOBSTS' does not exist
ORA-00959: tablespace 'INDICES10' does not exist
ORA-00959: tablespace 'INDICES11' does not exist
ORA-00959: tablespace 'STAT' does not exist

ORA-01919: role 'JAVA_DEPLOY' does not exist ORA-01919: role 'LECTORES' does not exist ORA-39112: Dependent object type COMMENT skipped, base object type TABLE:"OPS$GTTORA"."AACO_APLAZ_APLICACION_COSE" creation failed

Hay una advertencia que genera los últimops errores y se refiere al charset
==============================================================================
import done in AL32UTF8 character set and AL16UTF16 NCHAR character set
export done in WE8ISO8859P1 character set and AL16UTF16 NCHAR character set
==============================================================================
ORA-02374: conversion error loading table "OPS$GTTORA"."VALO_VALORES"
ORA-12899: value too large for column NOMBRE_SP_VALO (actual: 61, maximum: 60)
ORA-02372: data for row: NOMBRE_SP_VALO : 'STUURGROUP FLEET NETTHERLANDS BV SUCURSAL SUCURSAL'

Después de arreglar el charset pueden aparecer estos errores:
ORA-39006: internal error
ORA-39213: Metadada processing not available

Errores de creacion de índices que utiliza funciones que no se han guardado en el backup
==============================================================================
Estos errores en principio no tendrian porque preocuparnos ,pues los índices
no aportan información nueva
ORA-39083: Object type INDEX:"OPS$GTTORA"."IX_AGPE_ANAGRAMA" failed to create with error:
ORA-00904: "OPS$GTTORA"."ANAGRAMA_NOMBRE": invalid identifier
Failing sql is:
CREATE INDEX "OPS$GTTORA"."IX_AGPE_ANAGRAMA" ON "OPS$GTTORA"."AGPE_AGRUPACIONES_PERSONAS" (SUBSTR("OPS$GTTORA"."ANAGRAMA_NOMBRE"("NOMBRE_AGPE"),1,60)) PCTFREE 10 INITRANS 2 MAXTRANS 255  STORAGE(INITIAL 9830400 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "INDICES11" 
Las funciones que no disponemos son:
ANAGRAMA_NOMBRE
PARTENUMERICANIF
OBTENERMATRICULAORDENACION
PESONOMBRE

Errores de creacion de vistas que utiliza funciones que no se han guardado en el backup
==============================================================================
Estamos en en un caso muy parecido l anterior anterior

En la BD Documental salen estos avisos:

ORA-00959: tablespace 'DATOS' does not exist
ORA-00959: tablespace 'LOBDTS' does not exist
ORA-00959: tablespace 'ARCHDIG' does not exist
ORA-00959: tablespace 'INDICES' does not exist
ORA-00959: tablespace 'LOBIDX' does not exist


8. Resolución de errores

8.1 Para solucionar el problema del character set hay que darle la variable de entorno  (se ha actualizado el principio de este post para tenerlo en cuenta pues de lo contrario la cosa se lía)

NLS_LANGUAGE=SPANISH_SPAIN.WE8ISO8859P1

La opción mas fácil tal vez habría sido crear el contenedor y pasarle dicha variable de entorno y actuaríamos así, cosa que hemos destacado al principio de estra entrada.

docker run --name oracle-enterprise -p 1111:1521 -e ORACLE_PWD=myPassword -e NLS_LANGUAGE=SPANISH_SPAIN.WE8MSWIN1252 --mount source=ximo-oracle-volume,target=/opt/ximo-volume container-registry.oracle.com/database/enterprise:latest


8.2 Primero vamos a borrar el esquema que ha creado el backup pues faltan muchas tablas  (OPS$GTTORA), y así poder restaurar otra vez el backup. Para elo desde DBeaver:

DROP USER "OPS$GTTORA" CASCADE;

y con ello limpiamos espacio de disco


7.2 Vamos a crear todos los "tablespaces" que no se encontraban: DATOS10, ... y STAT asignándoles un espacio de 100MB y autoincremento.

CREATE TABLESPACE DATOS10   DATAFILE '/opt/oracle/oradata/ORCLCDB/datos10.dbf'   SIZE 100M AUTOEXTEND ON;
CREATE TABLESPACE DATOS11   DATAFILE '/opt/oracle/oradata/ORCLCDB/datos11.dbf'   SIZE 100M AUTOEXTEND ON;
CREATE TABLESPACE DATOS12   DATAFILE '/opt/oracle/oradata/ORCLCDB/datos12.dbf'   SIZE 100M AUTOEXTEND ON;
CREATE TABLESPACE TOOLS     DATAFILE '/opt/oracle/oradata/ORCLCDB/toots.dbf'     SIZE 100M AUTOEXTEND ON;
CREATE TABLESPACE LOBSTS    DATAFILE '/opt/oracle/oradata/ORCLCDB/lobsts.dbf'    SIZE 100M AUTOEXTEND ON;
CREATE TABLESPACE INDICES10 DATAFILE '/opt/oracle/oradata/ORCLCDB/indices10.dbf' SIZE 100M AUTOEXTEND ON;
CREATE TABLESPACE INDICES11 DATAFILE '/opt/oracle/oradata/ORCLCDB/indices11.dbf' SIZE 100M AUTOEXTEND ON;
CREATE TABLESPACE STAT      DATAFILE '/opt/oracle/oradata/ORCLCDB/stat.dbf'      SIZE 100M AUTOEXTEND ON;

En la BD Documental hay que tener en cuenta que hay que crear BIGFILE !!! .Hacemos:

CREATE BIGFILE TABLESPACE DATOS DATAFILE '/opt/oracle/oradata/ORCLCDB/datos_doc.dbf' SIZE 20G AUTOEXTEND ON NEXT 20G;

CREATE BIGFILE TABLESPACE LOBDTS DATAFILE '/opt/oracle/oradata/ORCLCDB/lobdts_doc.dbf' SIZE 20G AUTOEXTEND ON NEXT 20G;

CREATE BIGFILE TABLESPACE ARCHDIG DATAFILE '/opt/oracle/oradata/ORCLCDB/archdig_doc.dbf' SIZE 20G AUTOEXTEND ON NEXT 20G;

CREATE BIGFILE TABLESPACE INDICES DATAFILE '/opt/oracle/oradata/ORCLCDB/indices_doc.dbf' SIZE 20G AUTOEXTEND ON NEXT 20G;

CREATE BIGFILE TABLESPACE LOBIDX DATAFILE '/opt/oracle/oradata/ORCLCDB/lobidx_doc.dbf' SIZE 20G AUTOEXTEND ON NEXT 20G;


8.3 Vamos a crear los roles JAVA_DEPLOY, LECTORES y asignarles permisos

CREATE ROLE JAVA_DEPLOY NOT IDENTIFIED;
CREATE ROLE LECTORES    NOT IDENTIFIED;

GRANT DBA                 TO JAVA_DEPLOY;
GRANT SELECT_CATALOG_ROLE TO LECTORES;

En la BD Documental hay que crear el ROLE SIT_GTTL_DBL

CREATE ROLE SIT_GTTL_DBL NOT IDENTIFIED;


8.4 Vamos a restaurar el backup, indicando otro fichero log, desde una sesión bash del contenedor:

impdp system/myPassword@ORCLPDB1 DIRECTORY = oracle_backup_sql dumpfile=POBLACION_%U.DUMP logfile=carga3_POBLACION.log

8.5 Si acaso sale este error al pedir la copia de seguridad:

Connected to: Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production

ORA-39006: internal error

ORA-39213: Metadata processing is not available

Hay que ejecutar en SQLPLUS (no en DBeaver)

SQL> execute dbms_metadata_util.load_stylesheets;


9. Restaurar una única tabla del backup

Por ejemplo queremos restaurar solo la tabla ADDE_DOCUMENTOS_ESCANEADOS del fichero dump. Para ello, si existe dicha tabla, se renombra o se borra y se ejectura el mismo comando de carga del backup pero añadiendo TABLES='OPS$AD_GTTL'.ADDE_DOCUMENTOS_ESCANEADOS 

impdp system/myPassword@ORCLPDB1 TABLES = 'OPS$AD_GTTL'.ADDE_DOCUMENTOS_ESCANEADOS DIRECTORY = oracle_backup_sql dumpfile=POBLACION_%U.DUMP logfile=carga3_POBLACION.log

 

10. Problema al restaurar la BD Documental

Al restaurar la BD Documental aparece este error

#1.-- Ejecución del comando
bash-4.2$ impdp system/myPassword@ORCLPDB1 TABLES = 'OPS$AD_GTTL'.ADDE_DOCUMENTOS_ESCANEADOS DIRECTORY = ORACLE_BACKUP_SQL_DOC  dumpfile=ADE_POBLACION_GTTL_%U.dmp logfile=carga_ADE_POBLACION.4.log

#2.-- Log de la ejecución
Import: Release 21.0.0.0.0 - Production on Mon Dec 18 07:00:41 2023
Version 21.3.0.0.0 Copyright (c) 1982, 2021, Oracle and/or its affiliates. All rights reserved. Connected to: Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production Master table "SYSTEM"."SYS_IMPORT_TABLE_01" successfully loaded/unloaded Starting "SYSTEM"."SYS_IMPORT_TABLE_01": system/********@ORCLPDB1 TABLES=OPS$AD_GTTL.ADDE_DOCUMENTOS_ESCANEADOS DIRECTORY=ORACLE_BACKUP_SQL_DOC dumpfile=ADE_POBLACION_GTTL_%U.dmp logfile=carga_ADE_POBLACION.4.log Processing object type SCHEMA_EXPORT/TABLE/TABLE Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA ORA-31693: Table data object "OPS$AD_GTTL"."ADDE_DOCUMENTOS_ESCANEADOS" failed to load/unload and is being skipped due to error: ORA-02354: error in exporting/importing data ORA-39840: A data load operation has detected data stream format error . ORA-39844: Bad stream format detected: [klaprs_12] [0] [512] [0] [3] [985] [] [] Processing object type SCHEMA_EXPORT/TABLE/AUDIT_OBJ Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS Job "SYSTEM"."SYS_IMPORT_TABLE_01" completed with 1 error(s) at Mon Dec 18 07:00:49 2023 elapsed 0 00:00:06

Parece ser que hay una corrupción del fichero DUMP, pues se han cargado otras tablas que contienen BLOBs sin problemas.