SQL Server: Comment savoir si une base de données est une base de données système?
-
10-07-2019 - |
Question
Je sais que jusqu’à présent (jusqu’à au moins MSSQL 2005), les bases de données système sont master, model, msdb et tempdb.
Pour autant que je sache, rien ne garantit que cela sera préservé à l'avenir. Et ni la vue sys.databases ni la vue sys.sysdatabases ne me disent pas si une base de données est considérée comme une base de données système.
Existe-t-il un endroit où ces informations (qu'une base de données soit considérée ou non comme une base de données système) peuvent être obtenues?
La solution
Vient de plonger dans Microsoft.SqlServer.Management.Smo.Database
objet (fourni par Microsoft lui-même!)
Ils le font simplement en utilisant la déclaration suivante:
CAST(case when dtb.name in ('master','model','msdb','tempdb')
then 1
else dtb.is_distributor end AS bit) AS [IsSystemObject]
En bref: si une base de données est nommée master
, model
, msdb
ou tempdb
, il s’agit d’une base de données système;
c'est aussi une base de données système, si le champ is_distributor = 1
dans la vue sys.databases
.
J'espère que cela vous aidera
Jimmy
Autres conseils
Vous pouvez compter sur la fonction DB_ID () < = 4
Vous devrez travailler très fort pour changer cela ...
SQL Server Management Studio utilise cette
si vous développez " bases de données système " dans " Explorateur d'objets " (vu de WireShark):
SELECT dtb.name AS [Database_Name]
FROM master.sys.databases AS dtb
WHERE (CAST(case when dtb.name in ('master','model','msdb','tempdb') then 1 else dtb.is_distributor end AS bit)=1)
Par souci de simplicité, j'ai supprimé les colonnes non pertinentes, supprimé orderby et remplacé la variable @ _msparam_0 par sa valeur 1
owner_sid est égal à 0x01 uniquement pour les bases de données système. Vous pouvez donc l'utiliser pour reconnaître si la base de données est une base de données système ou non.
select * from sys.databases
where owner_sid != 0x01
non, il n'y a pas une telle option, autant que je sache. Je suppose que vous pouvez vérifier l’identifiant sys.databases.owner_sid = 0x01.
Je ne pense pas que vous ayez à vous soucier de la modification du nom de la base de données par MS. s’ils le faisaient, vous n’auriez pas à vous en inquiéter pendant au moins 20 ans:)