データベースファイルを受け取り、それをロードする手順は、SQL Server 2005をインストールしてから、SQL Server Management Studioを使用して添付することです。
すべてをインストールした後、MDFファイルを添付しようとしましたが、次のように表示されます。
ファイル「D:{folderName} {filename} .LDF」のディレクトリ検索は、オペレーティングシステムエラー21(エラーが見つかりません)で失敗しました
LDFファイルはデータベースに付属していなかったため、おそらく自動的に生成されるはずです。
さて、Dドライブは私のCDドライブがある場所なので、そこには何も見つかりません。そこに何かを作ろうとする運もありません。
特定のパスでログファイルを検索しようとするのはなぜですか?データベースファイルがどこにあるのですか?
このデータベースを接続するにはどうすればよいですか?
アタッチするデータベースを選択すると、「データベースの詳細」の下に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で動作させることができるかどうか確認します。
これはアクセスの問題ではありません。問題は、.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
ステータスは、データベースのメタデータに保存されているため、アタッチしないとデータベースから削除できません。これを変更するには、データベースがオンラインで接続されている必要があります。
別の方法は、データベースのbackupを要求することです。接続の代わりにデータベースrestoreを実行している場合は、これらの問題のいくつかをより簡単に回避できます。
私はこの質問に答えた投稿を見つけました:
これはすべてのケースで機能するわけではありませんが、セマンティック検索データベースをインストールしようとして、同じエラーが発生しました。
SQL Server Management Studioを管理者として実行する必要があり、機能します。
.mdf
ファイルと.ldf
ファイルを1つずつ右クリックして[プロパティ]をクリックし、下部に「このファイルは別のコンピューターから送信されたため、このコンピューターを保護するためにブロックされている可能性があります」と表示されています。ブロック解除ボタンをクリックします。
次に、右クリックして、[プロパティ]、[セキュリティ]タブ、[編集]ボタンの順にクリックし、「ユーザー」を選択して、フルコントロールのアクセス許可を付与します。
私の場合、解決策は、sysadminの役割を持つsqlユーザーの代わりにwindows Auth modeでSSMSにログインすることでした。 Windows認証モードで使用したユーザーに適切な権限があることを確認してください(私のケースはsysadminでした)私の推測では、SQLユーザーに適切な権限がありません。機械)
私たちの場合の許可ではなく、それはSSMSのバージョンでした!
(エラーが発生したのはローカルで2012年でしたが、リモートボックスからSSMS 17+を使用したときに機能しました)