Ir al contenido principal

Como reparar una DB SQL

En muchas ocasiones nuestra base de datos en sqlserver 2000 se puede dañar por fallas debido a que nuestro servidor se reinicia de manera inesperada o la memoria RAM o el disco duro tienen algunos problemas.
Esto origina que en la base de datos se corrompan algunos objetos como tablas o índices.
Cuando tratamos de seleccionar registros en nuestra tabla nos da un error grave del ( DBPROCESS is dead, Error Severities)
Aquí es donde inicia nuestro problema, no podemos acceder a los registros de la tabla; la razón puede ser según el nivel de severidad del error, estos niveles están categorizados así:
EXINFO 1 Informational, nonerror.
EXUSER 2 User error.
EXNONFATAL 3 Nonfatal error.
EXCONVERSION 4 Error in DB-Library data conversion.
5 The server has returned an error flag.
EXTIME 6 Time-out period exceeded while waiting for a response from the server; the DBPROCESS is still alive.
EXPROGRAM 7 Coding error in user program.
EXRESOURCE 8 Running out of resources; the DBPROCESS may be dead.
EXCOMM 9 Failure in communication with server; the DBPROCESS is dead.
EXFATAL 10 Fatal error; the DBPROCESS is dead.
EXCONSISTENCY 11 Internal software error; notify your primary support provider

El error con severidad 4 y 11 normalmente pueden ser daños en las estructuras de nuestros índices o almacenamiento físico de nuestros registros. Para resolver esto SQL SERVER 2000 provee ciertas utilerías que pueden ayudarnos como dba.
Lo primero que debemos hacer es poner nuestra base de datos en modo de mantenimiento
/* SINGLE_USER permite la conexión a la base de datos de un usuario cada vez. Todas las demás conexiones de usuario se desconectan.
El intervalo de desconexión se controla mediante la cláusula de terminación de la instrucción ALTER DATABASE. Se rechazan nuevos intentos de conexión. La base de datos permanece en modo SINGLE_USER incluso si sale el usuario que estableció la opción. En este punto, un usuario distinto (pero sólo uno) puede conectarse a la base de datos */

ALTER DATABASE MYBASEDATOS SET SINGLE_USER
Ahora utilizamos la utilería DBCC CHECKDB, la cual Comprueba la asignación y la integridad estructural de todos los objetos de la base de datos especificada.
SINTAXIS :
DBCC CHECKDB('DATABASE',REPAIR_ALLOW_DATA_LOSS)
QUE HACE:
Realiza todas las reparaciones e incluye la asignación y cancelación de asignación de filas y páginas para corregir errores de asignación, errores estructurales de filas o páginas y eliminación de objetos de texto dañados
DBCC CHECKDB ('DATABASE',REPAIR_FAST)
Realiza acciones de reparación poco importantes y de corta duración, como reparar claves adicionales en índices no agrupados. Estas reparaciones se pueden realizar rápidamente sin riesgo de pérdida de datos.

DBCC CHECKDB ('DATABASE',REPAIR_REBUILD)
Realiza todas las reparaciones ejecutadas por REPAIR_FAST e incluye reparaciones más largas, como la regeneración de índices. Estas reparaciones se pueden realizar sin riesgo de pérdida de datos.
Después de correr este proceso, debe poner la base de datos en modo multiusuario y probar LA RECUPERACION DE REGISTRO de tablas que presentaban problemas usando la instrucción SELECT.
ALTER DATABASE MYBASEDATOS SET MULTI_USER


por favor visita www.rapiconta.com para mas detalles

Comentarios

  1. Hola, no puedo ejecutar ninguna instruccion debido al siguiente mensaje:
    No se puede abrir la base de datos 'BASECONTABILIDAD', porque no es posible tener acceso a archivos, o la memoria o el espacio en disco son insuficientes. Consulte el registro de errores de SQL Server.
    Existe otra manera?, mi BD sale sospechosa

    ResponderEliminar
  2. tengo uns base de datos que luego de procesar 3 o 4 registros cancela el proceso, que puedo hacer?

    ResponderEliminar
  3. Debes revisar el log de transacciones, es un arachivo texto que esta dentro MSSQL/LOG ahi puedes ver informacion importante de lo que esta pasando en tu base de datos y en base a eso buscar alguna alternativa.

    ResponderEliminar
  4. He escuchado sobre un programa. El ha sido en un sitio con los softwares - reparar base sql 2000. El programa ha terminado mis problemas muy con facilidad y de balde. Todavia sobre este programa mis amigos han estado contento de este utilidad. Ellos han dicho que con ayuda del instrumento ha economizado el tiempo. El utilidad ha demostrado sus posibilidades en guardar los datos de salidas como un solo archivo .pst o como un grupo de archivos .eml, .vcf y .txt.

    ResponderEliminar
  5. Interesante, espero que algun usuario que utilice esta herramiente nos comente que experiencia ha tenido ante una falla presentada en su base de datos.

    ResponderEliminar
  6. una consulta, ya habia hecho mi base de datos pero por error luego lo guarde los cambios anteriores y ahora como puedo ver lo que yo ya habia hecho, no se si me entienden

    ResponderEliminar
  7. Si tienes una base de datos, la unica forma de ver lo anterior despues de realizar un cambio, es recuperando un respaldo. Lo tro que se hace con los datos cuando no se esta seguro de un cambio en los registros es iniciar una transaccion con begin transaction
    y luego hacer todo las operaciones y despues hacer un commit si esta correcto o un rollback si hay una falla.

    ResponderEliminar
  8. No habrá pérdida de datos cuando se ejecuta DBCC CHECKDB con comando REPAIR_ALLOW_DATA_LOSS. La cantidad de pérdida de datos depende del nivel de corrupción. Si su base de datos es muy importante y no se puede hacer uso de una sola pérdida de datos de la base de datos, entonces hay una tercera software de recuperación de sql partido que dicen que pueden recuperar el 100% de datos de la base de datos del servidor SQL corruptos.

    ResponderEliminar
  9. estoy intentando pasar la base de datos a modo unico con el comando:
    ALTER DATABASE MYBASEDATOS SET SINGLE_USER, me esta demorando 3 horas y no termina, esta bien? tengo que esperar

    ResponderEliminar
  10. No es normal que tarde ese tiempo entendiendo que por la palabra mybasededatos puso el nombre de su base que desea pasar a simple usuario, podría ser que tenga sesiones habiertas.

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

GUARDAR DOCUMENTOS PDF EN LA BASE DE DATOS SQLSERVER DESDE .NET

Personalmente quiero contarles que para mi este proceso ha sido muy escabroso,he dedicado muchas horas de investigacion para encontrar la forma de hacerlos lo más sencillo posible. Anteriormente había guardado imagenes en la base de datos utilizando compos de tipo imagen, pero luego revisando la documentacion de sqlserver 2005 encontre que en el futuro este tipo de campo podría ser descartado, esto me llevo a buscar otras alternativas especialmente con los campos binarios o (varbinary(max)) . PASOS: 1.- Primero declare las siguientes variables de clase en su formulario windows form Dim fdlg As New OpenFileDialog Dim fs As System.IO.FileStream Dim mcorr_documento As Int32 Dim bw As System.IO.BinaryWriter ----- fin de las variables de clase 2.- Seguidamente en su formulario pegue un objeto de tipo OpenFileDialog que le servira para buscar el archivo que desea almacenar en la base de datos 3.- Cree un objeto de tipo Combo y agregue una lista de los tipos de archivos q

Como guardar un PDF en un campo de una tabla en SQL SERVER utilizando PowerBuilder

1.- Crea un campo de tipo image en la tabla donde deseas guardar tu archivo. 2.- Luego lees el archivo pdf del path donde se encuentre 3.- Seguidamente actualizas el contenido leido en el campo de la tabla Supongamos que tenemos una tabla que se llama prueba y utiliza una llave unica sobre el campo tmp_llave. El campo campo image se llama tmp_archivo. // Declaramos nuetros campos de tipo blog blob lbl_data blob lbl_temp long ll_file, ll_long = 0, ll_tam integer li_pos = 1 // leemos el archivo ll_file = FileOpen("c:\temp\prueba.pdf",streammode!) // barremos sus registros Do While FileRead(ll_file,lbl_temp) > 0 lbl_data += lbl_temp Loop // cerramos el archivo FileClose(ll_file) // actualizamos nuestra base de datos UPDATEBLOB prueba SET prueba.tmp_archivo = :lbl_data WHERE prueba.tmp_llave = :li_llave; // Para recuperar y mostrar el archivo: SELECTBLOB tmp_archivo INTO :lbl_data FROM prueba WHERE prueba.tmp_llave = :li_llave; ll_file FileOpen("c:\temp\prueba2.pdf"