¿Cómo ver la lista de bases de datos en Oracle?

33

¿Hay un equivalente a la SHOW DATABASESdeclaración de MySQL ?

¿Es posible encontrar bases de datos en un clúster? es decir, bases de datos presentes en la red en algún otro sistema?

¿Podría analizar los archivos presentes en una instalación de Oracle para encontrar lo mismo?

Dadas las credenciales de acceso completas a un sistema Oracle, ¿cómo enumeraría todas las bases de datos que existen?

Kshitiz Sharma
fuente
44
Tenga en cuenta también que hay una falta de coincidencia de terminología entre MySQL y Oracle Database. En términos de arquitectura, Oracle tiene table-> schema-> database, y al mismo tiempo también table-> tablespace-> database. MySQL tiene simplemente table-> database. Entonces, tal vez realmente esté buscando una lista de esquemas de Oracle (piense: espacios de nombres SQL para tablas) o una lista de espacios de tablas de Oracle (piense: grupos de archivos del sistema operativo para tablas).
kubanczyk

Respuestas:

22

¿Hay un equivalente a la SHOW DATABASESdeclaración de MySQL ?

No existe tal cosa. Puede consultar oyentes en una máquina ( lsnrctl status) para ver qué servicios están registrados allí, pero eso no se asigna uno a uno a la base de datos (y podría haber múltiples oyentes en la misma máquina). De lo contrario, las herramientas comúnmente utilizadas se conectan a una instancia de base de datos, y una instancia pertenece a una sola base de datos.

Si habla de clústeres de Oracle RAC, cada instancia conoce a sus pares (otras instancias que dan servicio a la misma base de datos) y puede encontrar las otras instancias actualmente iniciadas para esa base de datos utilizando la gv$instancevista.
También puede usar la crsctlutilidad para enumerar los servicios (incluidas las bases de datos) que están registrados en el clúster y su estado.
Si está hablando del software de agrupación de otro proveedor, estoy bastante seguro de que todos tienen este tipo de utilidades de administración de recursos para consultar.

Si está hablando de un montón de máquinas, entonces no, no hay una forma 100% confiable de enumerar todas las bases de datos en una red.

Para buscar bases de datos activas (es decir, iniciadas), busque *_pmon_*procesos en Unix (hay uno por instancia de base de datos) y servicios de Oracle en Windows.

Para ubicar las instalaciones del software de base de datos Oracle, mire en /etc/oratabUnix. Esto debería contener todos los ORACLE_HOMEs instalados. Usted puede mirar en el interior de cada uno de los de $ORACLE_HOME/dbspara spfile<SID>.oray / o init<SID>.oraarchivos - habrá una para cada base de datos.

(Creo que puede encontrar el equivalente de la información en oratablas claves de registro de Windows a continuación HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE, pero no conozco su estructura).

Ahora, por supuesto, si ha registrado toda su base de datos con un servidor OEM (Enterprise Manager) cuando los instaló, puede encontrar la lista completa allí, pero supongo que si está preguntando, ese no es el caso.

Estera
fuente
12

Oracle no tiene bases de datos sino esquemas, puede enumerarlos con

SELECT USERNAME FROM ALL_USERS ORDER BY USERNAME; 

o algo como esto :

SELECT TABLESPACE_NAME FROM USER_TABLESPACES;
DevYudh
fuente
2
Los espacios de tabla no están vinculados a esquemas en general.
Mat
2
¿TODOS LOS USUARIOS? USER_TABLESPACES?
kubanczyk
"¿Hay un equivalente a la declaración MySQL SHOW DATABASES?" Estoy tratando de responder esa pregunta. no digas que no sabes
DevYudh
1
@DevYudh: un espacio de tabla en Oracle es algo completamente diferente a una "base de datos" en MySQL. La primera consulta es correcta, la segunda consulta es simplemente incorrecta
a_horse_with_no_name
11

Simplemente hablando, no existe una analogía directa para las 'bases de datos' de MySQL o un 'clúster' en Oracle: la coincidencia más cercana es un 'esquema' pero eso sigue siendo muy diferente.

Aparentemente, esto va a cambiar en 12c con la introducción de bases de datos conectables:

Dividir las operaciones de la base de datos de manera limpia del contenido del usuario es una gran transformación de las arquitecturas de bases de datos tradicionales. Oracle 11g, y todos sus predecesores, solo podían ejecutar una base de datos a la vez, dijo Kyte. Si una organización quisiera ejecutar múltiples bases de datos en un solo servidor, necesitaría ejecutar múltiples instancias de Oracle 11g, una para cada base de datos. Como su nombre lo indica, las bases de datos conectables permiten que múltiples bases de datos de inquilinos se ejecuten bajo una copia de Oracle 12c.

Jack Douglas
fuente
Uh genial, más complicación, más seguridad en el trabajo ...
kubanczyk
6

Creo que una respuesta para futuros navegadores en * nix podría ser:

gato / etc / oratab

rlblyler
fuente
3

Simplemente conéctese a ASM y verifique la base de datos del cliente.

set pages 999 lines 120
col SOFTWARE_VERSION for A15
col INSTANCE_NAME for A20
col DB_NAME for A20 trunc
select INSTANCE_NAME, DB_NAME, STATUS, SOFTWARE_VERSION as "version"
from  V$ASM_CLIENT;
t.menard
fuente
1
¡Esto supone que se está utilizando ASM! ¿Qué pasa con las bases de datos almacenadas en un sistema de archivos o SAN?
Colin 't Hart
3

Si tiene bases de datos conectables (recomendado) en Oracle 12, puede hacer lo siguiente:

SELECT PDB_ID, PDB_NAME, STATUS FROM DBA_PDBS ORDER BY PDB_ID;
Peter
fuente
0

Para que la base de datos independiente obtenga la lista de bases de datos que se inician automáticamente después del reinicio del host:

cat /etc/oratab | grep -i ":y" | grep -v "^#"

o simplemente para obtener la lista de todas las bases de datos:

cat /etc/oratab | grep -v "^#"

Para las bases de datos RAC, el siguiente método puede ser útil:

crsctl stat res -t | grep "\.db"

Además, como ya se mencionó, la base de datos en MySQL no es la misma que la base de datos en Oracle. En Oracle está más cerca del esquema, que se denomina contenedor para los objetos del usuario. Para obtener la lista de esquemas, puede usar la siguiente instrucción SQL:

select username from dba_users order by 1;

o para obtener una lista de esquemas no relacionados con el sistema (disponible en Oracle RDBMS a partir de la versión 12c):

select username from dba_users where ORACLE_MAINTAINED='N' order by 1;
Prokhozhii
fuente