none
Reducir tamaño de la base de datos desde vb.net

    Pregunta

  • Buenas 

    programo en vb.net y uso SQL R2 2008

    Con este codigo vacio las tablas de mi base datos desde vb.net 

     Using cnx As New SqlConnection(cadenaConexion)
    
                cnx.Open()
                'Creamos una variable que contendra la consulta a ejecutar
                '
                Dim actualizar As String = "truncate table dbo.Tbla_Salida_Mercancia"
                '
                Using cmd As New SqlCommand(actualizar, cnx)
                    '
    
                    cmd.ExecuteNonQuery()
                    MsgBox("TABLA BASIADA CON EXITO")
                End Using
            End Using

    vacié todas las tablas, pero el tamaño de la base de datos no se reduce, pesa 2 Gb

    Necesito un código en forma de una consulta sql que reduzca el tamaño de la base de datos, para ejecutarlo desde vb.net 

    Gracias...

    sábado, 3 de septiembre de 2016 20:26

Respuestas

  • Dim actualizar As String = "DBCC SHRINKDATABASE(NombreDeLaBase)"

    Y todo lo demás igual que como lo tienes.

    PERO:
    Preocúpate de estudiar detalladamente todas las implicaciones que tiene, que no son triviales. Por ejemplo, esto reduce el fichero de datos, pero no el Log. Si también tienes problemas de tamaño con el Log, hay que pasar a Simple el modo de recuperación, hacer un DBCC SHRINKFILE que reduzca el Log, y volver a dejar el modelo de recuperación como estaba antes. También se verá afectada la fragmentación de la BD, lo cual puede afectar a su rendimiento. En fin, que no lo hagas "a ciegas" diciendo "simplemente denme el comando". No es tan simple como simplemente poner el comando, hay que saber las repercusiones de lo que se está haciendo.

    • Marcado como respuesta EliannyRD sábado, 3 de septiembre de 2016 22:55
    sábado, 3 de septiembre de 2016 22:37
  • En mi opinión, esto no se debería hacer desde el programa en VB, sino que se debería configurar en el propio SQL Server. Esto normalmente se hace desde la opción de Crear Plan de Mantenimiento, y ahí se lo indica con qué frecuencia se desea reorganizar índices, actualizar estadísticas, sacar copias de seguridad, validar la coherencia de la base de datos, etc., etc., y entre otras opciones el plan de mantenimiento te permite reducir el tamaño de la base de datos y del Log. También existe una opción de AutoShrink en las Propiedades de la base de datos, aunque por razones de rendimiento es poco recomendable hacerlo sobre bases de datos en producción con mucha actividad.

    La opción de planes de mantenimiento está en todas las ediciones de SQL Server menos en la Express. Pero dado que me hablas de "base de datos de 15 GB", presumo que no estás usando la Express, ya que este tamaño supera el máximo que admite la Express.

    Si todo eso quisieras hacerlo desde VB en lugar de hacerlo desde un plan de mantenimiento, lo que tienes que hacer es buscar una por una cada una de las sentencias que ejecuta el correspondiente proceso de mantenimiento, e irlas lanzando con el ExecuteNonQuery de un SqlCommand. Si no sabes cuáles son todas las sentencias, hay un truco para encontrarlas: Selecciona la opción en SQL Server Management Studio y pulsa el botón "Script". Esto te genera la sentencia en una ventana del SSMS. Solo tienes que copiarla y pegarla en tu programa de VB. Pero sigo insistiendo en que este tipo de mantenimiento no debería ser responsabilidad del programa cliente en VB, sino que es algo que el administrador de la base de datos debería configurar en el servidor.

    • Marcado como respuesta EliannyRD domingo, 4 de septiembre de 2016 13:20
    domingo, 4 de septiembre de 2016 7:31

Todas las respuestas

  • Puedes usar el comando DBCC SHRINKDATABASE. La sintaxis completa la tienes aquí:

    https://msdn.microsoft.com/en-us/library/ms190488.aspx

    sábado, 3 de septiembre de 2016 20:34
  • Gracias por contestar, 

    por favor.... me puedes adaptar el el comando DBCC SHRINKDATABASE. a mi consulta que esta arriba. 

    por favor.............................

    sábado, 3 de septiembre de 2016 20:39
  • Dim actualizar As String = "DBCC SHRINKDATABASE(NombreDeLaBase)"

    Y todo lo demás igual que como lo tienes.

    PERO:
    Preocúpate de estudiar detalladamente todas las implicaciones que tiene, que no son triviales. Por ejemplo, esto reduce el fichero de datos, pero no el Log. Si también tienes problemas de tamaño con el Log, hay que pasar a Simple el modo de recuperación, hacer un DBCC SHRINKFILE que reduzca el Log, y volver a dejar el modelo de recuperación como estaba antes. También se verá afectada la fragmentación de la BD, lo cual puede afectar a su rendimiento. En fin, que no lo hagas "a ciegas" diciendo "simplemente denme el comando". No es tan simple como simplemente poner el comando, hay que saber las repercusiones de lo que se está haciendo.

    • Marcado como respuesta EliannyRD sábado, 3 de septiembre de 2016 22:55
    sábado, 3 de septiembre de 2016 22:37
  • Gracias por contestar

    el problema está resuelto 100x%

    ahora bien, lo que tu dices y me comentas tienes toda la razón, 

    por ejemplo: si tengo un sistema 3 años funcionado y quiero darme manteamiento a la base de datos, desde visual basic. 

    ¿cual seria el orden cronológico para darle nematelminto a la base de datos?. 

    1) 

    2)

    3)

    imaginemos que mi base datos pesa 15 gb, y quiero ponerla al peso inicial que son 5 mb

    Disculpa mi ignorancia, 

    Bendiciones para ti. 

    sábado, 3 de septiembre de 2016 22:55
  • En mi opinión, esto no se debería hacer desde el programa en VB, sino que se debería configurar en el propio SQL Server. Esto normalmente se hace desde la opción de Crear Plan de Mantenimiento, y ahí se lo indica con qué frecuencia se desea reorganizar índices, actualizar estadísticas, sacar copias de seguridad, validar la coherencia de la base de datos, etc., etc., y entre otras opciones el plan de mantenimiento te permite reducir el tamaño de la base de datos y del Log. También existe una opción de AutoShrink en las Propiedades de la base de datos, aunque por razones de rendimiento es poco recomendable hacerlo sobre bases de datos en producción con mucha actividad.

    La opción de planes de mantenimiento está en todas las ediciones de SQL Server menos en la Express. Pero dado que me hablas de "base de datos de 15 GB", presumo que no estás usando la Express, ya que este tamaño supera el máximo que admite la Express.

    Si todo eso quisieras hacerlo desde VB en lugar de hacerlo desde un plan de mantenimiento, lo que tienes que hacer es buscar una por una cada una de las sentencias que ejecuta el correspondiente proceso de mantenimiento, e irlas lanzando con el ExecuteNonQuery de un SqlCommand. Si no sabes cuáles son todas las sentencias, hay un truco para encontrarlas: Selecciona la opción en SQL Server Management Studio y pulsa el botón "Script". Esto te genera la sentencia en una ventana del SSMS. Solo tienes que copiarla y pegarla en tu programa de VB. Pero sigo insistiendo en que este tipo de mantenimiento no debería ser responsabilidad del programa cliente en VB, sino que es algo que el administrador de la base de datos debería configurar en el servidor.

    • Marcado como respuesta EliannyRD domingo, 4 de septiembre de 2016 13:20
    domingo, 4 de septiembre de 2016 7:31
  • Gracias..................
    domingo, 4 de septiembre de 2016 13:20