Diferencia entre vistas DBA, ALL y USER

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:

vistas_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.

Deja un comentario