OKB-000088 | Dokument lässt sich nicht erzeugen

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