Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Administration
Administration Forum d'entraide sur l'administration du dataserver, via SSM ou ligne de commande, les tables système, ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/04/2011, 17h29   #1
Membre régulier
 
Avatar de ariesnojf
 
Homme JFrançois
Inscription : juillet 2005
Messages : 183
Détails du profil
Informations personnelles :
Nom : Homme JFrançois
Localisation : France

Informations forums :
Inscription : juillet 2005
Messages : 183
Points : 99
Points : 99
Par défaut Déplacement table dans un autre groupe de fichier

Bonjour à tous,

J'ai une db assez volumineuse, dont la principale cause est le stockage de document (doc texte, pdf, image, ... de tout en fait).
J'ai deux questions :
1) Si je rajoute un groupe de fichier dans la DB lié à un nouvel "ndf" en isolant la table qui stocke ces documents, est ce judicieux ou non pour le futur ? (sachant qu'actuellement on ne rencontre pas trop de soucis, mais cette base a grossi de 25 Go en 6 mois ... et si j'extrapole ...)
2) J'ai réussi (depuis une base de test et grâce aux différents blogs et posts de ce site ) à déplacer une table (qui au passage est la même chose qu'un index cluster sur le PK, j'ai bien compris ? car ça, je l'ignorais) en utilisant la méthode :
Code :
1
2
CREATE UNIQUE CLUSTERED INDEX PK_col_nomtable1 ON dbo.nomtable1 (col)  
   WITH DROP_EXISTING ON ESCLAVE ;
Par contre je me suis aperçu que le reste des clés étaient toujours dans l'ancien groupe de fichiers. Je les ai donc déplacés. La question : comment être sûr que la table (et toutes ses dépendances) que je veux déplacer soit dans le bon groupe de fichier ? Comment je peux procèder pour faire cette vérification ?

Merci pour vos réponses.

SQL 2008 sur WS 2008R2.
__________________
Aries No JF

Il faut toujours viser la lune, car même en cas d'échec, on atterit dans les étoiles. (O. WILDE)
ariesnojf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2011, 17h58   #2
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 953
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 953
Points : 17 773
Points : 17 773
Pensez aussi à mettre les BLOBs dans un autres groupe de fichier utilisant un fichier situé sur un autre disque physique et en utilisant l'option TEXTIMAGE ON pour la table.

Pour voir ou est stockée la table :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
SELECT s.name AS SCHEMA_NAME, o.name AS OBJECT_NAME, o.type_desc AS OBJECT_TYPE,
       ds.name AS STORAGE, dbf.physical_name AS FILENAME, ds.type_desc AS STORAGE_TYPE,
       i.name AS index_name, i.index_id, i.type_desc AS index_type, 
       p.partition_id, p.partition_number AS pnum, p.rows AS partition_rows,
       a.allocation_unit_id AS alloc_unit_id, a.type_desc AS page_type_desc, a.total_pages AS pages,
       internals.total_pages, internals.used_pages, internals.data_pages, 
       first_page, root_page, first_iam_page
FROM  sys.objects AS o
      INNER JOIN sys.schemas AS s
            ON o.schema_id = s.schema_id
      INNER JOIN  sys.indexes AS i
            ON o.object_id = i.object_id
      INNER JOIN sys.partitions p
            ON p.object_id = i.object_id
               AND p.index_id = i.index_id
      INNER JOIN sys.allocation_units a
            ON a.container_id = p.partition_id
      INNER JOIN sys.data_spaces ds
            ON ds.data_space_id = a.data_space_id
      LEFT OUTER JOIN sys.database_files dbf
            ON dbf.data_space_id = ds.data_space_id
      INNER JOIN sys.system_internals_allocation_units internals 
            ON internals.container_id = a.container_id

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 10h29   #3
Membre régulier
 
Avatar de ariesnojf
 
Homme JFrançois
Inscription : juillet 2005
Messages : 183
Détails du profil
Informations personnelles :
Nom : Homme JFrançois
Localisation : France

Informations forums :
Inscription : juillet 2005
Messages : 183
Points : 99
Points : 99
Bonjour,

merci pour ta réponse.

Concernant le conseil, je prends, mais moi un peu boulet , je ne sais pas comment faire. Ta méthode permet d'isoler la colonne BLOBs dans un autre groupe de fichier autre que le reste de la table, méthode applicable à chaque table ou sur la DB en général ?
J'ai fouiné un peu, trouvé un groupe de fichier de type "FILESTREAM", mais si j'ai bien compris, ce type utilise un stockage sur système et non pas sur DB. (J'espère ne pas dire de bêtises). As tu un lien pour m'aiguiller sur ton conseil ?

Merci d'avance

@+
__________________
Aries No JF

Il faut toujours viser la lune, car même en cas d'échec, on atterit dans les étoiles. (O. WILDE)
ariesnojf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 12h20   #4
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 667
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2005
Messages : 4 667
Points : 8 715
Points : 8 715
Bonjour,

Citation:
J'ai fouiné un peu, trouvé un groupe de fichier de type "FILESTREAM", mais si j'ai bien compris, ce type utilise un stockage sur système et non pas sur DB
En fait FileStream est une méthode de stockage, comme vous le verrez dans le tutoriel de Mikedavem.
Il s'agit de ne pas stocker les fichiers dans la base de données mais directement, comme vous le dites, sur le système de fichiers.
Cela ne change en revanche rien à vos backups, et vous pouvez profiter d'une amélioration des performances en utilisant cette fonctionnalité.

Je pense que le tutoriel de Mikedavem répond à ce que vous propose SQLPro.

Citation:
qui au passage est la même chose qu'un index cluster sur le PK, j'ai bien compris ?
Quelques précisions : quand vous ajoutez une contrainte de clé primaire à une table, SQL Server crée un index cluster par défaut sur cette colonne.
Il en va de même lorsque vous ajoutez une contrainte d'unicité, mais dans ce cas l'index est non-cluster par défaut.
Tout index cluster pointant sur les pages de données de la table, si on déplace l'index cluster de groupe de fichiers comme vous l'avez fait, alors la table est également déplacée dans ce groupe de fichiers : l'index cluster, c'est la table
J'en ai mis un peu plus là-dessus ici

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 15h33   #5
Membre régulier
 
Avatar de ariesnojf
 
Homme JFrançois
Inscription : juillet 2005
Messages : 183
Détails du profil
Informations personnelles :
Nom : Homme JFrançois
Localisation : France

Informations forums :
Inscription : juillet 2005
Messages : 183
Points : 99
Points : 99
Merci à vous 2,

J'ai parcouru rapidement le tutoriel, (car pas trop de temps aujourd'hui sur ce sujet, on a quelque soucis au boulot...), juste deux questions malgré tout:
1) au niveau sauvegarde, il est stipulé que rien ne change, mais si le disque qui supporte les fichier crashe, ou un incendie ou autre catatrosphe à la sauce hollywoodienne..., les sauvegardes (SQL je parle) seront capable de remonter ces fichiers ou faut il en plus de la sauvegarde SQL, une sauvegarde de type Windows classique ? (en fait j'aimerai être sûr de ce que j'ai compris)

2) au niveau IHM depuis appli web, actuellement, il suffit à l'utilisateur de cliquer sur le doc pour qu'il apparaisse et d'en faire ce qu'il veut (imprimer, dl, ...). Le comportement de l'appli sera t il à modifier si on met en place le Filestream ? Idem pour l'upload ?

En fait 3 questions :
3) Peut on imaginer de stocker les docs sur autre serveur que SQL, par exemple IIS où l'appli web est maintenu ? Seulement, il y a risque de perte au niveau perf ? (IIS requete table document sur SQL, qui lui va interroger IIS pour les docs, qui va renvoyer à SQL qui renverra le résultat de la requete vers IIS, )


Merci encore pour les liens.

@+
__________________
Aries No JF

Il faut toujours viser la lune, car même en cas d'échec, on atterit dans les étoiles. (O. WILDE)
ariesnojf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 15h52   #6
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 953
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 953
Points : 17 773
Points : 17 773
Citation:
Envoyé par ariesnojf Voir le message
1) au niveau sauvegarde, il est stipulé que rien ne change, mais si le disque qui supporte les fichier crashe, ou un incendie ou autre catatrosphe à la sauce hollywoodienne..., les sauvegardes (SQL je parle) seront capable de remonter ces fichiers ou faut il en plus de la sauvegarde SQL, une sauvegarde de type Windows classique ? (en fait j'aimerai être sûr de ce que j'ai compris)
Une base est une seule unité de données et se sauvegarde par defaut de façon monolithique FILESTREAM compris.
Mais rein ne vous empêche de faire des sauvegardes partielles par groupe de fichiers (or un FILESTREAM c'est au moins 1 groupe de fichiers, vois plusieurs).


Citation:
2) au niveau IHM depuis appli web, actuellement, il suffit à l'utilisateur de cliquer sur le doc pour qu'il apparaisse et d'en faire ce qu'il veut (imprimer, dl, ...). Le comportement de l'appli sera t il à modifier si on met en place le Filestream ? Idem pour l'upload ?
Il y a deux méthodes d'accès : soit par le flux SQL dans le dataset (donc idem que si incorporé dans une colonne BLOB de la table), ou alors en accès fichier (via un UNC logique fournit par le serveur) et là dans .net c'est comme si vous étiez directement sur le fichier. Tout dépend du niveau de sécurité que vous exigez (aucun accès direct au fichiers par exemple) et aussi des performances que vous exigez.


Citation:
En fait 3 questions :
3) Peut on imaginer de stocker les docs sur autre serveur que SQL, par exemple IIS où l'appli web est maintenu ? Seulement, il y a risque de perte au niveau perf ? (IIS requete table document sur SQL, qui lui va interroger IIS pour les docs, qui va renvoyer à SQL qui renverra le résultat de la requete vers IIS, )
Vous avez tout compris : de multiples AR réseau inutile en sus du fait qu'un SGBDR est optimisé pur servir des données alors que ce n'est pas le cas d'un serveur Web.

Pensez cependant à dédier un agrégat RAID (1 ou 0+1 ou 10) à l'espace de stockage du FILETREAM !

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 16h17   #7
Membre régulier
 
Avatar de ariesnojf
 
Homme JFrançois
Inscription : juillet 2005
Messages : 183
Détails du profil
Informations personnelles :
Nom : Homme JFrançois
Localisation : France

Informations forums :
Inscription : juillet 2005
Messages : 183
Points : 99
Points : 99
Merci pour tout,

Concernant le Raid, c'est noté et en ferait part à mes amis de l'infra.

Le mieux maintenant, c'est de créer un environnement de test pour cela.

Merci mille fois, et reviendrai vers vers vous si problème. (je me laisse une journée ou deux avant de passer ce post en résolu, le temps de lire en profondeur le tuto + index).
__________________
Aries No JF

Il faut toujours viser la lune, car même en cas d'échec, on atterit dans les étoiles. (O. WILDE)
ariesnojf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 22h10   #8
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 723
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 723
Points : 6 844
Points : 6 844
De plus avec FILESTREAM vous pourrez bénéficier du cache Windows (FILESTREAM n'utilise pas le cache des données du serveur SQL). Vous pourrez affiner son paramétrage à vos besoins.

Si vous utilisez du stockage SAN avec cache ou cartes contrôleurs RAID avec cache, vous pourrez également en bénéficier. Ces types de cache conviennent bien à ce genre de besoin.

++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2011, 20h56   #9
Membre chevronné
 
Avatar de alassanediakite
 
Homme Alassane Diakité
Conseil - Consultant en systèmes d'information
Inscription : août 2006
Messages : 539
Détails du profil
Informations personnelles :
Nom : Homme Alassane Diakité
Âge : 34
Localisation : Mali

Informations professionnelles :
Activité : Conseil - Consultant en systèmes d'information

Informations forums :
Inscription : août 2006
Messages : 539
Points : 604
Points : 604
Envoyer un message via Yahoo à alassanediakite
Salut
Mikedavem, pouvez-vous nous dire un peu plus sur cette ligne
Citation:
' ... Traitement du document
... du genre, comment l'affichez avec word, excel ou comment le prendre comme source d'un contrôle image?
Merci d'avance
__________________
Le monde est trop bien programmé pour être l’œuvre du hasard…
alassanediakite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 12h22   #10
Rédacteur/Modérateur

 
Avatar de WOLO Laurent
 
Homme Laurent WOLO
Architecte de base de données
Inscription : mars 2003
Messages : 2 696
Détails du profil
Informations personnelles :
Nom : Homme Laurent WOLO
Âge : 35
Localisation : Congo-Brazzaville

Informations professionnelles :
Activité : Architecte de base de données
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 2 696
Points : 3 917
Points : 3 917
Envoyer un message via Yahoo à WOLO Laurent
Qu'est ce que tu veux racconter là ? Nous avons du mal à te suivre.
__________________

Découvrez la FAQ de MS SQL Server.
La chance accorde ses faveurs aux esprits avertis !
WOLO Laurent est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 11h04   #11
Membre chevronné
 
Avatar de alassanediakite
 
Homme Alassane Diakité
Conseil - Consultant en systèmes d'information
Inscription : août 2006
Messages : 539
Détails du profil
Informations personnelles :
Nom : Homme Alassane Diakité
Âge : 34
Localisation : Mali

Informations professionnelles :
Activité : Conseil - Consultant en systèmes d'information

Informations forums :
Inscription : août 2006
Messages : 539
Points : 604
Points : 604
Envoyer un message via Yahoo à alassanediakite
Salut
Il s'agit d'une (ou un ensemble) ligne pour le traitement du fichier dans le tuto de mikedavem à ce niveau "VII. Manipulation des données FILESTREAM... Extrait d'un code client permettant la récupération d'un fichier avec FILESTREAM"
@+
__________________
Le monde est trop bien programmé pour être l’œuvre du hasard…
alassanediakite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 14h19   #12
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 723
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 723
Points : 6 844
Points : 6 844
Réponse tardive .. excusez moi

Que voulez vous savoir exactement ? Expliquez votre problématique.

++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 20h19   #13
Membre chevronné
 
Avatar de alassanediakite
 
Homme Alassane Diakité
Conseil - Consultant en systèmes d'information
Inscription : août 2006
Messages : 539
Détails du profil
Informations personnelles :
Nom : Homme Alassane Diakité
Âge : 34
Localisation : Mali

Informations professionnelles :
Activité : Conseil - Consultant en systèmes d'information

Informations forums :
Inscription : août 2006
Messages : 539
Points : 604
Points : 604
Envoyer un message via Yahoo à alassanediakite
A mon tour de m'excuser pour le plus de questions que de contributions
Le tuto
Citation:
Imports System
Imports System.IO
Imports System.Text

'Chaine de connexion à la base
Dim ConStr As String
ConStr = "Data Source=SRV-SQL2008;Initial Catalog=filestream_database;Integrated Security=True"

Dim con As New SqlConnection(ConStr)
con.Open()

' Sélection du document Word 2007
Dim sqlCommand As New SqlCommand()
sqlCommand.Connection = con
sqlCommand.CommandText = "SELECT Doc FROM dbo.Documents WHERE DocID = 'doc1'"

Dim buffer As Byte() = sqlCommand.ExecuteScalar()

' Utilisation de la mémoire comme magasin de stockage du fichier
Dim ms As MemoryStream = New MemoryStream(buffer)

' ... Traitement du document ICI

'Fermeture connexion
con.Close()
Après connexion, récupération du filestream, mise en cache, comment:
  • afficher le fichier (dans word, excel...)?
  • ou comment le prendre comme source d'un contrôle image?
En faite je cherche à manipuler le filestream avec ACCESS comme IHM mais les résultats de mes recherches sont trop embryonnaires.
Merci d'avance
__________________
Le monde est trop bien programmé pour être l’œuvre du hasard…
alassanediakite est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h46.


 
 
 
 
Partenaires

Hébergement Web