Dans SQL Server (2008 dans ce cas), comment puis-je rapidement réduire tous les fichiers, journaux et données, pour toutes les bases de données d'une instance? Je pourrais passer par SSMS et cliquer avec le bouton droit de la souris sur chacun et choisir Tâches -> Réduire, mais je cherche quelque chose de plus rapide.
J'ai écrit certains scripts "Créer une base de données" et j'ai oublié qu'ils avaient des tailles de ballons par défaut, et que je n'avais pas besoin de beaucoup d'espace réservé pour ces fichiers sur ce projet.
la source
SELECT 'USE [' + d.name + N']' + CHAR(13) + CHAR(10) + 'DBCC SHRINKFILE (N''' + mf.name + N''' , 0, TRUNCATEONLY)' + CHAR(13) + CHAR(10) + CHAR(13) + CHAR(10) FROM sys.master_files mf JOIN sys.databases d ON mf.database_id = d.database_id WHERE d.database_id > 4
Mais trouver ça m'a posé un nouveau problème. Off pour poster une autre question.Que diriez-vous d'une seule ligne d'énoncé SQL?
Veuillez lire cet article de blog très intéressant avant d'exécuter l'instruction SQL suivante.
la source
DBCC SHRINKDB (et son cousin SHRINKFILE) sont extrêmement lents, car ce code contient beaucoup d’exécutions à un seul thread.
Voici un moyen beaucoup plus rapide de réduire un fichier de base de données:
sp_spaceused
pour déterminer la taille)Comme les reconstructions d'index sont massivement parallèles, cette technique entraîne souvent une réduction beaucoup plus rapide de la base de données. Bien sûr, cela nécessite que vous disposiez d'un peu d'espace supplémentaire pour le nouveau groupe de fichiers pendant le processus. Cependant, vous n'avez besoin que de suffisamment d'espace dans le nouveau groupe de fichiers pour contenir le plus grand groupe de fichiers de l'instance (car vous allez récupérer de l'espace au fur et à mesure).
Cette technique présente également l’avantage supplémentaire de défragmenter vos index au cours du processus.
la source
J'ai un peu optimisé la requête pour réduire uniquement le journal tel qu'il est demandé:
la source
Le code ci-dessous, obtenez une liste des bases de données non système, définissez la base de données sur lecture seule, puis réduisez le fichier. J'ai conservé ce code dans quelques boîtes SQL Server à l'aide du travail d'agent SQL, où l'espace est toujours un problème. Chaque nuit, les samedis et dimanches, il commence à fonctionner et réduit toutes les bases de données en quelques heures (en fonction de la taille des bases de données).
la source
Réduisez tous les fichiers journaux sauf le maître, le modèle et la msdb:
la source
Celui-ci étend la réponse ci-dessus, en utilisant un curseur pour parcourir les instructions SQL une par une. Ce n'est pas aussi court que la réponse d'Emrah mais cela permet une logique supplémentaire dans la boucle while du curseur.
la source
Nous pouvons répéter
SHRINKDB
etSHRINKFILE
pour toutes les bases de données de manière dynamique:Vous pouvez trouver des détails dans cet article .
la source