Archivos en la categoría Business Intelligence

Instalación y configuración de Apache Karaf como Servicio de Windows para Talend ESB

Instalación y configuración de Apache Karaf como Servicio de Windows para Talend ESB

ANDROID

 

Apache Karaf es una aplicación basada en el estándar OSGi (Open Services Gateway Initiative) que ofrece un contenedor muy ligero donde desplegar módulos, componentes y aplicaciones de forma aislada e independiente. Entre sus ventajas destaca el despliegue en caliente, configuración dinámica, acceso remoto, gestión de instancias, etc. Es el ESB que viene integrado por defecto con Talend y nos va a permitir publicar y gestionar nuestros Web Services de una forma sencilla y rápida. Para nuestra pequeña guía vamos a utilizar Servicios Web REST que hemos desarrollado también con Talend a través de sus componentes específicos (RESTful), exportándolos como .jar que luego desplegaremos en Karaf. El objetivo es instalar este servidor de componentes como servicio de Windows, de forma que garanticemos que siempre estará levantado aunque se reinicie la máquina. Otra opción es lanzar el .bat con una tarea programada en Windows.

 

Instalación de Karaf

Como cualquier otra aplicación desarrollada en JAVA, necesitaremos instalar en nuestra máquina un JRE para poder correr la aplicación. Podéis descargar desde aquí la última versión a día de hoy: JRE 7. Karaf viene integrado el paquete Talend Open Studio for ESB (TOS), que podéis descargar de forma gratuita desde aquí. No es necesario descargar el IDE completo a no ser que vayáis a utilizarlo para desarrollar vuestros servicios web, con que descarguemos el Runtime es suficiente (~400 MB). Una vez descargado, descomprimimos el ZIP en nuestro disco duro. El paquete contiene 10 directorios y tres ficheros:
Instalación y configuración de Apache Karaf como Servicio de Windows para Talend ESB

 

 Configuración de Karaf como Servicio de Windows

El equipo de Talend ha desarrollado una pequeña guía que nos explica paso a paso cómo instalar un servicio de Windows que ejecute Talend. Podéis consultarla desde aquí (necesitamos registrarnos). El proceso consiste en instalar una herramienta auxiliar denominada Wrapper, sobre la que vamos a ejecutar varias sentencias para generar e instalar el servicio de Windows. Nos dirigimos al paquete descargado y abrimos la carpeta containerbin, donde encontraremos el fichero TRUN.BAT que ejecutamos. Se abre una consola de línea de comandos, donde deberemos escribir las siguientes instrucciones:

  1.  Instalamos el Wrapper:

    features:install wrapper

  2. Una vez instalado el Wrapper, lo utilizamos para generar nuestro servicio de Windows. Para ello escribimos:

    wrapper:install -s AUTO_START -n Karaf  -d Talend-ESB-Container -D “Karaf”

  3. Instalamos el servicio en Windows (importante: la ruta dependerá de donde hayas descomprimido el paquete de Talend):

    D:Talend5.2.2Runtime_ESBSEcontainerbinKaraf-service.bat install

 

Instalación y configuración de Apache Karaf como Servicio de Windows para Talend ESB

Una vez creado e instalado el Servicio de Windows, necesitamos configurarlo para que siempre esté levantado, aunque se reinicie la máquina.

  1. Abrimos el panel de control de Servicios de Windows: START > Administrative Tools > SERVICES ó escribimos SERVICES en la ventana de EJECUTAR de la barra de inicio
  2. Buscamos el servicio recién creado, Karaf, pulsamos con el botón derecho sobre él, y hacemos clic sobre PROPERTIES.
  3. En la primera pestaña (General) desplegamos la opción de configuración STARTUP TYPE y seleccionamos Automatic (Delayed Start).

Instalación y configuración de Apache Karaf como Servicio de Windows para Talend ESB

Sin Comentarios

Configurar tarea para comprimir fichero en proceso SSIS (SQL Server Integration Services)

Configurar tarea para comprimir fichero en proceso SSIS (SQL Server Integration Services)

Entre otras cosas, la plataforma SSIS de Microsoft (SQL Server Intregation Services) nos permite programar un flujo de tareas secuenciales o paralelas que se encarguen de la extracción y carga de datos desde diferentes orígenes, transformaciones, importación y exportación, ejecución de otras aplicaciones, etc. Muy utilizado como complemento o directamente como herramienta ETL, una tarea muchas veces recurrida en estos entornos es la de envío de correos con alertas, trazas, mensajes o informes adjuntos con los datos procesados. En esta última situación resulta muy recomendable comprimir previamente cualquier documento adjunto, tanto para agilizar el proceso de envío, como para sortear límites técnicos, como la configuración del tamaño máximo de ficheros adjuntos en el gestor de correo de SQL Server, al que normalmente no se tiene acceso en un proyecto convencional.

Para poder configurar una tarea que comprima un fichero necesitamos tener instalado previamente en nuestro servidor una herramienta de compresión: Winrar, Winzip, 7zip, etc. (sí, parece obvio, pero en entornos de producción este tipo de requerimientos suele ser complejo por unas cosas o por otras). En nuestro caso, vamos a utilizar como ejemplo la open source 7zip que podéis descargar gratuitamente. Si se va a utilizar otro programa simplemente hay que acudir a la documentación y ver los parámetros que necesita para invocarlo desde línea de comandos.

Configurar tarea para comprimir fichero en proceso SSIS (SQL Server Integration Services)

En SSIS disponemos de la “tarea” EXECUTE PROCESS TASK que nos permite ejecutar aplicaciones desde línea de comandos o ficheros batch. Tiene tres pestañas, General (donde podemos especificar nombre y descripción), Process (la más importante, donde vamos a indicar el programa o batch a lanzar y sus argumentos) y Expressions, muy útil para  modificar dinámicamente alguno de los parámetros que vamos a ejecutar por línea de comandos. Situándonos en la pestaña de Process, necesitamos configurar:

  • Executable: ruta absoluta del .exe de la herramienta de compresión (7zip, winzip, winrar, etc)
  • Arguments: parámetros para comprimir un fichero (cambian en función de la herramienta de compresión). En el caso de 7zip,  que es el que se ha usado, se pasan 4 parámetros:

7zip

Para configurar con 7zip:

a -tzip c:\Users\MiUsuario\Desktop\prueba.zip C:\Users\MiUsuario\Desktop\prueba.txt

  • a: para utilizar la función ADD, que nos permite crear un nuevo fichero comprimido
  • –tzip: formato de compresión. El parámetro es –t, seguido del formato: 7z, zip, gzip, bzip2 o tar (-t7z, -tgzip, etc).
  • Ruta destino: ubicación y nombre del fichero comprimido que vamos a generar
  • Ruta origen: fichero origen a comprimir
  • Contraseña: para añadir una contraseña simplemente añadimos la instrucción -pCONTRASEÑA. El parámetro “-p” indica que el siguiente texto concatenado es la contraseña para abrir el fichero comprimido.

Winrar

En el caso de que utilicemos Winrar la forma de invocarlo desde línea de comandos sería:

a m1 c:\Users\MiUsuario\Desktop\prueba.zip C:\Users\MiUsuario\Desktop\prueba.txt

  • a: para utilizar la función AGREGAR, que agrega los ficheros y las carpetas especificadas a un archivo
  • m1: método de compresión. Escala del 0 al 5, donde el 5 es el de mayor rendimiento y el 3 es el normal (http://www.winrar.es/soporte/manual/HELPSwM)
  • Ruta destino: ubicación y nombre del fichero comprimido que vamos a genera.
  • Ruta origen: fichero origen a comprimir

Configurar tarea para comprimir fichero en proceso SSIS (SQL Server Integration Services)

Por otro lado, comentar el parámetro  WindowStyle, para el que es recomendable ponerlo a HIDDEN con el objeto de evitar que salga algún popup para confirmar la operación y permitir la automatización completa del proceso.

Al flujo de nuestro procedimiento podremos añadirle el envío de un correo, copiar el fichero comprimido en un repositorio, etc. Cabe destacar que al disponer del 100% de funcionalidad de 7zip (o el programa de compresión utilizado), tenemos a nuestro alcance cualquier opción del programa, como asegurar el fichero con contraseña.

4 Comentarios

Extension de TextBox que muestra código HTML en QlikView 10

Extension de TextBox que muestra código HTML en QlikView 10

Una de las novedades que trajo consigo QlikView 10 (y heredada en la 11) fue la posibilidad de diseñar y desarrollar componentes externos denominados “Extensions” que pueden ser explotados y reutilizados en cualquier documento o report.  La definición exacta, tomada del Manual de Referencia en castellano:

Objetos de extensión. Por medio de una simple API nueva, ahora se pueden escribir objetos de hoja para extensiones plug-in, para una presentación integrada en diseños QlikView (funciona en el cliente Ajax y en WebView únicamente). Las extensiones se construyen sobre un objeto gráfico QlikView y pueden escribirse en cualquier lenguaje web moderno, como por ej. Flash, Silverlight, JavaScript, etc.

Es decir, la idea es publicar contenido que normalmente se consume vía web dentro de un report de QlikView. Por ello, una limitación importante a la hora de utilizarlos es que sólo funcionan en WebView y el cliente Ajax, pero no en el Desktop. Por cierto, podéis descargar QlikView de forma gratuita desde su propia página web.

Por otro lado, uno  de los defectos de esta suite de Business Intelligence es que no existe oficialmente ningún objeto o componente que permita incrustar código HTML en un txtbox de un informe, a diferencia de otros grandes competidores como MicroStrategy, ¿la solución?, diseñar nuestra propia Extension.

En mi caso, he adaptado el Extension de Stefan WALTHER a QlikView 10. Como la mayoría, está desarrollado en Javascript y jQuery. Nuestro Extension tiene dos ficheros obligatorios, y dos opcionales. Podéis descargarlo desde aquí.

  • Definition.xml: (obligatorio) fichero XML que especifica entra otras cosas, el nombre del Extension, la descripción y los parámetros personalizados, a los que se les puede asignar un valor por defecto.
  • Script.js:  (obligatorio)  fichero fundamental, ya que tiene el core de la funcionalidad. En javascript y jQuery, es el encargado de manejar por DOM los objetos y asignarles o modificar sus características.
  • Properties.qvpp: fichero en XHTML que especifica las opciones y propiedades configurables de la extensión. Muy recomendable seguir la hoja de referencia para los ficheros QVPP de QlikView. No es necesario; si no se define, se toma por defecto las propiedades genéricas de cualquier objeto (layout, caption,expressions, etc).
  • Icon.PNG: es la imagen que se verá desde el Extension Objects en WebView.

 

Definition.xml

Simplemente asignamos el nombre y descripción del Extension, dejando vacío el parámetro Text Expression, ya que en nuestro caso, no nos interesa que venga relleno.

<?xml version=”1.0” encoding=”utf-8”?>
<ExtensionObject Label=”HTML TextBox QV10” Description=”Extensión para añadir código HTML a un objeto TextBox”>

<Text  Expression=”” />

</ExtensionObject>

Script.js

Lo que vamos a hacer es muy sencillo, simplemente creamos un DIV al que le asignamos el contenido HTML que introduzcamos desde el panel de propiedades del Extension. Para mantener la funcionalidad y la personalización del objeto, es necesario incluir la función setProps, encargada de asignar cualquier cambio de estilos desde el panel de propiedades en WebView.

Qva.AddExtension(‘HTML TextBox QV10’, function() {

this.Element.innerHTML = “<div style=’width: 100%; height: 100%; overflow: auto;></div>”; this.Element.firstChild.innerHTML = this.Layout.Text0.text;

setProps(this.Element.firstChild, this);

// asignamos los estilos de la fuente

function setProps(obj, parentObj) {

obj.style.fontStyle = parentObj.Layout.Style.fontstyle;

obj.style.fontFamily = parentObj.Layout.Style.fontfamily;

obj.style.fontSize = parentObj.Layout.Style.fontsize + “pt”;

 

}

});

Properties.qvpp

Como comentábamos, este fichero pseudo XHTML tiene el objeto de construir el menú de propiedades u opciones del Extension.

<div class=”ToolWindow-MainBody”>
<table width=”360px”>

<tr class=”ToolProperty-Header” >

<td onclick=”Qva.SelectToolPane(this, false)”>

HTML TextBox QV10

</td>

<th onclick=”Qva.SelectToolPane(this, true)”>

<img alt=”” src=”unpinned.png” icon=”web:unpinned” avq=”img:.Chart.Title”/>

</th>

</tr>

<tr>

<td colspan=”2”>

<table width=”100%”>

<colgroup>

<col width=”100px” />

<col width=”190px” />

<col width=”30px” />

</colgroup>

<tr>

<td class=”ToolProperty-Literal”>

HTML Code:

</td>

<td colspan=”2”>

<input style=”width: 200px” avq=”edit:.Chart.Text.0.Content” readonly=”readonly” />

<button class=”ToolProperty-DialogButton” avq=”dlg:.Chart.Text.0.Content:Expression.qvpp”>

Editar HTML

</button>

</td>

</tr>

</table>

</td>

</tr>

<tr class=”ToolProperty-Header” avq=”panel::Layout.qvpp”><td>Layout</td><th></th></tr>

<tr style=”display: none”><td colspan=”2”></td></tr>

<tr class=”ToolProperty-Header” avq=”panel::Caption.qvpp”><td>Caption</td><th></th></tr>

<tr style=”display: none”><td colspan=”2”></td></tr>

</table>

</div>

Lo fundamental de este fichero son estas líneas:

<input style=”width: 200px” avq=”edit:.Chart.Text.0.Content” readonly=”readonly” />

<button class=”ToolProperty-DialogButton” avq=”dlg:.Chart.Text.0.Content:Expression.qvpp”>

El input va a ser una caja de texto, la cual se va a modificar pulsando el button, que abrirá un dialog o popup con un textarea donde podremos copiar o escribir lo que deseemos. En este caso, debemos quedarnos con los parámetros avq=”edit:”, que es del input text, y el de avq=”dlg:”, que es un dialog. En esta guía tienes todas las especificaciones y parámetros posibles.

Por otro lado, las dos últimas TR son dos opciones que van a heredar directamente de las propiedades genéricas de cualquier objeto: caption (que nos permite modificar la barra de título u ocultarla) y Layout (esencial para cambiar la fuente, tamaño, color de fondo, etc).

 

¿Cómo genero un Extension para QlikView?

Extension de TextBox HTML para QlikView 10

Una vez tengas todos los ficheros necesarios, simplemente los comprimes en .ZIP y renombras el fichero para cambiar la extensión por .QAR. Recuerda que para esto tienes que habilitar desde opciones de carpeta la visibilidad de las extensiones.

 

¿Cómo se instala un Extension en QlikView?

Muy fácil, haces doble clic sobre el fichero con extensión .QAR y se abrirá QlikView avisándote del éxito o no de la operación. Para hacerlo de forma manual, descomprimes el fichero y copias el contenido en C:Userstu_usuarioAppDataLocalQlikTechQlikViewExtensionsObjects o bien C:Documents and Settingstu_usuarioLocal SettingsApplication DataQlikTechQlikViewExtensionsObjects

 Extension de TextBox que muestra código HTML en QlikView 10

Para desinstalar un Extension basta con eliminar los ficheros correspondientes de estas carpetas.

 

Ejemplo de TextBox HTML para QliKView 10

Finalmente, os mostramos un ejemplo del funcionamiento de este Extension en QlikView 10, donde creamos un nuevo objeto de Extensión:
Extension de TextBox que muestra código HTML en QlikView 10

Añadimos el contenido HTML que deseemos:

Extension de TextBox que muestra código HTML en QlikView 10

Y observamos el resultado:

Extension de TextBox que muestra código HTML en QlikView 10

Si lo necesitáis, podéis descargarlo desde aquí:

Extension de TextBox que muestra código HTML en QlikView 10
2 Comentarios

Diferencias entre una Vista y una Vista Materializada en Oracle


Una Vista es un objeto de Oracle que al consultarlo ejecuta por detrás una query y nos devuelve el resultado (donde la query puede acceder a tablas, otras vistas, utilizar funciones o procedimientos, etc.). Cada vez que accedemos a la vista, la query se ejecuta y nos devuelve la información que en ese momento exista en el origen.

Por contra, una Vista Materializada (Materialized Views) es otro tipo de objeto de Oracle que aunque técnicamente es lo mismo que una Vista (ejecuta una consulta sql), lo que hace es almacenar físicamente en caché el resultado de ejecutar una query en un determinado momento, de forma que cada vez que consultemos la Vista Materializada lo que vamos a recuperar es lo que había en el origen en el momento en el que se creó o se refrescó la VM.

Vista materializada y vista convencional en Bases de Datos Oracle

La sintaxis para crear una Vista materializada es:

CREATE MATERIALIZED VIEW nueva_vista_materializada
[TABLESPACE nuestro_tablespace]
[BUILD {IMMEDIATE | DEFERRED}]
[REFRESH {ON COMMIT | ON DEMAND | [START WITH fecha_inicial] NEXT intervalo_tiempo } |
{COMPLETE | FAST | FORCE | NEVER} ]
[{ENABLE|DISABLE} QUERY REWRITE]
AS SELECT tabla1.campo_a, tabla2.campo_b
FROM tabla1 , tabla2
WHERE tabla1.campo_a = tabla2.campo_a
AND …

Donde podemos especificar de qué forma queremos que se recuperen los datos: de forma inmediata o en otro momento:

  • BUILD IMMEDIATE: El resultado se almacena al ejecutar la query
  • BUILD DEFERRED: Sólo se crea la definición, el resultado se almacenará más adelante. Para ello podemos utilizar cuando queramos llenarla la función REFRESH del paquete de Oracle DBMS_MVIEW.

También podemos especificar cada cuánto tiempo o cuándo queremos que se actualicen los datos de la vista:

  • REFRESH ON COMMIT: los datos se actualizan cada vez que se haga COMMIT sobre los objetos fuente.
  • REFRESH ON DEMAND: sólo se actualizarán cuando se haga manualmente a través de las funciones REFRESH de Oracle (más adelante se explica cuáles son y cómo invocarlas).
  • REFRESH [START WITH fecha_inicial] NEXT intervalo_tiempo: con esta sentencia podemos establecer una actualización periódica de la vista. La fecha_inicial puede definirse como sysdate y el intervalo_tiempo cada cuanto tiempo queremos realizar la tarea (podemos incrementar numéricamente el sysdate)

Y especificar si permitimos a Oracle o no reescribir las queries cuando en una consulta se intente acceder a las tablas origen, de forma que por detrás el duende de Oracle ataque directamente a las vistas materializadas, cuyo acceso y recuperación de datos es más rápido, sin que el usuario necesite hacer nada. Esto sólo lo hará el Optimizador de Oracle si la consulta lo permite (que las tablas a las que va a buscar la información coinciden con las tablas origen de la vista materializada).

  • ENABLE QUERY REWRITE: Oracle puede reescribir las queries
  • DISABLE QUERY REWRITE: lo contrario

La ventaja de este tipo de objeto la encontramos cuando la query asociada es muy compleja, tiene numerosos joins y se utiliza con frecuencia, ya que nos permite mejorar el rendimiento de la SQL al tenerla almacenada en memoria y ejecutarse una sóla vez. Sin embargo, el principal hándicap es que nos vemos obligados a mantenerla actualizada de forma regular para no perder calidad en los datos. Para ello podemos definir en el script de creación de la Vista Materializada el tipo de actualización que tendrá al ejecutar los métodos propios de Oracle para refrescarla. Existen los siguientes tipos de actualización para una Vista materializada

  • FAST: Es la opción más recomendada por su rendimiento. Es una actualización incremental, es decir, sólo actualiza los registros que hayan cambiado. Para que esta opción funcione correctamente necesitamos generar estadísticas de la vista para que Oracle esté al tanto de los cambios. La forma de hacerlo es creando un log de la vista materializada sobre la PK de cada tabla origen.

    CREATE MATERIALIZED VIEW LOG ON tabla_origen
    WITH PRIMARY KEY
    INCLUDING NEW VALUES;

  • COMPLETE: regenera por completo el resultado al borrar y volver a ejecutar de nuevo la query.
  • FORCE: Es el valor por defecto. En caso de que se pueda, se ejecutará el FAST; si no, el COMPLETE.
  • NEVER: nunca se refresca la vista.

Si modificamos el origen y queremos que éste se refleje en la Vista materializada, tenemos que invocar a una función del paquete DBMS_MVIEW de Oracle que se encarga de actualizar los datos. Tenemos dos a nuestra disposición:

  • DBMS_MVIEW.REFRESH: con este método pasamos por parámetro la Vista Materializada para que se actualice:

    begin

    DBMS_MVIEW.REFRESH(‘TABLA_EMPLEADOS’);

    end;

  • DBMS_MVIEW.REFRESH_DEPENDENT: mientras que con este lo que le pasamos por parámetro son todas las tablas origen de las que depende la vista:

    begin

    DBMS_MVIEW.REFRESH_DEPENDENT(‘TABLA_ORIGEN_1’, ‘TABLA_ORIGEN_2’, ‘TABLA_ORIGEN_3’);

    end;

8 Comentarios

Vistas de metadatos de Oracle, cómo buscar objetos de la base de datos


Vistas de metadatos de Oracle, cómo bucear por los objetos de la base de datos

En alguna ocasión hemos tenido que hacer una consulta en Oracle sobre una tabla cuyo nombre no recordamos con exactitud y nos hemos tenido que pegar con la documentación del proyecto (si existe, claro) hasta encontrarla. Con el IDE TOAD for Oracle podemos usar el Schema Browser para encontrar rápidamente a través de los filtros de metadatos la tabla en cuestión, sin embargo, si estamos con cualquier otra herramienta que no disponga de un buscador para el diccionario de datos de  la base de datos, la única forma de buscar entre todos los objetos del sistema es utilizando alguna de las vistas de metadatos propias de ORACLE del esquema SYSTEM (SYS), que almacenan toda la información sobre los objetos de la BBDD.

Existe una vista por cada nivel de acceso en función del usuario con el que nos hemos conectado, por ejemplo, las vistas que agrupan toda la información sobre los índices serían DBA_INDEXES, ALL_INDEXES y USER_INDEXES.

  • DBA_: contiene todos los objetos de la instancia a la que nos hemos conectado. Es necesario tener los privilegios suficientes.
  • ALL_: contiene todos los objetos accesibles por el usuario con el que nos hemos conectado, tanto los propios como sobre los que se tiene acceso (ya sean de otros usuarios o esquemas)
  • USER_: sólo contiene los objetos que pertenecen al usuario.

Estas vistas de metadatos nos permiten buscar rápidamente cualquier objeto de la base de datos.

  • SYS.DBA_TABLES ó SYS.DBA_ALL_TABLES (Tablas)
  • SYS.DBA_VIEWS (Vistas)
  • SYS.DBA_INDEXES (Índices)
  • SYS.DBA_TABLESPACES (Tablespaces)
  • SYS.DBA_USERS (Usuarios)
  • SYS.DBA_PROCEDURES (Procedures)
  • SYS.DBA_SEQUENCES (Secuencias)
  • SYS.DBA_TRIGGERS (Triggers o Disparadores)




Una consulta de ejemplo con la que obtendríamos el nombre completo de una tabla sería:

SELECT OWNER, TABLE_NAME, TABLESPACE_NAME
FROM SYS.DBA_TABLES
WHERE TABLE_NAME LIKE ‘%EMPLEADOS%’;

En relación a las tablas DBA_TABLES y DBA_ALL_TABLES, mencionar que la diferencia radica en que la primera sólo contiene información de las tablas, mientras que la segunda incluye también metadatos de los Object Tables, que en Oracle son tipos de datos definidos por el propio usuario (son estructuras o arrays que pueden incorporarse como columnas de una tabla o incluso permiten crear nuevas tablas instanciando estos objetos; para crearlos se utiliza la sentencia CREATE TYPE < nombre > AS OBJECT).

 

SYS.ALL_TAB_COLS: buscar tablas por sus columnas en Oracle

Otra tabla del system que nos puede ayudar a la hora de buscar información en los metadatos de Oracle es  SYS.DBA_TAB_COLS. Esta tabla contiene las columnas de cada objeto table de nuestra base de datos, de forma que buscando por el campo COLUMN_NAME podremos saber en qué tablas se encuentra (útil cuando sabemos el campo de destino y queremos saber saber de donde viene o por donde pasa).

Por ejemplo, para obtener todas las tablas del sistema que incluyen una columna en concreto podríamos utilizar esta query:

SELECT OWNER, TABLE_NAME, COLUMN_NAME
FROM SYS.ALL_TAB_COLS
WHERE COLUMN_NAME = ‘FECHA_ALTA’;

 

SYS.DBA_TAB_PRIVS: Ver los permisos o privilegios de una tabla en Oracle

La forma más rápida de ver los permisos de una o varias tablas es utilizando la vista SYS.DBA_TAB_PRIVS. Filtrando por el nombre de la tabla recuperaremos una tupla con cada permiso otorgado (select, alter, insert, update, delete, execute, etc.), el rol al que se le ha asignado y el usuario propietario. Aunque la nomenclatura de la vista incluye _TAB, se pueden consultar los permisos de cualquier objeto de la BBDD: tablas, vistas, secuencias, etc.

SELECT GRANTEE, OWNER, TABLE_NAME, GRANTOR, PRIVILEGE
FROM SYS.DBA_TAB_PRIVS
WHERE TABLE_NAME LIKE ‘%EMPLEADOS%’

Sin Comentarios
  • Página 3 de 3
  • <
  • 1
  • 2
  • 3