ORA-30926: nicht in der Lage, eine stabile Gruppe von Zeilen in den Quelltabellen zu erhalten

StackOverflow https://stackoverflow.com/questions/2337271

  •  22-09-2019
  •  | 
  •  

Frage

Ich erhalte

  

ORA-30926: nicht in der Lage, eine stabile Gruppe von Zeilen in den Quelltabellen bekommen

In der folgenden Abfrage:

  MERGE INTO table_1 a
      USING 
      (SELECT a.ROWID row_id, 'Y'
              FROM table_1 a ,table_2 b ,table_3 c
              WHERE a.mbr = c.mbr
              AND b.head = c.head
              AND b.type_of_action <> '6') src
              ON ( a.ROWID = src.row_id )
  WHEN MATCHED THEN UPDATE SET in_correct = 'Y';

Ich habe ran table_1 es hat Daten und auch ich habe lief das Innere Abfrage (src), die auch Daten hat.

Warum sollte dieser Fehler kommen und wie sie gelöst werden?

War es hilfreich?

Lösung

Dies wird in der Regel durch Duplikate in der Abfrage verursacht angegeben in Klausel verwenden. Das bedeutet wahrscheinlich, dass TABLE_A ist eine übergeordnete Tabelle und die gleiche ROWID wird mehrmals zurück.

Sie könnten das Problem schnell lösen, indem ein DISTINCT in Kriterien (in der Tat, wenn ‚Y‘ ein konstanter Wert ist nicht wahr, auch sie in der Abfrage setzen müssen).

Ihre Abfrage Unter der Annahme korrekt ist (weiß nicht, Ihre Tabellen) Sie so etwas tun könnten:

  MERGE INTO table_1 a
      USING 
      (SELECT distinct ta.ROWID row_id
              FROM table_1 a ,table_2 b ,table_3 c
              WHERE a.mbr = c.mbr
              AND b.head = c.head
              AND b.type_of_action <> '6') src
              ON ( a.ROWID = src.row_id )
  WHEN MATCHED THEN UPDATE SET in_correct = 'Y';

Andere Tipps

Sie versuchen, wahrscheinlich die gleiche Zeile der Zieltabelle mehrmals zu aktualisieren. Ich habe gerade das gleiche Problem in einer Merge Aussage treffe ich entwickelt. Stellen Sie sicher, dass Ihr Update nicht berührt denselben Datensatz mehr als einmal in der Ausführung der Zusammenführung.

  

Wie Beheben von ORA-30926-Fehler? (Doc-ID 471.956,1)

1) Stellen Sie die fehlerhafte Anweisung

  

alte Sitzung Satz Ereignisse ‚30926 Spur Name errorstack Ebene 3‘;

oder

  

alte Systemset Ereignisse ‚30926 Spur Name errorstack off‘;

und Uhr für die TRC-Dateien in udump, wenn er auftritt.

2) Nachdem die SQL-Anweisung gefunden, zu überprüfen, ob es richtig ist (vielleicht Plan oder tkprof erklären mit dem Abfrageausführungsplan zu überprüfen) und analysieren oder Rechen Statistiken über die betreffenden Tabellen, wenn diese vor kurzem noch nicht geschehen ist. Der Wiederaufbau (oder Löschen / Neuerstellung) Indizes helfen.

3.1) Ist die SQL-Anweisung eine MERGE? bewertet die von der NG-Klausel zurückgegebenen Daten, um sicherzustellen, dass es keine doppelten Werte sind in der Verknüpfung. Ändern Sie den Merge-Anweisung, um eine deterministisch sind, wo Klausel

3.2) Ist das eine UPDATE-Anweisung über eine Ansicht? Wenn ja, versuchen, die Ansicht Ergebnis in eine Tabelle bevölkern und versuchen, direkt auf die Tabelle zu aktualisieren.

3.3) Gibt es einen Trigger auf dem Tisch? Versuchen Sie es zu deaktivieren, um zu sehen, ob es immer noch nicht.

3.4) Enthält die Anweisung eine nicht-zusammenführbar Ansicht in einer 'IN-Subquery'? Dies kann in doppelten Zeilen führt zurückgegeben werden, wenn die Abfrage eine „FOR UPDATE“ Klausel hat. Siehe Bug 2681037

3.5) Ist die Tabelle nicht verwendete Spalten? kann diesen Dropping die Fehler vermeiden.

4) Wenn die SQL-modifizierende den Fehler nicht heilt, kann das Problem mit der Tabelle sein, vor allem wenn es gekettet Reihen. 4.1) Führen Sie die ‚ANALYZE TABLE VALIDATE STRUCTURE CASCADE‘ Aussage auf alle Tabellen in der SQL verwendet, um zu sehen, ob es irgendwelche Verfälschungen in der Tabelle oder ihre Indizes sind. 4.2) prüfen und beseitigen, jede CHAINED oder migriert ROWS auf dem Tisch. Es gibt Möglichkeiten, diese, wie die korrekte Einstellung von PCTFREE zu minimieren. Verwendung Hinweis 122.020,1 - Row Chaining und Migration 4.3) Wenn die Tabelle zusätzlich Index organisiert ist, finden Sie unter: Hinweis 102.932,1 - Überwachung Chained Rows auf IOTs

Sie hat die Fehler heute auf einem 12c und keine der vorhandenen Antworten paßt (keine Duplikate, keine nicht-deterministische Ausdrücke in der WHERE-Klausel). Mein Fall wurde an dieser anderen möglichen Ursache des Fehlers im Zusammenhang, nach Oracle Meldungstext (Schwerpunkt unten):

  

ORA-30926: nicht in der Lage, eine stabile Gruppe von Zeilen in der Quellentabellen
bekommen   Ursache:. Eine stabile Gruppe von Zeilen nicht bekommen werden kann wegen der großen DML-Aktivität oder ein nicht-determinis where-Klausel

Die Zusammenführung war Teil einer größeren Charge, und wurde auf einer Live-Datenbank mit vielen gleichzeitigen Benutzern ausgeführt. Es gab keine Notwendigkeit, die Aussage zu ändern. Ich verpflichtet nur die Transaktion vor der Zusammenführung, lief dann die Zusammenführung getrennt, und verpflichtet sich wieder. So ist die Lösung in der vorgeschlagenen Aktion der Nachricht gefunden wurde:

  

. Maßnahme: Entfernen Sie alle nicht-deterministisch where-Klauseln und Neuausstellung DML

{Warnung}: Berühren Sie nicht die Datenbankstruktur von SharePoint, die Ihre Garantie ungültig macht.

Dies ist eine BLOB-Speicher-Design-Variable. Sie werden sehen, wie die Speicheranforderungen ansteigt.

Eine Datenbank kann nur so viele Daten festhalten, um den Unterschied zu kompensieren. Dieser Wert repräsentiert die verwendete Partition. Dies ging weiter in zerkleinerte Speicher, der nun eine einzelne Datei darstellt, sondern in Brocken von Deltas.

Wie zerkleinerter Speicher wirklich in SP2013 funktioniert?

Um einige von Ihnen kennen, bin ich auf jeder der MSPress-IT Pro-Bücher, die auf SharePoint 2013 veröffentlicht werden. In einem der Bücher spreche ich von der Architektur und wie sich die Inhaltsdatenbanken geändert haben. Eine dieser Änderungen ist gesperrter Lager. Ja, ich habe Bill Baer's Post hier gelesen und er hat hier eine zweite, und ich stimme mit allem überein, was er sagt (obwohl er die Terminologie der internen Architektur in mehreren Fällen nicht wirklich nutzt), mit Ausnahme von einem Punkt, den ich aufregung Am Ende. Ich habe hier auch Dan Holmes Blog gelesen. Er kommt ziemlich zu den gleichen Schlussfolgerungen, die ich tue. Er nagelte es sogar mit der maximal 64k-Futtergröße als Standard (aber die Dateien nicht maximal an der 64.000-Grenze, enden sie irgendwo unten).

so, auch nach dem Lesen all dieser Technet und SPC 12 Mumbo Jumbo. Ich wollte wirklich dieses Zeug sehen, das für mich selbst arbeitet, und das erforderte, um sich tief zu erlernen, um zu erfahren, wie es wirklich arbeitet, alle Blogs, die nicht korrekt sind, angeboten werden. In dieser Erkundung der Baugruppen, Klassen, Tabellen und gespeicherten Prozeduren hatte ich ein paar ah-ha-Momente. Einige Fakten:

Shredded-Speicher ist dokumentorientiert und aus einem Speicherstandpunkt, der mit der Versionierung nur wertvoll eingeschaltet ist. Es ist keine Inhaltsdatenbank oder Farm konzentriert. Was bedeutet das? Es bedeutet, dass, wenn ein Dokument "zerrissen" (Sphostblock) ist, die Shreds spezifisch für das Dokument sind, und es gibt keine datenbankweiten Hashwaren, die von der Shreds erfolgt. Was bedeutet das? Wenn Sie dieselbe Datei an zwei verschiedenen Orten hochladen, werden dieselben Shreds erstellt und keine Optimierung erfolgt.

Dies bedeutet, dass SharePoint einen "besseren" Anstrengungen bei der Verwaltung von Blobs leistet. Es ist nicht das, was ich "tolles" oder "Stellar" anrufen würde, wie die Lösung, die Storimple gebaut hat. Sie brauchen immer noch eine RBS-Lösung, die die neuen "kleinen zerkleinerten Blobs" in einer de-duppingenden Mode zusammenfassen wird. Aber seien Sie sehr vorsichtig, da Jeremy hier darauf hinweist, die RBS-Performance, die für kleine Shreds getroffen wird, ist es nicht wert! An diesem Punkt würde ich sagen, dass die Verwendung von zerkleinerter Lagerung eher ein Performance-Treffer ist, als es wert ist, weil Sie jetzt einen Tisch haben, der überall von 10-4500 Shreds für jede Datei verfügt. Multiplizieren Sie diese Zeiten jedoch viele Dateien, die Sie haben ... und das ist eine sehr große Anzahl von Reihen in einem einzigen Tisch. Sie müssen auch den CPU-Zyklus berücksichtigen, der an den Anhang der Shreds zusammenhängt, um an den Client zurückzusenden (dies erfolgt nicht von COALESE auf dem SQL-Server). Alles, um Ihre Lagerung durch einen Randbetrag zu reduzieren?

Shredded-Speicher funktioniert, indem er erstellt, was ich eine "Stream-Karte anrufe. Diese Karte wird in der Tabelle "DOCSTOSTREAMS" gespeichert. Beim Erstmalraum, in dem Sie eine Datei hochladen, wird sie in den kleineren Teilen zerkleinert (außer Es gab ein paar Fälle, in denen das Dokument nicht zerkleinert und einfach einen einzelnen Blob setzt). Wenn Sie eine zweite aktualisierte Datei hochladen, wird die WFE für zwei nicht fahlbasierte Shreds abfragen (die in jeder Datei etwa 10k oder länger hinzufügen). Diese Konfigurations-Shreds haben Shred-Informationen, die die WFE verwenden, um zu bestimmen, welche Sheeds in die Datenbank gespeichert werden müssen. Im Rahmen davon ist eine neue Stream-Karte gebaut, die alle alten Fetzen verwendete, die sich nicht ändern, und die neuen Shreds. Alle Shreds sind in einer bestimmten Reihenfolge namens BSN. Von der niedrigsten BSN bis zum höchsten BSN für eine "Stream Map". Diese Shreds werden dann wieder zusammengestellt (minus die Konfigurations-Shreds), um die Datei erneut zu erstellen, und dann an den anrufenden Client zurückgegeben Einige wichtige Klassen zum Anmerkungs im Objektmodell:

spfilestreamManager - verantwortlich für das Berechnen der Streams (Computestestowrite)

spfilestreamstore - Speichert die Sphostbabschläger wieder in die Datenbank (PUTBLOBs) und bekommt Blobs aus der Datenbank (Getbobs *)

Bei Verwendung von Full Office-Clients werden die vollständigen Dateien an SharePoint gesendet (nur wenn der erste Anruf an CellStorage.svc fehlschlägt ... Lesen Sie unten). Dies geschieht, indem er einen HTTP an die URL des Dokuments versetzt. SharePoint über seine Kobaltklassen (Kobaltstream, die von den Kernkobaltklassen stammt), ist für die tatsächliche Zerkleinerung und Vergleiche verantwortlich. Ich habe den Office-Client (2010 oder 2013) nicht gesehen, sondern type intelligente Speichern von Dokumenten, die auf PackageParts in Office-Dateien basieren (erneut funktionieren, funktioniert dies, wenn der erste Anruf erfolgreich ist). Ich bestätige, dass die Shreds generiert werden, egal wie der Dateityp ist. Dies macht mich der Meinung, dass die Zerkleinerung etwas zufällig ist (bis zum Standard 64k-Limit für eine Shred) und wird nicht alles perfekt fangen (ich

Die Hälfte der Änderung in einem Shredium und der Hälfte der Änderung in einem anderen Shreds eher als eine zerkleinerte Komponente). Ich habe versucht zu sehen, ob ich herausfinden könnte, wie die Zerkleinerung arbeitete, aber die Dinge werden wirklich verrückt, wenn Sie in den Kobalt-Klassen kommen, weil sie zu viele abstrakte Klassen sind, die herumliegen.

Update: Siehe diesen Blog-Beitrag für meine neueren Erfahrungen mit der Bearbeitung mit Bürokunden und intelligenter Aktualisierung (es funktioniert) ...

zurück zu einem der obigen Punkte. Ich konnte die Office-Clients (2010 oder 2013) nicht abrufen, um eine beliebige Art von intelligenter Aktualisierung, wie in Bills Post (mit Word und PowerPoint mit einem bestimmten Client Build) erwähnt (mit Word und PowerPoint). In anderen Wards wollte ich nur die Änderungen schicken, die ich auf Sharepoint gemacht hatte. Ich hatte das noch nie wirklich getestet und freute mich darauf, es in Aktion zu sehen, aber leider scheint es überhaupt nicht zu tun. Ich vermute nur in einem Multi-User-Bearbeitungsmodus (OWA?) Sehen Sie, dass diese Art von Merkmal verwendet wird (Update: und diese Vermutung war korrekt! Siehe unten!). So wie ein FYI, hier, was ich mit Office tat, und SharePoint OM-Anrufe:

benutzte unseren fantastischen Freund Fiddler, um den Verkehr zu überwachen Hochgeladene eine PowerPoint-Datei in SharePoint Öffnete den PowerPoint im PowerPoint-Client Eine Folie vom PowerPoint entfernt, gespeichert es Office sendet die gesamte Datei in SharePoint (es ist in der Content-Size-Header der Put-Anforderung sichtbar, dass dies der Fall ist) SharePoint macht die Zerkleinerung und erzeugt neue Rutsche Setzen Sie die Folie wieder in (Strg-Z), speichern Sie die Datei erneut, die gesamte Datei wird gesendet Eine neue Version und ähnliche Shreds werden erstellt, einige werden jedoch von dem ersten Upload \ zweiten Update aufbewahrt

Wenn jemand weiß, wie er diese Arbeit zuverlässig mit Office-Clients und SharePoint OM erfahren kann, lassen Sie es mich wissen. Andernfalls muss ich sagen, dass wir auf diesem ganzen "Delta" -Anklungen von Office Client nicht sinnvoller werden, und es gibt keine Netzwerkoptimierung zwischen Büro-Client und WFE. In diesem Szenario speichert die zerkleinerte Lagerung uns wirklich nur ein paar Bytes hier und dort (wenn die Versionierung eingeschaltet ist), was die Anzahl der Schreibvorgänge verringert, aber auf Kosten von mehr "Reads" und CPU, um die Dateien wieder aufzubauen.

update: Office-Web-Apps und zerkleinerter Speicher - Hier sehen Sie die Drahtoptimierung zwischen dem Client (OWA) und der WFE. Es funktioniert so. Wenn eine Anfrage für eine Datei aus SharePoint erstellt wird, fragt OWA die WFE, um ihm die Datei zu geben. Die Datei wird von der WFE aus den Shreds erstellt. Wenn zwei Benutzer die Datei zur Bearbeitung öffnen, wird ein neuer Typ von Shred Container erstellt, der als "Partition" bezeichnet wird. Diese Partition enthält Sheeds, an denen jeder Benutzer arbeitet. Hier werden die Shreds auf ihre kleineren XML-Stücke zerfallen. Da jeder Teil eines Dokuments geändert wird, werden neue Partitionen erstellt. Wenn jemand sehen will, was eine andere Person getan hat, werden sie diese neue Partition anfordern und es wird (und nur IT) an den Kunden gesendet. Alle Änderungen, die erstellt werden, werden auch einzeln gesendet und die gesamte Datei ist nicht.

wo bringt uns das? Hier ist die Realität und die korrekte Details über zerkleinerte Lagerung (da jeder Blog über zerkleinerter Lagerung im Internet falsch ist). Sie müssen zerkleinerte Speicher mit 3 Dinge beachten, um zu sehen, ob Sie wirklich Vorteile bekommen (ob Speicher oder Netzwerkbasiert).

mit aktivierter Versionierung (Sie gewinnen den Speichervorteil, ohne dass Sie keinen Speichervorteil erhalten) Mit Office-Web-Apps (Sie gewinnen den Client zur WFE-Netzwerkoptimierung und den Effekt "Partitionierung" in der Mutil-Benutzerbearbeitung) Bei der Verwendung von Office- oder SharePoint-Clients, egal was ist, erhalten Sie nur beim Schreiben eines Dokuments zurück. SVC)

http://blogs.architectingconnectedsystems.com/blogs/cjg/archive/2012/12/12/21/HOW-SHEDD-STORAGE-REALLY-WORK-IN-SP2013.Aspx

Lagerung.

Eine weitere Klärung der Verwendung von DISTINCT zu beheben Fehler ORA-30926 im allgemeinen Fall:

Sie müssen sicherstellen, dass die Menge der Daten, die von der () verwendet Klausel angegeben hat keine doppelten Werte des Joinspalten , dh die Spalten in der ON () Klausel .

In OPs Beispiel, wo die NG-Klausel nur eine Taste auswählt, war es ausreichend, DISTINCT auf die NG-Klausel hinzuzufügen. im allgemeinen Fall kann die NG-Klausel eine Kombination von Schlüsselspalten wählt jedoch passen auf und Attributspalten in der UPDATE ... SET-Klausel verwendet werden. Deshalb werden im allgemeinen Fall des Hinzufügen DISTINCT zu der USING-Klausel ermöglicht es noch andere Update Zeilen für die gleichen Tasten, wobei in diesem Fall werden Sie noch die ORA-30926-Fehler.

Dies ist eine Ausarbeitung von DCookie Antwort und Punkt 3.1 in Tagar Antwort, die aus meiner Erfahrung kann nicht ohne weiteres ersichtlich sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top