データベースは読み取り専用であるか、読み取り専用ファイルがあるため、アップグレードできません。データベースまたはファイルを書き込み可能にして、リカバリを再実行します


8

データベースファイルを受け取りました。それをロードする手順は、SQL Server 2005をインストールしてから、SQL Server Management Studioを使用して添付することです。

すべてをインストールした後、MDFファイルを添付しようとしましたが、次のように表示されます。

ファイル「D:{folderName} {filename} .LDF」のディレクトリ検索は、オペレーティングシステムエラー21(エラーが見つかりません)で失敗しました

LDFファイルはデータベースに付属していなかったため、おそらく自動的に生成されるはずです。

さて、Dドライブは私のCDドライブがある場所なので、そこには何も見つかりません。そこに何かを作ろうとする運もありません。

  1. 特定のパスでログファイルを検索しようとするのはなぜですか?データベースファイルがどこにあるのですか?

  2. このデータベースを接続するにはどうすればよいですか?

アタッチするデータベースを選択すると、「データベースの詳細」の下に3つのエントリが表示されることに気付きました。MDF、NDF、およびLDF。LDFの「現在のファイルパス」は上記のDドライブパスを指しているため、削除しました。

今回、「OK」をクリックすると、別のエラーメッセージが表示されます。

データベースは読み取り専用であるか、読み取り専用ファイルがあるため、アップグレードできません。
データベースまたはファイルを書き込み可能にして、リカバリを再実行します。

ファイルのアクティブ化に失敗しました。物理名D:{folder} {file} .LDFが正しくない可能性があります。
新しいログファイル「...」が作成されました。(Microsoft SQL Server、エラー:3415)

そのため、データベースファイルと同じフォルダに新しいログファイルが作成されます。これはすばらしいことですが、セキュリティ上の問題があるようです。

追加情報:

  • この手順では、sysadminアカウントのように見えるログイン名「sa」を使用する必要があります。そのログインを使用してSQL Serverインスタンスに接続しています。

  • ファイルのプロパティが読み取り専用でないことを確認しました。ディレクトリも読み取り専用ではありません。すべてのACLが許可されます。

  • データベースをアタッチできません。アタッチしようとすると、「データベースのアタッチに失敗しました」というエラーメッセージがスローされます。

  • SSMSを閉じて、管理者として再び開くと、違いはありませんでした。

  • select SERVERPROPERTY('ProductVersion')9.00.4035.00を返します。「IsSql2000 = 1」と書かれている「dbdata.ini」と呼ばれるデータベースに付属する別のファイルがあるため、おそらくSQL Server 2000にロードすることを意図しています。2000で動作させることができるかどうか確認します。

回答:


8

これはアクセスの問題ではありません。問題は、.mdf最初に接続されていたインスタンスよりも上位のバージョンのSQL Serverにデータベースを接続していて、読み取り専用であるということです。SQL Serverはアタッチの一部としてデータベースをアップグレードしようとしていますが、データベースが読み取り専用モードになっているため、アップグレードできません。

データベースが含まれている場合READ_ONLY(エラーメッセージに基づいているように思われます)、Technetのドキュメントに従って、すべてのファイル(ログとデータの両方)を添付する必要があります。FOR ATTACH条項の下を見ると、次のことが明確に説明されています。

...読み取り専用データベースの場合、プライマリファイルを更新できないため、ログを再構築できません。したがって、ログが利用できない読み取り専用データベースをアタッチする場合は、ログファイルまたはFOR ATTACH句にファイルを指定する必要があります。

.ldfデータベースの付属品が必要です。データベースを提供した人に連絡し、.mdf.ldfファイルの両方を提供するよう依頼します。次に、次の構文で添付できます。

CREATE DATABASE [foo]
ON (FILENAME='<<path to mdf>>')
LOG ON (FILENAME='<<path to ldf>>')
FOR ATTACH;

READ_ONLYステータスは、データベースのメタデータに格納されているため、それを装着せずにデータベースから除去することができません。これを変更するには、データベースがオンラインで接続されている必要があります。

別の方法は、データベースのバックアップを要求することです。接続ではなくデータベースの復元を行っている場合は、これらの問題のいくつかをより簡単に回避できます。


1
LOG ONマッチングで使用してldfも問題は解決しませんでした
Mugen

25

私はこの質問に答えた投稿を見つけました:

これはすべてのケースで機能するわけではありませんが、セマンティック検索データベースをインストールしようとして同じエラーが発生しました。

SQL Server Management Studioを管理者として実行する必要があり、機能します。


9
  1. 私のコンピューターを開きます。
  2. 「.mdf」および「.ldf」ファイルを保存したメインフォルダーを見つけます。
  3. フォルダを右クリックし、[プロパティ]をクリックします。
  4. プロパティウィンドウで[セキュリティ]をクリックします
  5. 「編集」ボタンをクリックします
  6. リストされたユーザーに対して「読み取りと実行」、「読み取り」、「書き込み」を有効にし、データベースファイルまで以下のフォルダーに変更を適用します。
  7. 「.mdf」ファイルを添付してみてください

おかげで、私の古いウィンドウが消えて、私はこれらのファイルがそのOSによってロックされていると思います。しかし、許可を変更する必要があるだけ
saber tabatabaee yazdi 2018

1

.mdfand .ldfファイルを1つずつ右クリックし、[プロパティ]をクリックします。次に、「このファイルは別のコンピューターからのものであり、このコンピューターを保護するためにブロックされている可能性があります」というブロックの解除ボタンをクリックします。

次に、右クリックして、[プロパティ]、[セキュリティ]タブ、[編集]ボタンの順にクリックし、「ユーザー」を選択して、フルコントロールのアクセス許可を付与します。


1

私の場合、解決策は、sysadminロールを持つsqlユーザーではなく、Windows Authモードで SSMSにログインすることでした。Windows認証モードで使用したユーザーに適切な権限があることを確認してください(私のケースはsysadminでした)私の推測では、SQLユーザーに適切な権限がありません。機械)


0

私たちの場合は権限ではなく、SSMSのバージョンでした!

(エラーが発生したのはローカルで2012年でしたが、リモートボックスからSSMS 17+を使用したときに機能しました)


-1

この問題も出てきました。私はSQLサービスを再起動することで顧客を支援し、通常の手順に従ってMDFをアタッチすることができました。


-2

1)SQL Server構成マネージャーを開きます

2)SQL Serverサービスを選択します(左ペイン)

3)SqlServer(右ペイン)をダブルクリックします

4)[ログオン]タブを選択します

5)組み込みのラジオボタンを選択し、コンボボックスでローカルシステムまたはネットワークサービスを変更します。

6)[OK]をクリックします。

7)SQLサーバーマネージャーでmdfファイルを添付します。


-2

SQL Serverサービスは、おそらくNT Service \ MSSQLServerアカウントで実行されています。ローカルシステムを変更すると、アクセスが許可されます。

おそらく、ユーザーを作成し、そのユーザーにファイルがあるフォルダーへの完全なアクセス許可を与えるのが最善です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.