• Inicio
  • Novedades
  • Academia SAP
  • FAQ
  • Blog
  • Contacto
S4PCADEMY_Logo
Twitter Linkedin Instagram
S4PCADEMY_Logo
Twitter Linkedin Instagram
SAP S/4HANA

Copiar/Migrar datos en SAP HANA Cloud

By s4pcademy 


Esta publicación de blog es parte de una serie más grande, visite la publicación general de Volker Saggau aquí:

Al final de esto, podrá crear una copia desde un sistema SAP HANA Cloud administrado por fundición en la nube. Esto incluirá:

  • Capacidades completas de modelado en la nueva copia
  • Gestión de fundición en la nube (visible en BTP)
  • Actualice fácilmente el nuevo sistema con datos utilizando las capacidades de almacenamiento en la nube existentes

Usaré el escenario de plantilla de federación de SAP HANA Cloud: que describí. aquí:

Lo que cubriré es el camino verde y morado en la imagen de arriba que incluye:

  • Exportación de datos de catálogo desde el sistema de producción a un almacenamiento en la nube (AWS en este caso) mediante la API de EXPORTACIÓN de SQL
  • Implementación previa a HDI: cree artefactos no gestionados por HDI (Usuarios [Remote, SAC, …]Roles, privilegios, fuentes remotas (opcional)
  • Recrear los servicios de Cloud Foundry que consumen las aplicaciones
  • Implementación HDI: implemente el contenedor HDI sin datos en la base de datos
  • Post-HDI-Implementación: asigne roles generados por HDI-Container a roles creados en Pre-HDI-Deployment
  • [SAC]: Crear conexión con el sistema PreProd
  • [SAC]: Crear/Copiar historia de producción a preproducción
  • Importe datos desde el almacenamiento en la nube al sistema.

Sin embargo, una vez que se configura el sistema de preproducción (objetos de tiempo de ejecución y tiempo de diseño), el proceso simplemente incluye:

  • Exporte datos de catálogo desde producción a un almacenamiento en la nube que se encuentre en la misma región que su base de datos
  • Importe datos del catálogo desde el almacenamiento en la nube a la base de datos de preproducción
  • Implemente la última versión productiva del código

Exportación de datos del catálogo desde el sistema de producción a un almacenamiento en la nube en SAP BTP (AWS en este caso) utilizando la API de EXPORTACIÓN de SQL

En el código a continuación, puede ver las consultas sql que ejecuté contra la base de datos de producción, solo para mostrarle qué tablas estaban dentro del esquema de la base de datos JOERMUNGANDR_DATA_FOUNDATION. Estos objetos se exportarán a continuación a un depósito de S3

--Production system (export)
--show the current table content of schema 'JOERMUNGANDR_DATA_FOUNDATION'
select * from m_tables where schema_name="JOERMUNGANDR_DATA_FOUNDATION";

-- SQL Result 
/**
SCHEMA_NAME;                    TABLE_NAME;                                     RECORD_COUNT;   TABLE_SIZE
JOERMUNGANDR_DATA_FOUNDATION;   dl.df.joermungandr.data::TG_MIDGARD_SERPENT;    5000000;        10928
JOERMUNGANDR_DATA_FOUNDATION;   dl.df.joermungandr.data::TG_NORTHWIND;          91;             10992
JOERMUNGANDR_DATA_FOUNDATION;   dl.df.joermungandr.data::TG_ORDERS;             1000980;        1480444
JOERMUNGANDR_DATA_FOUNDATION;   dl.df.joermungandr.data::TG_ORDER_DETAILS;      2155;           87796
JOERMUNGANDR_DATA_FOUNDATION;   dl.df.joermungandr.data::TG_PRODUCTS;           77;             10976
JOERMUNGANDR_DATA_FOUNDATION;   dl.df.joermungandr.data::TG_SALES_BY_CATEGORIES;77;             10880
**/
 

Agregue Object Store a su cuenta BTP

Documentación del almacén de objetos aquí.

Ingrese a su subcuenta BTP y al espacio donde desea crear la Tienda de Objetos.

(para mí, ese es el espacio de la base de datos, ya que separamos la base de datos para desarrollo/calidad/producción de los espacios de desarrollo de aplicaciones)

Y seleccione «Mercado de servicios» donde busque «Tienda de objetos»

Cree una nueva Instancia/Suscripción, a continuación se muestra lo que usé para esta demostración.

Tras la creación del Almacén de objetos, podrá ver las credenciales importantes necesarias para iniciar sesión en su almacenamiento.

Verifique el contenido de Object Store, como se mencionó en mi caso, es un depósito S3 y está vacío.

Una vez que ejecutamos el comando exportar, excluyendo datos remotosel cubo S3 se llenará.

-- executed in production with a data admin user
EXPORT ALL HAVING
schema_name="JOERMUNGANDR_DATA_FOUNDATION" AND
object_type="TABLE" AND -- only of type table e.g. no views
object_name like 'dl.df.joermungandr.data%' AND -- export only objects within this namespace
object_name not like '%dl.df.joermungandr.data::VT%' -- exclude virtual tables
as binary raw -- binary type as supposed to be the fastest for large exports
INTO 's3-<region>://<access_key>:<secret_key>@<bucket_name>/<object_id>'
no remote data -- this will not fetch remote data (virtual table contents) into the export
;

PRECAUCIÓN: Si el No se agrega la sintaxis «sin datos remotos»el comando de exportación solicitaría TODOS los datos de origen de tablas virtuales que pueden conducir a cantidades masivas de datos.

NOTA: si esta consulta SQL falla con un error SSL_VALIDATION, asegúrese de que los certificados se agreguen a HANADB y a una colección de certificados, lea más aquí.

S3 bucket después de ejecutar la consulta de exportación en producción

Y dentro de la carpeta verás la estructura de exportación del catálogo.

Y dentro de la carpeta de índice y esquema encontrará los datos de la tabla

Pero a partir de ahora no hay ningún lugar para importar estos datos, así que diríjase a su cuenta BTP de Cloud Foundry y cree una base de datos en la nube CF space & hana.

Implementación previa a HDI: cree artefactos no gestionados por HDI (Usuarios [Remote, SAC, …]Roles, privilegios, fuentes remotas (opcional)

Suponiendo que haya creado el nuevo espacio CF y DB, continuemos en él.

Como queremos acceder a los datos del panel de control en la nube de SAP Analytics, necesitaremos un usuario técnico para conectarnos a la base de datos de preproducción.

Ese usuario de informes también necesitará privilegios para consumir los objetos dentro del contenedor HDI de informes, que no podemos asignar ahora ya que solo existen. Implementación posterior a HDI.

--Execute in PreProd
-------------------------------------------------------
CREATE USER SAC_PREPROD password ********;

-- Empty Shell -> Read role grants access to all scenario HDI containers, but will be granted the rights --- only post hdi-container deployment 
CREATE ROLE EDEN_REPORTING_READ; 
GRANT EDEN_REPORTING_READ to SAC_PREPROD;

Recrear los servicios de Cloud Foundry que consumen las aplicaciones

Los servicios necesarios para la aplicación se pueden ver y obtener desde Business Application Studio desde la pestaña Proyectos de SAP HANA o desde el archivo mta.yaml.

Para volver a crear los servicios de fundición en la nube, simplemente ingrese a su cuenta BTP y obtenga las credenciales para los servicios desde allí.

Credenciales para el servicio EDEN-remote-source-ups obtenidas de sistema fuente

{
    "certificate": "-----BEGIN CERTIFICATE-----\n<hash>\n-----END CERTIFICATE-----",
    "driver": "com.sap.db.jdbc.Driver",
    "host": "***.hana.canary-eu10.hanacloud.ondemand.com",
    "password": "************",
    "port": "443",
    "tags": [
        "hana"
    ],
    "user": "eden_remote_grantor"
}

Para el nuevo servicio de ups en preproducción, reemplace el host y la contraseña con valores de preproducción relevantes.

Aquí está el fragmento para crear el usuario eden_remote_grantor utilizado por los servicios proporcionados por el usuario (EDEN-remote-source-ups).

Los roles *_REMOTE_SOURCE se utilizan en caso de que necesite el SAI para poder acceder a los sistemas/fuentes remotos y solo son implementaciones posteriores a HDI.

-- execute in preprod
-------------------------------------------------------
CREATE USER EDEN_REMOTE_GRANTOR PASSWORD "*********";

-- Role eden_remote_read will be granted all relevant remote source privileged roles (SDI/SDA/OData) to access replication source systems
create role eden_remote_read;
grant eden_remote_read to EDEN_REMOTE_GRANTOR;
 
-- Shangri-la roles
-- Create Roles for Remote Source
CREATE ROLE SHANGRILA_REMOTE_SOURCE;
CREATE ROLE SHANGRILA_REMOTE_SOURCE_GRANTABLE;

grant SHANGRILA_REMOTE_SOURCE to eden_remote_read with admin option;
grant SHANGRILA_REMOTE_SOURCE_GRANTABLE to eden_remote_read with admin option;
 
-- Joermungandr roles
CREATE ROLE JOERMUNGANDR_REMOTE_SOURCE;
CREATE ROLE JOERMUNGANDR_REMOTE_SOURCE_GRANTABLE;
 
grant JOERMUNGANDR_REMOTE_SOURCE to eden_remote_read with admin option;
grant JOERMUNGANDR_REMOTE_SOURCE_GRANTABLE to eden_remote_read with admin option;
-------------------------------------------------------

Esta publicación de blog no incluye el uso de fuentes remotas, ya que importamos y exportamos los datos mediante el almacenamiento en la nube, pero puede usar la plantilla anterior para asignar los privilegios a remote_grantor_user.

Implementación HDI: implemente el contenedor HDI sin datos en la base de datos

Dado que la capa de informes EDEN-Reporting tiene objetos (vistas de cálculo) que utilizan sinónimos que apuntan a los contenedores HDI de la infraestructura de datos, debemos implementar los contenedores HDI de la infraestructura de datos. primero.

HDI%20Implementación%20Orden

Orden de implementación de HDI

Para este ejemplo, implementé el Joermungandr MTAR primero. (1a)

Joermungandr: despliegue de contenedores hdi vacíos

Incluso cuando los despliegues iniciales de MTAR fallar la IDH se creará el contenedor. En caso de que necesite ajustar más de uno o dos archivos, es mucho más rápido conectarse al contenedor creado en BAJO y arreglar/implementar desde allí.

Que es visible en la vista del espacio BTP:

Ignore eden-reporting-hdi en la captura de pantalla, no estará allí si implementa inicialmente las bases de datos.

Pero debería tener EDEN-remote-source-ups y joemungandr-data-hdi después de la implementación de MTAR.

Entrar en el espacio de trabajo de BAS después de la implementación de MTAR debería darte algo como esto:

BAS%3A%20Joermungandr%20proyecto%20ver

BAS: vista del proyecto Joermungandr

En caso de que tenga artefactos que utilicen objetos remotos (tablas virtuales, tareas de replicación), debe tener la fuente remota utilizada en estos objetos remotos ya creada y configurada antes de la implementación o las implementaciones fallarán.

Si necesita excluir un artefacto, simplemente cambie sus extensiones a .txt y se ignorará durante la implementación.

Para la capa de EDEN-Reporting seguí los mismos pasos:

  1. Implemente el contenedor MTAR (para obtener un contenedor de caparazón vacío)
  2. Vaya a BAS y conecte el contenedor HDI
  3. Conectar servicios y comprobar la implementación
  4. Eliminar errores de implementación (la mayoría de las veces excluye archivos de la implementación que requieren datos remotos)

Post-HDI-Implementación: asigne roles generados por HDI-Container a roles creados en Pre-HDI-Deployment

El rol creado manualmente EDEN_REPORTING_READ ahora se puede asignar a los roles generados por hdi

  • dl.df.joermungandr.auth::Leer
  • dl.informes.auth::Leer

después de la implementación del contenedor HDI.

Probar la configuración de la base de datos

Vaya a su Explorador de base de datos y conecte el recién creado IDH contenedores

  • Joermungandr
  • Informes de Eden

Para nuestro caso de informe, necesitamos los roles de eden-reporting-hdi. (asigne los roles a través de declaraciones de concesión o a través de la cabina de dba)

Conecte%20a%20su%20DB%20donde%20los%20contenedores%20HDI%20estén%20implementados

Conéctese a su base de datos donde se implementan los contenedores HDI

Ahora pruebe si su usuario SAC creado (SAC_PREPROD) puede consultar vistas desde el contenedor eden-reporting-hdi.

Para ello, conéctese a la base de datos preprod con su usuario SAC y una consola sql:

-- exeucted in preprod with user SAC_PREPROD
SELECT
    "OrderID",
    SUM("CC_SALES") AS "CC_SALES"
FROM "EDEN_REPORTING"."dl.reporting.view::CV_ORDERS"
GROUP BY "OrderID"

No se pudo ejecutar ‘SELECT «OrderID», «CustomerID», «EmployeeID», «OrderDate», …’
Error: (dberror) [258]: privilegio insuficiente: se puede encontrar información detallada para este error con guid ‘5F227C3542AB8B41BCE145E6B20A97B6’

Ahora agregue el rol EDEN_REPORTING_READ a SAC_PREPROD y la consulta no fallará más.

[SAC]: Crear conexión con el sistema PreProd

Dentro de mi inquilino SAC, creé una nueva conexión HANA Live y usé el usuario SAC_PREPROD creado anteriormente con los roles para eden-reporting-hdi asignados en el capítulo anterior.

Host es la base de datos del sistema de preproducción en BTP que creamos antes.

[SAC]: Crear/Copiar historia desde su sistema de producción a preproducción

En SAC tenía las siguientes cosas que hacer:

  • Cree una conexión en vivo de HANA a la nueva base de datos preprod con el usuario SAC_PEPROD
  • Copie el modelo de producción
    • Cambiar la fuente de datos a preprod
    • seleccione la vista de cálculo del contenedor HDI de informes de EDEN.
  • Copie la historia de producción e intercambie la fuente de datos para usar el modelo de preprod creado anteriormente.

Es posible que deba permitir que la dirección IP del sistema SAC llame a la base de datos de preproducción a través de Centro de la nube de SAP HANA.

Inicialmente, mi copia de la historia de SAC estará en blanco ya que los datos aún no están dentro del contenedor de preproducción HDI.

[DBX] Importar datos desde el almacenamiento en la nube al sistema

En la historia de SAC, utilicé un gráfico de tabla simple para visualizar la vista de cálculo dentro del contenedor hdi de eden-reporting.

En mi escenario, las estructuras de la tabla existirán pero están vacías.

Esto se debe al hecho de que las tablas se crearon durante la implementación del contenedor HDI y son administradas por el contenedor HDI.

Antes de importar los datos, puede verificar el contenido de la exportación de datos con la sintaxis IMPORT SCAN:

import scan 's3-<region>://<access_key>:<secret_key>@<bucket_name>/<object_id>';
SELECT * FROM #IMPORT_SCAN_RESULT;

Esto le mostrará si los objetos que está a punto de importar ya existe. Si ese es el caso, puede proporcionar el SOLO DATOS Opción para excluir la sustitución de las estructuras de tabla existentes con la importación y solo importar los datos.

import all from 's3-<region>://<access_key>:<secret_key>@<bucket_name>/<object_id>' with threads 4 DATA ONLY;

Compruebe si las tablas se han cargado.

select schema_name, table_name, record_count, table_size from m_tables where schema_name="JOERMUNGANDR_DATA_FOUNDATION";

Ahora vuelva a consultar la historia de SAC:

Conclusión

Como puede ver, es un poco de esfuerzo inicialmente configurarlo todo, pero una vez que lo haya hecho, simplemente tiene que ejecutar los dos comandos de consulta de exportación/importación y obtener una actualización completa de los datos.

Por favor, deje un comentario en caso de que tenga preguntas o comentarios.

Salud,

Yves




Solicitudes de compra visuales: SAP Build Apps y S/4HANA Cloud
Previo
SAP Analysis para Microsoft Office: edición estándar frente a SAP Analytics Cloud
Siguiente

Madrid

Calle Eloy Gonzalo, 27
Madrid, Madrid.
Código Postal 28010

México

Paseo de la Reforma 26
Colonia Juárez,  Cuauhtémoc
Ciudad de México 06600

Costa Rica

Real Cariari
Autopista General Cañas, 
San José, SJ 40104

Perú

Av. Jorge Basadre 349
San Isidro
Lima, LIM 15073

Twitter Linkedin Instagram
Copyright 2022 | All Right Reserved.