Datenbank-VIEW spiegeln nicht die Daten in der TABELLE underying
Eingang:
Geltend, dass die Anwendung (.NET), wenn Abfragen für einige Daten gibt Daten anders aus, wenn der Kunde sieht in der Daten-Tabelle direkt.
Ich verstehen, könnte es sein, verschiedenen Gründen und in ganz verschiedenen Orten. Mein Zweck ist nicht, um es zu lösen hier, sondern eher um Fragen erfahrene DB-Administratoren und DB-Entwicklern, wenn:
Ist es möglich, eine ANSICHT zur Anzeige von Daten, die nicht mit der zugrunde liegenden TABELLE(N)?
- Was sind die möglichen Ursachen/Gründe dafür?
- Kann eine UPDATE-Anweisung für eine Ansicht verursachen, die Zukunft Wählt return 'aktualisiert' - Daten, wenn die Tabelle wirklich nicht?
Mögliche Ursachen (bitte Kommentar auf diejenigen, mit Fragezeichen):
- der Grund ist, dass es zwei separate Transaktionen, die erklären, die Kunden zu Verwirrung.
- die zugrunde liegende Tabelle wurde geändert, aber die Ansicht nicht aktualisiert (mit sp_refreshview)
- einem anderen Benutzernamen verbinden und können sehen, dass verschiedene Daten, die durch Berechtigungen ?
- Programmierer Fehler: falsche Tabellen/Spalten, falsche Filter (all-in-one hier)
- Korruption tritt ein: DBCC CHECKDB sollte helfen
- kann
SELECT ... FOR UPDATE
Ursache dieser ??? - ? __
, Was wirklich passiert ist (DIE ANTWORT):
Spalte Positionen wurden geändert, in einigen Tabellen: Anscheinend ist der Kunde gab vollen Datenbank Zugriff auf einen Berater für die Datenbank-Nutzung-Analyse. Dass der große Kerl änderte sich die Reihenfolge der Spalten zu sehen, die wenigen audit Felder an den Anfang der Tabelle bei der Verwendung von SELECT * ...
Klauseln.
Mit dbGhost wurde das Datenbank-schema im Vergleich zu dem schema der Sicherung, die einige Tage bevor das problem aufgetaucht, und die Spalte position Unterschiede entdeckt wurden.
Was als Nächstes kam, war nichts im Zusammenhang mit der Programmplanung, sondern mehr ein Problem der Politik.
Daher die sp_refreshview
war die Lösung. Ich nahm einfach einen Schritt mehr zu finden, wer das problem verursacht hat. Danke an Euch alle.
- Vielen Dank für die Ideen. Werden vor-Ort-morgen - update mit dem problem dieser Zeit.
- Re #2: Nicht "Aktualisiert", sondern "Verändert". speziell die Spalte Definitionen wurden geändert (verändert, Hinzugefügt, entfernt, neu angeordnet, usw.).
- vielen Dank - fest.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, irgendwie schon.
Mögliche Ursachen:
Die Ansicht muss aktualisiert werden oder neu kompiliert. Passiert, wenn Quell-Spalte-Definitionen ändern und die Ansicht (oder etwas, das es hängt) ist mit "*", kann böse sein. Rufen Sie sp_RefreshView. Kann auch passieren, weil von Ansichten oder Funktionen (Daten-Quellen), dass es Anrufe auch.
Ist, ist die Aussicht den Blick auf etwas anderes, was Sie/Sie denken. Sie sind auf der Suche an der falschen Tabelle oder Sicht.
Ansicht ist die Umwandlung der Daten in unerwarteter Weise. Funktioniert es richtig, nur nicht so, wie Sie erwartet.
Die Sicht ist wieder eine andere Teilmenge der Daten als erwartet. Wieder, es funktioniert richtig, nur nicht so, wie Sie denken.
Sind Sie auf der Suche in der falschen Datenbank oder mit einem Logon/Benutzer-Identität, die bewirkt, dass die Ansicht zu verändern, was es zeigt.
es ist möglich, wenn die zugrunde liegende Tabelle wurde geändert und sp_refreshview wurde nicht lief gegen die Ansicht, also die Ansicht mit fehlenden Spalten an, ob diese der Tabelle Hinzugefügt.
Um zu sehen, was ich meine, Lesen wie stellen Sie sicher, dass die Ansicht der zugrunde liegenden Tabelle ändern, indem Sie mithilfe von sp_refreshview
Können Sie Ansichten erstellen, mit sperrhinweisen das würde bedeuten, dass Sie vielleicht einen dirty read. Oder alternativ, wenn Sie Zugriff auf die Tabelle direkt, Sie könnten mit sperrhinweisen werden könnte, indem Sie Ihnen ein schmutziges Lesen auf diesen Punkt.
Andere Möglichkeit, die Benutzer nicht zu verstehen scheinen, ist, dass die Daten flüssig ist. Die Daten, die Sie Lesen, um 3:00 in einer Ansicht möglicherweise nicht die gleichen Daten, die Sie sehen, um 3:30 auf der Suche direkt auf dem Tisch, weil es änderungen in der Zwischenzeit.
Wenige Möglichkeiten:
Ihre .NET-Anwendung kann nicht zeigen, wo Sie oder denken Sie, es zeigt. Es ist beispielsweise wies auf einen test-server, indem Sie Fehler
Wenn der Blick hat einen index auf einen float oder einen numerischen Wert, kann der Wert anders erscheinen lassen als die zugrunde liegende Abfrage aufgrund von Rundungen
Die ANSI_NULLS-Einstellung auf die jeweilige Sicht, wenn es erstellt wurde. Wenn es anders von der Einstellung, während Sie die select(s) auf die zugrunde liegenden Tabellen kann es zu Abweichungen für bestimmte Arten von Abfragen
Die zugrunde liegenden Tabellenstrukturen geändert haben und der Ansicht noch nicht aktualisiert wurden (insbesondere ein problem, wenn es verwendet "SELECT *")
Ich werde Bearbeiten Sie diese post, wenn ich denke jede andere auch.
EDIT: Hier ein Beispiel, wie die ANSI_NULLS-Einstellung abschütteln kann Ihre Ergebnisse:
Die Ergebnisse, die Sie erhalten sollten, sind:
Vorausgesetzt, die Sicht nicht wirklich verwandeln die Daten, technisch ist es möglich, wenn eine Beschädigung Auftritt. Ansicht ruft Daten aus einem index, 'Tabelle', ruft von einem anderen (dh. aus gruppierten) und die beiden sind out of sync. Eine DBCC CHECKDB zeigen sollte, das problem.
Aber menschliche Fehler viel wahrscheinlicher ist, dh. Sie sind auf der Suche am anderen Tisch, als der Blick oder in verschiedenen Datensätzen.
Sicher, es sind andere Dinge:
einige zu nennen