miércoles, 23 de abril de 2014

Listar los direcorios en linux en forma de Arbol

este dia me toco hacer una lista de los directorios que se encuentran bajo mi instalación, yo recuerdo que un amigo (Ing. Luis Eduardo Solorzano) me mostró el uso del comando sed, pero no me acordaba como usarlo así que entre a la ayuda (man sed) para ver los parámetros y usarlo correctamente, el resultado fue este comando de linea:

ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/ /' -e 's/-/|/'

lo divertido del caso es que ya existe mucha información al respecto en la red, jajajaja, lo mejor de todo es que he recordado cosas del PODEROSO UNIX...


lunes, 7 de abril de 2014

El usuario no Ejecuta el proceso dinamico???

este dia me tope con un problema a un usuario se le creo un proceso para que de forma dinamica asigne permisos a roles o roles a usuarios pero NO FUNCIONO cuando lo ejecuta el usuario final????
por que sera????
el mensaje de error era :

ORA-01031: insufficient privileges while issuing an EXECUTE IMMEDIATE

pos en una literatura encontré lo siguiente:
Un Procedure o Package se ejecuta con los permisos del que lo ejecuta o con los permisos del esquema ONDE (donde) esta almacenado. 

http://docs.oracle.com/cd/B28359_01/appdev.111/b28370/create_package.htm#i2065285


AUTHID CURRENT_USER
Specify CURRENT_USER to indicate that the package executes with the privileges of CURRENT_USER. This clause creates an invoker's rights package.
This clause also specifies that external names in queries, DML operations, and dynamic SQL statements resolve in the schema of CURRENT_USER. External names in all other statements resolve in the schema in which the package resides.
AUTHID DEFINER
Specify DEFINER to indicate that the package executes with the privileges of the owner of the schema in which the package resides and that external names resolve in the schema where the package resides. This is the default and creates a definer's rights package.

Esta clausula puede ser omitida y por defecto tomara el valor de AUTHID DEFINER pero para mi criterio es mejor colocarlo, un par de letras mas no dañan a nadie

AUTHID DEFINER (default)
Esta opcion es por defecto si no se especifica nada. En este caso el procedimiento o paquete se va a ejecutar con el dueño del esquema en que fue creado el procedimiento o paquete.
AUTHID CURRENT_USER
En este caso el procedure se ejecuta con el usuario que realiza la ejecucion y dentro de su esquema independientemente de quien sea el dueño del procedimiento o paquete.


Nota: 
en ambos casos se le debe dar grant de execute al usuario/esquema o rol que quiera utilizar el procedimiento o paquete


les debo el ejemplo :D :D :D

Script para Compilar los Trigger, Funciones, Proc., Paquetes...

MIÉRCOLES, 19 DE MARZO DE 2014

hola,
este dia he tenido que realizar una actividad para verificar y compilar todos los trigger de una base de datos oracle 12c, para lo cual cree un script basado en el contenido de la tabla sys.dba_objects, pero me surgio una duda??......
como puedo compilar las vistas, trigger, definicion de paquetes, cuerpos de paquetes, procedimientos de una sola vez..

para este caso he creado el siguiente script que espero les sea de utilidad, no olvides dejar tus comentarios

set serveroutput on size 9999
begin
for c1 in (select  CASE
        WHEN  object_type='TRIGGER'     THEN  'ALTER TRIGGER '||owner||'.'||object_name||' COMPILE'
        WHEN object_type='PROCEDURE' THEN  'ALTER PROCEDURE '||owner||'.'||object_name||' COMPILE'
        WHEN  object_type='FUNCTION'   THEN  'ALTER FUNCTION '||owner||'.'||object_name||' COMPILE'
        WHEN  object_type='VIEW'          THEN  'ALTER VIEW '||owner||'.'||object_name||' COMPILE' 
        WHEN  object_type='PACKAGE'       THEN  'ALTER PACKAGE '||owner||'.'||object_name||' COMPILE'
        WHEN  object_type='PACKAGE BODY'       THEN  'ALTER PACKAGE '||owner||'.'||object_name||' COMPILE BODY'
        END sqltext,
        object_type,
        object_name,
        owner
from dba_objects
where object_type IN ( 'TRIGGER' , 'PROCEDURE', 'FUNCTION', 'VIEW','PACKAGE','PACKAGE BODY'  )
and status = 'INVALID'
and owner in ('ESQUEMA1', 'ESQUEMA2', 'ESQUEMA3', etc, etc.....)
ORDER BY object_type
) loop
begin
execute immediate c1.sqltext;
dbms_output.put_line('COMPILADO '||c1.owner||'.'||c1.object_name);
exception
when others then
dbms_output.put_line('--- ERROR DE COMPILACION VERIFICAR EN : '||
                                      C1.object_type|| '  ESQUEMA '||C1.owner||'.'||
                                      c1.object_name);
end;
end loop;
end;

Exporta DDL Oracle 12c Dedicado a Extraer la metadata por esquema o de toda la base de datos; Las pruebas han sido realizadas en Oracle 12c/UNIX

Primera entrega, 
publicado el MIÉRCOLES, 2 DE ABRIL DE 2014
COMO EXPORTAR EL DDL de mi base de datos ORACLE??

lo primero que debemos tener claro es:
DDL es := Lenguaje de definición de datos
con este lenguaje se puede:
Crear, Eliminar y Modificar Objetos de uno o varios esquemas.
Otorgar y revocar privilegios y roles
Analizar la información en una tabla, un índice o un clúster
Establecer las opciones de auditoría (proximamente algo interesante)
Añadir comentarios al diccionario de datos

al final todo se resume en un script sumamente facil  para la version 12c,
eso si yo ejecute este script en unix/sqlplus

clear screen
accept ESKEMA prompt 'Digite el nombre del ESKEMA : '
accept ARCHIVO prompt  ' Digite el nombre del directorio/ archivo : '
spool &&ARCHIVO..gen
SET LONG 2000000 PAGESIZE 0 head off verify off feedback off linesize 132
SELECT dbms_metadata.get_ddl('USER','&&ESKEMA') FROM dual;
SELECT DBMS_METADATA.GET_GRANTED_DDL('SYSTEM_GRANT','&&ESKEMA') from dual;
SELECT DBMS_METADATA.GET_GRANTED_DDL('ROLE_GRANT','&&ESKEMA') from dual;
SELECT DBMS_METADATA.GET_GRANTED_DDL('OBJECT_GRANT','&&ESKEMA') from dual;

spool off

hey no olvides dejar tus comentarios!!!!!

Bendiciones

Creacion de Sinonimos publicos de forma masiva....

este dia (MIÉRCOLES, 2 DE ABRIL DE 2014) me fue asignado crear los sinonimos publicos a todos los esquemas de trabajo, para lo cual cree un codigo pl,
espero que a tod@s les sea de utilidad, no olviden dejar sus comentarios

DECLARE 
CURSOR CREAR_SINONIMO IS
SELECT CASE WHEN OBJECT_TYPE IN (' FUNCTION','PACKAGE','PROCEDURE','SEQUENCE','TABLE','VIEW')
   THEN  'CREATE OR REPLACE PUBLIC SYNONYM '|| OBJECT_NAME||' FOR '||OWNER||'.'||OBJECT_NAME 
   ELSE ''
   END AS PERMISO
     FROM DBA_OBJECTS
     WHERE OWNER IN ('ESKEMA1','ESKEMA2','ESKEMA3')
     AND OBJECT_TYPE IN (' FUNCTION','PACKAGE','PROCEDURE','SEQUENCE','TABLE','VIEW') ;
    BEGIN
      FOR EJECUTA_PERMISO IN CREAR_SINONIMO
      LOOP
      BEGIN
      EXECUTE IMMEDIATE EJECUTA_PERMISO.PERMISO;
       DBMS_OUTPUT.PUT_LINE('SINONIMO CON EXITO '||EJECUTA_PERMISO.PERMISO);
      EXCEPTION WHEN OTHERS
      THEN
       DBMS_OUTPUT.PUT_LINE('ERROR '||EJECUTA_PERMISO.PERMISO);
      END;
      END LOOP; 
    END;