web-dev-qa-db-ja.com

同じ.mdfファイルと.ldfファイルでセットアップされた2つのSQL Serverデータベース

SQL Server 2008 R2インスタンスでは、2つのデータベース(2番目のデータベースは最初のデータベースの復元/コピー)が同じ.mdfファイルと.ldfファイルに対してセットアップされています。

最初の(本番!)データベースに影響を与えずに、2番目のファイルを削除するか、2番目のファイルをコピーまたは移動する方法を教えてください。

更新:実際、そのうちの1つはスタンバイ/読み取り専用です。

enter image description here

1
Eirik H

SQL Serverのデータベースには、 Auto-Close と呼ばれる設定があります。これは、SQL Serverの実行中に使用されるリソースの量を最小限に抑えることを目的としていますが、ユーザーは積極的に作業を行っていません。

これらの設定は通常、パフォーマンスが重要ではなく、他のアプリケーションにリソースが必要な開発者のワークステーションで実行されるため、Express Editionインスタンスでは、この設定はデフォルトで有効になっています。

この機能によってリソースが解放されると、ディスク上のデータベースファイル(* .mdf、*。ldfなど)に関連付けられたファイルハンドルが閉じられます。 これは、SQL Serverの同じインスタンスまたは別のインスタンスを含め、他のアプリケーションがそれらを開く可能性があることを意味します。

このシナリオをテストしたところ、SQL Serverには(少なくともこの特定のバージョンでは)読み取り可能である限り、データベースをディスク上の同じファイルセットに接続できないという制約がないことがわかりました。これは良い/安全なことではありませんが、データベースの1つが開かれると、SQL Serverによってファイルが排他的にロックされるため、一度に書き込みできるデータベースは1つだけであることを知っておくと安心です。他のデータベースにはアクセスできません。

状況を元に戻すには:

  1. データベースを切り離す 必要ありません。これにより、インスタンスからデータベースが削除されますが、ファイルはディスク上に残ります(DROP DATABASEはディスク上のファイルを削除します)。保持したいデータベースがアクセス可能であることを認識するために、インスタンスを再起動する必要がある場合があります。

  2. メインデータベースの自動クローズを無効にして、これが再発しないようにします。新しいデータベースがこの設定を継承しないように、モデルシステムデータベース(該当する場合)でそれを無効にすることもできます。本番システムでは、everyデータベースで自動クローズが無効になっていることを確認することをお勧めします。私はポリシーベースの管理を使用して定期的にチェックを行うのが好きですが、それを実行する方法はたくさんあります。

2
Jon Seigel