2 更新只读数据库的解决方法 SQL Server

立即分享:

如果数据库是只读的,您可以轻松地从 sys.databases 或 SSMS 中识别状态。 一个众所周知的事实是您不能更新只读数据库中的数据。 在本文中,我们将学习如何排除故障并修复此问题。

两种选择

更新只读数据库 SQL Server我们可以使用 SQL Server Management Studio 即SSMS 或T-SQL 脚本,用于将只读数据库转换为读写数据库。 为了更好地理解这些选项,让我们

  1. 建立资料库
  2. 在其中创建表
  3. 向表中添加记录
  4. 将数据库设为只读
  5. 尝试将记录添加到同一个表
  6. 查看错误消息
  7. 将数据库转换回读写模式

准备数据库

从你的 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

立即分享:

评论被关闭。