복붙노트

[SQL] 어떻게 SQL Server 인스턴스에 대한 데이터 디렉터리를 찾을 수 있습니까?

SQL

어떻게 SQL Server 인스턴스에 대한 데이터 디렉터리를 찾을 수 있습니까?

우리는 주로 정적 조회 데이터를 포함하는 몇 거대한 데이터베이스 (20기가바이트 +)가 있습니다. 우리의 응용 프로그램이 실행이 데이터베이스의 테이블에 대해 조인 있기 때문에 로컬 SQL Server가 (즉, 그들은 중앙, 공유 데이터베이스 서버에서 호스팅 할 수 없음) 각 개발자의 일부가 될 수 있습니다.

우리는 실제 SQL Server 데이터베이스 파일의 표준 세트 (* .mdf 및 * .LDF)를 복사 계획 및 각 개발자의 로컬 데이터베이스에 연결합니다.

우리가 올바른 위치에 파일을 복사 할 수 있도록 로컬 SQL Server 인스턴스의 데이터 디렉토리를 찾을 수있는 가장 좋은 방법은 무엇입니까? 내가 찾을 수 있어야하고, 빌드 스크립트에서 사용할 수 있도록 이것은, 자동화 된 프로세스를 통해 수행됩니다.

해결법

  1. ==============================

    1.그것은 기본 경로는 데이터와 로그 파일 여부에 대해 설정되어 있는지 여부에 따라 달라집니다.

    그것은 기본 경로는 데이터와 로그 파일 여부에 대해 설정되어 있는지 여부에 따라 달라집니다.

    경로가 속성에 명시 적으로 설정되어있는 경우 => DefaultData 및 DefaultLog 값에 소프트웨어 \ 마이크로 소프트 \에서 MSSQLServer \에서 MSSQLServer에서 다음 => 데이터베이스 기본 위치 데이터베이스 설정 SQL 서버 저장합니다.

    이러한 매개 변수를 명시 적으로 설정하지 않은 경우, SQL 서버는 마스터 데이터베이스의 데이터 및 로그 경로를 사용합니다.

    벨로는 두 경우 모두를 커버하는 스크립트입니다. 이것은 SQL 관리 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 서버 2012에서 훨씬 간단하다 :

    select 
        InstanceDefaultDataPath = serverproperty('InstanceDefaultDataPath'),
        InstanceDefaultLogPath = serverproperty('InstanceDefaultLogPath')
    
  2. ==============================

    2.이것은 아주 오래된 스레드 비록 내가 간단한 해결책을 기여해야 같은 느낌. 당신이 Management Studio에서 매개 변수가 자동화 된 스크립트의 모든 종류에 대한 액세스를 원하는 위치를 알고 때마다, 가장 쉬운 방법은 관리 Studio 백엔드에서 수행되고 있는지 독립 테스트 시스템 및 캡처에 빠른 프로파일 러 추적을 실행하는 것입니다 .

    이것은 아주 오래된 스레드 비록 내가 간단한 해결책을 기여해야 같은 느낌. 당신이 Management Studio에서 매개 변수가 자동화 된 스크립트의 모든 종류에 대한 액세스를 원하는 위치를 알고 때마다, 가장 쉬운 방법은 관리 Studio 백엔드에서 수행되고 있는지 독립 테스트 시스템 및 캡처에 빠른 프로파일 러 추적을 실행하는 것입니다 .

    이 경우, 기본 데이터를 찾는 데 관심이 있고 다음과 같은 작업을 수행 할 수 있습니다 위치 로그 가정 :

    고르다 SERVERPROPERTY ( 'instancedefaultdatapath') AS [DefaultFile] SERVERPROPERTY ( 'instancedefaultlogpath') AS [DefaultLog]

  3. ==============================

    3.나는 SQL Server에 대한 도움말의 데이터베이스 작성 문에 대한 문서에서이 솔루션을 통해 발견 :

    나는 SQL Server에 대한 도움말의 데이터베이스 작성 문에 대한 문서에서이 솔루션을 통해 발견 :

    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
    
  4. ==============================

    4.현재 데이터베이스에 대해 당신은 사용할 수 있습니다 :

    현재 데이터베이스에 대해 당신은 사용할 수 있습니다 :

    physical_name의 fromsys.database_files을 선택;

    예를 들어, 다른 데이터베이스를 지정합니다 '모델', 사용 sys.master_files

    sys.master_files에서 physical_name을 선택 여기서 database_id를 DB_ID = (N'Model ');

  5. ==============================

    5.는 SQL 서버 2012, 당신은 다음 쿼리를 사용할 수 있습니다 :

    는 SQL 서버 2012, 당신은 다음 쿼리를 사용할 수 있습니다 :

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

    (이것은 http://technet.microsoft.com/en-us/library/ms174396.aspx에서 코멘트에서 촬영 및 테스트되었습니다.)

  6. ==============================

    6.SQL 서버 (데이터, 로그, SSAS, SSIS 등)의 다양한 구성 요소는 기본 디렉토리가 있습니다. 이에 대한 설정은 레지스트리에서 찾을 수 있습니다. 자세한 내용은 여기 읽기 :

    SQL 서버 (데이터, 로그, SSAS, SSIS 등)의 다양한 구성 요소는 기본 디렉토리가 있습니다. 이에 대한 설정은 레지스트리에서 찾을 수 있습니다. 자세한 내용은 여기 읽기 :

    http://technet.microsoft.com/en-us/library/ms143547%28SQL.90%29.aspx

    당신이 MyDatabaseName 단지 DATABASE를 CREATE 사용하여 데이터베이스를 생성 그래서 경우는 위의 설정 중 하나에 지정된 경로에 생성 될 것이다.

    관리자 / 설치 기본 경로를 변경 한 경우 이제 다음 인스턴스에 대한 기본 경로에 레지스트리에 저장됩니다

    HKEY_LOCAL_MACHINE \ SOFTWARE \ 마이크로 소프트 \ Microsoft SQL Server를 \ [INSTANCENAME] \ 설정

    인스턴스의 이름을 알고 있다면 당신은 레지스트리를 조회 할 수 있습니다. 이 예는 SQL 2008의 특정 - 당신이 SQL2005 경로를해야 할뿐만 아니라 경우 알려 주시기.

    DECLARE @regvalue varchar(100)
    
    EXEC master.dbo.xp_regread @rootkey='HKEY_LOCAL_MACHINE',
            @key='SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10.MSSQLServer\Setup',
            @value_name='SQLDataRoot',
            @value=@regvalue OUTPUT,
            @output = 'no_output'
    
    SELECT @regvalue as DataAndLogFilePath
    

    당신은 적절한 매개 변수 dbname 데이터베이스의 CREATE 문을 실행할 때 각 데이터베이스는에서의 자신의 위치를 ​​서버 설정을 무시 만들 수 있습니다. 당신은 같이 sp_helpdb를 실행하여 그것을 찾을 수 있습니다

    exec sp_helpdb 'DBName'
    
  7. ==============================

    7.간단하게 유지 :

    간단하게 유지 :

    use master
    select DB.name, F.physical_name from sys.databases DB join sys.master_files F on DB.database_id=F.database_id
    

    이 관련 파일을 모든 데이터베이스를 반환합니다

  8. ==============================

    8.GUI에서 : 서버 속성을 열고 데이터베이스 설정으로 이동하고, 데이터베이스의 기본 위치를 참조하십시오.

    GUI에서 : 서버 속성을 열고 데이터베이스 설정으로 이동하고, 데이터베이스의 기본 위치를 참조하십시오.

    당신이 좋아하는 곳은 기본 디렉토리에 유지하기 위해 청소기를 보이지만 당신이 당신의 데이터베이스 파일을 삭제할 수 있습니다.

  9. ==============================

    9.다음 T-SQL을 사용하여 현재 SQL Server 인스턴스에 대한 기본 데이터 및 로그 위치를 찾을 수 있습니다 :

    다음 T-SQL을 사용하여 현재 SQL Server 인스턴스에 대한 기본 데이터 및 로그 위치를 찾을 수 있습니다 :

    DECLARE @defaultDataLocation nvarchar(4000)
    DECLARE @defaultLogLocation nvarchar(4000)
    
    EXEC master.dbo.xp_instance_regread
        N'HKEY_LOCAL_MACHINE',
        N'Software\Microsoft\MSSQLServer\MSSQLServer',
        N'DefaultData', 
        @defaultDataLocation OUTPUT
    
    EXEC master.dbo.xp_instance_regread
        N'HKEY_LOCAL_MACHINE',
        N'Software\Microsoft\MSSQLServer\MSSQLServer',
        N'DefaultLog', 
        @defaultLogLocation OUTPUT
    
    SELECT @defaultDataLocation AS 'Default Data Location',
           @defaultLogLocation AS 'Default Log Location'
    
  10. ==============================

    10.작은 nitpick : 데이터 폴더 만 기본 데이터 폴더가 없습니다.

    작은 nitpick : 데이터 폴더 만 기본 데이터 폴더가 없습니다.

    어쨌든, 첫 번째 기본 인스턴스 설치하려는 가정을 찾을 수 있습니다 :

    HKEY_LOCAL_MACHINE \ SOFTWARE \ 마이크로 소프트 \ Microsoft SQL Server를 \ MSSQL.1 \ 설정 \의 SQLDataRoot

    명명 된 인스턴스가 있다면, MSSQL.1는 MSSQL10.INSTANCENAME과 같이된다.

  11. ==============================

    11."산 산 조각 비트"에 확장 대답은 여기 않는 완전한 스크립트입니다 :

    "산 산 조각 비트"에 확장 대답은 여기 않는 완전한 스크립트입니다 :

    @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
    
  12. ==============================

    12.나는 백업이 단순히 쉽고 지원 버전 becuase 복원 할 것입니다. 참조 데이터는 특히이 효과를 복용하기 시작했을 때 알기 위해 버전이 될 필요가있다. dettach은 첨부 못해주고 당신에게 그 능력을. 또한 백업으로 데이터베이스를 종료하지 않고도 업데이트 된 사본을 지속적으로 제공 할 수 있습니다.

    나는 백업이 단순히 쉽고 지원 버전 becuase 복원 할 것입니다. 참조 데이터는 특히이 효과를 복용하기 시작했을 때 알기 위해 버전이 될 필요가있다. dettach은 첨부 못해주고 당신에게 그 능력을. 또한 백업으로 데이터베이스를 종료하지 않고도 업데이트 된 사본을 지속적으로 제공 할 수 있습니다.

  13. ==============================

    13.알렉스의 대답은 바로 하나이지만, 후손 여기 또 다른 옵션들 : 비어있는 새 데이터베이스를 만듭니다. 당신은 당신이 얻을 대상 디렉토리를 지정하지 않고 데이터베이스를 CREATE 사용하는 경우 ... 기본 데이터 / 디렉토리를 기록합니다. 쉬운.

    알렉스의 대답은 바로 하나이지만, 후손 여기 또 다른 옵션들 : 비어있는 새 데이터베이스를 만듭니다. 당신은 당신이 얻을 대상 디렉토리를 지정하지 않고 데이터베이스를 CREATE 사용하는 경우 ... 기본 데이터 / 디렉토리를 기록합니다. 쉬운.

    개인적으로하지만 나도 아마 거라고 :

    PS : 20기가바이트도 2015 년, 거대한 아니지만 모든 상대입니다.

  14. ==============================

    14.

    SELECT DISTINCT dbo.GetDirectoryPath(filename) AS InstanceDataPaths
    FROM sys.sysaltfiles WHERE filename like '%.mdf' and filename not like '%\MSSQL\Binn\%'
    
    SELECT DISTINCT dbo.GetDirectoryPath(filename) AS InstanceLogPaths
    FROM sys.sysaltfiles WHERE filename like '%.ldf' and filename not like '%\MSSQL\Binn\%'
    

    당신은 SQL Server 인스턴스에 대한 데이터 디렉토리를 찾는 방법에서 상세 SQL 스크립트를 다운로드 할 수 있습니다

  15. ==============================

    15.당신은 사용자 데이터베이스의 경우이 쿼리에서 기본 위치를 얻을 것이다 :

    당신은 사용자 데이터베이스의 경우이 쿼리에서 기본 위치를 얻을 것이다 :

    declare @DataFileName nVarchar(500)
    
    declare @LogFileName   nVarchar(500)
    
    
    set @DataFileName = (select top 1 RTRIM(LTRIM(name)) FROM master.sys.master_files where database_id >4 AND file_id = 1)+'.mdf'
    set @LogFileName =   (select top 1 RTRIM(LTRIM(name)) FROM master.sys.master_files where database_id >4 AND file_id = 2)+'.ldf'
    
    select  
    ( SELECT top 1 SUBSTRING(physical_name, 1, CHARINDEX(@DataFileName, LOWER(physical_name)) - 1) 
    FROM master.sys.master_files
    WHERE database_id >4 AND file_id = 1) as 'Data File'
    ,
    
    (SELECT top 1 SUBSTRING(physical_name, 1, CHARINDEX(@LogFileName, LOWER(physical_name)) - 1)
    FROM master.sys.master_files
    WHERE database_id >4 AND file_id = 2)  as 'Log File'
    
  16. from https://stackoverflow.com/questions/1883071/how-do-i-find-the-data-directory-for-a-sql-server-instance by cc-by-sa and MIT license