Pendahuluan
SQLite menggunakan penguncian tingkat file untuk mengatur akses ke file database di disk. Error “database is locked” terjadi ketika satu proses mencoba mengakses database sementara proses lain sedang menulis ke dalamnya. Situasi ini bisa muncul dalam berbagai skenario, misalnya:
- Beberapa aplikasi mengakses database secara bersamaan.
- Transaksi yang berjalan lama dan tidak segera di-commit atau di-rollback.
- Penanganan koneksi database dan cursor yang kurang tepat.
Tips: Saat menyelidiki error SQLite seperti
"database is locked", akan sangat membantu jika Anda membuka dan memeriksa database secara visual.Dengan SQL client desktop seperti Beekeeper Studio, Anda bisa membuka file
.db, menjelajahi tabel, dan menjalankan ulang query secara interaktif untuk memastikan perubahan Anda berhasil.
Cara Mengatasi Error Ini
Solusi 1: Kelola Transaksi dengan Benar
Penanganan transaksi yang kurang tepat sering menyebabkan database terkunci. Pastikan transaksi segera diselesaikan dengan melakukan commit atau rollback sesuai kebutuhan.
Contoh:
BEGIN TRANSACTION;
-- Insert data into the table
INSERT INTO employees (name, position) VALUES ('John Doe', 'Software Engineer');
-- Commit the transaction
COMMIT;
Output yang Diharapkan:
Tidak ada output, tetapi transaksi selesai dengan sukses tanpa mengunci database.
Setelah commit, sebaiknya pastikan database Anda bisa menerima penulisan baru.
Screenshot di bawah menunjukkan pengecekan serupa di Beekeeper Studio: sebuah INSERT yang diikuti SELECT memastikan data baru (dalam hal ini, record untuk “Maria Lopez”) berhasil ditulis.

Solusi 2: Gunakan Koneksi Database dengan Benar
Selalu tutup koneksi database dengan benar setelah operasi selesai. Ini mencegah database terkunci tanpa perlu.
Contoh:
import sqlite3
from contextlib import closing
database_path = 'mydatabase.db'
with closing(sqlite3.connect(database_path)) as conn:
with closing(conn.cursor()) as cursor:
cursor.execute("INSERT INTO employees (name, position) VALUES (?, ?)", ('Jane Doe', 'Project Manager'))
conn.commit()
Output yang Diharapkan:
Tidak ada output, tetapi operasi insert dijalankan tanpa mengunci database, dan koneksi ditutup dengan benar.
Jika Anda lebih suka GUI daripada kode, Beekeeper Studio otomatis membuka dan menutup koneksi SQLite setiap kali Anda menjalankan query, sehingga risiko database tetap terkunci berkurang.
Solusi 3: Atur Timeout
Mengatur durasi timeout bisa membantu dalam skenario yang melibatkan banyak akses bersamaan. Ini memberi tahu SQLite berapa lama harus menunggu sebelum mengembalikan error “database is locked”, sehingga kunci punya kesempatan untuk dilepas.
Contoh:
import sqlite3
conn = sqlite3.connect('mydatabase.db', timeout=10.0) # Set timeout to 10 seconds
cursor = conn.cursor()
try:
cursor.execute("INSERT INTO employees (name, position) VALUES (?, ?)", ('Sam Smith', 'Data Analyst'))
finally:
cursor.close()
conn.close()
Output yang Diharapkan:
Tidak ada output, tetapi timeout memberi jeda waktu untuk mengatasi kunci sementara.
Tips: Di Beekeeper Studio, Anda bisa menjalankan ulang query yang sebelumnya gagal dengan error “database is locked” untuk memastikan apakah timeout atau percobaan ulang sudah mengatasi masalahnya. Cara cepat untuk menguji perubahan tanpa mengedit kode.
Solusi 4: Hindari Transaksi yang Berjalan Lama
Buat transaksi tetap singkat untuk meminimalkan waktu database terkunci. Ini mengurangi kemungkinan munculnya error “database is locked”.
Contoh:
BEGIN TRANSACTION;
INSERT INTO employees (name, position) VALUES ('Alice Johnson', 'HR Manager');
COMMIT;
Output yang Diharapkan:
Tidak ada output, tetapi transaksi selesai dengan cepat sehingga durasi penguncian berkurang.
Kesimpulan
Error “SQLite database is locked” biasanya merupakan gejala masalah konkurensi atau pengelolaan koneksi dan transaksi database yang kurang tepat. Dengan mengikuti praktik terbaik di atas, seperti mengelola transaksi secara efisien, menggunakan koneksi dengan benar, mengatur timeout yang sesuai, dan menghindari transaksi yang berjalan lama, Anda bisa mencegah error ini terjadi. Strategi ini memastikan operasi database SQLite Anda tetap andal dan efisien.
Coba sendiri
Anda bisa membuka file .db apa pun di Beekeeper Studio untuk menjelajahi tabel, menjalankan query, dan memastikan perubahan Anda diterapkan dengan benar. Aplikasinya open source, terhubung ke 20+ database, dan berjalan mulus di Windows, macOS, dan Linux.
Beekeeper Studio Adalah GUI Database Gratis & Open Source
Tool query & editor SQL terbaik yang pernah saya pakai. Semua yang saya butuhkan untuk mengelola database ada di sini. - ⭐⭐⭐⭐⭐ Mit
Beekeeper Studio cepat, intuitif, dan mudah digunakan. Beekeeper mendukung banyak sekali database, dan berjalan mulus di Windows, Mac, dan Linux.
Apa Kata Pengguna tentang Beekeeper Studio
"Beekeeper Studio sepenuhnya menggantikan workflow SQL lama saya. Cepat, intuitif, dan membuat pekerjaan database kembali menyenangkan."
"Saya sudah mencoba banyak GUI database, tapi Beekeeper punya keseimbangan sempurna antara fitur dan kesederhanaan. Langsung jalan."