OKB-000088 | Dokument lässt sich nicht erzeugen Donnerstag, 13. Februar 2014 12:07 FAQ-Nr: OKB-000088 Betrifft: ab orgAnice CRM 2012 Programmversion 6.0.10.23 oder ab 6.0.12.0 Problem: Sie haben das Programmupdate sowie das Datenbank-Update durchgeführt. Nach dem Update wurden die notwendigen Strukturänderungen erfolgreich übertragen. Wenn Sie nun ein Dokument in orgAnice anlegen wollen, erscheint nach einiger Zeit (ca. 30 Sekunden) folgende Meldung: orgAnice Data Dokument lässt sich nicht erzeugen! Zugriff verweigert. (Fehlercode: 0x80030005) Bitte bestätigen Sie OK, um weitere Informationen zu erhalten. und Sie erhalten eine SQL-Fehlermeldung wie diese: Error 0x80040E31 in Database.cpp:7776. File version: 6.0.10.23 Stack trace: Database.cpp:7764 :8276 AutomationObject.cpp:1366 SqlDocumentImp.cpp:555 :414 LockBytes.cpp:149 Document.cpp:1581 Documents.cpp:675 :139 DECLARE @docoid uniqueidentifier SET @docoid = ? DECLARE @offset int SET @offset = ? DECLARE @delsize int SET @delsize = ? UPDATE "orgAniceCRM2008ProfPRGmbH".dbo."__Org_Documents" SET "DocData" .WRITE(CAST(REPLICATE(CAST(CAST(0 AS tinyint) AS varbinary(max)), @offset - DATALENGTH(DocData)) AS varbinary(max)), NULL, NULL) WHERE "DocOid" = @docoid UPDATE "orgAniceCRM2008ProfPRGmbH".dbo."__Org_Documents" SET "DocData" .WRITE(?, @offset, @delsize) WHERE "DocOid" = @docoid Abfragetimeout abgelaufen Ursache: Die automatische Erstellung und Aktualisierung von Statistiken in der SQL-Datenbank. Der SQL Server erstellt eine Statistik, die auf der Spalte "DocData" basiert. Da die Spalte sehr viele Daten beinhaltet, nimmt das Aktualisieren dieser Statistik enorm viel Zeit in Anspruch (mehrere Minuten). Da der Timeout für Befehle aus orgAnice 30 Sekunden beträgt, kann die Statistik bei größeren Datenbanken nicht in der Zeit erstellt werden und der ganze Befehl wird abgebrochen. Dokumentenverwaltung Seite 1 Lösung: 1) Bevorzugte Lösung: Manuelle Erstellung einer Statistik, die auf der Spalte DocData basiert, aber keine Daten beinhaltet und nicht aktualisiert wird: CREATE STATISTICS __Org_DocData_Stat ON orgAniceCRM2012.__Org_Documents (DocData) WITH SAMPLE 0 PERCENT, NORECOMPUTE Der SQL Server wird dann keine automatische Statistik auf der Spalte DocData mehr erstellen, da ja schon eine existiert. Erklärung: Eine Statistik auf der Spalte DocData in der Tabelle __Org_Documents macht keinen Sinn, da der Zugriff auf die Tabelle ausschließlich über die eindeutige Spalte DocOid stattfindet und immer nur ein Datensatz abgefragt wird. Weitere Lösungsansätze: 2) Ausführen des SQL-Statements im SQL Server Management Studio: UPDATE dbo."__Org_Documents" SET "DocData" .WRITE(CAST('0' AS varbinary(max)), 2, 1) WHERE "DocOid" = '11111111-1111-1111-1111-111111111111' <<<---- Fiktive Oid, die es nicht geben sollte! Passen Sie diese ggfls. an! Damit wird die automatische Statistik erstellt Dann kann mit Hilfe des Befehls EXEC sp_autostats '__Org_Documents', 'OFF' die automatische Aktualisierung der Statistiken in der Tabelle __Org_Documents abgeschaltet werden (Anzeige des aktuellen Status: EXEC sp_autostats '__Org_Documents' 3) Automatische Erstellung der Statistiken in gesamter Datenbank abschalten: ALTER DATABASE orgAniceCRM2012 SET AUTO_CREATE_STATISTICS OFF Nicht so gut, weil damit andere, nützliche Statistiken nicht erstellt werden Dokumentenverwaltung Seite 2 4) Asynchrone Aktualisierung der Statistiken in gesamter Datenbank einschalten ALTER DATABASE orgAniceCRM2012 SET AUTO_UPDATE_STATISTICS_ASYNC ON Dokumentenverwaltung Seite 3