メイン コンテンツへスキップ
サポート
Microsoft アカウントでサインイン
サインインまたはアカウントを作成してください。
こんにちは、
別のアカウントを選択してください。
複数のアカウントがあります
サインインに使用するアカウントを選択してください。

現象

次のような状況で問題が発生します。

  • Microsoft sql Server 2005、microsoft SQL Server 2008、または Microsoft SQL Server 2008 R2 のインスタンスをインストールします。

  • SQL Server のインスタンスには INST1 という名前が付けられ、Test_RO_FG_DB という名前のデータベースがホストされます。

  • データベースには、次のファイルグループが含まれています。

    • プライマリ

    • RO_FG

    • RW_FG

  • RO_FG という名前のファイルグループは、READ_ONLY としてマークされています。

  • Microsoft SQL Server 2012 の新しいインスタンスをインストールします。 この SQL Server 2012 のインスタンスは、INST2 という名前になっています。

  • INST1 から Test_RO_FG_DB データベースをデタッチします。

  • Test_RO_FG_DB データベースを INST2 にアタッチしようとしています。

  • 以下のようなエラー メッセージが表示される。

    メッセージ3415、レベル16、状態2、行1データベース ' Test_RO_FG_DB ' は、読み取り専用または読み取り専用のファイルを持っているか、ユーザーが一部のファイルを変更する権限を持っていないため、アップグレードできません。 データベースまたはファイルを書き込み可能にして、回復を再実行します。

  • Test_RO_FG_DB データベースを INST1 に再アタッチしようとしています。

このシナリオでは、INST1 にデータベースを再アタッチすることはできません。 また、SQL Server エラーログに次のエラーメッセージが表示されます。

注: この問題は、READ_ONLY とマークされているファイルグループが含まれているデータベースをアタッチしようとした場合にのみ発生します。 この問題は、すべてのデータが READ_ONLY とマークされている READ_ONLY データベースを移動しようとしたときには発生しません。

原因

この問題は、SQL Server 2012 がデータベースのアップグレードを開始する前に、読み取り専用のファイルグループを検出しないために発生します。 アップグレードが開始されると、SQL Server 2012 はエントリをトランザクションログに書き込みます。 以前のバージョンでは、新しいトランザクションログエントリを読み取ることができません。

状態

マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。

解決方法

累積的な更新プログラムの情報

SQL Server 2012

この問題の修正プログラムは、SQL Server 2012 の累積的な更新プログラム2で最初にリリースされました。この累積的な更新プログラムパッケージの詳細については、次の記事番号をクリックして、Microsoft サポート技術情報の記事を参照してください。

2703275 SQL Server 2012 の累積的な更新プログラムパッケージ2注: ビルドは累積的であるため、それぞれの新しい修正プログラムには、以前の SQL Server 2012 fix release に含まれていたすべての修正プログラムとセキュリティ修正プログラムが含まれています。 この修正プログラムを含む最新の修正プログラムを適用することを検討することをお勧めします。 詳細については、次のマイクロソフト サポート技術情報番号をクリックしてください。

2692828 SQL Server 2012 がリリースされた後にリリースされた SQL Server 2012 ビルド Sql server 2012 のインストールには、SQL Server 2012 修正プログラムを適用する必要があります。

回避策

この問題を回避するには、以下のいずれかの方法を使用します。方法 1INST2 の INST1 からデータベースのバックアップを復元します。注: 以前のバージョンからバックアップを復元した場合、「現象」セクションで説明されている問題は、SQL Server 2012 では発生しません。方法 2以前のバージョンの SQL Server から SQL Server 2012 にインプレースアップグレードを実行します。方法 3読み取り専用のファイルグループを含むデータベースを SQL Server 2012 のインスタンスに移動します。 これを行うには、次の手順を実行します。注: SQL Server 2012 を実行しているサーバーで、手順 4 ~ 11 を実行します。 たとえば、INST2 で手順 4 ~ 11 を実行します。

  1. INST1 で、データベースの接続を解除します。 たとえば、Test_RO_FG_DB データベースの接続を解除します。

  2. INST2 インスタンスをホストしているサーバーにデータベースファイルを移動します。

  3. INST2 にデータベースをアタッチします。 次のサンプルコードは、この操作を実行する方法を示しています。

    CREATE DATABASE [Test_RO_FG_DB] ON PRIMARY ( NAME = N'Test_RO_FG', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG.mdf' ), FILEGROUP [RO_FG] ( NAME = N'Test_RO_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG_File1.ndf' ), FILEGROUP [RW_FG] ( NAME = N'Test_RW_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RW_FG_File1.ndf' )LOG ON ( NAME = N'Test_RO_FG_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG_log.ldf' )FOR ATTACH;GO

    注: "Symptoms" セクションに記載されている3425エラーメッセージが表示されます。

  4. コマンドプロンプトで、データベースファイルの名前を変更します。 次のサンプルコマンドは、この操作を実行する方法を示しています。

    rename Test_RO_FG.mdf original_Test_RO_FG.mdfrename Test_RO_FG_File1.ndf original_Test_RO_FG_File1.ndfrename Test_RW_FG_File1.ndf original_Test_RW_FG_File1.ndfrename Test_RO_FG_log.ldf original_Test_RO_FG_log.ldf 
  5. SQL Server Management Studio で、添付するデータベースと同じ名前と物理構造のデータベースを作成します。 次のサンプルコードは、この操作を実行する方法を示しています。

    CREATE DATABASE [Test_RO_FG_DB] ON PRIMARY ( NAME = N'Test_RO_FG_DB', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG_DB.mdf' , SIZE = 4072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ), FILEGROUP [RO_FG] ( NAME = N'Test_RO_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG_File1.ndf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ), FILEGROUP [RW_FG] ( NAME = N'Test_RW_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RW_FG_File1.ndf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )LOG ON ( NAME = N'Test_RO_FG_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)GO
  6. データベースをオフラインに設定します。 これを行うには、次のコマンドを実行します。

    ALTER DATABASE [Test_RO_FG_DB] SET OFFLINEGO 
  7. コマンドプロンプトで、新しいデータベース内のファイルの名前を変更します。 次のサンプルコマンドは、この操作を実行する方法を示しています。

    rename Test_RO_FG.mdf new_Test_RO_FG.mdfrename Test_RO_FG_File1.ndf new_Test_RO_FG_File1.ndfrename Test_RW_FG_File1.ndf new_Test_RW_FG_File1.ndfrename Test_RO_FG_log.ldf new_Test_RO_FG_log.ldf 
  8. コマンドプロンプトで、手順2で移動したデータベース内のファイルの名前を変更します。 手順4で作成したデータベースに合わせて、ファイルの名前を変更します。 次のサンプルコマンドは、この操作を実行する方法を示しています。

    rename original_Test_RO_FG.mdf Test_RO_FG.mdf rename original_Test_RO_FG_File1.ndf Test_RO_FG_File1.ndf rename original_Test_RW_FG_File1.ndf Test_RW_FG_File1.ndf rename original_Test_RO_FG_log.ldf Test_RO_FG_log.ldf 
  9. データベースをオンラインに設定します。 これを行うには、次のコマンドを実行します。

    ALTER DATABASE [Test_RO_FG_DB] SET ONLINEGO 
  10. データベースがオンラインであることを確認し、Service Broker 機能を再確立します。

  11. 不要なデータベースファイルを削除します。 次のサンプルコマンドは、この操作を実行する方法を示しています。

    del /P new_Test_RO_FG.mdfdel /P new_Test_RO_FG_File1.ndfdel /P new_Test_RW_FG_File1.ndfdel /P new_Test_RO_FG_log.ldf 

方法 4読み取り専用のファイルグループを含むデータベースを、以前の SQL Server のインスタンスに再接続します。 これを行うには、次の手順を実行します。注意事項

  • データベースには、失敗したアップグレードの新しいトランザクションログエントリも含まれています。

  • 以前のバージョンの SQL Server を実行しているサーバーで、手順 3 ~ 10 を実行します。 たとえば、INST1 で手順 3 ~ 10 を実行します。

  1. INST1 をホストしている SQL Server のインスタンスにデータベースファイルを移動します。

  2. INST1 にデータベースをアタッチします。 次のサンプルコードは、この操作を実行する方法を示しています。

    CREATE DATABASE [Test_RO_FG_DB] ON PRIMARY ( NAME = N'Test_RO_FG_DB', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_DB.mdf' ), FILEGROUP [RO_FG] ( NAME = N'Test_RO_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_File1.ndf' ), FILEGROUP [RW_FG] ( NAME = N'Test_RW_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RW_FG_File1.ndf' )LOG ON ( NAME = N'Test_RO_FG_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_log.ldf' )FOR ATTACHGO

    注: "Symptoms" セクションに記載されている3624エラーメッセージが表示されます。 また、1813のエラーメッセージも表示されます。

  3. コマンドプロンプトで、INST1 のデータベースファイルの名前を変更します。 次のサンプルコマンドは、この操作を実行する方法を示しています。

    rename Test_RO_FG.mdf original_Test_RO_FG.mdfrename Test_RO_FG_File1.ndf original_Test_RO_FG_File1.ndfrename Test_RW_FG_File1.ndf original_Test_RW_FG_File1.ndfrename Test_RO_FG_log.ldf original_Test_RO_FG_log.ldf 
  4. SQL Server Management Studio で、添付するデータベースと同じ名前と物理構造のデータベースを作成します。 次のサンプルコードは、この操作を実行する方法を示しています。

    CREATE DATABASE [Test_RO_FG_DB] ON PRIMARY ( NAME = N'Test_RO_FG_DB', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_DB.mdf' , SIZE = 4072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ), FILEGROUP [RO_FG] ( NAME = N'Test_RO_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_File1.ndf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ), FILEGROUP [RW_FG] ( NAME = N'Test_RW_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RW_FG_File1.ndf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )LOG ON ( NAME = N'Test_RO_FG_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)GO
  5. データベースをオフラインに設定します。 これを行うには、次のコマンドを実行します。

    ALTER DATABASE [Test_RO_FG_DB] SET OFFLINEGO 
  6. コマンドプロンプトで、新しいデータベース内のファイルの名前を変更します。 次のサンプルコマンドは、この操作を実行する方法を示しています。

    rename Test_RO_FG.mdf new_Test_RO_FG.mdfrename Test_RO_FG_File1.ndf new_Test_RO_FG_File1.ndfrename Test_RW_FG_File1.ndf new_Test_RW_FG_File1.ndfrename Test_RO_FG_log.ldf new_Test_RO_FG_log.ldf 
  7. コマンドプロンプトで、手順2で移動したデータベース内のファイルの名前を変更します。 手順4で作成したデータベースに合わせて、ファイルの名前を変更します。 次のサンプルコマンドは、この操作を実行する方法を示しています。

    rename original_Test_RO_FG.mdf Test_RO_FG.mdf rename original_Test_RO_FG_File1.ndf Test_RO_FG_File1.ndf rename original_Test_RW_FG_File1.ndf Test_RW_FG_File1.ndf rename original_Test_RO_FG_log.ldf Test_RO_FG_log.ldf 
  8. データベースを緊急モードに設定し、修復を実行します。 このためには、次のコマンドを実行します。注: この手順を実行すると、データベースのトランザクションログが再構築されます。 これにより、データが失われる可能性があります。 そのため、この手順を実行する前に、データベースのバックアップを作成することをお勧めします。

    ALTER DATABASE Test_RO_FG_DB SET EMERGENCYGOALTER DATABASE Test_RO_FG_DB SET SINGLE_USERGODBCC CHECKDB (Test_RO_FG_DB, repair_allow_data_loss) WITH ALL_ERRORMSGSGOALTER DATABASE Test_RO_FG_DB SET MULTI_USERGO 
  9. データベースがオンラインであることを確認し、Service Broker 機能を再確立します。

  10. 不要なデータベースファイルを削除します。 次のサンプルコマンドは、この操作を実行する方法を示しています。

    del /P new_Test_RO_FG.mdfdel /P new_Test_RO_FG_File1.ndfdel /P new_Test_RW_FG_File1.ndfdel /P new_Test_RO_FG_log.ldf 

詳細情報

SQL Server のインスタンスにデータベースをアタッチすると、いくつかの手順が実行されます。 次の手順では、データベースの回復と、以前のバージョンの SQL Server からのファイルのアップグレードについて説明します。 「Symptoms」セクションで説明されている問題では、SQL Server 2012 はデータベース内の読み取り専用ファイルが検出される前にアップグレードプロセスを開始します。 アップグレードの手順では、データベースのブートページにある "クリーンなシャットダウン" ビットをクリアするトランザクションの開始が含まれます。 以前のバージョンの SQL Server では、begin transaction レコードを読み取ることができません。 そのため、データベースは以前のバージョンの SQL Server では使用できず、SQL Server では3624エラーが生成されます。データベースが読み取り専用とマークされている場合のインプレースアップグレードSql server 2012 への Test_RO_DB という名前の読み取り専用データベースを含む SQL Server インスタンスのインプレースアップグレードを実行すると、SQL Server エラーログに次のようなエラーメッセージが表示されることがあります。

アップグレードプロセスが終了すると、Test_RO_DB データベースは RECOVERY_PENDING の状態になります。 ALTER databaseコマンドを使用して、データベースを READ_WRITE に設定する必要があります。 次に、 ALTER database コマンドを使用して、データベースを READ_ONLY に設定します。 これにより、SQL Server エンジンはデータベースを適切なバージョンにアップグレードすることができます。読み取り専用としてマークされているファイルグループが読み取り/書き込みデータベースに含まれている場合のインプレースアップグレードSQL Server 2012 にインプレースアップグレードを実行すると、SQL Server エラーログに次のようなメッセージが表示されることがあります。 この問題は、SQL Server の以前のインスタンスが読み取り/書き込みデータベースをホストしており、READ_ONLY とマークされているファイルグループが含まれている場合に発生します。 ただし、アップグレードプロセスは予期したとおりに終了し、データベースはオンラインで起動します。注: 次のエラーメッセージでは、データベースに Test_RO_FG という名前が付けられています。

ヘルプを表示

その他のオプションが必要ですか?

サブスクリプションの特典の参照、トレーニング コースの閲覧、デバイスのセキュリティ保護方法などについて説明します。

コミュニティは、質問をしたり質問の答えを得たり、フィードバックを提供したり、豊富な知識を持つ専門家の意見を聞いたりするのに役立ちます。

この情報は役に立ちましたか?

言語の品質にどの程度満足していますか?
どのような要因がお客様の操作性に影響しましたか?
[送信] を押すと、Microsoft の製品とサービスの改善にフィードバックが使用されます。 IT 管理者はこのデータを収集できます。 プライバシーに関する声明。

フィードバックをいただき、ありがとうございます。

×