07 noviembre 2017

Oracle Database Security Assessment Tool


 

Con el creciente número de infracciones de datos cada día, salvaguardar la propiedad intelectual, la información sensible y los datos regulados se ha vuelto crítico. La herramienta de evaluación de seguridad de la base de datos Oracle (DBSAT) ayuda a identificar áreas de riesgo y recomienda cambios y controles que se deben implementar para mitigar esos riesgos. La herramienta de evaluación de seguridad de la base de datos Oracle recopila automáticamente los datos de configuración de una base de datos y luego informa los hallazgos.

Oracle ha proporcionado una nueva herramienta para evaluar la configuración de seguridad y asesor ar sobre ella. Es una utilidad liviana y lo más importante es que es gratis (¡Pero si es Oracle!, pobre Larry adiós a su nuevo barco  ). Siempre que tengamos el soporte activo de Oracle, deberíamos poder descargar la utilidad (¡no tan gratis!). 


Para los S.O. del lado oscuro (Microsoft)  no es tan útil

Para la primera versión, es muy prometedor, aunque los hallazgos para los sistemas operativos de Windows son limitados. Para Windows, no se ve las configuraciones del sistema operativo.

Necesitamos crear un usuario.

Primero, un usuario necesita ser creado con privilegios minimalistas. La documentación tiene el script de muestra que podría aprovisionarse.

create user dbsat_user identified by xxxxx;
//Si has instalado Database Vault y está habilitada, conéctate como DV_ACCTMGR para ejecutar este comando.
grant create session to dbsat_user;
grant select_catalog_role to dbsat_user;
grant select on sys.registry$history to dbsat_user;
grant select on sys.dba_users_with_defpwd to dbsat_user; // 11g and 12c
grant select on audsys.aud$unified to dbsat_user; // 12c only
grant audit_viewer to dbsat_user; // 12c
grant capture_admin to dbsat_user;// 12c covers sys.dba_priv_captures, sys.priv_capture$, sys.capture_run_log$
// Si has instalado Database Vault y está habilitada, conéctate como DV_OWNER para ejecutar este comando.
grant DV_SECANALYST to dbsat_user;

Recuperar información.

Necesitamos "recopilar" la configuración ejecutando los comandos a continuación. Como de costumbre, esto se ejecutará "como administrador". En el caso del proceso, le pedirá la contraseña. Asegúrese de que esté segura ya que el archivo tiene información muy importante.

D:\dbsat_output>set path=%path%;d:\dbsat

D:\dbsat_output>dbsat collect dbsat_user/xxxxxxxxxx dbsat_output20171024


Connecting to the target Oracle database...
SQL*Plus: Release 12.1.0.2.0 Production on Tue Oct 24 13:01:05 2017
Copyright (c) 1982, 2014, Oracle.  All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP, Advanced Analytics and Real Application Testing options
Database Security Assessment Tool version 1.0.2 (October 2016)
Setup complete.
SQL queries complete.
OS Commands Skipped.
BEGIN
*
ERROR at line 1:
ORA-20002: Complete without OS Commands.
ORA-06512: at line 4

Disconnected from Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP, Advanced Analytics and Real Application Testing options DBSAT Collector completed successfully.
Calling D:\app\oracle\product\12.1.0\dbhome_1\bin\zip.exe to encryptdbsat_output20171024.json...
Enter password:
Verify password:
adding: dbsat_output20171024.json (164 bytes security) (deflated 88%) zip completed successfully.

D:\dbsat_output>dir
Volume in drive D is New Volume
Volume Serial Number is 32D6-96CB

Directory of D:\dbsat_output
10/24/2017  01:01 PM  
10/24/2017  01:01 PM  
 ..
10/24/2017  01:01 PM            29,227 dbsat_output20171024.zip
               1 File(s)         29,227 bytes

               2 Dir(s)  223,632,429,056 bytes free

Mostrar los informes

Necesitamos generar un informe basado en el archivo, generado a partir del último paso. Al completar este paso, tendremos tres archivos (archivo de texto, excel, html) que enumeran las recomendaciones. Asegúrese de proteger este archivo, ya que la exposición al mundo exterior causaría riesgos de seguridad que nuestra base de datos tiene ahora.


Esta herramienta está destinada a ayudarnos a identificar posibles vulnerabilidades en nuestros sistemas, pero usted es el único responsable de su sistema y del efecto y los resultados de la ejecución de esta herramienta.


(Incluyendo, sin limitación, cualquier daño o pérdida de datos). Además, la salida generada por esta herramienta puede incluir información de configuración del sistema potencialmente sensible e información que podría ser utilizada por un atacante experto para penetrar en su sistema. Somos los  únicos responsables de garantizar que el resultado de esta herramienta, incluidos los informes generados, se maneje de acuerdo con las políticas de nuestra organización.



Archive:  dbsat_output20171024.zip
[dbsat_output20171024.zip] dbsat_output20171024.json password:
password incorrect--reenter:
password incorrect--reenter:
  inflating: dbsat_output20171024.json
Database Security Assessment Tool version 1.0.2 (October 2016)

DBSAT Reporter ran successfully.

Además, para generar el informe, necesitaría instalar Python en su máquina. Mi preferencia es usar el html ya que tiene enlaces a las secciones individuales. Los infores tienen esta apariencia:










Calidad del dato: Usar PL/SQL con cadenas de texto para estandarizar


La estandarización de cadenas de texto es uno de los temas recurrentes en el desarrollo de procesos ETL. Cuando se tratan datos que definen a personas físicas o jurídicas, es muy común encontrarse con duplicados debidos a errores tipográficos y de entradas de datos (y mas si son nomtbres de procedencia extranjera, árabe, chino, ...).

Consideremos el siguiente ejemplo:



Se puede ver que los dos registros se refieren a la misma persona física, pero hay elementos que impiden considerar los registros como duplicados perfectos. El NIF ha sido transcrito mal. Es presumible que el error venga de una introducción manual de los datos ya que la Y y la T están muy cerca en el teclado español. Tanto el nombre como la dirección es el acento el que hace que no coincidan las dos cadenas , mientras que en el caso de la población aparecen en dos formatos distintos.


¿Qué herramientas tenemos en PL/SQL para comparar los dos registros y eliminar los duplicados?

La función SOUNDEX devuelve una representación fonética de una cadena. El resultado es la codificación de cómo se pronunciaría un texto en inglés. A pesar de que estemos trabajando con texto en otro idioma, la función puede resultar útil.


Si la aplicamos por ejemplo a la población, tendremos:

SELECT DIRECCION, SOUNDEX(DIRECCION) FROM personas_ejemplos WHERE NOMBRE LIKE '%Rafael%';



El package UTL_MATCH contiene unas funciones desarrolladas para facilitar la detección de duplicados. Hay cuatro funciones:
  • EDIT_DISTANCE: la función calcula la distancia de Levenshtein. Esta medida debe el nombre al científico ruso que desarrolló un algoritmo para medir la distancia entre dos cadenas de texto s1 y s2. La distancia se calcula como numero de inserciones, cambios, cancelaciones de caracteres que permiten pasar de la cadena s1 a la cadena s2. La función devuelve un número que representa la distancia entre las dos cadenas: 0 indica dos cadenas idénticas. 
En el ejemplo, si asumimos que el formato correcto es “NOMBRE APELLIDO”, la función devuelve:

SELECT Nombre, utl_match.edit_distance(Nombre, 'Rafael Montesinos')
FROM personas_ejemplos WHERE Nombre LIKE '%Rafael%';


La distancia entre las dos cadenas no es muy grande y podríamos considerar las dos cadenas como coincidentes.


  • EDIT_DISTANCE_SIMILARITY: actúa como la función EDIT_SIMILARITY pero devuelve un valor normalizado entre 100 (cadenas coincidentes) y 0 (total discordancia).
  • JARO_WINKLER: esta función utiliza el algoritmo de Jaro-Winkler que calcula un índice de similitud entre dos cadenas, para intentar tener en cuenta posibles errores tipográficos. El valor 1 representa dos cadenas coincidentes.
SELECT NOMBRE, utl_match.JARO_WINKLER(NOMBRE, 'Rafael Montesinos')
FROM personas_ejemplos WHERE NOMBRE LIKE '%Rafael%';




  • JARO_WINKLER_SIMILARITY: la función utiliza el algoritmo de Jaro-Winkler y normaliza los resultados entre 0 y 100.

SELECT NOMBRE, utl_match.JARO_WINKLER_SIMILARITY(NOMBRE, 'Rafael Montesinos')
FROM personas_ejemplos WHERE NOMBRE LIKE '%Rafael%';


Las funciones del paquete UTL_MATCH permiten definir un umbral de aceptabilidad para establecer si dos cadenas coinciden “lógicamente” y pueden resultar una herramienta muy útil para limpiar datos en ETL.

05 noviembre 2017

¿Qué podemos hacer con una bbdd stand física?





Está claro que podemos hacer este tipo de maniobras si no tenemos Oracle Golden Gate, ¿Y quien no lo tiene a estas alturas?

Aparte de ser usadas para sofocar un desastre, podemos sacarle otras posibilidades:
  
  •     Origen de información de nuestras herramientas de elaboración de informes.
  •     Laboratorio de pruebas (ante nuevas aplicaciones, modificaciones en las   existentes.)
  •     Recuperación ante errores "humanos" en los entornos de producción.
  •     Copias de seguridad.
Todo ello sin que perdamos la funcionalidad de la BBDD standby y en la mayoría de casos sin perder la protección que esta nos brinda en ningún momento. Hoy nos centraremos en los dos últimos casos, recuperación ante errores y pruebas.


Introducción

Las BBDD standby son replicas de nuestros productivos bit a bit, copias exactas que se mantienen normalmente en ubicaciones remotas y que inicialmente se destinan a protección ante desastres.

En caso que la ubicación física en la que tenemos los servidores principales se vea inutilizada por inundaciones, incendios, averías, cortes de comunicaciones o otros tipos de desastres se realiza un “failover” a la ubicación remota, empezando a trabajar en esta en un tiempo mínimo (unos pocos minutos). El problema es que normalmente se tarda mucho más en decidir pasar a la ubicación de respaldo que en la operación misma (si bien se puede automatizar, la mayoría de gente la tiene en modo manual).

También se usan en caso de querer realizar mantenimientos en la ubicación principal, en este caso realizaremos un “switchover” (un fallback controlado), con el que aseguramos no perder ningún dato y que nos permite volver a la ubicación principal fácilmente (mediante otro “switchover”).

El conjunto de BBDD principal / standby disponen de una serie de procesos y herramientas:

  • Data Guard: gestionan el estado de la replicación, la configuración, los cambios de rol (switchover/failover) y facilitan su gestión y control. 
  • Estos procesos y herramientas disponen de una interfaz gráfica (Database Control y/o Grid Control) y de línea de comandos (DGMGRL).

Hands on!

  • Apertura solo lectura
Supongamos que alguien, el cuñado del director de la compañía, ha eliminado/modificado algún objeto/s de la BBDD (código PLSQL, datos, tablas, una vista, ...) y nos planteamos restaurar una copia de seguridad de la BBDD para recuperar estos objetos, esto pueden ser horas de trabajo, de cintas ocupadas, de disponibilidad de servidores… y sobre todo saber que el zarpas nos ha arruinado la tarde y hay Champions, ¿Como nos puede ayudar una "standby"? ¿Veremos el partido o mataremos al "zarpas"?

Necesitaremos es tener una standby y que esta no este “al día”, esto es, que la standby aplique los cambios con un cierto retraso (no tanto como el del cuñado del director, claro). Esto implica que los cambios en la principal se envían inmediatamente a la standby, pero esta no los aplica en el momento de su llegada, espera un margen de tiempo a aplicarlos, estos ficheros quedan en el esacio de redo de la BBDD standby.

Si aplicamos los cambios de esta manera, la standby nos sigue dando seguridad (los cambios se han enviado al site remoto) y nos brinda la posibilidad de abrirla y ver una imagen de la principal de “hace un cierto tiempo”.

El parámetro de la configuración de Data Guard a modificar para conseguir un retardo en la aplicación del redo es el “DelayMins”, en este caso lo tenemos a 180 minutos:

DGMGRL> show database verbose sbtest;

Database
Name:            sbtest
Role:            PHYSICAL STANDBY
Enabled:         YES
Intended State:  ONLINE
Instance(s):
sbrsocial

Properties:
InitialConnectIdentifier        = 'sbtest'
ObserverConnectIdentifier       = ''
LogXptMode                      = 'SYNC'
Dependency                      = ''
DelayMins                       = '180'
Binding                         = 'OPTIONAL'
MaxFailure                      = '0'
MaxConnections                  = '1'
ReopenSecs                      = '300'
NetTimeout                      = '180'
LogShipping                     = 'ON'
PreferredApplyInstance          = ''
ApplyInstanceTimeout            = '0'
ApplyParallel                   = 'AUTO'
StandbyFileManagement           = 'AUTO'

Modificamos  el parámetro desde las herramientas graficas o mediante línea de comandos con la sentencia:
DGMGRL> EDIT DATABASE 'sbtest' SET PROPERTY 'DelayMins'=180;

Si las modificaciones erróneas no han llegado a aplicarse a los ficheros de la standby, solo tenemos que abrirla y recuperar la información perdida (mediante un DBLink desde la principal por ejemplo).

Al tener una base de datos standby controlada con Data Guard en MAXPERFORMANCE, para abrirla en modo solo lectura solo tenemos que ejecutar en la línea de comandos:
[SRVTEST_BD1_ORACLE: oracle@srvtest dbs]$ dgmgrl
DGMGRL for Linux: Version 10.2.0.4.0 - 64bit Production

Copyright (c) 2000, 2005, Oracle. All rights reserved.

Welcome to DGMGRL, type "help" for information.
DGMGRL> connect /
Connected.
DGMGRL> EDIT DATABASE sbtest SET STATE='READ-ONLY';
Succeeded.

Con esto ya tenemos la BBDD standby abierta, podemos realizar consultas en ella y lo más importante, no se deja de enviar redo de la principal a la standby con lo que mantenemos la protección.
Una vez recuperados los datos necesarios volvemos al estado anterior (BBDD montada y aplicando cambios con el retardo programado)

[SRVtest_BD1_ORACLE: oracle@srvtest dbs]$ dgmgrl
DGMGRL for Linux: Version 10.2.0.4.0 - 64bit Production

Copyright (c) 2000, 2005, Oracle. All rights reserved.

Welcome to DGMGRL, type "help" for information.
DGMGRL> connect /
Connected.
DGMGRL> edit database sbtest set state='ONLINE';
Succeeded.

Como se puede comprobar la complejidad y el tiempo necesario para realizar la operación son mínimos y las ventajas que nos aporta muchas (en mi opinión).
  • Apertura lectura/escritura
Ahora tenemos otro caso, para imaginar, una nueva aplicación entrará en producción o queremos modificar una de las existentes con cambios importantes que afectan múltiples esquemas. Las pruebas en test o desarrollo, no son posibles/fiables (por no interferir en los equipos de desarrollo o por ser estos entornos sensiblemente más pequeños que el productivo) en consecuencia nos vemos en la obligación de montar un entorno nuevo para estas pruebas.

Una vez más la BBDD standby  nos puede ayudar, en este caso la abriremos en modo lectura/escritura, realizaremos modificaciones y pruebas pertinentes y finalmente descartaremos las modificaciones y la devolveremos a su estado inicial. La BBDD “test” es la principal mientras que la “sbtest” es la standby.


El primer requisito para realizar estas acciones es tener la Flash Recovery Area (FRA) configurada en la BBDD standby, en caso de no disponer de esta, la configuramos:

[oracle@srvtest source]$ mkdir /soft/oracle/oradata/sbtest/flash_recovery_area

SQL> show parameter recovery

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest                string
db_recovery_file_dest_size           big integer 0
recovery_parallelism                 integer     0

SQL> alter system set db_recovery_file_dest_size=10G scope=both;

Sistema modificado.

SQL> alter system set db_recovery_file_dest='/soft/oracle/oradata/sbtest/flash_recovery_area' scope=both;

Sistema modificado.

En caso de estar en modo de protección MAXAVAILABILITY pasamos a MAXPERFORMANCE:
[SRVTEST_BD1_ORACLE: oracle@srvtest dbs]$ dgmgrl
DGMGRL for Linux: Version 10.2.0.4.0 - 64bit Production

Copyright (c) 2000, 2005, Oracle. All rights reserved.

Welcome to DGMGRL, type "help" for information.
DGMGRL> connect /
Connected.
DGMGRL> EDIT CONFIGURATION SET PROTECTION MODE AS MAXPERFORMANCE;
Succeeded.
Paramos el aplicado del redo en la standby:

DGMGRL> edit database sbtest set state='APPLY-OFF';.
Succeeded.

Necesitaremos crear un punto de recuperación:

  • A partir de este momento la BBDD standby guardará todos los cambios en un fichero creado a tal propósito en la FRA (el Flashback log), usará este “log de cambios” para deshacerlos una vez terminadas las pruebas.

SQL> CREATE RESTORE POINT Standby_flashback_testing GUARANTEE FLASHBACK DATABASE;

Punto de restauración creado.
SQL> select NAME,SCN,TIME from v$restore_point;

NAME
--------------------------------------------------------------------------------
SCN
----------
TIME
---------------------------------------------------------------------------
STANDBY_FLASHBACK_TESTING
8151200819
11/03/10 12:37:53,000000000
Paramos el envío de archivado a la BBDD standby. Forzamos el envió del último log online y paramos el transporte. Es importante comprobar que este archivado que hemos enviado ha quedado archivado en la standby.
[SRVTEST_BD1_ORACLE: oracle@srvtest dbs]$ sqlplus /nolog

SQL*Plus: Release 10.2.0.4.0 - Production on Thu Mar 11 12:32:47 2010

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

SQL> connect / as sysdba
Connected.
SQL> alter system archive log current;

System altered.

SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options
Comprobamos que el redo log se ha archivado en la BBDD standby:
-rw-r----- 1 oracle oinstall  2548224 Mar 15 11:45 arch1_69_709240912.dbf
-rw-r----- 1 oracle oinstall    28160 Mar 15 11:47 arch1_70_709240912.dbf
[oracle@sbtest dbs]$
Paramos el transporte de redo:
[SRVTEST_BD1_ORACLE: oracle@srvtest dbs]$ dgmgrl /
DGMGRL for Linux: Version 10.2.0.4.0 - 64bit Production

Copyright (c) 2000, 2005, Oracle. All rights reserved.

Welcome to DGMGRL, type "help" for information.
Connected.
DGMGRL> EDIT DATABASE test SET STATE=Log-Transport-Off;
Succeeded.
DGMGRL> exit

Paramos el broker en la standby:

SQL> show parameter dg

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
dg_broker_config_file1               string      /soft/oracle/dbtest/dbs/d
r1sbtest.dat
dg_broker_config_file2               string      /soft/oracle/dbtest/dbs/d
r2sbtest.dat
dg_broker_start                      boolean     TRUE
SQL> alter system set dg_broker_start=false;

Sistema modificado
Cambiamos el modo del fichero de control de STANDBY  a CURRENT
[oracle@srvtest flashback]$ sqlplus /nolog

SQL*Plus: Release 10.2.0.4.0 - Production on Jue Mar 11 12:40:16 2010

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

SQL> connect / as sysdba
Conectado.
SQL> select CONTROLFILE_TYPE from v$database;

CONTROL
-------
STANDBY

SQL> ALTER DATABASE ACTIVATE STANDBY DATABASE;

Base de datos modificada.

SQL> select CONTROLFILE_TYPE from v$database;

CONTROL
-------
CURRENT


Y finalmente abrimos la BBDD

SQL> ALTER DATABASE OPEN; Base de datos modificada. SQL> select status from v$instance; STATUS ------------ OPEN

Al finalizar nuestras pruebas, deshacemos los cambios, cerramos la BBDD, la abrimos en mount y realizamos el Flashback:
SQL> shutdown immediate
Base de datos cerrada.
Base de datos desmontada.
Instancia ORACLE cerrada.
SQL> startup mount
Instancia ORACLE iniciada.

Total System Global Area 1610612736 bytes
Fixed Size                  2084296 bytes
Variable Size             419430968 bytes
Database Buffers         1174405120 bytes
Redo Buffers               14692352 bytes
Base de datos montada.
SQL> FLASHBACK DATABASE TO RESTORE POINT Standby_flashback_testing ;

Flashback terminado.
Reconvertimos a STANDBY:
SQL> select controlfile_type from v$database;

CONTROL
-------
BACKUP

SQL> ALTER DATABASE CONVERT TO PHYSICAL STANDBY;

Base de datos modificada.

Activamos nuevamente el broker de Data Guard en la standby

SQL> alter system set dg_broker_start=true;

Sistema modificado.

SQL> shutdown immediate;
ORA-01507: base de datos sin montar

Instancia ORACLE cerrada.
SQL> startup mount
Instancia ORACLE iniciada.

Total System Global Area 1610612736 bytes
Fixed Size                  2084296 bytes
Variable Size             419430968 bytes
Database Buffers         1174405120 bytes
Redo Buffers               14692352 bytes
Base de datos montada.
Reactivamos el trasporte y aplicado de redo
[SRVTEST_BD1_ORACLE: oracle@srvtest dbs]$ dgmgrl /
DGMGRL for Linux: Version 10.2.0.4.0 - 64bit Production

Copyright (c) 2000, 2005, Oracle. All rights reserved.

Welcome to DGMGRL, type "help" for information.
Connected.
DGMGRL> EDIT DATABASE sbtest SET STATE=online;
Succeeded.
DGMGRL> EDIT DATABASE test SET STATE=online;
Succeeded.
Y para acabar, si hemos cambiado el modo de protección lo volvemos a dejar como estaba:

DGMGRL> EDIT CONFIGURATION SET PROTECTION MODE AS MAXAVAILABILITY;
Succeeded.

02 noviembre 2017

As in the Phillip K. Dick essay: Do Oracle Dreams of Electronic Coins?

¿Sueña Oracle con monedas electrónicas?

Blockchain es una base de datos distribuida, formada por cadenas de bloques diseñadas para evitar su modificación una vez que un dato ha sido publicado usando un sellado de tiempo confiable y enlazando a un bloque anterior. Por esta razón es especialmente adecuada para almacenar de forma creciente datos ordenados en el tiempo y sin posibilidad de modificación ni revisión. Este enfoque tiene diferentes aspectos:
  • Almacenamiento de datos.- Se logra mediante la replicación de la información de la cadena de bloques
  • Transmisión de datos.- Se logra mediante peer-to-peer
  • Confirmación de datos.- Se logra mediante un proceso de consenso entre los nodos participantes. El tipo de algoritmo más utilizado es el de prueba de trabajo en el que hay un proceso abierto competitivo y transparente de validación de las nuevas entradas llamada minería.
Si quieres saber más de como poder implementar una base de datos de tipo Blockchain mira el artículo de Julián Dontcheff. En este articulo Julián habla de una base de datos  llamada BigChainDB, en  su web podrás obtener mas información.

Entre sus características destacan:

  • Soporte nativo de multi ajustes: Sin una moneda nativa en BigchainDB, se puede emitir cualquier activo, token o moneda.
  • Personalizable: Diseña tu propia red privada con activos personalizados, transacciones, permisos y transparencia.
  • Permisos: Establezca permisos a nivel de transacción para garantizar una separación clara de tareas y hacer cumplir el acceso selectivo.
  • Modelo de consenso de la federación: El control descentralizado a través de una federación de nodos de votación crea una red P2P super-par.
  • Open Source: Abierto de origen a la comunidad para que todos puedan usarlo y construir sus propias aplicaciones en la parte superior.
  • Público o privado: Implemente sus propias redes públicas o privadas para casos de uso específicos de la industria.
  • Consulta: Aproveche las capacidades eficientes de consulta de big data listas para usar.
Un blockchain es un sistema para mantener los libros contables distribuidos de una manera que permite a las organizaciones que tal vez no confíen plenamente unas en otras acordar las actualizaciones del libro mayor. En lugar de utilizar un tercero central o un proceso de reconciliación fuera de línea, Blockchain utiliza protocolos de igual a igual. Como un libro mayor distribuido, blockchain proporciona un registro casi en tiempo real e indeleble que se replica entre los participantes.

Blockchain tiene el potencial de transformar fundamentalmente la forma en que se realizan las transacciones comerciales globales. Actualmente, algunas transacciones de empresa a empresa se enrutan a través de terceros para garantizar su integridad y protección. Estos terceros pueden presentar retrasos y agregar costos. La tecnología de Blockchain permite a los participantes en una red de negocios de confianza realizar transacciones directamente, a la vez que garantiza la validez y el no rechazo de sus transacciones. Una vez que las transacciones propuestas se validan y se llega a un acuerdo sobre sus resultados, los participantes de la cadena de bloques las registran en bloques vinculados criptográficamente que no pueden ser repudiados.

Esta tecnología puede ayudar a abordar muchos desafíos de los límites de la empresa, tales como:

  • Permitir la confianza en transacciones B2B entre pares, al tiempo que se evitan los costos y riesgos de los intermediarios
  • Reducir el intercambio de información manual y propenso a errores y los procesos a través de los límites de la empresa
  • Evitar el costo y los retrasos de las conciliaciones fuera de línea
  • Disminuir el costo y el alto riesgo de fraude de las transacciones entre empresas
  • Mejorar la visibilidad de la información en tiempo real dentro de un ecosistema de comercio

Industrias con casos de uso de Blockchain emergentes


Bancos y finanzas

En mi experiencia sería ideal para procesar masivamente transacciones bancarias contra listas negras y blancas:
  • Watchlist
  • AML (Anti money laundry)
  • KYC (Know your customer)
  • Compensación y liquidación 
  • Financiamiento comercial
  • Pagos nacionales y transfronterizos, 
  • Originación de préstamos y automatización posterior a la financiación
Seguros
Procesamiento transaccional entre aseguradores e inversores, automatización de reclamos y sobre todo la reducción de reclamaciones fraudulentas.

Fabricación
Diseñe la protección IP, el seguimiento del historial de productos, la garantía del proceso de producción y la gestión de retiros.

Educación
Transcripción y transferencia de transcripciones de estudiantes, credencialización de educadores y pago de fondos estatales o subvenciones privadas.

Medios de comunicación
Pago directo a creadores de contenido, seguridad de activos digitales y conozca a su cliente.

Gobierno y Sector Público
Mejore la distribución del bienestar, mitigue la doble imposición, obtenga protección de la infraestructura y registro de propiedad.

Comercio minorista y Comercio electrónico
Aumente la transparencia de los historiales de los productos, la reducción de productos falsificados, la adjudicación de garantías y la modernización de la gestión de la cadena de suministro.

Asistencia sanitaria y farmacéutica
Seguimiento / rastreo serializado de medicamentos, presentación regulatoria digital, gestión de ensayos clínicos, y privacidad e intercambio de registros de salud del paciente.
Logística
Financiamiento de la cadena de suministro, seguimiento y rastreo del punto de origen, transferencia de la propiedad, supervisión del cumplimiento.

Utilidades
Gestión de activos, certificación de energías renovables y derechos de emisión, y medición y facturación del consumo de electricidad.

Servicio en la nube de Oracle Blockchain

Oracle Blockchain Cloud Service es una nueva oferta que forma parte de la cartera completa de plataforma como servicio (PaaS) de Oracle. Presentado por el proveedor de plataforma de procesamiento de transacciones distribuido más escalable del mundo, Oracle Blockchain Cloud Service es la plataforma en nube de contabilidad distribuida más completa.

El servicio en la nube de Oracle Blockchain proporciona capacidades de blockchain de nivel empresarial y es capaz de acelerar la innovación para ERP local y clientes SaaS y PaaS basados ​​en la nube.

Con el servicio en la nube de Oracle Blockchain, puede acelerar los ingresos, crear nuevas fuentes de ingresos y reducir los costos y los riesgos mediante la extensión segura de sus aplicaciones y procesos comerciales a la vez que agiliza las transacciones en el ecosistema de su socio.

29 octubre 2017

DBA WARS: "It's an older code sir, but it checks out."


En esta entrada del blog vamos a dar salida a varios còdigos SQL Y PL/SQL, antiguos pero todavía válidos.

Problemas con de PL / SQL Developer de Allround Automations

Al usar este IDE e su versión 11.X, una consulta interna toma muchos ciclos de CPU en el servidor de la base de datos (100% de una CPU).
¿Es este tu problema?  Por favor, compruebe si hay una consulta al lanzar el editor con el siguiente formato de consulta:
select s.synonym_name object_name, o.object_type
from sys.all_synonyms s, sys.all_objects o where s.owner in ('PUBLIC', user) and o.owner = s.table_owner and o.object_name = s.table_name and o.object_type in ('TABLE', 'VIEW', 'PACKAGE','TYPE', 'PROCEDURE', 'FUNCTION', 'SEQUENCE');
Se debe a la opción Describir contexto del asistente de código. Para deshabilitar:
Mira en: Tools> Preferences> Code Assistant y deshabilitar la opción "Describe Context".
O comprarles la versión 12.X que ya está resuelto.


Depurar papelera de reciclaje anterior a ...


Tiene la papelera de reciclaje de la base de datos llena o su tamaño es considerablemente grande, pero no quiere hacer un "Borrado" completo?
¿Quieres eliminar solo más de x días (como más de 90 días)?

Una buena forma de hacerlo es:

# 90 días
Select 'purge table '||owner||'."'||OBJECT_NAME||'";' from dba_recyclebin where type='TABLE' and to_date(droptime,'YYYY-MM-DD:HH24:MI:SS')<sysdate-90;
# 90 minutos
Select 'purge table '||owner||'."'||OBJECT_NAME||'";' from dba_recyclebin where type='TABLE' and to_date(droptime,'YYYY-MM-DD:HH24:MI:SS')<sysdate-(90/(24*60));

Mirar esta nota de Metalink (Doc ID 1596147.1) por si teneis alguna qe otra duda.


Purga mejorada de la papelera de reciclaje Oracle

Desde que en la versión 10g de la base de datos , se introdujo el 'reciclaje' para segmentos. Si se establece el parámetro recyelebin = on, y se descarta una tabla, en realidad no se descarta; se renombra a un nombre generado por el sistema. Esto realmente puede ayudar en situaciones donde una tabla se cae accidentalmente, ya que se puede recuperar fácilmente. Sin embargo, sin monitorearlo, puede terminar causando problemas de muchos tipos, porque puede terminar hinchando el número total de segmentos en la base de datos a muchas veces más de lo que era antes.
Oracle solo tiene 4 métodos publicados para descartar lotes de objetos reciclados; siendo:

  • El comando SQL> PURGE RECYCLE BIN emitido por un propietario de segmento, que purga todos los segmentos reciclados para ese usuario.,
  • El comando SQL> PURGE DBA_RECYCLEBIN, emitido por un DBA, que purga todos los objetos reciclados en la base de dato.
  • El comando SQL> PURGE TABLESPACE <tablespace_name> USER <schema_name>; que purga objetos propiedad del propietario dado.
  • El comando SQL> PURGE TABLESPACE uwdata USUARIO uwclass; que purga los objetos propiedad del propietario y el espacio de tabla dados.
No hay comandos incorporados que permitan que solo los segmentos de papeleras de reciclaje se realicen antes de cierto tiempo, o que solo reciclen objetos de la papelera con más de un cierto número de versiones recicladas de la misma tabla. Es relativamente fácil crear un procedimiento almacenado para manejar estos casos; esto explica cómo se puede hacer eso.

En PL/SQL, tenemos:


create or replace procedure purge_user_recyclebin(
  p_purge_before_date   in date default=NULL,
  p_purge_keep_versions in number default=NULL,
  p_test_only           in varchar2 := 'Y'
)
is
  cursor c_purge_before_date is
    select object_name
    from  user_recyclebin
    where droptime > p_purge_before_time
    and   can_purge = 'YES'
    order by droptime;

  cursor c_purge_before_version is
     select * from 
       (select original_name,
               type,
               object_name,
               droptime,
               rank() over (partition by original_name,type order by droptime desc) as obj_rank
         from   user_recyclebin
         where  can_purge = 'YES')
       where obj_rank > p_purge_keep_versions
       order by droptime;

  v_sql varchar2(1024);

  exception e_bad_parameters;
  exception e_38302;
  pragma exception_init(e_38302,-38302);  

  procedure runsql(p_object_name in varchar2) 
  is
  begin
    v_sql := 'purge '||p_object_name;
    if (p_test_only = 'N') then
      begin
        execute immediate v_sql;
      exception
         when e_38302 then 
           dbms_output.put_line('Cuidado, el objeto '||p_object_name||' no existe ignóralo');
         when others then
           dbms_output.put_line('Error borrando '||p_object_name);
           dbms_output.put_line(dbms_utility.format_error_backtrace);
      end;
    else
      dbms_output.put_line(v_sql);
    end if;
  end;

begin

  if p_purge_before_date is not null and
     p_purge_keep_versions is null then
     for r in c_purge_before_date loop
       runsql(r.object_name);
     end loop;
  elsif p_purge_before_date is null and
     p_purge_keep_versions is not null then
     for r in c_purge_before_version loop
       runsql(r.object_name);
     end loop;
  else
     raise e_bad_parameters;
  end if;

end purge_user_recylebin;
/

Cómo usarlo

Si desea probar para ver qué haría, sin purgar nada, simplemente pase el parámetro 'p_test' al valor 'Y', y establezca la salida del servidor en el tamaño 1000000. Esto mostrará una lista de los comandos que se ejecutarían. pero en realidad no los ejecuta.

Purgar todos los objetos de la papelera de reciclaje antes de una fecha determinada
Esto purgará todos los objetos de reciclaje reciclados antes del 1 de noviembre, a medianoche.

execute purge_user_recylebin(to_date('20150801 00:00:00','YYYYMMDD HH24:MI:SS'),NULL,'Y');

Esto, cuando se ejecuta como propietario de un esquema, ayuda a mantener la cantidad de objetos reciclados a un nivel razonable, a la vez que se conserva, la capacidad de recuperar segmentos perdidos más recientemente.