1

SQL Express 2005 データベースを使用する単純なアプリがあります。ユーザーがアプリを閉じたときに、別のディレクトリにコピーを作成してデータベースをバックアップするオプションを提供したいと考えています。しかし、実行しようとすると、「別のプロセスで使用されているため、プロセスはファイル '...\Pricing.MDF' にアクセスできません。」というメッセージが表示されます。接続を閉じ、接続を破棄し、何も設定せず、GC.Collect() を実行しましたが、違いはありません。私の接続文字列は "Data Source=.\SQLEXPRESS2005;AttachDbFilename=|DataDirectory|\Pricing.mdf;Integrated Security=True; User Instance=True" で、ずっと同じ接続を使い続けています。接続文字列のアタッチに対抗するためにデータベースをデタッチできる場所がわかりませんでした。

1 - どのようにリリースしますか? 2 - データベースをコピーするよりも良い方法はありますか? アプリは夫専用なので、バックアップからの復元が必要になった場合でも対応できます。

ありがとう!

4

3 に答える 3

4

SQL はほとんどの変更をトランザクション ログに保持するため、mdf を直接コピーする必要はありません。いくつかのクエリを実行した後、変更された時刻を確認してください。ファイルに直接書き込まれるわけではありません。rsync ジョブをセットアップしているときに、これに気付きました。

シングルユーザーでもマルチユーザーでも、SQL でバックアップを生成する方がはるかに安全で望ましい方法です。ソースdbと宛先フォルダーまで完全に自動化できるT-SQLを呼び出す関数へのリンクを提供できます。

BACKUP DATABASE [mydatabasename]
TO  DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\Scheduled Task Backups\mydatabasename-backup' WITH NOFORMAT, NOINIT,  NAME = N'mydatabasename-Full Data

SQL 2005 では、これを行うために別の T-SQL 構文が導入されていましたが、私の人生では見つけることができません。しかし、本格的なデータベース サーバーを使用せずに、M$$SQL を使用してそれを行う方法があります。

于 2008-11-26T03:38:44.120 に答える
0

この投稿には、プログラム内でSQLExpressデータベースをバックアップする方法を示す例があります。

于 2008-11-26T02:55:34.817 に答える
0

これが単一のユーザー、アプリケーション、または読み取り専用データベースである場合は、 SQL Server Express を使用しないでください。これが SQL Server Compact の目的です。これにより、バックアップの問題が解決され、展開も簡素化されます。

于 2008-11-26T03:19:04.613 に答える