で読み取り専用データベースを更新するための2つの回避策 SQL Server

今すぐ共有:

データベースが読み取り専用の場合は、sys.databasesまたはSSMSからステータスを簡単に識別できます。 よく知られている事実は、読み取り専用データベースのデータを更新できないことです。 この記事では、これをトラブルシューティングして修正する方法を学びます。

XNUMXつのオプション

で読み取り専用データベースを更新する SQL Serverどちらでも使用できます SQL Server Management Studio、つまり、読み取り専用データベースを読み取り/書き込みデータベースに変換するSSMSまたはT-SQLスクリプト。 これらのオプションをよりよく理解するために、

  1. データベースを作成する
  2. その中にテーブルを作成します
  3. テーブルにレコードを追加します
  4. データベースを読み取り専用にする
  5. 同じテーブルにレコードを追加してみてください
  6. エラーメッセージを確認する
  7. データベースを読み取り/書き込みモードに変換し直します

データベースを準備する

あなたから SQL Server 管理スタジオ、あなたに接続します SQL server、ノード「データベース」を右クリックし、「新しいデータベース」オプションを選択します。 データベースの名前を入力したら、[OK]を押します。 次の例に示すように、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.

[データベースのプロパティ]ページを使用してデータベースのステータスを読み取り/書き込みに戻し、[データベースの読み取り専用]のオプションを[False]から[True]に設定するか、次のスクリプトを実行します。

USE [master]
GO
ALTER DATABASE [DataNumen] SET READ_WRITE WITH NO_WAIT
GO

これで、レコードを追加しようとすると、「データベースの更新に失敗しました」というエラーメッセージが表示されます。DataNumen「データベースは読み取り専用であるため」は表示されなくなります。 データベースのバックアップが私たちに役立つことは誰もが知っています 修正します SQL Server データベース。 ただし、読み取り専用データベースのバックアップでは、読み取り/書き込みモードではなく、読み取り専用モードでデータベースが復元されます。

著者紹介:

Neil Varleyは、のデータ復旧の専門家です。 DataNumen、Inc。は、以下を含むデータ復旧技術の世界的リーダーです。 Outlookの回復 と優れた回復ソフトウェア製品。 詳細については、次のWebサイトをご覧ください。 WWW。datanumen.com

今すぐ共有:

コメントは締め切りました。