Forum Stats

  • 3,740,442 Users
  • 2,248,256 Discussions
  • 7,861,251 Comments

Discussions

¿Oracle genera un número único cuando se instala?

User_OX9Q3
User_OX9Q3 Member Posts: 22 Green Ribbon
edited Aug 25, 2020 11:53AM in Español Discusiones

Estoy tratando de obtener un número único dentro de la instalación de Oracle, quiero saber si esto es posible, gracias por su ayuda

Tagged:
Jairo SuarezUser_OX9Q3

Comments

  • Jairo Suarez
    Jairo Suarez Member Posts: 26 Blue Ribbon
    edited Apr 27, 2020 7:41PM

    Saludos desconocido.

    Seguramente te refieres al tag id de la base de datos que lo puedes ver por RMAN cuado entras, para mi caso es.

    $ rman

    Recovery Manager: Release 19.0.0.0.0 - Production on Tue Apr 28 11:40:37 2020

    Version 19.5.0.0.0

    Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.

    RMAN> connect target

    connected to target database: EMREP (DBID=4249249700)

    RMAN>

  • User_OX9Q3
    User_OX9Q3 Member Posts: 22 Green Ribbon
    edited May 4, 2020 1:40PM

    ¿Ese número es único para la BD? ¿Siempre es el mismo o varía cada conexión?

  • L. Fernigrini
    L. Fernigrini Data Engineer Sr Consultant Member Posts: 3,529 Bronze Crown
    edited May 4, 2020 1:46PM

    Recordá siempre de incluir la version de Oracle, las cosas pueden cambiar de version en version.

    El DBID es un numero que se genera al momento de crear la DB, lo podes consultar en la vista V$DATABASE. Los backups y los archivos (datafile, control file) lo incluyen, para saber a que DB corresponden.

    pastedImage_1.png

    https://docs.oracle.com/en/database/oracle/oracle-database/19/refrn/V-DATABASE.html#GUID-C62A7B96-2DD4-4E70-A0D9-26EE4BF…

    Jairo Suarez
  • User_OX9Q3
    User_OX9Q3 Member Posts: 22 Green Ribbon
    edited Jun 11, 2020 5:46PM

    En sí lo que me interesa es conocer un número único de instalación es decir, que también contenga el servidor en donde se encuentra

  • L. Fernigrini
    L. Fernigrini Data Engineer Sr Consultant Member Posts: 3,529 Bronze Crown
    edited Jun 11, 2020 6:57PM

    No existe ese concepto, al menos que yo sepa. El DBID es lo mas cercano que puedes utilizar.

    Oracle afirma que es un número único, es probable que en el cálculo del mismo incluya datos que permitan reducir al mínimo la chance de tener valores duplicados (por ejemplo, timestamp mas algun dato del servidor (como la IP) mas algun dato de la version.....)

    Encontré algunos post que mencionan intentar crear dos DB en el mismo server con segundos de diferencia y genera valores bastante distintos.

    User_OX9Q3User_OX9Q3
  • User_OX9Q3
    User_OX9Q3 Member Posts: 22 Green Ribbon
    edited Aug 24, 2020 2:03PM

    Muchas gracias por tu aporte, investigare si este número no se repite aunque se genere en otra instalación, es decir que tenga 2 equipos y que por casualidad se genere el mismo DBID

  • L. Fernigrini
    L. Fernigrini Data Engineer Sr Consultant Member Posts: 3,529 Bronze Crown
    edited Aug 24, 2020 3:08PM

    Acá hay una conversación en un foro donde discuten sobre como se genera,

    https://www.dba-village.com/village/dvp_forum.OpenThread?ThreadIdA=38461

    Como veras, Oracle no hace publico el algoritmo, pero indica que el mismo es único. No deberías preocuparte demasiado sobre la posibilidad de que coincidan.

    User_OX9Q3User_OX9Q3
  • User_OX9Q3
    User_OX9Q3 Member Posts: 22 Green Ribbon
    edited Aug 24, 2020 5:02PM

    Ok lo revisare, muchas gracias

  • User_OX9Q3
    User_OX9Q3 Member Posts: 22 Green Ribbon
    edited Aug 24, 2020 5:53PM

    Revise el link y si veo que entre BD's el DBID varia mucho, pero me sigue quedando la duda de que en otra instalación se llegue a repetir, por lo que he pensado en generar otro número a partir del DBID pero no sé que otros valores utilizar, podrías apoyarme con tu experiencia y recomendarme algunos?

  • L. Fernigrini
    L. Fernigrini Data Engineer Sr Consultant Member Posts: 3,529 Bronze Crown
    edited Aug 24, 2020 7:02PM

    Se me ocurren mil formas, pero no creo que tenga sentido. Ese ID es el que utiliza Oracle para identificar, por ejemplo, los backups en un repositorio de RMAN (donde suele haber muchos backups de distintas DB de distintos servidores).

    Una forma sencilla sería usar un hash del nombre del servidor, mas la fecha (YYYYMMDDHHMISSxxxx) de creación de la DB. Sería imposible crear dos DB en el mismo milisegundo en un mismo servidor. Igualmente cualquiera de ellos tendrías que generarlos vos en forma manual, con lo cual es lo mismo que asignarle ese ID en forma directa (ID 1 es la DB de Ventas en el entorno de desarrollo, ID 2 es Ventas en Testing, 3 es Ventas en Producción) y así sucesivamente.

    Nuevamente, sería reinventar la rueda. Y tendrías dos ID por base de datos, uno creado por tu algoritmo y el otro el que Oracle genera en forma automática.

    User_OX9Q3
  • User_OX9Q3
    User_OX9Q3 Member Posts: 22 Green Ribbon
    edited Aug 24, 2020 7:12PM

    Pensaba en utilizar el id del esquema, este también es único no?

  • L. Fernigrini
    L. Fernigrini Data Engineer Sr Consultant Member Posts: 3,529 Bronze Crown
    edited Aug 24, 2020 7:26PM

    No conozco cuál sería el ID de esquema, si existe el ID de usuario, y los mismos no se repiten en una DB pero si se repiten en distintas DB.

    Es decir, cada base de datos tiene N usuarios, y los mismos se numeran desde el 1 en adelante, asi que se repiten.

    ¿Para qué necesitas generar ese "número"? . ¿Cual es el problema a resolver?  Me parece que estamos ante el típico "problema X Y"

    https://es.wikipedia.org/wiki/Problema_XY

  • User_OX9Q3
    User_OX9Q3 Member Posts: 22 Green Ribbon
    edited Aug 24, 2020 7:41PM

    Me refería a que pensaba en utilizarlo en conjunto, concatenar el DBID y el USERID, mi problema es que quiero generar un número único a través de una consulta que no se repita en otro servidor, en SQL Server tengo acceso a los datos del sistema y lo genero con el numero serial de la bios y del disco, pero en Oracle no pude manipular estos datos, los obtuve con el comando HOST pero no me deja manipularlos, por eso mi incapie en querer obtener un número que sea realmente único por instalación de Oracle

  • L. Fernigrini
    L. Fernigrini Data Engineer Sr Consultant Member Posts: 3,529 Bronze Crown
    edited Aug 24, 2020 10:47PM

    Esa idea es más peligrosa que confiar en el DBID....

    Si se diera el caso de un DBID  6543 con un user 15  (654315) y un DBID 65431 con un user 5 (654315). Y segun con que usuario lo consultes, la misma base de datos te devolvería distintos IDs....

    Si pudiste obtener un dato con HOST, lo mas probable es que puedas direccionar el mismo a un archivo y leer el mismo como si fuera una tabla externa de Oracle.....

    Igualmente, no creo en que sea necesario, Oracle ya provee un identificador único y es el DBID...

  • User_OX9Q3
    User_OX9Q3 Member Posts: 22 Green Ribbon
    edited Aug 25, 2020 9:20AM

    Cierto tiene razón, ya intenté guardar el dato que me devuelve el comando HOST en un archivo pero no lo hace, no me deja manipular este dato, lo intente con SPOOL, ojalá estuviera disponible el algoritmo del DBID para poder demostrar que es único y diferente para cada instalación

  • L. Fernigrini
    L. Fernigrini Data Engineer Sr Consultant Member Posts: 3,529 Bronze Crown
    edited Aug 25, 2020 11:53AM

    No lo guardes desde Oracle, guardalo directamente en el comando.

    No se si usas Linux o Windows, pero en cualquiera de los casos es posible direccionar la salida de un comando a un archivo, por ejemplo en Windows:

    C:\> dir > c:\temp\dir.txt

    C:\> ipconfig /all > ip.txt

    User_OX9Q3
Sign In or Register to comment.