juillet
01
Réduire le fichier de journal des transactions .ldf et le fichier de base de données .mdf sous SQL Server
Si votre bases de données SQL Server est lente ou que l'espace disque devient anormalement faible sur le disque qui contient la base de données ou l'entrepôt de données vous devez alors réduire le journal des transactions et la base. Si vous obtenez ce message "Le journal des transactions de la base de données est plein. Consultez la colonne log_reuse_wait de sys.databases." en essayant de vider les logs, alors il faut inspecter les données de la vue sys.databases dans la base de données et repérer la table qui n'est pas dans l'état NOTHING.
Si vous essayez de lancer un script de type SHRINKDATABASE comme celui -ci :
USE DATABASE_EXEMPLE;
DBCC SHRINKDATABASE(N'DATABASE_EXEMPLE', 10, TRUNCATEONLY)
-- EN utilisant SHRINKDATABASE vous devez mettre à la place de DATABASE_EXEMPLE le nom du fichier de votre base de données sur votre disque, traditionnellement stocké dans le dossier C:\
Exemple : DATABASE_EXEMPLE.mdf
ALTER DATABASE DWH SET RECOVERY SIMPLE;
DBCC SHRINKFILE ('DATABASE_EXEMPLE_log', 1);
ALTER DATABASE DATABASE_EXEMPLE SET RECOVERY FULL;
-- EN utilisant SHRINKFILE vous renseignerez à la place de DATABASE_EXEMPLE le bom de fichier des logs SQL Server, par défaut dans le dossier : C:\
Si vous obtenez une erreur de ce type en lançant une des commandes : "Le journal des transactions de la base de données est plein. Consultez la colonne log_reuse_wait de sysdatabases."
Vous devez exécuter cette requête sous SQL Server Management Studio :
SELECT [name]
,[database_id]
,[source_database_id]
,[owner_sid]
,[create_date]
,[compatibility_level]
,[collation_name]
,[user_access]
,[user_access_desc]
,[is_read_only]
,[is_auto_close_on]
,[is_auto_shrink_on]
,[state]
,[state_desc]
,[is_in_standby]
,[is_cleanly_shutdown]
,[is_supplemental_logging_enabled]
,[snapshot_isolation_state]
,[snapshot_isolation_state_desc]
,[is_read_committed_snapshot_on]
,[recovery_model]
,[recovery_model_desc]
,[page_verify_option]
,[page_verify_option_desc]
,[is_auto_create_stats_on]
,[is_auto_update_stats_on]
,[is_auto_update_stats_async_on]
,[is_ansi_null_default_on]
,[is_ansi_nulls_on]
,[is_ansi_padding_on]
,[is_ansi_warnings_on]
,[is_arithabort_on]
,[is_concat_null_yields_null_on]
,[is_numeric_roundabort_on]
,[is_quoted_identifier_on]
,[is_recursive_triggers_on]
,[is_cursor_close_on_commit_on]
,[is_local_cursor_default]
,[is_fulltext_enabled]
,[is_trustworthy_on]
,[is_db_chaining_on]
,[is_parameterization_forced]
,[is_master_key_encrypted_by_server]
,[is_published]
,[is_subscribed]
,[is_merge_published]
,[is_distributor]
,[is_sync_with_backup]
,[service_broker_guid]
,[is_broker_enabled]
,[log_reuse_wait]
,[log_reuse_wait_desc]
,[is_date_correlation_on]
,[is_cdc_enabled]
,[is_encrypted]
,[is_honor_broker_priority_on]
FROM [tempdb].[sys].[databases]
Dans les résultats, inspectez la ou les bases correspondantes aux lignes avec l'état : ACTIVE_TRANSACTION dans la colonne log_reuse_wait_desc.
Il faudra alors, pour débloquer l'état et le ramener à NOTHING lancer le scrip de SHRINKFILE (et de SHRINKDATABASE) sur la ou les bases en questions.
Commentaires
Aucun commentaire pour le moment.
Ajouter un commentaire