none
Cambiar bbdd de sql server de solo lectura

    Question

  • Tengo una bbdd de sql server creada en visual studio 2005 en la que no puedo grabar porque me dice que es de solo lectura. ALguien me puede decir como cambiar este atributo a uno que me permita grabar??

    Gracias

    Friday, June 19, 2009 1:55 PM

Answers

  • Hola.

    Pero si la base de datos ya está levantada, deberías usar algo así;

    Data Source=.\SQLEXPRESS;Initial Catalog=[PonAquíElNombreDeTuBaseDeDatos];Integrated Security=True;Connect Timeout=30;

    ¿Puedes probarlo?

    Alberto López Grande.
    Thursday, June 25, 2009 4:05 PM
    Moderator

All replies

  • Hola, entra el Management Studio y ve a las propiedades de la base de datos, ahi fijate que no este en readonly en sus propiedades
    Maxi Accotto Consultoria en SQL Server Buenos Aires - Argentina http://blog.maxiaccotto.com
    Friday, June 19, 2009 2:26 PM
    Moderator
  • Hola
    Le he quitado el atributo de solo lectura y ahora cuando intento ver las propiedades me sale el siguiente error:

    No se puede mostrar el cuadro de diálogo solicitado. (Microsoft.SqlServer.Express.SqlMgmt)

     No se puede abrir la base de datos 'D:\PROYECTOS .NET\GENERADOR CATALOGOS\GENCATALOGOS\GENCATALOGOS\GENCATALOGOSSQL.MDF', 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. (Microsoft SQL Server, Error: 945)

     

    Friday, June 19, 2009 2:53 PM
  • el comando es:


    ALTER DATABASE   Nombre_BaseDatos Set Read_write


     Saludos,

    Andy Peralta.
    • Edited by T.ControL Friday, June 19, 2009 3:45 PM error al leer la pregunta
    • Proposed as answer by T.ControL Friday, June 19, 2009 3:47 PM
    Friday, June 19, 2009 3:43 PM
  • El problema es que la cuenta de servicio del SQL Server no tiene permisos de acceder a esa carpeta.

    Asigna permisos de modificacion a esa carpeta del disco a la cuanta de servicio del SQL Server.
    Puedes encontrar la cuanta en el configuration manager del SQL Server.


    Saludos
    .

    Ing. Jose Mariano Alvarez http://blog.josemarianoalvarez.com/ Microsoft MVP SQLTotal Consulting Mi.Correo.es.j0se.marian0.alvarez@gmail.c0m.Corregirl0 (Cambia los ceros por O y saca lo que sobra) Este mensaje se proporciona tal como es, SIN GARANTIAS de ninguna clase
    Saturday, June 20, 2009 11:47 PM
  • Hola Jose Mariano
    Soy bastante nueva en SQL SERVER y no se como hacer lo que dices en tu respuesta. Me puedes ayudar?
    Muchas gracias

    Patricia
    Sunday, June 21, 2009 9:19 AM
  • Hola.

    Revisando todo lo comentado hasta ahora, sabemos que no parece ser un problema de la cuenta que arranca SQL Server, porque tenías acceso a la base de datos (sólo lectura). Luego parece que intentaste modificar las propiedades del fichero desde Windows, algo que no puedes hacer mientras la base de datos esté adjuntada y el servicio funcionando. Así que yo creo que es lo que ya te han comentado, que la base de datos está en modo read_only y la tienes que poner como read_write, pero desde SQL Server (no modificando directamente el fichero, algo que por otra parte no tiene mucho sentido). Puedes usar el comando que ya te han facilitado:
     
    use master
    go
    ALTER DATABASE [MiBaseDeDatos] Set Read_write
    go
    También lo puedes hacer desde el Management Studio. Para ello, le das click derecho sobre la base de datos + properties, en el formulario que aparece, seleccionas Options en la parte izquierda y ahí buscas el parámetro Database Read-Only (en el grupo State). Estará a "True", ponlo a false. Le das a OK y ya está.

    Si no te funciona, nos dices.

    Alberto López Grande.
    Sunday, June 21, 2009 2:02 PM
    Moderator
  • El error 945 que indicas puede ser por varos motivos

    1- revisa que tienes espacio en disco
    2- Verifica que los archivos MDL NDF y LDF NO esten marcados en windows como de solo lectura. Esto suele ocurrir cuando los pcopias desde un CD.
    3- Asegurate que la cuenta del SQL Server tiene acceso a esa carpeta.
    4- Asegurate que tanto el Log como los archivos de datos tengan espacio para crecer Puedes verlo desde las propiedades de la base de datos en el management studio (boton derecho sobre el nombre de la base de datos)



    En el punto 3 te copio del manual

    En el menú Inicio, seleccione Todos los programas, seleccione Microsoft SQL Server 2008, seleccione Herramientas de configuración y, a continuación, haga clic en Administrador de configuración de SQL Server.

    En el Administrador de configuración de SQL Server, haga clic en Servicios de SQL Server.

    En el panel de detalles, haga clic con el botón secundario en el nombre de la instancia de SQL Server para la que desea cambiar la cuenta de inicio del servicio y, a continuación, haga clic en Propiedades.

    Luego de eso podras ver la cuenta de servicio. A ese usuario deberas darle permisos completos a los archivos que componen la base de datos desde el sistema operativo.


    Saludos



    Ing. Jose Mariano Alvarez http://blog.josemarianoalvarez.com/ Microsoft MVP SQLTotal Consulting Mi.Correo.es.j0se.marian0.alvarez@gmail.c0m.Corregirl0 (Cambia los ceros por O y saca lo que sobra) Este mensaje se proporciona tal como es, SIN GARANTIAS de ninguna clase
    Monday, June 22, 2009 1:23 AM
  • HE hecho todos los pasos que me habeis indicado y no puedo hacer nada con la bbdd, sigue diciendo que es de solo lectura.
    Os comento los pasos que he hecho: Yo la cree desde visual studio y la tenia adjuntada a mi proyecto de visual basic .net 2005.
    Como no me actualizaba los datos desde la aplicacion me meti en el foro de programacion y vi que era mejor tenerla en un servidor y no adjuntada en el proyecto. La copié en la carpeta data de mi sql server y la adjunté al servidor correspondiente. Desde entonces no puedo hacer nada con la bbdd. Es mejor que me crre una bbdd nueva desde management studio?
    Si me podeis ayudar os lo agradecería mucho porque tengo que entregar la aplicacion en un me y como siga asi no voy a poder hacerlo.
    Trabajo con windows vista home premiun, visual studio 2005 y sql server 2005 express edition.

    Muchas gracias 

    Patricia

    Monday, June 22, 2009 2:08 PM
  • Hola.

    Aquí hay muchas cosas que estamos confundiendo y llamarle a dos cosas de la misma forma no ayuda mucho. Por un lado dices que tenías la base de datos en otra parte y la copiaste a la carpeta data. Para empezar, el término "adjuntar".

    Cuando hablamos de "adjuntar" en SQL Server, nos referimos al proceso que convierte los ficheros .mdf y .ldf en una base de datos SQL Server. Es decir, tú tienes los ficheros en una ubicación dada y ya sea con un comando o por la interfaz de Management Studio, levantas la base de datos, permitiendo que se hagan consultas, actualizaciones y resto de operaciones. 

    Para adjuntar tu base de datos, creo que lo más sencillo es que ejecutes sp_attach_db, desde una sentencia (usando Management Studio):

    EXEC sp_attach_db @dbname = N'AdventureWorks', 
        @filename1 = N'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\AdventureWorks_Data.mdf', 
        @filename2 = N'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\AdventureWorks_log.ldf';
    Este es un ejemplo, tienes que sustituir la base de datos por su nombre y las rutas por las rutas en las que se encuentra tu base de datos. Una vez que hagas esto, ya tienes base de datos a la que acceder. Si esto te falla, nos dices el mensaje de error que te devuelve. Aunque funcione, puede que haya que hacer más cosas.

    Alberto López Grande.

    Monday, June 22, 2009 2:27 PM
    Moderator

  • Hola
    Lo de adjuntar la bbdd lo hice desde el management studio pero como no conseguía ver mi bbdd en el servidor me comentaron en el foro que la copiase a la carpeta data del sql server. Una vez copiada en la carpeta data la pude adjuntar al servidor correspondiente.
    Pero a pesar de todo no puedo actualizar desde visual studio.

    Gracias

    Monday, June 22, 2009 3:27 PM
  • Hola.

    ¿Ves la base de datos en el Management Studio, en el arbol, como un bote de tomate amarillo tirando a naranja? Aparte del nombre de la base de datos, ¿hay alguna coletilla detrás?

    Alberto López Grande.
    Monday, June 22, 2009 3:44 PM
    Moderator
  • Si la veo como una bbdd de color amarillo-naranja y no tiene ninguna coletilla detras. Cuando intento conectar mi proyecto vb net a la bbdd que he creado nueva (la he creado nueva directamente con el management studio por si habia algun error al haberla creado desde visual basic .net la primera vez) me da el siguiente error:
    No se controló System.Data.SqlClient.SqlException
      Class=14
      ErrorCode=-2146232060
      LineNumber=65536
      Message="No se pudo generar una instancia de usuario de SQL Server debido a un error al iniciar el proceso para la instancia de usuario. Se cerrará la conexión."
      Number=15372
      Procedure=""
      Server=".\SQLEXPRESS"
      Source=".Net SqlClient Data Provider"
      State=1
      StackTrace:
           en System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
           en System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
           en System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
           en System.Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(Boolean enlistOK)
           en System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpenTimeout, Int64 timerExpire, SqlConnection owningObject)
           en System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(String host, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, Int64 timerStart)
           en System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance)
           en System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance)
           en System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection)
           en System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options)
           en System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject)
           en System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject)
           en System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
           en System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
           en System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
           en System.Data.SqlClient.SqlConnection.Open()
           en System.Data.Common.DbDataAdapter.QuietOpen(IDbConnection connection, ConnectionState& originalState)
           en System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
           en System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior)
           en System.Data.Common.DbDataAdapter.Fill(DataTable dataTable)
           en GenCatalogos.GenCatalogosSQLDataSetTableAdapters.EmpresaSQLTableAdapter.Fill(EmpresaSQLDataTable dataTable) en D:\PROYECTOS .NET\Generador Catalogos\GenCatalogos\GenCatalogos\GenCatalogosSQLDataSet.Designer.vb:línea 1849
           en GenCatalogos.frmConfiguracion.frmConfiguracion_Load(Object sender, EventArgs e) en D:\PROYECTOS .NET\Generador Catalogos\GenCatalogos\GenCatalogos\frmConfiguracion.vb:línea 26
           en System.Windows.Forms.Form.OnLoad(EventArgs e)
           en System.Windows.Forms.Form.OnCreateControl()
           en System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
           en System.Windows.Forms.Control.CreateControl()
           en System.Windows.Forms.Control.WmShowWindow(Message& m)
           en System.Windows.Forms.Control.WndProc(Message& m)
           en System.Windows.Forms.ScrollableControl.WndProc(Message& m)
           en System.Windows.Forms.ContainerControl.WndProc(Message& m)
           en System.Windows.Forms.Form.WmShowWindow(Message& m)
           en System.Windows.Forms.Form.WndProc(Message& m)
           en System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
           en System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
           en System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
           en System.Windows.Forms.UnsafeNativeMethods.IntCreateWindowEx(Int32 dwExStyle, String lpszClassName, String lpszWindowName, Int32 style, Int32 x, Int32 y, Int32 width, Int32 height, HandleRef hWndParent, HandleRef hMenu, HandleRef hInst, Object pvParam)
           en System.Windows.Forms.UnsafeNativeMethods.CreateWindowEx(Int32 dwExStyle, String lpszClassName, String lpszWindowName, Int32 style, Int32 x, Int32 y, Int32 width, Int32 height, HandleRef hWndParent, HandleRef hMenu, HandleRef hInst, Object pvParam)
           en System.Windows.Forms.NativeWindow.CreateHandle(CreateParams cp)
           en System.Windows.Forms.Control.CreateHandle()
           en System.Windows.Forms.Form.CreateHandle()
           en System.Windows.Forms.Control.get_Handle()
           en System.Windows.Forms.Form.SetVisibleCore(Boolean value)
           en System.Windows.Forms.Control.Show()
           en GenCatalogos.mdiCatalogos.tsbConfiguracion_Click(Object sender, EventArgs e) en D:\PROYECTOS .NET\Generador Catalogos\GenCatalogos\GenCatalogos\mdiCatalogos.vb:línea 20
           en System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
           en System.Windows.Forms.ToolStripButton.OnClick(EventArgs e)
           en System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
           en System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)
           en System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met)
           en System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met)
           en System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)
           en System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
           en System.Windows.Forms.Control.WndProc(Message& m)
           en System.Windows.Forms.ScrollableControl.WndProc(Message& m)
           en System.Windows.Forms.ToolStrip.WndProc(Message& m)
           en System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
           en System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
           en System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
           en System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
           en System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
           en System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
           en System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
           en System.Windows.Forms.Application.Run(ApplicationContext context)
           en Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
           en Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
           en Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
           en GenCatalogos.My.MyApplication.Main(String[] Args) en 17d14f5c-a337-4978-8281-53493378c1071.vb:línea 81
           en System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
           en System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
           en Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
           en System.Threading.ThreadHelper.ThreadStart_Context(Object state)
           en System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
           en System.Threading.ThreadHelper.ThreadStart()
    Thursday, June 25, 2009 1:33 PM
  • Hola.

    ¿Nueva? ¿Has creado los usuarios, las tablas, todo con los mismos nombres que la original? Curioso...

    El caso es que ves la base de datos, pero no te puedes conectar a ella con la aplicación. ¿Puedes pasarnos la cadena de conexión que estás usando, no sea que tenga algún elemento extraño?

    Alberto López Grande.
    Thursday, June 25, 2009 1:52 PM
    Moderator
  • Si la he creado nueva con las tablas, relaciones, ... Lo que no he creado es ningun usuario salvo los que se crean por defecto. Así me pude conectar al principio pero no me actualizaba la bbdd.
    Te mando la cadena de conexión que me ha generado visual basic.net al conectarme a la bbdd la primera vez que lo hice:
    Data Source=.\SQLEXPRESS;AttachDbFilename="C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\GenCatalogos.mdf";Integrated Security=True;Connect Timeout=30;User Instance=True


    Gracias por la ayuda

    Patricia
    Thursday, June 25, 2009 3:51 PM
  • Hola.

    Pero si la base de datos ya está levantada, deberías usar algo así;

    Data Source=.\SQLEXPRESS;Initial Catalog=[PonAquíElNombreDeTuBaseDeDatos];Integrated Security=True;Connect Timeout=30;

    ¿Puedes probarlo?

    Alberto López Grande.
    Thursday, June 25, 2009 4:05 PM
    Moderator
  • Funcionaaaaaaa!!!!!!
    No sabes lo que me has ayudado porque veía que tenía que desistir de hacer la aplicación

    MUCHÍSIMAS GRACIASSSSSSSS

    Patricia
    Thursday, June 25, 2009 7:44 PM