Oracle8i: Vgl. DB-Link versus direkter Zugriff

Performance-Vergleich:

  1. Select * from tableX@schemaX;

  2. Select * from tableX@db_link;

Wobei db_link auf das aktuelle, gleiche SchemaX zugreift wie
im ersten select.

Meine Erfahrung: 1) ist schneller, Zufall?
Löst Oracle jedesmal den Link auf, auch wenn der Link auf das aktuelle Schema der Session zugreift? Oder wird der Link einfach umgangen?

schönen morgen!

Performance-Vergleich:

  1. Select * from tableX@schemaX;

??? soweit meine erfahrung reicht, konnte ich per „@“ noch nie auf ein schema zugreifen … auf ein schema geht’s doch mit schemaX.tableX … (hab’s grad sogar ausprobiert, krieg da nur einen ora-02019: remote database not found - klar, gibt’s auch nicht, nur das schema)

  1. Select * from tableX@db_link;

Wobei db_link auf das aktuelle, gleiche SchemaX zugreift wie
im ersten select.

Meine Erfahrung: 1) ist schneller, Zufall?
Löst Oracle jedesmal den Link auf, auch wenn der Link auf das
aktuelle Schema der Session zugreift? Oder wird der Link
einfach umgangen?

zum auflösen des links: oracle löst den link bei jedem zugriff auf, d.b., wenn du einen join über mehrere db-link-tabellen hast, wird je tabelle der link einmal aufgelöst … (vor kurzem per zufall beim lösen von *täterätäää* performance-problemen aufgrund des tracings rausgefunden - ziemlich wild, was da so abgeht :wink:

frage: wozu db-link, wenn schemas in selber instanz liegen??

oder hab ich überhaupt die frage falsch verstanden?

grüße,
tomh

Hallo!

Du hast mich trotz meines Fehlers richtig verstanden. Ich habe meine Anfrage unter Zeitdruck runtergeschrieben ohne groß zu überlegen. Es muß heißen: Select * from schemaX.tableX

Hintergrund: Ich muß auf zwei verschiedene Instanzen (A und B) zugreifen. Mal tue ich dies von Instanz A und mal von Instanz B aus. Die Applikation soll aber nicht groß geändert werden. Die jeweilige Instanz wird über eine Austauschvariable übergeben.

Gruß
Peter

Du hast mich trotz meines Fehlers richtig verstanden. Ich habe
meine Anfrage unter Zeitdruck runtergeschrieben ohne groß zu
überlegen. Es muß heißen: Select * from schemaX.tableX

uff, ich dachte schon, ich hab was versäumt oder oracle brachte eine 8.1.8 so zwischendurch raus …

Hintergrund: Ich muß auf zwei verschiedene Instanzen (A und B)
zugreifen. Mal tue ich dies von Instanz A und mal von Instanz
B aus. Die Applikation soll aber nicht groß geändert werden.
Die jeweilige Instanz wird über eine Austauschvariable
übergeben.

das ist sch* … ohne große änderung funktioniert’s nur mit db-link, mit größerer änderung kann entschieden werden, ob schema oder link … eine möglichkeit wäre aber auch ein und dasselbe schema in beiden instanzen mit synonymen auf die jeweils andere instanz anzulegen (restriction: db-link-functions und procedures dürfen kein commit über das synonym ausführen!) … so haben wir ein ähnliches problem gelöst

grüße,
tomh