SQL Serverインスタンスのデータディレクトリを見つけるにはどうすればよいですか?
質問
私たちは、いくつかの 巨大な データベース (20GB 以上) があり、そのほとんどは静的なルックアップ データを含んでいます。 私たちのアプリケーションはこれらのデータベースのテーブルに対して結合を実行するため、それらは各開発者のローカル SQL サーバーの一部でなければなりません (つまり、中央の共有データベース サーバーでホストすることはできません)。
実際の SQL Server データベース ファイル (*.mdf と *.ldf) の正規セットをコピーして、各開発者のローカル データベースに添付することを計画しています。
ファイルを正しい場所にコピーできるように、ローカルの SQL Server インスタンスのデータ ディレクトリを見つける最良の方法は何でしょうか? これは自動化されたプロセスによって行われるので、ビルド スクリプトからそれを見つけて使用できるようにする必要があります。
どのように解決するのですか?
データファイルとログファイルにデフォルトパスが設定されているかどうかによります。
で明示的にパスが設定されている場合
Properties
=>
Database Settings
=>
Database default locations
に格納され、SQL サーバーはそれを
Software\Microsoft\MSSQLServer\MSSQLServer
に格納されます。
DefaultData
と
DefaultLog
の値として使用することができます。
しかし、これらのパラメータが明示的に設定されていない場合、SQLサーバーはマスターデータベースのデータおよびログのパスを使用します。
下記は、両方のケースをカバーするスクリプトです。これは、SQL Management Studio が実行するクエリの簡略化されたバージョンです。
また、私は
xp_instance_regread
の代わりに
xp_regread
というように、このスクリプトはデフォルトでも名前付きでも、どのインスタンスでも動作します。
declare @DefaultData nvarchar(512)
exec master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'DefaultData', @DefaultData output
declare @DefaultLog nvarchar(512)
exec master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'DefaultLog', @DefaultLog output
declare @DefaultBackup nvarchar(512)
exec master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'BackupDirectory', @DefaultBackup output
declare @MasterData nvarchar(512)
exec master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer\Parameters', N'SqlArg0', @MasterData output
select @MasterData=substring(@MasterData, 3, 255)
select @MasterData=substring(@MasterData, 1, len(@MasterData) - charindex('\', reverse(@MasterData)))
declare @MasterLog nvarchar(512)
exec master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer\Parameters', N'SqlArg2', @MasterLog output
select @MasterLog=substring(@MasterLog, 3, 255)
select @MasterLog=substring(@MasterLog, 1, len(@MasterLog) - charindex('\', reverse(@MasterLog)))
select
isnull(@DefaultData, @MasterData) DefaultData,
isnull(@DefaultLog, @MasterLog) DefaultLog,
isnull(@DefaultBackup, @MasterLog) DefaultBackup
SMOを使用しても同じ結果を得ることができます。以下はC#のサンプルですが、他の.NET言語やPowerShellでも可能です。
using (var connection = new SqlConnection("Data Source=.;Integrated Security=SSPI"))
{
var serverConnection = new ServerConnection(connection);
var server = new Server(serverConnection);
var defaultDataPath = string.IsNullOrEmpty(server.Settings.DefaultFile) ? server.MasterDBPath : server.Settings.DefaultFile;
var defaultLogPath = string.IsNullOrEmpty(server.Settings.DefaultLog) ? server.MasterDBLogPath : server.Settings.DefaultLog;
}
SQL Server 2012 以降では、デフォルトのパスが設定されていると仮定すると、とてもシンプルになります (これはおそらく、常に正しいことです)。
select
InstanceDefaultDataPath = serverproperty('InstanceDefaultDataPath'),
InstanceDefaultLogPath = serverproperty('InstanceDefaultLogPath')
関連
-
[解決済み] Oracleで上位100行を選択する方法は?
-
[解決済み] SQL ServerでSELECTからUPDATEする方法とは?
-
[解決済み] SQL Server で複数行のテキストを 1 つのテキスト文字列に連結する方法
-
[解決済み] SQL Server テーブルにカラムが存在するかどうかを確認する方法は?
-
[解決済み] SQL Server の DateTime データ型から日付だけを返す方法
-
[解決済み] SQL ServerでJOINを使用してUPDATE文を実行するにはどうすればよいですか?
-
[解決済み] SQL Server にテーブルが存在するかどうかを確認する
-
[解決済み] Count()で条件を指定することは可能ですか?
-
[解決済み】SQL Serverで既存のテーブルにデフォルト値を持つカラムを追加する
-
[解決済み] SQL ServerでINNER JOINを使用して削除するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[エラー処理] [MySQL] [Err] 1241 - オペランドは 1 つのカラムを含む必要があります。
-
MySQL - ストアドプロシージャ (データ型、関数)
-
[解決済み] SQL Server : 列を行に変換する
-
[解決済み] MongoDBに "like "を使ってクエリを実行する方法
-
[解決済み] ATTACHで開いたSQLiteデータベースファイルのテーブルを一覧表示するにはどうすればよいですか?
-
[解決済み] SQLのIN句をパラメータ化する
-
[解決済み] INNER JOINよりもCROSS APPLYを使用すべきなのはどのような場合ですか?
-
[解決済み] SQL JOIN - WHERE句とON句の比較
-
[解決済み] postgres: ユーザーをスーパーユーザーにアップグレードしますか?
-
[解決済み] DISTINCTでCOUNT(*)を選択する