2009-06-08 18 views
4

Was ist der beste Ansatz zum Verbinden von 2 Tabellen aus verschiedenen Datenbank? In meiner Situation habe ich eine Entwicklungsdatenbank, die Postfix wie _DEV hat, während auf der Produktion _PROD ist.Was ist der beste Ansatz um 2 Tabellen aus verschiedenen Datenbanken zu verbinden?

Das Problem ist, dass wenn ich diese zwei Tabellen verbinden Ich habe einen vollständigen Datenbank-Namen zu verweisen, wie DB1_DEV.dbo.table1 INNER JOIN DB2_DEV.dbo.table100

Arbeit gut wenn auch nur, wenn Sie diese verschieben mögen in die Produktion wird es ein Albtraum sein, weil ich diese ändern muss.

Dank

Antwort

1

Hier ist ein Vorschlag: Bewegen Sie die Dev und Prod Datenbanken auf verschiedenen Server-Cluster mit dem gleichen Namen.

Wenn Sie das nicht können oder wollen, empfehle ich Ihnen, eine Möglichkeit zu finden, Ihre Datenbanknamen in Ihren Abfragen zu parametrisieren.

+1

Wirklich setzen sie in zwei verschiedenen Standorten mit dem gleichen Namen ist die einzige Lösung oder jede Abfrage ist dynamisch sql, das ist nur ein Unfall wartet auf passieren. – HLGEM

9

können Sie verwenden Synonyms Ihre Anfragen zu vereinfachen. Zum Beispiel:

-- Create a synonym for the Product table in AdventureWorks. 
USE tempdb; 
GO 
CREATE SYNONYM MyProduct 
FOR AdventureWorks.Production.Product; 
GO 

-- Query the Product table by using the synonym. 
USE tempdb; 
GO 
SELECT ProductID, Name FROM MyProduct WHERE ProductID < 5; 
GO 

EDIT: Sie können die Synonyme für die Tabellen in Frage definieren. Verwenden Sie an jeder Stelle, an der Sie die Tabellen abfragen, das Synonym anstelle des vollständigen Namens.

Wenn Sie in der Produktion bereitstellen, müssen Sie nur das Synonym ändern.

+3

Dies ist der Ansatz, den ich auch verwende, aber ich verwende die Nomenklatur von AdventureWorksProductionProduct (stopfen den gesamten qualifizierten Namen in Synonymnamen). Sie verwenden den Namen der kanonischen Datenbank für den Namen anstelle des physischen Namens, sodass das vollständige Synonym unabhängig von der referenzierten physischen Datenbank aussagekräftig ist. – ahains

2

Abhängig von Ihrer Situation kann ein SYNONYM die beste Antwort oder möglicherweise eine ANSICHT sein.

Beispiel mit Aussicht:

CREATE VIEW table1 AS SELECT * FROM DB1_DEV.dbo.table1 

Später, wenn Sie zu ART bewegen:

ALTER VIEW table1 AS SELECT * FROM DB1_PROD.dbo.table1 

Genau wie mit einem SYNONYM, behebt das Update auf magische Weise alle Abfragen zu einfach "table1" beziehen.

Hier ist eine Diskussion erklärt die Unterschiede zwischen Synonyme und Ansichten:

What are the pros/cons of using a synonym vs. a view?

0

Sie müssen Ihren Schemanamen irgendwo in der Datenbank werden zu speichern. Rufen Sie den Schemanamen ab und erstellen Sie dynamic sql. und verwenden Sie das interne Oracle-Paket DBMS_SQL.EXECUTE(), um Ihre Auswahlabfrage auszuführen.

Wenn Sie dann zu PROD wechseln, müssen Sie nichts ändern.

Verwandte Themen