Maintenance et sauvegarde d’une base de données SQLite

Maintenance et sauvegarde d'une base de données SQLiteFaut-il parler de base de données ou bien d’un simple fichier ? Toujours est-il que pour manipuler des fichiers SQLite, il faut connaître le SQL.  Pour la maintenance, ce sont les commandes système Windows et Linux ou bien le PowerShell qui vous permettront d’optimiser vos bases SQLite souvent au suffixe .sqlite, très utilisées au niveau des navigateurs Firefox et/ou Chromium à la base de Chrome, Edge, Opera, etc.

Sous Windows

La liste des noms de tables obtenue à partir de sqlite_schema est traitée dans une boucle pour ce qui est de la réindexation. Le script procède ensuite à une défragmentation et une sauvegarde logique de type DUMP.

Copiez tout d’abord le fichier sqlite3.exe dans le dossier c:\windows\system32. La complication sous Windows réside dans la compression à la volée du fichier de sauvegarde. Je n’ai trouvé aucun hack dans 7-Zip me permettant de le faire.

@echo off
cd /D c:\data\sqlite
for /f "tokens=*" %%i IN ('sqlite3 chinook.db "SELECT tbl_name FROM sqlite_schema"') do (
	sqlite3 chinook.db "REINDEX %%i"
)
sqlite3 chinook.db "VACUUM"
sqlite3 chinook.db ".dump" > chinook.sql
exit /b 0

Sur Linux

Vous devez tout d’abord installer le paquet sqlite pour disposer de la commande sqlite3. Sous Fedora :

dnf install sqlite

Sous environnement Fedora, vous disposez de deux bases SQLite pour la gestion des paquets de la distribution :

/var/lib/dnf/history.sqlite
/usr/lib/sysimage/rpm/rpmdb.sqlite

Il peut être intéressant de les maintenir et, pourquoi pas, les sauvegarder. Après l’avoir rendu exécutable à l’aide de la commande chmod, le script dont je vais vous montrer le code ci-dessous s’utilise de la manière suivante :

./maintsqlite.bash /var/lib/dnf/history.sqlite

Je vous livre le code :

#!/bin/bash
if [ ! -z "$1" ] 
then
    #echo 'Paramètre de commande pas nul'
    DB=$1
    if [ -f $DB ]
    then
	#echo 'La base existe.'
	sqlite3 $DB "VACUUM"
	echo "Défragmentation de la base $DB effectuée"
	for t in $(sqlite3 $DB "SELECT tbl_name FROM sqlite_schema")
	do
	    sqlite3 $DB "REINDEX $t"
	    echo "Table $t réindexée"
	done
	sqlite3 $DB .dump |gzip -9 > $DB.sql.gz
    fi
fi

Maintenance de votre profil Firefox sous Windows

Comme je vous le disais précédemment, Firefox et Chromium utilisent SQLite pour stocker leurs cookies, mais aussi les bookmarks. Je vous ai écrit ce script PowerShell pour maintenir toutes les fichiers de votre profil Firefox.

Set-Location -Path "$($env:APPDATA)\Mozilla\Firefox\Profiles\origin"
#Set-Location -Path "$($env:APPDATA)\Thunderbird\Profiles\origin"
$files=Get-ChildItem -Path '*.sqlite' | Select-Object -Property Name
ForEach($file in $files)
{
    &sqlite3.exe $file.Name "VACUUM"
    $tables=&sqlite3.exe $file.Name "SELECT tbl_name FROM sqlite_schema"
    ForEach($table in $tables)
    {
        &sqlite3.exe $file.Name "REINDEX $table"
    }
}

Base de données /