sql >> データベース >  >> RDS >> Sqlserver

SQL Serverインスタンスのデータディレクトリを見つけるにはどうすればよいですか?

    データとログファイルにデフォルトのパスが設定されているかどうかによって異なります。

    パスがPropertiesで明示的に設定されている場合 =>Database Settings =>Database default locations 次に、SQLサーバーはそれをSoftware\Microsoft\MSSQLServer\MSSQLServerに保存します DefaultDataで およびDefaultLog 値。

    ただし、これらのパラメーターが明示的に設定されていない場合、SQLサーバーはマスターデータベースのデータパスとログパスを使用します。

    以下は、両方のケースをカバーするスクリプトです。これは、SQLManagementStudioが実行するクエリの簡略化されたバージョンです。

    また、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')
    


    1. SpringBootテスト用のEmbeddedPostgres

    2. SQLステートメントはwhereパラメーターを無視しています

    3. SQLServerでの自動プラン修正

    4. データベース内の任意の場所で値を検索する