none
Backup de B.D. sql server desde VB.NET RRS feed

  • Pregunta

  • hola, quiero hacer una copia de seguridad de mi base de datos y que el usuario pueda elegir donde guardar esa copia de seguridad y todo desde vb.net.
    Estoy trabajando con visual basic 2005 y sql server 2005.

    La verdad es que estoy un poco verde en temas de Backup's y no se por donde tirar, si alguien me podria ayudar lo agradeceria.

    P.d: Si alguien me podria esplicar tambien que es un dispositivo de copias de seguridad....

    Muchas gracias a todos

    jueves, 11 de septiembre de 2008 9:31

Respuestas

  • Sí, es un problema de permisos: Estás intentando crear un archivo en tu escritorio, pero el escritorio de Windows de forma predeterminada sólo tiene permisos para el usuario que es dueño del escritorio. Como el backup lo está grabando el Sql Server, y el Sql Server se ejecuta con la identidad de otro usuario distinto (que se configura desde el panel de control o desde el Sql Server Configuration Manager), pues lógicamente no le deja grabar ese fichero.

     

    Si realmente quieres dar permisos de escritura sobre ese fichero, tienes que ir al sistema operativo y cambiarlos. Puedes hacerlo desde línea de comandos con la herramienta CACLS, o desde el Explorador de Windows haciendo click derecho sobre la carpeta, seleccionando "propiedades" y accediendo a la pestaña "Seguridad" en la ventana de propiedades. Si tienes Windows XP, esta pestaña de forma predeterminada no aparece. Para habilitarla hay que hacer una operación muy poco evidente, ya que hay que ir a Herramientas, Opciones de Carpeta, y desactivar el checkbox que dice algo asi como "utilizar compartición simple de archivos".

     

    miércoles, 17 de septiembre de 2008 18:10

Todas las respuestas

  • Lo más sencillo es que envíes desde VB al servidor, utilizando el ExecuteNonQuery de un SqlCommand, una sentencia del tipo "BACKUP DATABASE laBase TO DISK='ruta\archivo.bak'". Con eso se saca la copia al archivo indicado.

     

    Te recomiendo que mires en el manual de Sql Server la sentencia "backup database", ya que tiene un montón de opciones dependiendo del tipo de backup que quieras obtener (completo, diferencial, copia, etc.), y también hay que tener en cuenta otras cosas como por ejemplo que si el modelo de recuperación de la base de datos no es "Simple", entonces también hay que hacer backups del LOG.

     

    El "dispositivo de copias de seguridad" es una especie de "nombre abreviado" para referirse a un archivo de copias de seguridad o a una unidad de cinta. Si vas a sacar las copias a un archivo, es más sencillo que indiques el nombre del archivo en la sentencia de backup (con lo de ...TO DISK=...), en lugar de crear un dispositivo de copias.

     

    sábado, 13 de septiembre de 2008 17:31
  • Gracias por responderme Alberto:

    Osea que segun me dices, en
    TO DISK='ruta\archivo.bak'" se indica el nombre del archivo donde se dejara la copia de seguridad.............pero ese archivo tiene que estar creado o te lo crea automaticamente????

    Y el archivo de copia de seguridad que creamos, lo podemos crear en cualquier sitio, es decir, donde el usuario lo quiera guardar o tiene que ser en algun sitio "especial"???


    Gracias de antemano.
    martes, 16 de septiembre de 2008 15:44
  • Si el archivo no existe, se crea automáticamente. Si ya existe, el backup se añade al final del archivo, a no ser que añadas en la sentencia SQL una opción para sobreescribir el archivo (si no recuerdo mal, es WITH NOREWIND).

     

    El archivo puede estar en cualquier sitio, pero hay que tener en cuenta que lo graba el servicio SQL, por lo que la ruta es una ruta del servidor, no del PC del usuario que envía la sentencia SQL.

    La ruta en la que se graba el archivo tiene que tener permisos de escritura para el usuario con el que está rodando el Servicio SQL, no para el usuario que transmite la orden de realizar un backup.

     

     

    martes, 16 de septiembre de 2008 16:30
  •  Alberto Poblacion Escribió:

    Si el archivo no existe, se crea automáticamente. Si ya existe, el backup se añade al final del archivo, a no ser que añadas en la sentencia SQL una opción para sobreescribir el archivo (si no recuerdo mal, es WITH NOREWIND).

     

    El archivo puede estar en cualquier sitio, pero hay que tener en cuenta que lo graba el servicio SQL, por lo que la ruta es una ruta del servidor, no del PC del usuario que envía la sentencia SQL.

    La ruta en la que se graba el archivo tiene que tener permisos de escritura para el usuario con el que está rodando el Servicio SQL, no para el usuario que transmite la orden de realizar un backup.

     

     



    A que te refieres con lo que esta en negrita?
    miércoles, 17 de septiembre de 2008 9:10
  • Estamos hablando de una aplicación que usa una base de datos de tipo Sql Server. Aunque es usual que, en tiempo de desarrollo, se utilice un servidor sql instalado en la mísma máquina en la que se está desarrollando el programa (por ejemplo, la versión Express que viene con el Visual Studio), en cambio lo más normal una vez desplegada la aplicación es que se instale en una red local en la que existen múltiples puestos de trabajo ejecutando el programa, todos ellos accediendo a un mismo Sql Server instalado en un servidor.

     

    Por lo tanto, la aplicación se ejecuta en DOS ordenadores: El del usuario que está ejecutando el programa, más el servidor que está ejecutando el servicio de base de datos.

     

    A la hora de enviar el comando "backup database pruebas to disk='c:\prueba\copia.bak'" (por ejemplo), hay que tener en cuenta que este comando lo ejecuta la parte servidora (no el PC que tiene el programa "cliente" escrito en VB.Net que envía ese comando), por lo que el directorio "c:\prueba" del ejemplo tiene que existir en el disco C: del servidor (no del cliente).

     

    Por supuesto que si el servidor y el cliente se están ejecutando en la misma máquina, la distinción anterior es irrelevante.

     

     

    miércoles, 17 de septiembre de 2008 11:03
  • Pues si, en este caso el servidor y el cliente se van a ejecutar en la misma maquina.
    y una ultima pregunta,


    No se puede abrir el dispositivo de copia de seguridad '
    C:\Documents and Settings\Morito.XARE\Escritorio\Morito_prueba.bak'. Error de sistema operativo 5(Acceso denegado.)

    Esto que es, por permisos???
    Como podria dar permisos de escritura??


    Muchas gracias, por todo tio!!!




    miércoles, 17 de septiembre de 2008 16:22
  • Sí, es un problema de permisos: Estás intentando crear un archivo en tu escritorio, pero el escritorio de Windows de forma predeterminada sólo tiene permisos para el usuario que es dueño del escritorio. Como el backup lo está grabando el Sql Server, y el Sql Server se ejecuta con la identidad de otro usuario distinto (que se configura desde el panel de control o desde el Sql Server Configuration Manager), pues lógicamente no le deja grabar ese fichero.

     

    Si realmente quieres dar permisos de escritura sobre ese fichero, tienes que ir al sistema operativo y cambiarlos. Puedes hacerlo desde línea de comandos con la herramienta CACLS, o desde el Explorador de Windows haciendo click derecho sobre la carpeta, seleccionando "propiedades" y accediendo a la pestaña "Seguridad" en la ventana de propiedades. Si tienes Windows XP, esta pestaña de forma predeterminada no aparece. Para habilitarla hay que hacer una operación muy poco evidente, ya que hay que ir a Herramientas, Opciones de Carpeta, y desactivar el checkbox que dice algo asi como "utilizar compartición simple de archivos".

     

    miércoles, 17 de septiembre de 2008 18:10
  • Por favor necesito ayuda

    Estoy trabajando en un proyecto en visual basic 2005, el problema que tengo es que al ejecutar la aplicacion y guardar los datos en la base de datos de SQL Express sí se guardan los datos incluso los puedo consultar pero solo mientras se ejecuta la aplicacion y al momento de cerrar la aplicacion voy hacia la base de datos y veo que se encuentra vacia sin ningun registro, no se que podra ser, si alguien sabe por favor le agradeceria mucho si me ayudara.

    este es el codigo que tengo en el boton de guardar:

    Dim sqlcon As New SqlClient.SqlConnection(My.MySettings.Default.Database1ConnectionString)

            sqlcon.Open()

            Dim cmd As New SqlClient.SqlCommand("insert into empleados(id,nombre,apellidos,direccion) values('" & txtid.Text & "','" & txtnombre.Text & "','" & txtapellidos.Text & "','" & txtdireccion.Text & "')", sqlcon)

            cmd.ExecuteNonQuery()

            sqlcon.Close()


    mi correo es fer_fcml@hotmail.com
    viernes, 17 de octubre de 2008 19:45
  • me imagino que no tienes SQL 2000 Instalados capas tengas problemas de direccionde comunicacion, lo otro que la forma de guardar en ADO.NET se distinto por lo que veo eso segun como sea tu coneccionSTring y tu DataAdapter
    '------------------------------------
    Dim germanyCustomers As DataSet = customerDataSet.Clone()

    Dim copyRows() As DataRow = _
    customerDataSet.Tables("Customers").Select("CountryRegion = 'Germany'")

    Dim customerTable As DataTable = germanyCustomers.Tables("Customers")
    Dim copyRow As DataRow

    For Each copyRow In copyRows
      customerTable.ImportRow(copyRow)
    Next

    '--------------------------------

    byueno este ejemplo es de microsoft ahora estoy en mi trabajo asi que no se si aun estas con dudas me mandas un mail a mi MSN

    zeroyevi@hotmail.com  

    saludos

    fernando yevenes
    profesional microsoft it
    informatic
    viernes, 13 de febrero de 2009 12:44
  • Puro Floro anda al Grano!

    Cristian

    lunes, 17 de septiembre de 2012 14:37