2009-11-30 3 views
12

적어도 MSSQL 2005까지는 시스템 데이터베이스가 master, model, msdb 및 tempdb라는 것을 알고 있습니다.SQL Server : 데이터베이스가 시스템 데이터베이스인지 확인하는 방법?

내가 알 수있는 한, 이것은 미래에 보존 될 것이라는 보장은 없습니다. 또한 sys.databases 뷰나 sys.sysdatabases 뷰는 데이터베이스가 시스템 데이터베이스로 간주되는지 알려주지 않습니다.

이 정보 (데이터베이스가 시스템 데이터베이스로 간주되는지 여부)를 얻을 수있는 곳이 있습니까?

답변

16

그냥 그들은 단순히이 사용하여 다음과 같은 성명을 (! 마이크로 소프트 자체에서 제공하는) Microsoft.SqlServer.Management.Smo.Database 객체로 뛰어, msdb 또는 tempdb이면 시스템 데이터베이스입니다. sys.databases보기의 is_distributor = 1 필드 인 경우 시스템 데이터베이스입니다.

희망이

지미

+0

지미는 다른 사람들이 놓친 것을 잡았습니다. 복제 기능이 활성화되면 SQL Server는 '배포'라는 추가 시스템 데이터베이스를 추가합니다. –

-5

아니요 AFAIK 옵션이 없습니다. 당신이 ID를 sys.databases.owner_sid = 0x01 확인할 수있을 것 같아요.

MS가 시스템 db 이름을 변경하는 것에 대해 걱정할 필요가 없다고 생각합니다. 그들은을 theat 적어도 20 년 동안 그것에 대해 걱정할 필요가 없습니다 것입니다 않은 경우 :

0
당신은 < = 4

당신은 변화에 매우 열심히 일해야하려는 DB_ID() 함수에 의존 할 수

한마디로

CAST(case when dtb.name in ('master','model','msdb','tempdb') 
    then 1 
    else dtb.is_distributor end AS bit) AS [IsSystemObject] 

: 데이터베이스가 master라는 경우, 0이 ...

+0

DB_ID()는 sys.sysdatabases의 dbid 열을 반환합니다. 맞습니까? –

+0

@Vinko : 네, 그렇습니다 – gbn

+6

이것은 사실이 아닙니다. 배포자 데이터베이스가 있으면 ID가 4 이상이고 시스템 db입니다. – Kevin

-3

owner_sid 시스템 데이터베이스에 대한 단지 0x01로 같은지하는 데 도움이됩니다. 그래서 데이터베이스를 시스템 DB인지 아닌지를 인식 할 수 있습니다.

select * from sys.databases 
where owner_sid != 0x01 
+5

이것은'sa', system 또는 not 소유의 데이터베이스를 반환하기 때문에 좋지 않습니다. –

+0

이것은 마스터 db가 0x01 이외의 sid를 갖는 Sql Azure에서는 작동하지 않습니다. –

관련 문제