none
Ruta de restauracion RRS feed

  • Pregunta

  • Hola, tengo una aplicación la cual restaura una BD .bak.

    Mi consulta es en que ruta puedo poner la la copia de la base .bak para su posterior restauración una vez que se instalo en la PC del cliente? Permitir que cualquier usuario de la PC que se instalo lo pueda hacer.

    Teniendo en cuenta que no importa si el usuario la ve y puede hacer una restauración independientemente a la aplicación

    Así restauro

     Private Sub RestoreDB()
            Try
                Dim con As New SqlConnection("Data Source=(local); Initial Catalog=master; Integrated Security=SSPI")
                Dim resCmd As SqlCommand
                Dim SQLsentence As String = "RESTORE DATABASE BaseDatosComercio from DISK='C:\....bd.BAK'"
                con.Open()
                resCmd = New SqlCommand(SQLsentence, con)
                resCmd.ExecuteNonQuery()
                con.Close()
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            Finally
            End Try
        End Sub
    Saludos
    • Editado Federico32113 miércoles, 8 de febrero de 2017 20:46
    • Cambiado Joyce_AC viernes, 10 de febrero de 2017 15:21
    miércoles, 8 de febrero de 2017 20:45

Respuestas

  • Federico32113,

    Fíjate en la cadena de conexión, el atributo Integrated Security está configurado en SSPI lo que significa que para conectarte al servidor de SQL Server utilizas la autenticación de Windows.

    ¿Qué es la autenticación de Windows? pues es el proceso que el sistema operativo realiza para comprobar la identidad de una persona al momento de iniciar sesión, y ya que esa labor la realizó el sistema operativo entonces SQL Server confía en ello y permite conectarse al servidor. Entonces, debes asegurarte que el usuario que inició sesión en el sistema operativo tenga acceso a la ruta donde deseas colocar el medio de copia de seguridad.

    Un lugar para copiar el medio de copia de seguridad puede ser la carpeta 'Documentos' del usuario, sin embargo evita escribir la dirección "en duro" porque son carpetas especiales que varían según la versión o idioma del sistema operativo, la recomendación es que hagas uso del enum SpecialFolder para recuperar la ruta de acceso a carpetas especiales Enumeración Environment.SpecialFolder, por ejemplo para obtener la ruta de acceso a la carpeta 'Documentos':

    MessageBox.Show(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments))



    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Federico32113 viernes, 10 de febrero de 2017 20:29
    miércoles, 8 de febrero de 2017 22:02
  • Federico32113,

    ¿Por qué te lías tanto?. Si lees los aportes que te vine haciendo desde un inicio menciono que la única condición es que el archivo se encuentre en un ruta donde el usuario tenga permiso de lectura/escritura, puedes tomar el que consideres oportuno, incluso una ruta fija [Carpeta personalizada].

    Por ejemplo, selecciona [Carpeta Datos personales del usuario], no olvides que para tomar la ruta debes utilizar el enum SpecialFolder:

    Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

    Asegúrate que ambas referencias corresponden a la misma ruta.



    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Federico32113 viernes, 10 de febrero de 2017 20:29
    viernes, 10 de febrero de 2017 15:16

Todas las respuestas

  • Federico32113,

    Fíjate en la cadena de conexión, el atributo Integrated Security está configurado en SSPI lo que significa que para conectarte al servidor de SQL Server utilizas la autenticación de Windows.

    ¿Qué es la autenticación de Windows? pues es el proceso que el sistema operativo realiza para comprobar la identidad de una persona al momento de iniciar sesión, y ya que esa labor la realizó el sistema operativo entonces SQL Server confía en ello y permite conectarse al servidor. Entonces, debes asegurarte que el usuario que inició sesión en el sistema operativo tenga acceso a la ruta donde deseas colocar el medio de copia de seguridad.

    Un lugar para copiar el medio de copia de seguridad puede ser la carpeta 'Documentos' del usuario, sin embargo evita escribir la dirección "en duro" porque son carpetas especiales que varían según la versión o idioma del sistema operativo, la recomendación es que hagas uso del enum SpecialFolder para recuperar la ruta de acceso a carpetas especiales Enumeración Environment.SpecialFolder, por ejemplo para obtener la ruta de acceso a la carpeta 'Documentos':

    MessageBox.Show(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments))



    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Federico32113 viernes, 10 de febrero de 2017 20:29
    miércoles, 8 de febrero de 2017 22:02
  • Ah entonces de la manera que me mencionas obtengo la ruta de acceso a los "documentos" según cada PC. Observe que muchos lo hacen de la manera que lo hacia yo.

    ¿Pero como puedo hacer para que al momento de la instalación del sistema el archivo .bak se guarde en "documentos" para la posterior recuperación?Hay alguna manera de hacerlo cuando se crea el instalador?

    miércoles, 8 de febrero de 2017 23:32
  • Federico32113,

    Desconozco el software de empaquetado que utilizas pero en cualquier caso seleccionar una carpeta de destino es una tarea bastante trivial, de hecho las carpetas -dentro del proyecto de empaquetado- no tienen una ruta rígida sino que refieren a una ruta relativa con independencia de la versión o idioma del sistema operativo, por ejemplo, si usas InstallShield la carpeta a seleccionar será [PersonalFolder] (ruta de la carpeta personal del usuario: Documents).

    Por cierto, ¿por qué platicamos de estos temas en la sección de SQL Server?


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    jueves, 9 de febrero de 2017 4:19
  • No tenia pensado utilizar InstallShield  para hacer el instalador, pero ya que me mencionas lo de la carpeta "PersonalFolder" podría ser una opción. ¿No se puede hacer la creación de BD.bak en "documentos" mediante el proceso instalación que trae por defecto Visual?

    Por cierto, ¿por qué platicamos de estos temas en la sección de SQL Server?

    Me pareció que correspondía a esta sección...

    jueves, 9 de febrero de 2017 4:54
  • Hola.

    Probablemente no aporto con este comentario, pero ¿el respaldo quién lo ha hecho? Es decir, si cada cliente restaura una BD, debe haber un primer respaldo...

    Pregunto porque este escenario no lo había visto antes y me causa curiosidad.

    Saludos,


    Guillermo Taylor F.
    MVP Data Platform & IT Pro
    Mi Blog

    jueves, 9 de febrero de 2017 13:35
  • Yo como desarrollador cada vez que se instala el sistema en la PC del cliente se crea la copia de la base .bak. Esta tiene cargado datos predeterminados para todos iguales... no se si conteste tu pregunta
    jueves, 9 de febrero de 2017 14:15
  • Hola Federico, al igual que Guillermo, me causa curiosidad el modelo de deployment.

    Una opción a considerar, es crear la base de datos vacia, luego mediante scripts crear los objetos (tablas, vistas, sp, etc.) y como ultimo paso cargar los datos desde un archivo que seguramente pueden ser estandarizados (entiendo que deberían ser parametros de la aplicación y datos iniciales).

    De esta manera evitas realizar un RESTORE DATABASE y los temas de seguridad (ya que entiendo deberías cambiar logins, users), ubicaciones de archivos, etc.

    Saludos Mariano.


    Mariano K.

    jueves, 9 de febrero de 2017 15:05
  • No considero que eso sea necesario, ya que si otro usuario restaura la base de forma independiente al sistema, no podrá hacer uso de la aplicación porque en la base tengo un tabla llamada "Activador" que a la hora de ejecutar el sistema hace una comparación de unos valores encriptados. Creo que con la encriptacion el sistema es seguro para evitar cualquier acceso no deseado al sistema.

    La duda que me queda es como puedo hacer para que el archivo .bak se cree en "documentos" cuando se instala el sistema en la PC del usuario. ¿Tienen alguna idea de como hacerlo?

    jueves, 9 de febrero de 2017 15:50
  • Hola Federico, creo que podrías mover la pregunta al foro de desarrollo de aplicaciones ya que seguramente al crear el paquete de instalación habra muchas formas de resolver el deploy del .bac o cualquier otro tipo de archivo.

    Mariano K.

    jueves, 9 de febrero de 2017 17:49
  • Encontré esta manera de hacer el instalador con la opción por defecto de visual.

    A que carpeta puedo agregar el archivo .bak para se guarde en "Documentos" en la PC del cliente para luego poder restaurarlo? o en que carpeta puedo guardarlo para restaurarlo

     

    Espero me sepas responder...

    viernes, 10 de febrero de 2017 14:34
  • Federico32113,

    ¿Por qué te lías tanto?. Si lees los aportes que te vine haciendo desde un inicio menciono que la única condición es que el archivo se encuentre en un ruta donde el usuario tenga permiso de lectura/escritura, puedes tomar el que consideres oportuno, incluso una ruta fija [Carpeta personalizada].

    Por ejemplo, selecciona [Carpeta Datos personales del usuario], no olvides que para tomar la ruta debes utilizar el enum SpecialFolder:

    Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

    Asegúrate que ambas referencias corresponden a la misma ruta.



    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Federico32113 viernes, 10 de febrero de 2017 20:29
    viernes, 10 de febrero de 2017 15:16
  • Cual ruta me recomiendas para instalar la base para su posterior restauración para que el usuario tenga el permiso de lectura/escritura a esta carpeta, es decir una carpeta a la que todos los usuarios puedan acceder? Documentos?

    Porque hice una prueba en una pc y al momento de restaurarla no tenia el permiso. Tuve que habilitar los permisos.
    jueves, 16 de febrero de 2017 14:07