Slide 1

Slide 1 text

LAOUC Community Tour 2024 2 a 23 de Agosto 2024 Utilice Slack y MS Teams para observar y controlar las bases de datos de Oracle

Slide 2

Slide 2 text

Database Reliability Engineering MAA ⁘ RAC ⁘ RMAN Data Guard ⁘ Sharding ⁘ Partitioning Information Lifecycle Management Exadata & Engineered Systems Database Modernization Upgrades ⁘ Patching ⁘ Migrations Cloud ⁘ Hybrid Automation DevOps ⁘ IaC ⁘ Containers ⁘ Terraform Vagrant ⁘ Ansible Observability AHF ⁘ TFA ⁘ CHA ⁘ CHM

Slide 3

Slide 3 text

www.viscosityna.com @ViscosityNA Oracle on Docker Running Oracle Databases in Linux Containers Free sample chapter: https://oraclesean.com

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

km mi Mexico 3,584 2,227 Guatemala 1,056 656 Costa Rica 854 531 Panama 1,813 1,127 Chile 4,985 3,098 Brazil 2,617 1,626 Uruguay 1,567 974 Argentina 221 137 Paraguay 1,037 644 Home 9,753 6,061 ------ ------ 27,487 17,081 ¡Me gustan los aviones! ¡Me gustas tú! ¡Me gusta viajar! ¡Me gustas tú! ~ Manu Chao

Slide 6

Slide 6 text

www.viscosityna.com @ViscosityNA ¡Gracias por su paciencia y comprensión!

Slide 7

Slide 7 text

@ViscosityNA www.viscosityna.com ChatOps y cultura de servicio

Slide 8

Slide 8 text

@ViscosityNA www.viscosityna.com La ingeniería tiene clientes.

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

@ViscosityNA www.viscosityna.com Cuantos ingenieros se necesitan...

Slide 11

Slide 11 text

@ViscosityNA www.viscosityna.com El lado feo... • Desconexión del desarrollo • Aplicación heredada • Carga de trabajo

Slide 12

Slide 12 text

@ViscosityNA www.viscosityna.com Paralización

Slide 13

Slide 13 text

@ViscosityNA www.viscosityna.com Notificaciones pasivas

Slide 14

Slide 14 text

@ViscosityNA www.viscosityna.com Oracle ➞ Slack: enviar un canal por correo • Agregar la aplicación de correo electrónico en un canal • Requiere el plan pago • Obtenga la dirección de correo electrónico única del canal • Enviar correo electrónico • UTL_SMTP

Slide 15

Slide 15 text

@ViscosityNA www.viscosityna.com Oracle ➞ Slack: Webhooks entrantes • Agregue la aplicación Webhooks entrantes a Slack • Disponible con el nivel gratuito • Instalar y configurar webhooks entrantes en un canal • Enviar mensaje REST vía POST • UTL_HTTP

Slide 16

Slide 16 text

@ViscosityNA www.viscosityna.com

Slide 17

Slide 17 text

@ViscosityNA www.viscosityna.com

Slide 18

Slide 18 text

@ViscosityNA www.viscosityna.com

Slide 19

Slide 19 text

@ViscosityNA www.viscosityna.com

Slide 20

Slide 20 text

@ViscosityNA www.viscosityna.com Oracle ➞ Slack: Webhooks entrantes • Descargue el certificado de CA raíz de Slack/Teams • crear una billetera • Agregue el certificado a la billetera • Enviar una notificación

Slide 21

Slide 21 text

@ViscosityNA www.viscosityna.com Cree una billetera y agregue el certificado Agregar certificado ------------------- $ orapki wallet add -wallet $WALLET_DIR \ -trusted_cert -cert \ "$WALLET_DIR/slack-com.pem" \ -pwd $WALLET_PWD Establecer entorno ------------------ export WALLET_DIR=/wallet_directory export WALLET_PWD=password Crear billetera --------------- $ orapki wallet create -wallet \ $WALLET_DIR -pwd $WALLET_PWD \ -auto_login

Slide 22

Slide 22 text

@ViscosityNA www.viscosityna.com Enviar mensajes declare req utl_http.req; res utl_http.resp; url varchar2(4000) := :webhook_url; name varchar2(4000); buffer varchar2(4000); content varchar2(4000); slack_channel varchar2(40) := '#dba'; slack_user varchar2(40) := 'ora-bot'; slack_text varchar2(4000) := 'Test post from database '; slack_icon varchar2(40) := ':mega:'; db_name v$database.name%TYPE;

Slide 23

Slide 23 text

@ViscosityNA www.viscosityna.com Enviar mensajes begin utl_http.set_wallet(:wallet_dir, :wallet_pwd); select name into db_name from v$database; content := '{"channel": "' || slack_channel || '", ' || '"username": "' || slack_user || '", ' || '"text": "' || slack_text || db_name || '", ' || '"icon_emoji": "' || slack_icon || ‘"}';

Slide 24

Slide 24 text

@ViscosityNA www.viscosityna.com Enviar mensajes req := utl_http.begin_request(url, 'POST',' HTTP/1.1'); utl_http.set_header(req, 'user-agent', 'mozilla/4.0'); utl_http.set_header(req, 'content-type', 'application/json'); utl_http.set_header(req, 'Content-Length', length(content)); utl_http.write_text(req, content); res := utl_http.get_response(req); begin loop utl_http.read_line(res, buffer); dbms_output.put_line(buffer); end loop; utl_http.end_response(res); exception when utl_http.end_of_body then utl_http.end_response(res); end;

Slide 25

Slide 25 text

@ViscosityNA www.viscosityna.com

Slide 26

Slide 26 text

@ViscosityNA www.viscosityna.com Aplicación heredada

Slide 27

Slide 27 text

Help Desk crea un nuevo caso y asigna el ticket a Desarrollo Desarrollo revisa los registros de promoción. Parecen tener razón. El ticket está marcado como RESUELTO, se solicita a Marketing que lo confirme. Desarrollo investiga; Esto parece ser un problema conocido de la aplicación. El equipo de DBA tiene un script para solucionarlo. El ticket está asignado al equipo de DBA. El usuario de marketing no puede activar una promoción. Contactos Mesa de ayuda El equipo de DBA revisa el ticket y ejecuta un script para solucionar el problema. Ticket reasignado a Desarrollo para su revisión. Marketing confirma que el problema está solucionado. El billete está cerrado.

Slide 28

Slide 28 text

Help Desk crea un nuevo caso y asigna el ticket a Desarrollo Desarrollo revisa los registros de promoción. Parecen tener razón. El ticket está marcado como RESUELTO, se solicita a Marketing que lo confirme. Desarrollo investiga; Esto parece ser un problema conocido de la aplicación. El equipo de DBA tiene un script para solucionarlo. El ticket está asignado al equipo de DBA. El usuario de marketing no puede activar una promoción. Contactos Mesa de ayuda El equipo de DBA revisa el ticket y ejecuta un script para solucionar el problema. Ticket reasignado a Desarrollo para su revisión. Marketing confirma que el problema está solucionado. El billete está cerrado. Resolver esto involucra al usuario final, la mesa de ayuda, los desarrolladores y DBA. Múltiples pasos toman tiempo y afectan a los clientes externos y a los equipos internos.

Slide 29

Slide 29 text

@ViscosityNA www.viscosityna.com Servicio como servicio

Slide 30

Slide 30 text

La API de Slack interpreta el comando. Pasa datos de promoción al backend. Llamadas de backend al paquete PL/SQL. El usuario de marketing recibe confirmación de la corrección en el canal El paquete interpreta los parámetros, valida las entradas, confirma la condición y ejecuta el parámetro fix. OUT automatizado pasado al backend. El usuario de marketing no puede agregar una promoción. Invoca un comando de chatbot en el canal #marketing con datos de promoción. El backend procesa el parámetro OUT. Identifica el éxito/fracaso. Construye el paquete de respuesta. Pasa la respuesta a la API de Slack

Slide 31

Slide 31 text

La API de Slack interpreta el comando. Pasa datos de promoción al backend. Llamadas de backend al paquete PL/SQL. El usuario de marketing recibe confirmación de la corrección en el canal El paquete interpreta los parámetros, valida las entradas, confirma la condición y ejecuta el parámetro fixOUT automatizado pasado al backend. El usuario de marketing no puede agregar una promoción. Invoca un comando de chatbot en el canal #marketing con datos de promoción. El backend procesa el parámetro OUTIdentifica el éxito/ fracasoConstruye el paquete de respuestaPasa la respuesta a la API de Slack Expone de forma segura el punto final al chat La automatización valida y ejecuta código Usuario final facultado para solucionar problemas cuando los descubra Los equipos internos ya no participan

Slide 32

Slide 32 text

@ViscosityNA www.viscosityna.com Interacción con la base de datos

Slide 33

Slide 33 text

@ViscosityNA www.viscosityna.com Oracle 㲗 Slack: aplicaciones de Slack • Base para ampliar Slack • Mensaje a través de API web, webhooks • Leer mensajes a través de Web, RTM y API de eventos • Responder a través de la API de eventos • Crear comandos de barra personalizados (/command) • Ejecutar robots • Construya interacciones inteligentes

Slide 34

Slide 34 text

@ViscosityNA www.viscosityna.com Flask/Python interpreta la carga útil JSONValida y construye SQLEnvía SQL a través de cx_Oracle Slack muestra la carga útil en el canal Oracle ejecuta PL/SQL y devuelve resultados al cliente El usuario ingresa un comando. Slack envía JSON a través de HTTP POST. Flask/Python lee e interpreta el resultado. Devuelve la carga útil JSON o el webhook a Slack. ¡Muchas opciones para el backend!

Slide 35

Slide 35 text

@ViscosityNA www.viscosityna.com /command configuración create user slack identified by ... grant create session to slack; create user appuser identified by ... alter user appuser quota ... on ; create or replace package appuser. ... grant execute on appuser. to slack; create synonym slack. for appuser.;

Slide 36

Slide 36 text

@ViscosityNA www.viscosityna.com /command configuración # firewall-cmd --zone=public --permanent --add-port=0000/tcp # firewall-cmd --reload # firewall-cmd --list-all public (active) ... ports: 0000/tcp ...

Slide 37

Slide 37 text

@ViscosityNA www.viscosityna.com /command configuración # yum -y install yum-utils python36 # pip install --upgrade pip # python -m pip install cx_Oracle flask # pip install Flask-API python-dotenv slack # pip install slackclient slackbot requests

Slide 38

Slide 38 text

@ViscosityNA www.viscosityna.com /command configuración import os import cx_Oracle from flask import Flask app = Flask(__name__) @app.route('/') def index(): con = cx_Oracle.Connection('slack', 'pass', 'localhost:1521/orclpdb1') cur = con.cursor() cur.execute("select 'Hello, World' from dual") col = cur.fetchone()[0] ...

Slide 39

Slide 39 text

@ViscosityNA www.viscosityna.com

Slide 40

Slide 40 text

@ViscosityNA www.viscosityna.com

Slide 41

Slide 41 text

@ViscosityNA www.viscosityna.com

Slide 42

Slide 42 text

@ViscosityNA www.viscosityna.com

Slide 43

Slide 43 text

@ViscosityNA www.viscosityna.com

Slide 44

Slide 44 text

@ViscosityNA www.viscosityna.com

Slide 45

Slide 45 text

@ViscosityNA www.viscosityna.com Optimizar el ancho de banda

Slide 46

Slide 46 text

@ViscosityNA www.viscosityna.com De los puntos débiles... • Reactivación de cuenta • Restablecimiento de contraseña • Informes ad hoc • Actualizar sistemas de desarrollo/prueba • Crear instancias de nuevas bases de datos Automatically gene tickets when appro

Slide 47

Slide 47 text

@ViscosityNA www.viscosityna.com ¡...hasta analgésicos! • Reactivación de cuenta de autoservicio • Restablecimiento de contraseña de autoservicio • Informes de autoservicio • Actualización de prueba/desarrollo de autoservicio • Creación de instancias de bases de datos de autoservicio Automatically gene tickets when appro

Slide 48

Slide 48 text

@ViscosityNA www.viscosityna.com Servicios proactivos • Advertencias de vencimiento de cuenta • Compartir eventos con no DBA • ORA-1555 • ORA-60 • Exponer registros de DB • Informe: • Estado de la copia de seguridad, error • Actividad de inicio de sesión inusual • Bloqueos de cuenta • Excepciones de auditoría • Crecimiento de objetos

Slide 49

Slide 49 text

@ViscosityNA www.viscosityna.com Diseño API

Slide 50

Slide 50 text

@ViscosityNA www.viscosityna.com Consideraciones de desarrollo • Escribir PL/SQL modular • Usar parámetros y variables • ¡No codifiques nada! • Agregar registro a v0.1 • No es una ocurrencia tardía • Quien que cuando • Considere múltiples niveles/verbosidad

Slide 51

Slide 51 text

@ViscosityNA www.viscosityna.com Consideraciones de desarrollo • Utilice controladores de excepciones • ... ¡pero no WHEN OTHERS THEN NULL! • No exponer SQL—limpiar las entradas • ¡Aislar el código del usuarios y de los datos!

Slide 52

Slide 52 text

@ViscosityNA www.viscosityna.com Consideraciones de desarrollo • Limitar recursos a través de perfiles • Evite DDoS en el chat • ¡No asigne usuarios al perfil default! • Controlar el acceso mediante roles • Administrar roles, no usuarios

Slide 53

Slide 53 text

@ViscosityNA www.viscosityna.com Roles de aplicación • Limite los permisos al rol del bot: • create session • execute en paquetes API • Limite los permisos al rol de API: • Separado del dueño de la aplicación o de los datos • 18c+ Definir como usuarios de solo esquema • <18c: No create session or connect

Slide 54

Slide 54 text

@ViscosityNA www.viscosityna.com Seguridad de aplicaciones • Limitar los permisos de la aplicación • Limitar aplicaciones a canales privados • Validar usuarios cuando sea necesario • Trate el desarrollo del chat como un proyecto "normal" • Control de versiones • Manejo de configuración • Incluir el monitoreo de registros en la huella operativa

Slide 55

Slide 55 text

www.viscosityna.com @ViscosityNA Preguntas y contactame [email protected] https://linktr.ee/oraclesean

Slide 56

Slide 56 text

No content