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.
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
4) Asynchrone Aktualisierung der Statistiken in gesamter Datenbank einschalten
ALTER DATABASE orgAniceCRM2012 SET AUTO_UPDATE_STATISTICS_ASYNC ON