How do I find the data directory for a SQL Server instance?

后端 未结 15 2463
挽巷
挽巷 2020-11-30 23:16

We have a few huge databases (20GB+) which mostly contain static lookup data. Because our application executes joins against tables in these databases, they have t

相关标签:
15条回答
  • 2020-11-30 23:50

    For the current database you can just use:

    select physical_name fromsys.database_files;

    to specify another database e.g. 'Model', use sys.master_files

    select physical_name from sys.master_files where database_id = DB_ID(N'Model');

    0 讨论(0)
  • 2020-11-30 23:51

    i would have done a backup restore simply becuase its easier and support versioning. Reference data especially needs to be versioned in order to know when it started taking effect. A dettach attach wont give you that ability. Also with backups you can continue to provide updated copies without having to shut down the database.

    0 讨论(0)
  • 2020-11-30 23:52

    Even though this is a very old thread, I feel like I need to contribute a simple solution. Any time that you know where in Management Studio a parameter is located that you want to access for any sort of automated script, the easiest way is to run a quick profiler trace on a standalone test system and capture what Management Studio is doing on the backend.

    In this instance, assuming you are interested in finding the default data and log locations you can do the following:

    SELECT
         SERVERPROPERTY('instancedefaultdatapath') AS [DefaultFile],
         SERVERPROPERTY('instancedefaultlogpath') AS [DefaultLog]

    0 讨论(0)
  • 2020-11-30 23:54

    From the GUI: open your server properties, go to Database Settings, and see Database default locations.

    Note that you can drop your database files wherever you like, though it seems cleaner to keep them in the default directory.

    0 讨论(0)
  • 2020-11-30 23:56

    Expanding on "splattered bits" answer, here is a complete script that does it:

    @ECHO off
    SETLOCAL ENABLEDELAYEDEXPANSION
    
    SET _baseDirQuery=SELECT SUBSTRING(physical_name, 1, CHARINDEX(N'master.mdf', LOWER(physical_name)) - 1) ^
     FROM master.sys.master_files WHERE database_id = 1 AND file_id = 1;
    ECHO.
    SQLCMD.EXE -b -E -S localhost -d master -Q "%_baseDirQuery%" -W >data_dir.tmp
    IF ERRORLEVEL 1 ECHO Error with automatically determining SQL data directory by querying your server&ECHO using Windows authentication.
    CALL :getBaseDir data_dir.tmp _baseDir
    
    IF "%_baseDir:~-1%"=="\" SET "_baseDir=%_baseDir:~0,-1%"
    DEL /Q data_dir.tmp
    echo DataDir: %_baseDir%
    
    GOTO :END
    ::---------------------------------------------
    :: Functions 
    ::---------------------------------------------
    
    :simplePrompt 1-question 2-Return-var 3-default-Val
    SET input=%~3
    IF "%~3" NEQ "" (
      :askAgain
      SET /p "input=%~1 [%~3]:"
      IF "!input!" EQU "" (
        GOTO :askAgain
      ) 
    ) else (
      SET /p "input=%~1 [null]: "
    )   
    SET "%~2=%input%"
    EXIT /B 0
    
    :getBaseDir fileName var
    FOR /F "tokens=*" %%i IN (%~1) DO (
      SET "_line=%%i"
      IF "!_line:~0,2!" == "c:" (
        SET "_baseDir=!_line!"
        EXIT /B 0
      )
    )
    EXIT /B 1
    
    :END
    PAUSE
    
    0 讨论(0)
  • 2020-11-30 23:58

    As of Sql Server 2012, you can use the following query:

    SELECT SERVERPROPERTY('INSTANCEDEFAULTDATAPATH') as [Default_data_path], SERVERPROPERTY('INSTANCEDEFAULTLOGPATH') as [Default_log_path];
    

    (This was taken from a comment at http://technet.microsoft.com/en-us/library/ms174396.aspx, and tested.)

    0 讨论(0)
提交回复
热议问题