Wer einmal in Plex das Poster (Cover) für einen Film oder eine Serie manuell geändert hat und später auf lokale Poster (Filme: https://support.plex.tv/articles/200220677-local-media-assets-movies/, Serien: https://support.plex.tv/articles/200220717-local-media-assets-tv-shows/) umsteigen möchte, wird feststellen, dass die lokalen Poster ignoriert werden. Hintergrund ist, dass Plex die Poster für den entsprechenden Film oder Serie im Hintergrund gesperrt hat. Über die Datenbank können diese gesperrten Poster wieder freigegeben werden.
Inhaltsverzeichnis
Datenbankstruktur
Plex Media Server bringt seinen eigenen SQLite Befehlszeileninterpreter mit. Änderungen an der Plex-Datenbank über DB Browser for SQLite sind nur sehr eingeschränkt möglich. Zumindest aber eignet sich DB Browser for SQLite, um sich die Datenbank anzusehen.
In der Tabelle metadata_items in der Spalte user_fields sind die Informationen über gesperrte Felder gespeichert. Es eignet sich die Spalte user_fields nach dem Begriff locked zu filtern:

Die ID 9 steht dabei für das gesperrte Poster. Um das Poster wieder freizugeben, muss also die 9 entfernt werden. Doch das kann nur über die Plex-eigene SQLite Kommandozeile erledigt werden.
Plex SQLite
In folgendem Artikel ist erklärt, wie das Plex SQLite Tool funktioniert: https://support.plex.tv/articles/repair-a-corrupted-database/#toc-0
Zunächst sollte der Plex Serverdienst beendet werden. Auch benötige ich in meinem Beispiel SSH-Zugriff, um die Kommandozeile verwenden zu können.
Das Plex SQLite Tool "Plex SQLite" befindet sich in meinem Beispiel (Synology NAS mit DSM 7) unter /var/packages/PlexMediaServer/target/.

Ein Befehl ist wie folgt aufgebaut:
PLEXSQLITETOOL DATENBANKPFAD "SQLQUERY"
Ich wechsle zunächst in das Verzeichnis, in dem das Plex SQLite Tool liegt:
cd /var/packages/PlexMediaServer/target/
Als nächstes bauen wir Stück für Stück den benötigten Befehl (PLEXSQLITETOOL DATENBANKPFAD "SQLQUERY") zusammen.
PLEXSQLITETOOL ist durch Plex SQLite zu ersetzen. Da ich mich unter Linux befinde und Leerzeichen escapen muss, lautet der erste Teil des Befehls also wie folgt: ./Plex\ SQLite
Das SQLite Tool erwartet als ersten Parameter den Pfad zur Datenbank. In meinem Beispiel also: /volume1/PlexMediaServer/AppData/Plex\ Media\ Server/Plug-in\ Support/Databases/com.plexapp.plugins.library.db
Aktuell sieht der Befehl wie folgt aus:
./Plex\ SQLite /volume1/PlexMediaServer/AppData/Plex\ Media\ Server/Plug-in\ Support/Databases/com.plexapp.plugins.library.db "SQLQUERY"
Fehlt also nur noch der SQL-Query. Ich habe hier einen SQL-Query vorbereitet, der das Poster für alle Medieninhalte (Filme, Serien, Musik, etc.) freigibt:
UPDATE metadata_items SET user_fields = CASE WHEN user_fields = 'lockedFields=9' THEN 'lockedFields=' ELSE REPLACE(REPLACE(user_fields, '|9', ''), '9|', '') END WHERE user_fields LIKE '%lockedFields%' AND user_fields LIKE '%9%'
Der gesamte Befehl lautet also wie folgt:
./Plex\ SQLite /volume1/PlexMediaServer/AppData/Plex\ Media\ Server/Plug-in\ Support/Databases/com.plexapp.plugins.library.db "UPDATE metadata_items SET user_fields = CASE WHEN user_fields = 'lockedFields=9' THEN 'lockedFields=' ELSE REPLACE(REPLACE(user_fields, '|9', ''), '9|', '') END WHERE user_fields LIKE '%lockedFields%' AND user_fields LIKE '%9%'"

Wenn ich jetzt in der Datenbank nachschaue, sind die 9en verschwunden:

Die Poster sind nun wieder entsperrt. Nachdem der Plex Serverdienst wieder gestartet wurde, wird beim nächsten Refresh der Metadaten das Poster durch ein eventuell lokal hinterlegtes Poster ersetzt.
Weiterführende Links
https://www.reddit.com/r/PleX/comments/onwnbe/comment/h5uyocz/
https://www.reddit.com/r/PleX/comments/6a1185/comment/i47uyyb/