> For the complete documentation index, see [llms.txt](https://docs.devolutions.net/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.devolutions.net/powershell-universal/de/config/persistence.md).

# Persistenz

PowerShell Universal speichert Job-Ausgaben und -Eingaben, Identitäten und App-Token in der Datenbank.

## SQLite

{% hint style="warning" %}
SQLite ist nicht skalierbar und wird nur für kleine Instanzen oder Tests empfohlen. Für Produktionsumgebungen empfehlen wir die Auswahl von MS SQL oder PostgreSQL.
{% endhint %}

Bei Verwendung von SQLite speichert PowerShell Universal alle Daten in einer einzelnen Dateidatenbank, die lokal zur PowerShell Universal-Anwendung liegt. Für Neuinstallationen empfehlen wir SQLite gegenüber LiteDB, da es weiter verbreitet und besser unterstützt ist.

Sie können SQLite konfigurieren, indem Sie die Datei `appsettings.json` aktualisieren.

```json
 "Plugins": [
    "SQLite"
  ],
  "Data": {
    "ConnectionString": "Data Source=%ProgramData%\\UniversalAutomation\\psu.db",
  },
```

### Fehlerbehebung bei großen Datenbankgrößen

Große SQLite-Datenbanken können die Folge einer langen Job-Historie, von Jobs, die übermäßig in die Pipeline-Ausgabe oder die PowerShell-Ausgabestreams schreiben, veralteter Computer-, Prozess- oder Runspace-Informationen oder großer Protokolleintragstabellen sein.

Wenn die Datenbank wächst, wird die Leistung von PowerShell Universal beeinträchtigt. Um die Ursache dieses Wachstums zu ermitteln, verwenden Sie das Tool SQLite\_Analyzer. Sie können SQLite\_Analyzer als Teil des Tools-ZIP auf der [SQLite Download-Seite](https://www.sqlite.org/download.html) herunterladen.

Führen Sie den Analyzer nach dem Herunterladen gegen Ihre PowerShell Universal-Datenbankdatei aus, um eine umfangreiche Liste von Informationen über den Status Ihrer Datenbank zu erhalten. Wir empfehlen, PowerShell Universal zu beenden, bevor Sie den folgenden Befehl ausführen.

```
.\sqlite_analyzer.exe C:\ProgramData\UniversalAutomation\database.db
```

Der Befehl enthält Informationen über die Größe von Tabellen und Indizes in der Datenbank. Dies hilft, genau zu bestimmen, wo die große Datenmenge gespeichert wird.

### Datenbankgröße reduzieren

SQLite behält nicht genutzten Speicherplatz in der Freelist innerhalb der Datenbank, nachdem Datensätze aktualisiert oder gelöscht wurden. Datenbanken, die viele Jobs ausführen oder über einen längeren Zeitraum in Betrieb sind, können eine große Datenbankdatei mit einer großen Freelist haben. Sie können das Tool `sqlite_analyzer` ausführen, um zu ermitteln, wie viel Speicherplatz von der Freelist belegt wird.

Die Beispieldatenbank unten hat eine Größe von 23 GB, aber 99,946 % davon sind nicht genutzter Speicherplatz.

```
/** Disk-Space Utilization Report For ./psu.db

Page size in bytes................................ 4096      
Pages in the whole file (measured)................ 5953770   
Pages in the whole file (calculated).............. 5953770   
Pages that store data............................. 3230         0.054% 
Pages on the freelist (per header)................ 5950539     99.946% 
Pages on the freelist (calculated)................ 5950539     99.946% 
Pages of auto-vacuum overhead..................... 0            0.0% 
Number of tables in the database.................. 66        
Number of indices................................. 48        
Number of defined indices......................... 47        
Number of implied indices......................... 1         
Size of the file in bytes......................... 24386641920
Bytes of user payload stored...................... 6611527      0.027% 
```

Um diesen Speicherplatz freizugeben, kann SQLite die Vacuum-Funktion verwenden, um die Datenbank neu aufzubauen und die Größe der Freelist zu reduzieren. `auto-vacuum` ist in PowerShell Universal-Datenbanken nicht aktiviert. Wenn Sie Probleme mit der Datenbankgröße haben, können Sie den Befehl `VACUUM;` im Datenbank-Tool des Support Tools ausführen.

{% hint style="warning" %}
Wir empfehlen, Ihre Datenbankdatei zu sichern, bevor Sie ein VACUUM ausführen. Dieser Befehl baut die Datenbank neu auf, defragmentiert sie und entfernt die Freelist aus der Datei.
{% endhint %}

Klicken Sie auf Help \ Support Tools \ Tools \ Database \ Execute. Geben Sie den folgenden Befehl ein und führen Sie ihn aus.

```
VACUUM;
```

## SQL

{% hint style="info" %}
SQL-Unterstützung erfordert eine [Lizenz](https://store.devolutions.net/package#psu).
{% endhint %}

Sie können PowerShell Universal so konfigurieren, dass Daten in einer Microsoft SQL-Datenbank gespeichert werden. Dadurch können Sie Ihre Datenbank und Ihre PowerShell Universal-Instanzen skalieren. PowerShell Universal führt Jobs automatisch über den Pool von Agenten aus. Sie können die Datei `appsettings.json` für PowerShell Universal wie folgt aktualisieren, um eine Verbindung zu einem zentralen SQL-Server herzustellen.

```json
  "Plugins": [
    "SQL"
  ],
  "Data": {
    "ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=PSUv3;Integrated Security=true;",
  },
```

Die PowerShell Universal-Instanzen teilen sich eine einzige Job-Warteschlange, und nur eine Instanz führt einen Job aus – entweder nach Zeitplan, als Trigger oder manuell. Alle Daten über Jobs werden in der zentralisierten Datenbank gespeichert.

### Azure SQL

Wir empfehlen die Verwendung von Azure Managed Identities bei der Arbeit mit Azure SQL. Ein Beispiel für eine Verbindungszeichenfolge wird unten gezeigt.

```
Server=tcp:psudb.database.windows.net,1433;Initial Catalog=psu;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;Authentication=Active Directory Managed Identity;
```

Eine Anleitung zur Verwendung von [Managed Identity für Azure SQL finden Sie hier](https://learn.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/tutorial-windows-vm-access-sql).

### Manuelle Schema-Installation-Aktualisierung

In einigen Umgebungen hat der PSU-Dienst möglicherweise keine Berechtigung, ein Schema in der Datenbank zu erstellen. In diesem Szenario können Sie das Schema manuell installieren und aktualisieren, indem Sie die SQL-Dateien ausführen, die in PowerShell Universal enthalten sind. Im Installationsordner von PowerShell Universal finden Sie ein Verzeichnis `SQL`, das zwei SQL-Dateien enthält.

Führen Sie diese Dateien gegen Ihre Datenbank aus, bevor Sie PowerShell Universal aktualisieren. Sie müssen PowerShell Universal während dieses Vorgangs beenden. Sie können sie in beliebiger Reihenfolge ausführen. Beide Skripte sind idempotent.

Standardmäßig versucht PowerShell Universal, das Schema der Datenbank zu aktualisieren. Um diese Funktion vollständig zu deaktivieren, können Sie die Einstellung `RunMigrations` in appsettings.json auf false setzen.

```json
"Data": {
   "RunMigrations": false
}
```

### Häufig gestellte Fragen

#### Berechtigungen des Datenbankkontos

*Was ist die maximale Berechtigung für ein Datenbankbenutzerkonto, die während Installationen oder Upgrades benötigt wird?*

Beim Start des PowerShell Universal-Servers wird die Datenbank installiert und bei Bedarf aktualisiert. Wenn die Datenbank bereits vorhanden ist, benötigen Sie `db_owner`, um Tabellen zu erstellen und zu ändern. Wenn die Datenbank noch nicht vorhanden ist, benötigen Sie `dbcreator`.

*Was ist die maximale Berechtigung, die nach der Erstellung der Datenbank(en) für laufende tägliche Aktivitäten benötigt wird?*

PowerShell Universal führt bei täglichen Aktivitäten nur begrenzte Datenbankoperationen durch. Diese bestehen aus dem Einfügen, Aktualisieren, Löschen und Anzeigen von Daten in den erstellten Tabellen. Sie benötigen nur die folgenden Rollen: `db_datawriter`, `db_datareader`

#### Datenbank- und Betriebssysteminstallation & Support

*Welche Versionen von SQL Server werden unterstützt? Gibt es eine erforderliche Mindestversion?*

PowerShell Universal unterstützt Microsoft SQL Server 2016 und höher.

*Welche Datenbankkompatibilitätsversionen unterstützen Sie?*

PowerShell Universal erfordert [Datenbankkompatibilitätsversion 130 ](https://learn.microsoft.com/en-us/sql/relational-databases/databases/view-or-change-the-compatibility-level-of-a-database?view=sql-server-ver16)oder höher.

*Müssen neben der Datenbank-Engine weitere SQL Server-Komponenten installiert werden?*

Keine

*Welche Versionen von Windows Server werden unterstützt?*

Derzeit von Microsoft unterstützte Versionen – Windows Server 2016 und höher. Derzeit ist das erweiterte Enddatum für den Support von 2012 R2 durch Microsoft der 10. Oktober 2023; zu diesem Zeitpunkt stellen wir die Unterstützung für das Betriebssystem ein.

#### Datenbankwartung & Sicherung

*Wie schnell müssen die Daten wiederhergestellt werden?*

Die Daten dienen abgesehen von App-Token primär der Berichterstellung, daher müssen die Daten nicht sofort wiederhergestellt werden. Je nach Verwendung der App-Token können einige Systeme den Zugriff auf den Server verlieren, während die Datenbank wiederhergestellt wird.

#### Datenbankdesign

*Wie groß werden die Datenbank(en) bei der Erstbeladung sein?*

Die initiale Datenbank enthält keinen großen Satz an Anfangsdaten und benötigt primär nur den Speicherplatz des Schemas.

*Wie hoch ist das geschätzte Wachstum pro Monat/Jahr jeder Datenbank?*

Das geschätzte Wachstum hängt von vielen Faktoren ab, darunter die Anzahl der pro Monat ausgeführten Jobs, die Menge der gespeicherten Job-Protokolle und Pipeline-Ausgaben sowie wie aggressiv Daten aufgeräumt werden.

Die Datenbankgröße wächst mit den Standardeinstellungen selten über 2 GB hinaus. Das Erweitern der Groom-Einstellungen zur Aufbewahrung einer längeren Job-Historie, das häufigere Ausführen von Jobs und das Speichern von Daten wie der Terminal-Historie können die Datenbankgröße erhöhen.

*Unterstützt Ihre Anwendung die Verwendung von SQL Server-Komprimierung (auf Zeilen- oder Seitenebene)?*

Ja. Wir verwenden einen Standard-Datenbankclient und haben keine Einschränkung bei der Komprimierung auf Zeilen- und Seitenebene.

#### Datenbanknutzung

*Ist dies eine transaktionale (OLTP) oder eine Reporting-Datenbank (OLAP)?*

Dies ist primär eine Reporting-Datenbank, die Informationen wie Job-Historie, Job-Ausgabe und App-Token enthält.

*Wie hoch ist die Gesamtzahl der Benutzer-/Geräteverbindungen?*

Ein Verbindungspool pro PSU-Server. Maximal 1024 Verbindungen pro Server.

*Wie hoch ist die maximale Anzahl gleichzeitiger Benutzer-/Geräteverbindungen?*

Ein Verbindungspool pro PSU-Server. Maximal 1024 Verbindungen pro Server.

## PostgreSQL

Sie können PostgreSQL mit dem Plugin `PostgreSQL` aktivieren.

```json
 "Plugins": [
    "PostgreSQL"
  ],
  "Data": {
    "ConnectionString": "Host=PGhostname; Database=PGdatabase; User Id=PGusername; Password=PGpassword!;Port=5432",
  },
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.devolutions.net/powershell-universal/de/config/persistence.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
