如果数据库是只读的,您可以轻松地从 sys.databases 或 SSMS 中识别状态。 一个众所周知的事实是您不能更新只读数据库中的数据。 在本文中,我们将学习如何排除故障并修复此问题。
两种选择
我们可以使用 SQL Server Management Studio 即SSMS 或T-SQL 脚本,用于将只读数据库转换为读写数据库。 为了更好地理解这些选项,让我们
- 建立资料库
- 在其中创建表
- 向表中添加记录
- 将数据库设为只读
- 尝试将记录添加到同一个表
- 查看错误消息
- 将数据库转换回读写模式
准备数据库
从你的 SQL Server 管理工作室,连接到您的 SQL server,右键单击“数据库”节点,然后选择“新建数据库”选项。 输入数据库名称后按确定。 您还可以使用 T-SQL 脚本,如下例所示:
CREATE DATABASE [DataNumen] CONTAINMENT = NONE ON PRIMARY ( NAME = N'DataNumen', FILENAME = N'E:\Program Files\MSSQL12.MSSQLSERVER\MSSQL\DATA\DataNumen.mdf' , SIZE = 3072KB , FILEGROWTH = 1024KB ) LOG ON ( NAME = N'DataNumen_log', FILENAME = N'E:\Program Files\MSSQL12.MSSQLSERVER\MSSQL\DATA\DataNumen_log.ldf' , SIZE = 1024KB , FILEGROWTH = 10%) GO
通过选择数据库从 SSMS 创建一个表,右键单击节点“表”,然后指向“新建”并单击选项“表...”。 输入列名和数据类型,然后使用表名保存。 您可以使用下面的查询来创建一个表:
USE [DataNumen] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[Table1]( [Col1] [nchar](10) NULL ) ON [PRIMARY] GO
使用以下查询将记录添加到表中:
Insert into [dbo].[Table1] values ('Testvalue')
The result window of SSMS will show the following message: (1 row(s) affected)
运用 SQL Server Management Studio,右键单击数据库,然后选择“属性”选项。 在数据库属性页面上的“选项”下,将选项“数据库只读”从“True”设置为“False”。 您还可以使用 TSQL 脚本将数据库切换为只读,如下所示:
USE [master] GO ALTER DATABASE [DataNumen] SET READ_ONLY WITH NO_WAIT GO
您可以看到 SSMS 现在会在数据库名称附近显示“只读”状态。
现在,让我们尝试向表中插入一条新记录。
Insert into [dbo].[Table1] values ('Testvalue2')
结果窗口中将出现以下错误消息。
Msg 3906, Level 16, State 1, Line 12 Failed to update database "DataNumen" because the database is read-only.
使用数据库属性页面将数据库状态恢复为读写,并将“数据库只读”选项从“假”设置为“真”或执行以下脚本:
USE [master] GO ALTER DATABASE [DataNumen] SET READ_WRITE WITH NO_WAIT GO
现在,当您尝试添加记录时,错误消息“更新数据库失败”DataNumen“因为数据库是只读的”将消失。 我们都知道数据库备份可以帮助我们 固定 SQL Server 数据库。 但是,只读数据库的备份将以只读模式而不是读写模式恢复数据库。
作者简介:
Neil Varley 是一位数据恢复专家 DataNumen, Inc.,它是数据恢复技术领域的世界领先者,包括 展望恢复 和 excel 恢复软件产品。 欲了解更多信息,请访问 datanumen.com