svn cleanup: sqlite: la imagen del disco de la base de datos está mal formada


93

Estaba tratando de hacer una svn cleanupporque no puedo confirmar los cambios en mi copia de trabajo y recibí el siguiente error:

sqllite: la imagen del disco de la base de datos está mal formada

La limpieza no pudo procesar las siguientes rutas

¿Qué puedo hacer ahora mismo?

Respuestas:


98

Yo tuve el mismo problema. La siguiente publicación de blog me ayudó a resolverlo: http://www.polak.ro/svn-e200030-sqlite-database-disk-image-is-malformed.html

Realiza una verificación de integridad en la base de datos sqlite que realiza un seguimiento del repositorio (/.svn/wc.db):

sqlite3 .svn/wc.db "pragma integrity_check"

Eso debería informar algunos errores.

Entonces es posible que pueda limpiarlos haciendo:

sqlite3 .svn/wc.db "reindex nodes"
sqlite3 .svn/wc.db "reindex pristine"

Si aún hay errores después de eso, aún tiene la opción de obtener una copia nueva del repositorio en una carpeta temporal y copiar la carpeta .svn de la copia nueva a la anterior. Luego, la copia anterior debería funcionar nuevamente y puede eliminar la carpeta temporal.


6
esto realmente resolvió mi problema. muchas gracias.
Erdogan Kurtur

17
¿Qué debe hacer si sigue apareciendo Error: la imagen del disco de la base de datos tiene un formato incorrecto?
j será el

3
@jwill también recibí un error después de implementar la solución dada anteriormente ... Pero lo que intenté es simplemente obtener una copia nueva de su repositorio y luego sobrescribir la carpeta .svn de la nueva copia de pago en la anterior ... resolví mi problema así ...
Rushabh Shah

6
Extraño, entiendoError: unable to identify the object to be reindexed
Pacerier

4
El enlace polak.ro/… parece estar inactivo permanentemente.
MadMike

21

Verificación de integridad

sqlite3 .svn/wc.db "pragma integrity_check"

Limpiar

sqlite3 .svn/wc.db "reindex nodes"
sqlite3 .svn/wc.db "reindex pristine"

Alternativamente

Es posible que pueda volcar el contenido de la base de datos que se puede leer en un archivo de respaldo y luego volver a sorberlo en un nuevo archivo de base de datos:

sqlite3 .svn/wc.db

sqlite> .mode insert
sqlite> .output dump_all.sql
sqlite> .dump
sqlite> .exit

mv .svn/wc.db .svn/wc-corrupt.db
sqlite3 .svn/wc.db

sqlite> .read dump_all.sql
sqlite> .exit

2
Esto ayudó con un error que estaba teniendo con un software diferente, ¡así que gracias señor!
Azirius

Para mí, el comando "reindex nodes" falló, ¡pero una solución alternativa (recrear la base de datos desde el volcado) me ayudó! Gracias.
EvAlex

1
No conseguí que me tiraran todo, pero fue suficiente. Se desplazó por el archivo sql y cambió el final ROLLBACK;a COMMIT;antes de doung .read dump_all.sql.
Jan Katins

2
Este enfoque ahora parece fallar con el error svn: E235000: In file 'D:\Development\SVN\Releases\TortoiseSVN-1.9.7\ext\subversion\subversion\libsvn_wc\wc_db_wcroot.c' line 311: assertion failed (format >= 1), sin embargo, hay una solución aquí: hanscarpenter.blogspot.com.au/2016/05/…
mpeac

La solución adecuada para el error de aserción es: 1. ejecutar sqlite3 .svn/wc.db 'PRAGMA user_version;'contra la base de datos original para obtener el número correcto. 2. ejecutar sqlite3 .svn/wc.db 'PRAGMA user_version = XXX;'contra la versión restaurada con el número correcto.
Crónica

19

La limpieza de SVN no funcionó. La carpeta SVN en mi sistema local se corrompió. Así que simplemente eliminé la carpeta, recreé una nueva y la actualicé desde SVN. ¡Eso resolvió el problema!


1
Ésta es, con mucho, la solución más sencilla. Obtenga una nueva copia de trabajo y trabaje con eso: svn co URL.
Jahmic

16

Después de un apagón, me encontré con la imagen del disco de la base de datos con un error de formato incorrecto y el comando de reindexación de nodos sugerido no solucionó todos los problemas debido a restricciones violadas. Además, el procedimiento descrito en http://mail-archives.apache.org/mod_mbox/subversion-users/201111.mbox/%3C874nybhpxi.fsf@stat.home.lan%3E no resolvió el problema.

Solución en mi caso:

  • Verifique el repositorio svn nuevamente en una carpeta temporal
  • Copie, es decir, reemplace el archivo ".svn / wc.db" de la nueva caja al corrupto

Esto puede ser útil si su checkout svn original contiene muchos archivos modificados o sin versión y no desea cambiar a un checkout svn nuevo.


13

Copié la carpeta .svn del directorio de mis compañeros de trabajo y eso solucionó el problema.


Aquí también podemos ver la nueva copia de trabajo solo en el mismo sistema y luego reemplazar la carpeta .svn antigua con la nueva carpeta .svn y de esta manera también podemos resolver este problema ...
Rushabh Shah

3
  1. mira este svn en otro lugar
  2. mostrar archivo .svn oculto
  3. reemplazar archivo wc

esto funciona para mi!


2

Quizás, podría ser una solución:

  1. clic derecho del mouse sobre el proyecto
  2. equipo -> desconectar
  3. Seleccionar: Eliminar también ...

Ahora, vuelve a conectarte:

  1. clic derecho del mouse sobre el proyecto
  2. equipo -> Compartir proyecto
  3. seleccione su repositorie: mío SVN(otro caso: git, etc.)
  4. seleccione su repositoriecarpeta

Nota:

En mi caso, hice una copia de seguridad de mis archivos. (seguro tu espalda: P)

Editar:

Estoy hablando de SVNplugin en Eclipse:)


1

¿Has visto esta publicación en el sitio de subversion? También podría intentar validar y "arreglar" la base de datos directamente como se describe aquí . (Tenga en cuenta que no soy un experto, solo hice una búsqueda rápida en Google. Es posible que no esté relacionado con sus problemas en absoluto).

Personalmente, trataría de revisar el repositorio nuevamente y volver a aplicar los cambios. ¿No estás seguro de si esto es posible en tu caso?


Gracias, déjame ver tu sugerencia.
Rubens Mariuzzo

revisar nuevamente es lo que terminé haciendo, definitivamente la solución más fácil (dependiendo de los cambios para volver a aplicar ^^)
elgui

En mi caso, esto no resolvió el problema, también causó muchos más errores en Tortoise SVN, solo advierto.
komorra

1

A lo largo de mis investigaciones, encontré 2 soluciones viables.

  1. Si está utilizando algún tipo de conexiones, ssh, samba, montaje, desconexión / desmontaje y reconexión / montaje. Inténtelo de nuevo, esto a menudo me resolvió el problema. Después de eso, puede hacer la limpieza de svn o simplemente seguir trabajando normalmente (dependiendo de cuándo apareció el problema). Reiniciar mi computadora también solucionó el problema una vez ... ¡sí, es tonto, lo sé!

  2. Algunas veces todo lo que hay que hacer es rm -rf en sus archivos (o si no está familiarizado con el término, simplemente elimine su carpeta svn) y vuelva a verificar su repositorio svn una vez más. Tenga en cuenta que esto no siempre resuelve el problema y es posible que también tenga cambios que no desea perder. Por eso lo uso como segunda opción.

¡Espero que esto les ayude, chicos!


1

Resolví mi problema de corrupción visual del servidor svn rep-cache.db.

Hay dos soluciones.

Detenga el servicio Visual SVN Server.

Descargue el shell sqllite3.exe del sitio web sqllite y cópielo en la carpeta db del repositorio.

Escriba los siguientes comandos en el símbolo del sistema en la carpeta db del repositorio.

- Primera solución -

sqlite3 rep-cache.db

.clone rep-cache-new.db

presione ctrl + c para salir de sqllite.

ren rep-cache.db rep-cache-old.db

ren re-cache-new.db rep-cache.db

- 2da solución -

Eliminar el rep-cache.db

del rep-cache.db

se creará automáticamente.


Gracias Muhammad, ¡solo la pista que necesitaba! Uno necesita determinar si el problema es con el (los) db (s) sqlite en su copia de trabajo o en el del servidor. Pruebe su confirmación en la línea de comando: si el archivo se transfiere correctamente y el error ocurre mientras se "Confirma la transacción", entonces el problema probablemente esté en el lado del servidor. La resolución de Muhammad aquí funciona de maravilla. Este antiguo archivo de listserve tiene más detalles: svn.haxx.se/users/archive-2010-12/0257.shtml
powderflask

1

Arreglé esto para una instancia de lo que me sucedía al eliminar la carpeta .svn oculta y luego realizar un pago en la carpeta a la misma URL.

Esto no sobrescribió ninguno de mis archivos modificados y solo versionó todos los archivos existentes en lugar de obtener copias nuevas del servidor.


1

No pierda el tiempo checking integrityni elimine datos dework queue tabla porque estas son soluciones temporales y le devolverán el golpe después de un tiempo.

Simplemente haga otro checkouty reemplace la carpeta .svn existente por la nueva. Haz una updatey luego debería ir suave.


0

Si instala Tortoise SVN, vaya al administrador de tareas y deténgalo. Luego intente eliminar la carpeta. funcionará


0

La respuesta marcada podría ser la correcta, de acuerdo con la limpieza de subversión. Pero el error es definitivamente genérico, lo que me llevó aquí, esta página de preguntas.

Nuestro proyecto tiene la dependencia System.Data.SQLite y el mensaje de error era el mismo:

la imagen del disco de la base de datos está mal formada

En mi caso, he ejecutado el siguiente script de verificación y los siguientes a través de SQLiteStudio 3.1.1 .

pragma integrity_check

(No tengo idea de si estas estadísticas ayudarían, pero las voy a compartir de todos modos ...)

El archivo DataBase se está utilizando en el uso diario durante 1,5 años, a través del modo de diario de conexión en la memoria, y tenía aproximadamente 750 MB de tamaño. Había aproximadamente 140K registros por tabla y 6 tablas eran así de grandes.

Después de la ejecución del script Integrity Check , se devolvieron 11 filas después de 30 minutos de tiempo de ejecución.

wrong # of entries in index sqlite_autoindex_MyTableName_1
wrong # of entries in index MyOtherTableAndOrIndexName_1
wrong # of entries in index sqlite_autoindex_MyOtherTableAndOrIndexName_2
etc...

Todos los resultados fueron sobre los índices. Tras la reconstrucción de cada índice, se resolvió mi problema.

reindex sqlite_autoindex_MyTableName_1;
reindex MyOtherTableAndOrIndexName_1;
reindex sqlite_autoindex_MyOtherTableAndOrIndexName_2;

Después de volver a indexar, la verificación de integridad resultó "correcta".

Recibí este error el año pasado, restauré la base de datos desde la copia de seguridad y luego volví a realizar todos los cambios, lo cual fue una verdadera pesadilla ...


-1

no hay necesidad de preocuparse por un bloqueo de directorio chicos.

Lo único que necesita hacer es, si sqllite3 no está instalado, escriba el siguiente comando,

>sudo apt-get install sqlite3

Abra la base de datos SVN escribiendo este comando,

>sqlite3 .svn/wc.db 

Ahora lo único que tiene que hacer es eliminar las entradas de bloqueos de SVN DB.

sqlite>  select * from wc_lock;
1|-1           
sqlite>  delete from wc_lock;
sqlite>  select * from wc_lock;
sqlite>  .q

Proceso completado. Puede trabajar en su repositorio SVN, confirmar, actualizar, agregar, eliminar operaciones sin problemas.

:-)


-2

Durante el desarrollo de la aplicación, descubrí que los mensajes provienen de las operaciones INSERT y UPDATE frecuentes y masivas. Asegúrese de INSERTAR y ACTUALIZAR varias filas o datos en una sola operación.

var updateStatementString : String! = ""

for item in cardids {

let newstring = "UPDATE "+TABLE_NAME+" SET pendingImages = '\(pendingImage)\' WHERE cardId = '\(item)\';"
            updateStatementString.append(newstring)

        }


        print(updateStatementString)
        let results = dbManager.sharedInstance.update(updateStatementString: updateStatementString)

        return Int64(results)

-4

cd a la carpeta que contiene .svn

rm -rf .svn
svn co http://mon.svn/mondepot/ . --force
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.