Quelques mises en garde initiales:
- Il est généralement connu comme une mauvaise pratique à jamais réduire un fichier de base de données de production ou de données (fichiers journaux sont un autre problème que cette question parle). Je conseille aux personnes de ne pas réduire leurs bases de données dans des billets de blog comme celui-ci, où je parle de "redimensionnement" et d'une bonne planification. Je ne suis pas seul ( Paul Randal , Brent Ozar , juste pour fournir quelques liens de plus). La réduction d' un des fragments de fichiers de données ou base de données d' index, est lent et laborieux sur vos ressources, peut être un drain sur votre système et est juste une mauvaise chose à faire, en général
- Dans ce cas, nous savons tous que le risque existe, nous sommes prêts à y faire face, mais nous avons libéré beaucoup d'espace dont nous savons que nous n'aurons plus jamais besoin. Dans ce type de cas particulier, l’une des options possibles est donc la réduction du coût.
Si vous avez lu des articles sur les préoccupations et les risques et que vous avez toujours besoin de le réduire, car vous avez libéré beaucoup d'espace, nous espérons que le reste de cette réponse vous aidera. Mais considérez les risques.
Il y a deux approches principales que deux considèrent ici:
1.) Réduire Oui, effectuez la réduction - Pensez à utiliser DBCC SHRINKFILE
au lieu de DBCC SHRINKDATABASE
, vous contrôlez mieux ce qui est rétréci et comment. Cela va entraîner une dégradation des performances à coup sûr - il est une grande opération à faire beaucoup de IO. Vous pouvez éventuellement vous en tirer avec des réductions de taille répétées jusqu'à une taille cible de plus en plus petite.
Voici l'exemple "A.)" du DBCC SHRINKFILE
lien ci-dessus . Dans cet exemple, un fichier de données est réduit à une taille cible de 7 Mo. Ce format est un bon moyen de réduire de façon répétitive les délais d'indisponibilité de votre fenêtre. Je ferais cela en testant le développement pour voir à quoi ressemblent les performances et comment augmenter / diminuer l’incrément et pour déterminer le timing attendu en production. Il s'agit d'une opération en ligne - vous pouvez l'exécuter avec des utilisateurs du système accédant à la base de données en cours de réduction, mais les performances risquent de se dégrader, ce qui est presque garanti. Alors surveillez et regardez ce que vous faites sur le serveur, choisissez une fenêtre d'indisponibilité ou une période d'activité plus légère, idéalement.
USE YourDatabase;
GO
DBCC SHRINKFILE (DataFile1, 7);
GO
Rappelez-vous toujours que: - chaque fois que vous réduisez, vous fragmentez vos index et vous devez procéder à une reconstruction de l'index si vous souhaitez réduire la taille des morceaux sur une période prolongée. Vous engagez maintenant ce coût à chaque fois si vous ne pouvez pas le faire en une seule fenêtre.
2.) Nouvelle base de données - Vous pouvez créer une nouvelle base de données et y migrer des données. Vous devez scripter la base de données vide et toutes ses clés, index, objets, procs, fonctions, etc., puis y migrer des données. Vous pouvez écrire des scripts pour cela ou utiliser un outil tel que SQL Data Compare de Red Gate ou d’autres fournisseurs proposant des outils similaires. C’est davantage un travail d’installation de votre côté, davantage de développement et de tests, et selon votre environnement, la fenêtre d’indisponibilité peut également s’éjecter, mais constitue une option à envisager.
Lorsque je suis obligé de réduire une base de données
Si c'était mon environnement, je laisserais un espace vide dans le fichier de données, car j'aime bien être un gros disque et être prêt pour une croissance future / inattendue. Je serais donc d'accord pour laisser de l'espace si nous supprimions simplement une majorité de cet espace, mais je ne ferais jamais confiance à ceux qui disent "mais ça ne grandira plus jamais" tout en laissant un espace blanc. La route avec laquelle j'irais probablement ( soupir) est l’approche de réduction si j’avais de plus petites fenêtres d’indisponibilité et que je ne voulais pas subir la complexité de la création d’une base de données vide et de la migration de données vers celle-ci. Donc, je le réduirais un tas de fois de manière incrémentielle (en fonction du nombre de fois que je pensais devoir le faire en fonction de mes tests en dev et de la taille souhaitée. En choisissant progressivement une taille de fichier plus petite), puis en reconstruisant les index .. Et puis je ' d jamais dire à personne que je réduis ma base de données ;-)