8
votes

Toute façon de raconter rapidement quelle base de données, le cas échéant, est attachée à un fichier .MDF?

assumer SQL Server 2005/2008 avec un grand nombre de bases de données. Y a-t-il un moyen de dire rapidement quelle base de données, le cas échéant, est jointe à un fichier .MDF particulier?

Nous avons laissé tomber quelques bases de données au fil du temps et nous souhaitons nettoyer certains DANINGING .MDF's pour effacer l'espace sur le serveur. Actuellement, le seul moyen que je connaisse consiste à examiner les propriétés de chaque base de données, une par une, dans le studio de gestion et faire une liste des fichiers qu'ils sont attachés à. À la recherche d'un peu plus efficace que cela, si quelque chose existe.


0 commentaires

6 Réponses :


1
votes

Solution basse Tech ... Déplacez le fichier MDF à un autre endroit. Si elle est attachée, SQL Server ne vous laisserait pas le déplacer :)

de l'invite de commande xxx

Tous les fichiers inutilisés seraient déplacés vers InsanglesDBFiles.


2 commentaires

Que se passe-t-il si votre serveur SQL a été arrêté? Je suppose que tous les fichiers sont déplacés puis votre serveur ne parviendra pas à redémarrer ...


Pourquoi fonctionnerait-il quelque chose comme celui-ci lorsque SQL est en panne comme tout le but de ceci est de trouver nos fichiers pas utilisés par SQL Server. De plus, si quelqu'un fait l'erreur, les fichiers sont uniquement "déplacés" non supprimés. Retournez-les!



9
votes

Cela peut aider.

declare @files table (
    db_name sysname,
    physical_name nvarchar(260)
)

insert into @files
    exec sp_MSforeachdb 'select "?", physical_name from ?.sys.database_files'

select db_name, physical_name 
    from @files


0 commentaires

3
votes

Vous pouvez également utiliser orcamdf pour ceci: xxx

ceci "LL vous permet d'interroger le MDF pour leur nom de base de données sans les attacher au serveur de base de données. Notez que cela devrait être effectué sur le fichier de données primaire, au cas où il y a plusieurs fichiers. Disclaimer - Je suis l'auteur de Orcamdf.

boucle via tous les fichiers du répertoire de données, il serait facile de joindre cela avec des sys.databases et de voir lesquels ne correspondent pas, et sont Ainsi, des fichiers MDF non joints.

EDIT: Posté un exemple de plus complet sur mon blog: http://improvrove.dk/archive/2011/05/19/checking-qui-hattabase-si-stored- In-Duattached-MDF-File.aspx


0 commentaires

12
votes

sys.master_files contient une ligne par base de données pour le premier fichier (ID = 1) pour cette base de données. C'est-à-dire que les tables système seront toujours dans FileID = 1 pour chaque base de données

Tout ce dont vous avez besoin: P>

SELECT
   DB_NAME(database_id), physical_name
FROM
   sys.master_files


0 commentaires

3
votes
select db_name(database_id), * from sys.master_files
Will list all the files of all the databases known on the system.

0 commentaires

0
votes
private bool IsDbAttached()
        {
            const string isAttachedSqL = @"SELECT count(*)
                                        FROM sys.master_files
                                        WHERE  DB_NAME(database_id) = @DbName";

            bool isAttached = false;
            try
            {
                using (var connection = new SqlConnection(this.connectionString))
                using (var command = new SqlCommand(isAttachedSqL, connection))
                {
                    command.Parameters.Add("@DbName", SqlDbType.VarChar).Value = "dbName";
                    connection.Open();
                    var count = command.ExecuteScalar();
                    isAttached = (int)count > 0;
                }
            }
            catch
            {
                throw;
            }

            return isAttached;

        }

0 commentaires