En este post, quiero mostrar la diferencia entre las vistas DBA_, ALL_ y USER_ que se tienen como parte del diccionario de Oracle.
Así, procedemos con dicha diferencia:
USER_
Con este tipo de vistas, se pueden ver los objetos que pertenecen al usuario con el que estamos conectados exclusivamente. Por ejemplo, en user_tables, veremos las tablas del usuario actual. Así:
SQL> conn salt Enter password: Connected. SQL> select table_name 2 from user_tables;
TABLE_NAME ------------------------- PRUEBA_INTEGER EMPLEADO TIPO CLIENTE PERIODO CHECADOR PRUEBA CAJA EMPRESA MOVIMIENTOD MOVIMIENTO
11 rows selected.
ALL_
Usando este tipo de vistas, podremos ver los objetos a los que el usuario actual tiene acceso vía permisos sobre los mismos, estos permisos son otorgados por el administrador de la base de datos. Por ejemplo:
SQL> create user prueba identified by prueba;
User created.
SQL> grant connect to prueba;
Grant succeeded.
SQL> conn prueba/prueba; Connected. SQL> select owner, count(*) 2 from all_tables 3 group by owner;
OWNER COUNT(*) ------------------------------ ---------- SYSTEM 4 SYS 12
DBA_
Con estas vistas, se pueden ver todos los objetos de la base de datos. Es decir, si tenemos la vista dba_tables, servirá para ver todas las tablas que se encuentran contenidas en nuestra instancia. Para poder ver este tipo de vistas, se requiere tener privilegios suficientes. Por ejemplo:
SQL> conn / as sysdba Connected. SQL> select owner, count(*) 2 from dba_tables 3 group by owner;
OWNER COUNT(*) ------------------------------ ---------- TSMSYS 1 OUTLN 3 SYSTEM 149 ADMAUD 4 DBSNMP 21 SYS 682 PERFSTAT 67 SALT 11
8 rows selected.
En el archivo que anexo en la siguiente liga, concentro las vistas correspondientes a la versión 10g:
Consultando las vistas
Para poder generar un listado similar en otras versiones, pueden hacer uso de la siguiente consulta adaptada para cualquier versión, desde 7 hasta 11g. Puse los signos (+) para que se pudiera ejecutar desde 7, pero éstos tenderán a desaparecer.
select db.vista, decode (us.view_name, null, '', 'X') USER_, decode (al.view_name, null, '', 'X') ALL_, decode (db.view_name, null, '', 'X') DBA_ from (select substr (view_name, instr (view_name, '_') + 1, length (view_name)) vista, view_name from dba_views where view_name like 'ALL_%') al, (select substr (view_name, instr (view_name, '_') + 1, length (view_name)) vista, view_name from dba_views where view_name like 'DBA_%') db, (select substr (view_name, instr (view_name, '_') + 1, length (view_name)) vista, view_name from dba_views where view_name like 'USER_%') us where db.vista = al.vista (+) and db.vista = us.vista (+);
Si la información de este post te ha sido de utilidad o quieres que agregue algo más, deja por favor un comentario, contestaré a la brevedad.