Błąd "Przekroczono maksymalny rozmiar pliku" podczas próby skopiowania firmy w usłudze Microsoft Dynamics AX 2009

Ten artykuł zawiera rozwiązanie umożliwiające pomyślne skopiowanie firmy w usłudze Microsoft Dynamics AX 2009.

Dotyczy: Microsoft Dynamics AX 2009
Oryginalny numer KB: 2437099

Symptomy

Podczas próby zduplikowania firmy w usłudze Microsoft Dynamics AX 2009 jest wyświetlany komunikat o błędzie informujący o przekroczeniu maksymalnego rozmiaru pliku. Jest jeszcze wystarczająco dużo wolnego miejsca (80 GB) na dysku twardym w formacie NTFS, a maszyna jest wyposażona w dużą ilość pamięci RAM (>= 20 GB) i pamięć wirtualną.

Podczas próby zduplikowania lub zaimportowania ogromnego pliku . Plik DAT (9 GB) zwracany jest następujący komunikat o błędzie:

"Błąd w pliku C:\Users\Administracja~1.SIN\AppData\Local\Temp$tmp0030005.$$$ podczas pisania w pliku record=FFFFEB40 błąd systemu Windows: =

Kod błędu: 50110 = maksymalny przekroczony rozmiar pliku Operacja zakończy się niepowodzeniem"

Przyczyna

Jest to limit rozmiaru pliku 32-bitowego (< 4 GB). Proces kopiowania firmy używa kilku tabel tymczasowych, a gdy tabela tymczasowa osiągnie określony rozmiar, nie będzie już przechowywany w pamięci podręcznej, zostanie zapisany w rodzaju pliku ISAM na dysku twardym. Istnieje ograniczenie, że ten plik nie może być większy niż 4 GB.

Rozwiązanie

Aby zoptymalizować element . Metoda eksportowania/importowania pliku DAT umożliwia wykonywanie wielu czynności:

  1. Zmień tabelę TmpRecIdMap i TmpTransactionIdMap w klasie SysDataImport\classDeclaration , aby używać tabeli rzeczywistej zamiast tabeli tymczasowej. W przeciwnym razie może to zużywać całe miejsce tymczasowe dostępne na maszynie.

    Stary kod:

    TmpRecIdMap old2NewRecId;
    TmpRecIdMap newRecId;
    TmpTableIdMap tmpTableIdMap;
    // Transaction id
    TmpTransactionIdMap old2NewCreatedTransactionId;
    TmpTransactionIdMap old2NewModifiedTransactionId;
    

    Przykład nowego kodu (użyj 4 nowych tabel):

    //->ChangeBegin
    // TmpRecIdMap old2NewRecId;
    // TmpRecIdMap newRecId;
     DD_RecIdMapOldRecId old2NewRecId;
     DD_RecIdMapNewRecId newRecId;
    //<-ChangeEnd
     TmpTableIdMap tmpTableIdMap;
    
    // Transaction id
    //->ChangeBegin
    // TmpTransactionIdMap old2NewCreatedTransactionId;
    // TmpTransactionIdMap old2NewModifiedTransactionId;
     DD_TransactionIdMapCreated old2NewCreatedTransactionId;
     DD_TransactionIdMapModified old2NewModifiedTransactionId;
    //<-ChangeEnd
    

    Pobierz dołączone przykładowe xpo , aby użyć jako przykładu zmiany.

  2. W programie SQL Server ustaw poziom rejestrowania na prosty (tylko podczas importowania, aby zapobiec nadmiernemu rejestrowaniu).

  3. W programie Microsoft Dynamics AX 2009 wyeksportuj dane w kilku oddzielnych grupach tabel (konfigurując wiele grup definicji).

  4. Upewnij się, że tabele odwołujące się do funkcji RecId są przechowywane w innej tabeli w tej samej grupie co powiązana tabela, jeśli nie, relacja RecId nie zostanie zachowana.

  5. Upewnij się, że rozmiar plików bazy danych jest ustawiony na tyle wysoki, aby nie musiały rosnąć podczas importowania.

  6. Ustaw następujące opcje:

    • Wykonywanie w systemie AOS: Tak
    • Nie szukaj istniejących rekordów: tak
    • Indeksowanie: ponowne indeksowanie po zaimportowaniu
    • Użyj kompresji identyfikatora rekordu: Tak
  7. Uruchom import/eksport każdej grupy definicji na oddzielnym kliencie, a nawet na oddzielnych AOSs równolegle.

Użycie tych opcji maksymalizuje wydajność i zminimalizuje ryzyko wystąpienia pojedynczego błędu, który spowoduje zatrzymanie całej operacji podczas równoległego uruchamiania oddzielnych importów.