> 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/da/config/persistence.md).

# Persistens

Konfigurer datapersistens i PowerShell Universal med SQLite, SQL Server eller PostgreSQL, herunder dimensionering af databasen, fejlfinding og frigørelse af diskplads.

PowerShell Universal gemmer joboutput og jobinput, identiteter og app-tokens i databasen.

## SQLite

{% hint style="warning" %}
SQLite skalerer ikke og anbefales kun til små instanser eller test. Vi anbefaler at vælge MS SQL eller PostgreSQL til produktionsmiljøer.
{% endhint %}

Ved brug af SQLite gemmer PowerShell Universal alle data i en enkelt fildatabase, der er lokal for PowerShell Universal-programmet. Vi anbefaler SQLite frem for LiteDB til nye installationer, da den er mere udbredt og bedre understøttet.

De kan konfigurere SQLite ved at opdatere filen `appsettings.json`.

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

### Fejlfinding af store databasestørrelser

Store SQLite-databaser kan være resultatet af lang jobhistorik, jobs der skriver for meget til pipelineoutput eller PowerShell-outputstrømme, forældede oplysninger om computer, proces eller runspace eller store tabeller med logposter.

Efterhånden som databasen vokser, påvirkes ydeevnen for PowerShell Universal. For at fejlfinde, hvad der forårsager denne vækst, skal De bruge værktøjet SQLite\_Analyzer. De kan downloade SQLite\_Analyzer som en del af ZIP-filen med værktøjer på [SQLite-downloadsiden](https://www.sqlite.org/download.html).

Når den er downloadet, skal De køre analysatoren mod Deres PowerShell Universal-databasefil for at få en omfattende liste med oplysninger om status for Deres database. Vi anbefaler at stoppe PowerShell Universal, før De kører følgende kommando.

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

Kommandoen vil indeholde oplysninger om størrelsen af tabeller og indekser i databasen. Dette vil hjælpe med at udpege præcis, hvor den store mængde data er lagret.

### Reduktion af databasestørrelsen

SQLite bevarer ubrugt plads i freelist i databasen, efter at poster er blevet opdateret eller slettet. Databaser, der kører mange jobs, eller som har kørt i længere tid, kan have en stor databasefil med en stor freelist. De kan køre værktøjet `sqlite_analyzer` for at bestemme, hvor meget plads der bruges af den frie liste.

Eksempeldatabasen nedenfor er 23 GB i størrelse, men 99,946 % af den er ubrugt plads.

```
/** 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% 
```

For at genvinde denne plads kan SQLite bruge vacuum-funktionen til at genopbygge databasen og reducere størrelsen på freelist. `auto-vacuum` er ikke aktiveret i PowerShell Universal-databaser. Hvis De oplever problemer med databasens størrelse, kan De køre kommandoen `VACUUM;` i Database-værktøjet i Support Tool.

{% hint style="warning" %}
Vi anbefaler, at De sikkerhedskopierer Deres databasefil, før De udfører VACUUM. Denne kommando genopbygger databasen, defragmenterer den og fjerner freelist fra filen.
{% endhint %}

Klik på Help \ Support Tools \ Tools \ Database \ Execute. Indtast følgende kommando, og udfør den.

```
VACUUM;
```

## SQL

{% hint style="info" %}
SQL-understøttelse kræver en [licens](https://store.devolutions.net/package#psu).
{% endhint %}

De kan konfigurere PowerShell Universal til at gemme data i en Microsoft SQL-database. Dette giver Dem mulighed for at udskalere Deres database og PowerShell Universal-instanser. PowerShell Universal kører automatisk job på tværs af agentpuljen. De kan opdatere filen `appsettings.json` for PowerShell Universal på følgende måde for at oprette forbindelse til en central SQL-server.

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

PowerShell Universal-instanserne deler en enkelt jobkø, og kun én instans kører et job, enten efter tidsplanen, som en udløser eller manuelt. Alle data om jobs gemmes i den centraliserede database.

### Azure SQL

Vi anbefaler at bruge administrerede Azure-identiteter, når De arbejder med Azure SQL. Et eksempel på en forbindelsesstreng vises nedenfor.

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

En gennemgang af, hvordan De bruger [administreret identitet til Azure SQL, findes her](https://learn.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/tutorial-windows-vm-access-sql).

### Manuel installation\opdatering af skema

I nogle miljøer har PSU-tjenesten muligvis ikke adgang til at oprette skema i databasen. I dette scenarie kan De manuelt installere og opdatere skemaet ved at køre SQL-filer, der følger med PowerShell Universal. I installationsmappen til PowerShell Universal finder De et `SQL`-katalog, der indeholder to SQL-filer.

Kør disse filer mod Deres database, før De opgraderer PowerShell Universal. De skal stoppe PowerShell Universal, mens De gør dette. De kan køre dem i vilkårlig rækkefølge. Begge scripts er idempotente.

Som standard forsøger PowerShell Universal at opdatere databasens skema. For helt at deaktivere denne funktion kan De angive indstillingen `RunMigrations` til false i appsettings.json.

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

### Ofte stillede spørgsmål

#### Privilegier for databasekonto

*Hvad er den maksimale tilladelse, der er nødvendig for en brugerkonto til databasen under installationer eller opgraderinger?*

Under opstarten af PowerShell Universal-serveren installeres og opgraderes databasen, hvis det er påkrævet. Hvis databasen allerede findes, skal De have `db_owner` for at oprette og ændre tabeller. Hvis databasen endnu ikke findes, skal De have `dbcreator` .

*Hvad er den maksimale tilladelse, der er nødvendig til løbende daglige aktiviteter, når databasen/databaserne er oprettet?*

PowerShell Universal udfører begrænsede databasehandlinger under daglige aktiviteter. Dette består af indsættelse, opdatering, sletning og visning af data i de oprettede tabeller. De behøver kun følgende roller: `db_datawriter`, `db_datareader`

#### Database- og operativsysteminstallation og support

*Hvilke versioner af SQL Server understøttes? Er der en minimumsversion, der er påkrævet?*

PowerShell Universal understøtter Microsoft SQL Server 2016 og nyere.

*Hvilke databasekompatibilitetsversioner understøtter De?*

PowerShell Universal kræver [databasekompatibilitetsversion 130 ](https://learn.microsoft.com/en-us/sql/relational-databases/databases/view-or-change-the-compatibility-level-of-a-database?view=sql-server-ver16)eller nyere.

*Skal der installeres andre SQL Server-komponenter ud over databaseprogrammet?*

Ingen

*Hvilke versioner af Windows Server understøttes?*

Versioner, der i øjeblikket understøttes af Microsoft - Windows Server 2016 og nyere. I øjeblikket er slutdatoen for den forlængede support af 2012 R2 fra Microsoft den 10. oktober 2023, hvorefter vi ophører med supporten af operativsystemet.

#### Databasevedligeholdelse og sikkerhedskopi

*Hvor hurtigt skal dataene gendannes?*

Data er primært til rapportering, bortset fra app-tokens, så dataene behøver ikke at blive gendannet med det samme. Afhængigt af brugen af app-tokens kan nogle systemer miste adgangen til serveren, mens databasen gendannes.

#### Databasedesign

*Hvor stor vil databasen(erne) være ved den indledende indlæsning?*

Den indledende database indeholder ikke et stort sæt indledende data og vil primært kun optage pladsen til skemaet.

*Hvad er den anslåede vækst pr. måned/år for hver database?*

Den anslåede vækst afhænger af mange faktorer, der omfatter antallet af jobs, der køres pr. måned, mængden af gemt joblog og pipelineoutput, og hvor aggressivt der ryddes op i data.

Databasestørrelsen vokser sjældent til over 2 GB med standardindstillingerne. Hvis oprydningsindstillingerne udvides, så de indeholder en længere historik for jobs, hvis jobs køres oftere, og hvis data som terminalhistorik gemmes, kan databasestørrelsen øges.

*Understøtter Deres program brug af SQL Server-komprimering (på række- eller sideniveau)?*

Ja. Vi bruger en almindelig databaseklient og har ingen begrænsning på komprimering på række- og sideniveau.

#### Databaseanvendelse

*Er dette en transaktionsdatabase (OLTP) eller en rapporteringsdatabase (OLAP)?*

Dette er primært en rapporteringsdatabase, der indeholder oplysninger som jobhistorik, joboutput og app-tokens.

*Hvad er det samlede antal bruger-/enhedsforbindelser?*

Én forbindelsespulje pr. PSU-server. Maksimalt 1024 forbindelser pr. server.

*Hvad er det maksimale antal samtidige bruger-/enhedsforbindelser?*

Én forbindelsespulje pr. PSU-server. Maksimalt 1024 forbindelser pr. server.

## PostgreSQL

De kan aktivere PostgreSQL med pluginnet `PostgreSQL`.

```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 by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

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

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
