55 votes

Comment puis-je réduire ma base de données SQL Server?

J'ai une Base de données de près de 1,9 Go de Base de données de taille, et MSDE2000 ne permet pas de DBs qui dépassent 2.0 Go

J'ai besoin de réduire cette DB (et beaucoup d'autres comme ça à certains endroits).

J'ai trouvé et supprimé plusieurs 100 de plus de 1000 dossiers qui sont considérés comme inutiles: ces dossiers représentent un grand pourcentage de certains des principaux (la plus grande) des tables dans la Base de données. Par conséquent, il est raisonnable de supposer beaucoup d'espace doit maintenant être récupérable.

Alors maintenant, j'ai besoin de réduire la DB à rendre des comptes pour les enregistrements.

  • J'exécute DBCC ShrinkDatabase('MyDB')...... Pas d'effet.
  • J'ai essayé les différents rétrécir installations MSSMS.... Toujours aucun effet.
  • J'ai sauvegardé la base de données et restaura... Toujours aucun effet.

Encore De 1,9 Go

Pourquoi?

Quelle que soit la procédure que j'ai finalement trouver doit être rejouable sur une machine client avec accès à rien d'autre qu'OSql ou similaire.

11voto

Bork Blatt Points 2143

Cela peut paraître bizarre, mais il a travaillé pour moi et j'ai écrit un programme C# pour automatiser cela.

Étape 1: Tronquer le journal des transactions (sauvegarder uniquement le journal des transactions, l'activation de l'option pour supprimer des transactions inactives)

Étape 2: Exécuter une base de données de rétrécissement, le déplacement de toutes les pages du début des fichiers

Étape 3: Tronquer le journal des transactions de nouveau, comme à l'étape 2 ajoute des entrées de journal

Étape 4: Exécuter une base de données de rétrécir à nouveau.

Mon dépouillé de code, qui utilise le SQL DMO de la bibliothèque, est comme suit:

SQLDatabase.TransactionLog.Truncate();
SQLDatabase.Shrink(5, SQLDMO.SQLDMO_SHRINK_TYPE.SQLDMOShrink_NoTruncate);
SQLDatabase.TransactionLog.Truncate();
SQLDatabase.Shrink(5, SQLDMO.SQLDMO_SHRINK_TYPE.SQLDMOShrink_Default);

8voto

Cicik Points 755

DBCC SHRINKDATABASE fonctionne pour moi, mais c'est sa syntaxe complète:

DBCC SHRINKDATABASE ( database_name, [target_percent], [truncate] )

target_percent est le pourcentage d'espace libre restant dans le fichier de base de données après la base de données a été réalisée.

Et truncate paramètre peut être:

NOTRUNCATE

Causes l'a libéré de l'espace fichier pour être conservés dans les fichiers de base de données. Si non spécifié, libéré de l'espace fichier est libéré pour le système d'exploitation.

TRUNCATEONLY

Les Causes de l'espace inutilisé dans les fichiers de données à être libéré pour le système d'exploitation et réduit le fichier à la dernière alloués mesure, la réduction de la taille du fichier sans déplacer les données. Aucune tentative n'est faite pour déplacer les lignes vers les pages non allouées. target_percent est ignoré lorsque TRUNCATEONLY est utilisé.

...et oui no_one est droit, la réduction des datbase n'est pas une très bonne pratique, comme par exemple :

shrink sur les fichiers de données sont d'excellentes façons d'introduire les logiques de fragmentation, car il se déplace de pages à partir de la fin de la répartition de la portée d'un fichier de base de données quelque part à l'avant de la file...

réduire la base de données peut avoir beaucoup de conséquences sur la base de données, serveur.... réfléchis beaucoup avant de le faire!

sur le web il existe beaucoup de blogs et d'articles à ce sujet.

4voto

no_one Points 1403

Vous devrez également réduire les fichiers de données individuels.

Ce n'est cependant pas une bonne idée de réduire les bases de données. Par exemple voir ici

4voto

Eduardo Points 2140

Tu devrais utiliser:

 dbcc shrinkdatabase (MyDB)
 

Le fichier journal sera réduit (laissez un explorateur Windows ouvert et observez-le).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X