2010-02-02 8 views
2

Comment puis-je connaître l'emplacement physique (donc je peux le voir dans Windows Explorer) du chemin d'une donnée FILESTREAM que je viens d'insérer dans DB?Emplacement physique des données FILESTREAM

+0

Pourquoi auriez-vous besoin de cela? L'accès aux fichiers filestream en tant que fichiers ordinaires n'est pas recommandé. Par défaut, vous n'aurez même pas accès à ces fichiers. C'est comme demander où dans un fichier mdf vous pouvez trouver la valeur que vous venez d'insérer dans une table de base de données. Altérer directement les fichiers de fichiers (plutôt que via l'API fournie) est un moyen facile de corrompre la base de données. –

Répondre

0

Vous devez d'abord comprendre que FileStream est stocké sur le serveur hébergeant votre base de données SQL Server 2008. Si vous avez un DBA, demandez-leur où ils l'ont créé le FileStream à. Bien sûr, vous aurez alors besoin de droits sur le serveur pour naviguer afin de voir les répertoires. Vous ne pourrez pas non plus manipuler les fichiers, mais vous pourrez les voir. La plupart des administrateurs de bases de données ne voudront pas vous indiquer où se trouve FileStream.

Cependant, vous pouvez accéder au chemin par d'autres moyens. Une façon qui vient à l'esprit est en sélectionnant sur le PathName() du champ FileStream. Supposons que le champ FileStream enabled est ReportData et que la table dans laquelle il réside est TblReports. La syntaxe t-sql suivante donnera un UNC à l'emplacement:

select top 1 ReportData.PathName(0) 
from dbo.datReport 

Je crois que vous pouvez aussi obtenir le chemin par d'autres moyens par le directeur d'entreprise, mais j'oublier comment au moment.

2

Comme Pawel l'a mentionné, ce n'est pas une bonne idée d'accéder aux fichiers FILESTREAM en utilisant l'Explorateur Windows. Si vous êtes toujours déterminé à aller de l'avant et à explorer cela, le conseil suivant pourrait vous aider. Les noms de fichier FILESTREAM sont en fait le numéro de séquence de journal du journal de transactions de la base de données au moment de la création des fichiers. Paul Randal l'a expliqué au this post. Une option consiste donc à rechercher le numéro de séquence du journal et à rechercher un fichier portant le même nom dans le conteneur de données du flux de fichiers.

3

Je sais qu'il s'agit d'un post plus ancien, mais comme il se trouve encore haut dans les classements de recherche Google, je pensais que je posterais une réponse. Certes, dans les versions ultérieures de SQL (je ne l'ai pas essayé cela sur 2008), vous pouvez exécuter la requête suivante:

SELECT  t.name AS 'table', 
      c.name AS 'column', 
      fg.name AS 'filegroup_name', 
      dbf.type_desc AS 'type_description', 
      dbf.physical_name AS 'physical_location' 
FROM  sys.filegroups fg 
INNER JOIN sys.database_files dbf 
ON   fg.data_space_id = dbf.data_space_id 
INNER JOIN sys.tables t 
ON   fg.data_space_id = t.filestream_data_space_id 
INNER JOIN sys.columns c 
ON   t.object_id = c.object_id 
AND   c.is_filestream = 1 

Source

7

Il y a une option pour cela: méthode PhysicalPathName(). Si vous êtes sur SQL Server 2012 ou supérieure maintenant, ce code fonctionne pour vous:

SELECT stream.PhysicalPathName() AS 'Path' FROM Media 
OPTION (QUERYTRACEON 5556) 

Pour SQL Server 2008/2008 R2 vous devez activer l'indicateur de trace 5556 pour toute exemple:

DBCC TRACEON (5556, -1) 
GO 

ou pour la connexion particulière dans laquelle vous appelez méthode PhysicalPathName():

DBCC TRACEON (5556, -1) 
GO 
0

chemin du fichier --filestream

SELECT col.PathName() AS path FROM tbl 
Questions connexes