2016-11-09 2 views

Antwort

0

Sie müssen Datenbankverbindung auf einer der Umgebungen erstellen. Nehmen wir an, Sie erstellen eine Datenbankverbindung auf DEV zu PROD und geben sie nur zur Auswahl, um schädliche Daten zu vermeiden.

CREATE PUBLIC DATABASE LINK PROD 
CONNECT TO <user_name> 
IDENTIFIED BY <password> 
USING '<service_name>'; 

dann alle Unterschiede zu bekommen was Sie tun müssen:

SELECT * FROM [email protected] 
MINUS 
SELECT * FROM TABLE1 

und oposite Abfrage:

SELECT * FROM TABLE1 
MINUS 
SELECT * FROM [email protected] 
+0

Danke Kacper :) perfekte Antwort .. –

2

Wenn die beiden Tabellen haben die gleichen Spalten den besten Weg, um sie zu vergleichen, ohne teure MINUS Operationen oder schließen sie (und nur jede Tabelle einmal lesen) ist wie folgt:

select max(flag), col1, col2, ... 
from (
     select 'prod' as flag, col1, col2, ... from table1_prod 
     union all 
     select 'dev' as flag, col1, col2, ... from table1_dev 
    ) 
group by col1, col2, ... 
having count(*) = 1 

In dem GROUP BY, wenn Die Zeile ist in den beiden Tabellen identisch, sie hat den Wert 2 und wird daher nicht ausgewählt. Count 1 ist der Fall, wenn die Zeile nur in prod oder nur in dev ist. Eine "geänderte" Zeile wird in beiden sein, aber mit einem anderen Wert in mindestens einer Spalte, so dass es wirklich zwei verschiedene Gruppen sind. Die Zeile "Geändert" ist nur dann sinnvoll, wenn die Tabellen einen eindeutigen Schlüssel haben, mit dem Sie sie abgleichen können. Sie können dann "geänderte" Zeilen identifizieren, indem Sie den Wert im eindeutigen Schlüssel vergleichen.

+0

Was ist @ für Verbindung zu anderen Datenbank. –

Verwandte Themen