Quel problème ce code indique-t-il ?
Code SQLITE_BUSY · Problème signalé par SQLite.
Explication traduite
Le code de résultat SQLITE_BUSY indique que le fichier de base de données n'a pas pu être écrit (ou dans certains cas lu) en raison de l'activité concurrente d'une autre connexion de base de données, habituellement une connexion de base de données dans un processus séparé. Par exemple, si le processus A est au milieu d'une transaction d'écriture importante et en même temps que le processus B tente de démarrer une nouvelle transaction d'écriture, le processus B récupérera un résultat SQLITE_BUSY parce que SQLite ne supporte qu'un auteur à la fois. Le processus B devra attendre que le processus A termine sa transaction avant de commencer une nouvelle transaction. Les interfaces sqlite3_busy_timeout() et sqlite3_busy_handler() et le pragma bloody_timeout sont disponibles pour traiter B pour l'aider à traiter les erreurs SQLITE_BUSY. Une erreur SQLITE_BUSY peut se produire à n'importe quel moment dans le cas. une transaction : lorsque la transaction est commencée, pendant toute opération d'écriture ou de mise à jour, ou lorsque la transaction est engagée. Pour éviter de rencontrer des erreurs SQLITE_BUSY au milieu d'une transaction, l'application peut utiliser BEGIN IMMEDIATE au lieu de seulement BEGIN pour démarrer une transaction. La commande BEGIN IMMEDIATE pourrait lui-même retourner SQLITE_BUSY, mais s'il réussit, SQLite garantit qu'aucune opération ultérieure sur la même base de données par le biais de la prochaine COMMIT ne retournera SQLITE_BUSY. Voir aussi : SQLITE_BUSY_RECOVERY et SQLITE_BUSY_SNAPSHOT. Le code de résultat SQLITE_BUSY diffère de SQLITE_LOCKED dans lequel SQLITE_BUSY indique un conflit avec une connexion séparée, probablement dans un processus séparé, tandis que SQLITE_L BOCKED indique un conflit dans la même connexion de base de données (ou parfois une connexion de base de données avec un cache partagé).
OPUS-MT · Helsinki-NLP / CTranslate2 · Il s’agit d’une traduction automatique. Consultez l’original anglais pour les termes techniques et les conditions applicables.
Explication officielle · Texte d’origine
The SQLITE_BUSY result code indicates that the database file could not be written (or in some cases read) because of concurrent activity by some other database connection, usually a database connection in a separate process.
For example, if process A is in the middle of a large write transaction and at the same time process B attempts to start a new write transaction, process B will get back an SQLITE_BUSY result because SQLite only supports one writer at a time. Process B will need to wait for process A to finish its transaction before starting a new transaction. The sqlite3_busy_timeout() and sqlite3_busy_handler() interfaces and the busy_timeout pragma are available to process B to help it deal with SQLITE_BUSY errors.
An SQLITE_BUSY error can occur at any point in a transaction: when the transaction is first started, during any write or update operations, or when the transaction commits. To avoid encountering SQLITE_BUSY errors in the middle of a transaction, the application can use BEGIN IMMEDIATE instead of just BEGIN to start a transaction. The BEGIN IMMEDIATE command might itself return SQLITE_BUSY, but if it succeeds, then SQLite guarantees that no subsequent operations on the same database through the next COMMIT will return SQLITE_BUSY.
See also: SQLITE_BUSY_RECOVERY and SQLITE_BUSY_SNAPSHOT.
The SQLITE_BUSY result code differs from SQLITE_LOCKED in that SQLITE_BUSY indicates a conflict with a separate database connection, probably in a separate process, whereas SQLITE_LOCKED indicates a conflict within the same database connection (or sometimes a database connection with a shared cache).