Cómo mostrar bases de datos en Oracle 11g usando SQL * Plus

79

Con la ayuda de este comando show databases;puedo ver bases de datos en MySQL .

¿Cómo mostrar las bases de datos disponibles en Oracle ?

Nubkadiya
fuente

Respuestas:

61

Puede pensar en una "base de datos" MySQL como un esquema / usuario en Oracle. Si tiene los privilegios, puede consultar la DBA_USERSvista para ver la lista de esquemas:

SELECT * FROM DBA_USERS;
dpbradley
fuente
21
Algunas bases de datos de Oracle tienen muchos usuarios sin objetos. Para estos, una alternativa es SELECT DISTINCT OWNER FROM ALL_OBJECTS;
Gary Myers
1
+1 buena alternativa, solo tenga en cuenta que si no es un usuario privilegiado y emite esta consulta, solo verá aquellos PROPIETARIOS en los que tenga privilegios en al menos uno de sus objetos.
dpbradley
5
La consulta a DBA_USERS da un "ORA-00942: la tabla o vista no existe", ¿quizás un problema de permiso? El del comentario "SELECCIONAR DISTINTO PROPIETARIO DE ALL_OBJECTS;" está trabajando con las mismas credenciales de acceso. db 11g
a1an
2
SELECT * FROM DBA_USERS;
Felipe Augusto
95

SELECT NAME FROM v$database; muestra el nombre de la base de datos en Oracle

Shan
fuente
2
Creo que esto es lo que preguntaba. O al menos esto es lo que pienso cuando escucho "base de datos" ... en contraposición al esquema (o usuario).
Randy Stegbauer
2
esta debería ser la respuesta
Ameya Deshpande
Si, por ejemplo, ejecuta Oracle Database Express Edition, se imprime algo como XE, es decir, el nombre único que identifica de forma exclusiva su instancia / base de datos (¿se llama SID?). Por otro lado, el show databasescomando de MySQL imprime lo que MySQL llama base de datos, también conocida como esquema (aproximadamente lo que se obtiene SELECT USERNAME FROM DBA_USERSen Oracle).
Álvaro González
28

Oracle no tiene un modelo de base de datos simple como MySQL o MS SQL Server. Encuentro que lo más parecido es consultar los espacios de tabla y los usuarios correspondientes dentro de ellos.

Por ejemplo, tengo un espacio de tabla DEV_DB con todas mis 'bases de datos' reales dentro de ellas:

SQL> SELECT TABLESPACE_NAME FROM USER_TABLESPACES;

Resultando en:

SYSTEM
SYSAUX
UNDOTBS1
TEMP
USERS
EXAMPLE
DEV_DB

También es posible consultar a los usuarios en todos los espacios de tabla:

SQL> select USERNAME, DEFAULT_TABLESPACE from DBA_USERS;

O dentro de un espacio de tabla específico (usando mi espacio de tabla DEV_DB como ejemplo):

SQL> select USERNAME, DEFAULT_TABLESPACE from DBA_USERS where DEFAULT_TABLESPACE = 'DEV_DB';

ROLES DEV_DB
DATAWARE DEV_DB
DATAMART DEV_DB
STAGING DEV_DB
Thomas Bratt
fuente
14

Quizás puedas usar esta vista, pero no estoy seguro.

select * from v$database;

Pero creo que solo te mostrará información sobre la base de datos actual.

Otra opción, si la base de datos se está ejecutando en linux ... sería algo como esto:

SQL>!grep SID $TNS_ADMIN/tnsnames.ora | grep -v PLSExtProc
Jonathan
fuente
El primero no funciona en 11g: "ORA-00942: la tabla o la vista no existe"
a1an
2
Hola @ a1an. Sin duda, la base de datos v $ existe en 11g. Compruebe si está ejecutando la consulta con los derechos necesarios. Aquí tienes la documentación sobre la base de datos v $ para Oracle 11g. docs.oracle.com/cd/B28359_01/server.111/b28320/… Algo, aquí tienes una publicación con un ejemplo sobre el uso de la base de datos v% en Oracle 11g. neeraj-dba.blogspot.com.es/2011/10/… ¡ Buena suerte!
Jonathan
2
Probablemente sea un problema de permisos, ejecutándolo como funciona sysdba
a1an
Ok @ a1an, solo da permisos para seleccionar en esa vista. conceda seleccionar en la base de datos v_ $ a su usuario; ¡TENGA EN CUENTA el subrayado! v $ database es un sinónimo y no puede otorgar proviledgest para sinónimos (puede terminar en un error ORA-02030).
Jonathan
1

No estoy claro al respecto, pero normalmente un servidor tiene una base de datos (con muchos usuarios), si crea muchas bases de datos significa que crea muchas instancias, oyentes, ... también. Para que puedas comprobar tu LISTENERpara identificarlo.

En mis pruebas, creé 2 bases de datos ( dbtesty dbtest_1), así que cuando verifiqué mi estado de LISTENER, apareció así:

lsnrctl status

....

ESTADO del LISTENER

.....

(DESCRIPCIÓN = (DIRECCIÓN = (PROTOCOLO = tcp) (HOST = 10.10.20.20) (PUERTO = 1521)))

Resumen de servicios ...

El servicio "dbtest" tiene 1 instancia (s).

La instancia "dbtest", estado LISTA, tiene 1 controlador (es) para este servicio ...

El servicio "dbtest1XDB" tiene 1 instancia (s).

La instancia "dbtest1", estado LISTA, tiene 1 controlador (es) para este servicio ...

El servicio "dbtest_1" tiene 1 instancia (s).

La instancia "dbtest1", estado READY, tiene 1 controlador (es) para este servicio ... El comando se completó correctamente

BongSey
fuente