Oracle
 sql >> Database >  >> RDS >> Oracle

Come invocare SELECT su DBLINK su DBLINK?

Prima di tutto, dal punto di vista architettonico, sarei piuttosto diffidente nei confronti di qualsiasi progetto che prevedesse l'estrazione di dati su più collegamenti di database. L'ho visto fatto quando l'eventuale fonte è una versione antica di Oracle a cui il database di destinazione non può connettersi direttamente, quindi è stato utilizzato un database intermedio che esegue una versione intermedia di Oracle. Questo è molto raro in pratica, però.

Dal punto di vista delle prestazioni, questo tipo di approccio è gravemente problematico. C'è, ovviamente, il problema che i dati verranno inviati due volte sulla rete. Ma ancora più preoccupante, stai affrontando un problema difficile, ottimizzando le istruzioni SQL distribuite e rendendolo quasi intrattabile. Fondamentalmente dovresti garantire che non avresti mai interrogato dati locali e dati remoti nella stessa query o dovresti convivere con le prestazioni risultanti se Oracle decide su uno stupido piano di query perché il set di strumenti rimasti per consentirti di ottimizzare questo tipo di query è minimo.

Detto questo, il database intermedio dovrebbe avere sinonimi o viste che astraggono il collegamento al database. Quindi

Su A:

  • crea un collegamento al database a B

Su B:

Su A, puoi quindi

SELECT *
  FROM [email protected]