it-swarm.com.de

Bypass MS Access 2 GB Dateigrößenbeschränkung

Ich erstelle einen MS Access *.accdb Datenbank mit mehreren Tabellen und spezifischen Beziehungen.

Diese Datenbank wird für einen einmaligen Datentransport zu einem anderen System verwendet, der einige Millionen Einträge enthält. Ein Test mit 2 Millionen Dummy-Einträgen erreicht bereits eine Dateigröße von 1,8 GB. Da MS Access ein integriertes Limit von 2 GB pro Datenbankdatei hat, suche ich nach Lösungen, um dieses Limit zu umgehen.

Bisher hatte ich zwei Ideen:

  1. Teilen Sie die Datenbank in zwei Dateien auf, und setzen Sie die Indizierung während des Übergangs von Datei1 zu Datei2 fort. Achten Sie dabei auf die Unabhängigkeit der Einträge in verwandten Tabellen.

    file1_table1 (indices 1..1000)
    file2_table1 (indices 1001..N)
    
  2. Exportieren Sie die Tabellen mithilfe einer Master-Schnittstellendatei in verschiedene Dateien

    file1_table1
    file2_table2
    file3_table3
    masterfile (linking table1..3 and creating table relationships)
    

Ich möchte ein Feedback zu diesen Ideen in Bezug auf Konzept, Leistung und Benutzerfreundlichkeit erhalten oder ob es andere Ideen dazu gibt.

Bitte beachten Sie, dass ich mich an MS Access halten möchte. Der Aufbau einer SQL-Datenbank wäre übertrieben, da sie nur für einen einmaligen Transport verwendet wird.

Die Daten werden auf mehrere Quellen verteilt (MS Access .accdb, Excel Sheets *.xlsx, begrenzte Dateien *.csv) und wird analysiert, zusammengeführt und als temporäre einmalige MS Access-Datenbank vorbereitet und dann in eine auf SQL basierende Arbeitsdatenbank umgewandelt, die viel mehr enthält als ich vorbereite. Es ist also ein klassischer ETL-Prozess.

Der Befehl "Kompaktieren und Reparieren" hilft nicht weiter, da es sich eigentlich nur um die große Datenmenge handelt, nicht um eine große Menge von Vorgängen, die viel Müll hinterlassen. Die Prozedur "Zugriffsdatenbank teilen" scheint nur Abfragen/Formulare/Berichte von der Backend-Datei zu trennen, die die Tabellen enthält. Ich muss jedoch die Tabellen selbst teilen, sodass ich das Problem der Konsistenz zwischen den aufgeteilten Dateien habe. Dies ist kein Problem beim Trennen der Schnittstelle (Front-End) und des Daten-Back-End. Ich muss das Daten-Backend aufgrund der großen Datenmenge selbst aufteilen.

2
HeXor

Sie können die integrierte Einschränkung einer Access-Datenbank nicht umgehen. Sie können die integrierte Einschränkung jedoch umgehen, indem Sie integrierte Funktionen wie das Aufteilen der Datenbankobjekte auf mehrere *.accdb - Dateien verwenden und diese entsprechend referenzieren.

Der Status der Access 2016-Spezifikationen :

Gesamtgröße für eine Access 2016-Datenbank (.accdb), einschließlich aller Datenbankobjekte und -daten:

2 Gigabyte abzüglich des für Systemobjekte benötigten Speicherplatzes.

Hinweis: Sie können diese Größenbeschränkung umgehen, indem Sie auf Tabellen in anderen Access-Datenbanken verweisen. Sie können Tabellen in mehreren Datenbankdateien verknüpfen, von denen jede bis zu 2 GB groß sein kann. Tipp: Weitere Informationen zum Reduzieren der Größe Ihrer Datenbank finden Sie unter Hilfe bei der Vermeidung und Behebung von Problemen mit Datenbankdateien mithilfe von Compact and Repair.

Sie können sogar noch einen Schritt weiter gehen und, wie bereits erwähnt, die Daten und die Schnittstelle aufteilen.

Teilen Sie eine Access-Datenbank

Teilen Sie eine Datenbank auf, die mehrere Personen über ein Netzwerk gemeinsam nutzen. Durch das Aufteilen einer gemeinsam genutzten Datenbank kann die Leistung verbessert und das Risiko einer Beschädigung der Datenbankdatei verringert werden.

Nachdem Sie die Datenbank aufgeteilt haben, können Sie die Back-End-Datenbank verschieben oder eine andere Back-End-Datenbank verwenden. Mit dem Linked Table Manager können Sie die von Ihnen verwendete Back-End-Datenbank ändern.

Da es sich um Microsoft Access handelt, würde ich empfehlen, bei den unterstützten Optionen zu bleiben, anstatt eine andere Lösung auszuprobieren, die möglicherweise [~ # ~] nicht [~ # ~] Arbeit.

Früher hatten wir eine Anwendung, bei der die Schnittstelle (FE) und die Daten (BE) aufgeteilt waren. Kein merklicher Leistungsunterschied beim Hosting auf einem Dateiserver. Als das BE jedoch 2 GB erreichte, beschädigte ein Schreibvorgang das BE und die Daten konnten nicht wiederhergestellt werden. Zu diesem Zeitpunkt entschieden wir uns, zu SQL Server Express und später zu SQL Server zu wechseln. Ich denke nicht, dass es spürbare Auswirkungen auf die Leistung geben sollte, wenn Sie auf mehrere BE-Dateien zugreifen, die die verschiedenen Tabellen enthalten. Das BE auf Dateifreigaben zu haben, ist jedoch im Allgemeinen langsamer als das lokale Speichern.

3

Ich würde die Migration des Backends auf SQL Server wärmstens empfehlen.

Tabellen können vom Zugriff über verknüpfte Tabelle mit SQL Server angehängt werden.

Der Vorteil dieses Ansatzes besteht darin, dass Sie skalieren können, um die Einschränkung der Zugriffsdatei zu vermeiden, und dennoch alle Arbeiten nutzen können, die Sie beim Zugriff ausgeführt haben.

Es gibt sogar Assistenten zur Unterstützung beim Importieren und Hochskalieren vom Zugriff.

Die Leistung wird direkt von Ihrem SQL-Datei-, Tabellen- und Indexdesign beeinflusst. Aber grob gesagt sollte es auch funktionieren, wenn nicht besser als der Zugang. Grundlegende Tipps:

  1. Erstellen Sie eine Benutzerdatenbank mit einer anständigen Dateigröße, und legen Sie das Dateiverwachsen auf 100 MB oder 1 GB fest.

  2. Stellen Sie sicher, dass für jede Tabelle ein Primärschlüssel in SQL Server definiert ist. Nicht nur ein eindeutiger Index. Mit Access können Sie eine SQL-Tabelle nicht ohne einen in der Definition der verknüpften Tabelle definierten Primärschlüssel aktualisieren.

  3. Das Äquivalent einer Zugriffsautonummer ist eine Identitätsspalte. Wenn Sie Staging-Tabellen mit Duplikaten haben, lohnt es sich, eine Identitätsspalte als Schlüssel hinzuzufügen.

Wenn Sie keinen Zugriff auf eine SQL-Instanz haben, können Sie SQL Express oder Developer auf Ihrem PC installieren.

Wenn Sie mit SQL Server nicht vertraut sind, wird es eine gewisse Lernkurve geben, aber die Mühe lohnt sich.

SQL enthält einige leistungsstarke Tools, die Ihnen viele Optionen eröffnen. Das Erlernen von SSIS ist für dieses Projekt möglicherweise zu viel, aber Sie können mit dem Importassistenten in SSMS viel erreichen und die Pakete wiederverwenden, die wiederverwendet werden sollen.

1

Wenn es sich um einen einmaligen Transport handelt, warum verwenden Sie Access überhaupt? Fügen Sie die Daten in eine begrenzte Datei (Komma/Tabulator/Pipe) ein und fertig. Fast jedes System wird aus diesem Format importiert.

0
CalZ