Lokasi ngalangkungan proxy:   [ UP ]  
[Ngawartoskeun bug]   [Panyetelan cookie]                
Skip to content

Commit 3d25cc8

Browse files
authored
Update troubleshoot-a-full-transaction-log-sql-server-error-9002.md
updating first T-SQL snippet
1 parent 3eeacc8 commit 3d25cc8

1 file changed

Lines changed: 66 additions & 13 deletions

File tree

docs/relational-databases/logs/troubleshoot-a-full-transaction-log-sql-server-error-9002.md

Lines changed: 66 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,61 @@ The following set of T-SQL commands will help you identify if a database transac
7676
SET NOCOUNT ON
7777
DECLARE @SQL VARCHAR (8000), @log_reuse_wait tinyint, @log_reuse_wait_desc nvarchar(120), @dbname sysname, @database_id int, @recovery_model_desc varchar (24)
7878
79-
DROP TABLE IF EXISTS #CannotTruncateLog_Db
8079
80+
IF ( OBJECT_id (N'tempdb..#CannotTruncateLog_Db') is not null)
81+
BEGIN
82+
DROP TABLE #CannotTruncateLog_Db
83+
END
84+
85+
86+
--get info about transaction logs in each db. Use a DMV which supports all supported versions
87+
88+
IF ( OBJECT_id (N'tempdb..#dm_db_log_space_usage') is not null)
89+
BEGIN
90+
DROP TABLE #dm_db_log_space_usage
91+
END
92+
SELECT * INTO #dm_db_log_space_usage FROM sys.dm_db_log_space_usage where 1=0
93+
94+
DECLARE log_space CURSOR FOR SELECT NAME FROM sys.databases
95+
OPEN log_space
96+
97+
FETCH NEXT FROM log_space into @dbname
98+
99+
WHILE @@FETCH_STATUS = 0
100+
BEGIN
101+
102+
set @SQL = '
103+
insert into #dm_db_log_space_usage (
104+
database_id,
105+
total_log_size_in_bytes,
106+
used_log_space_in_bytes,
107+
used_log_space_in_percent,
108+
log_space_in_bytes_since_last_backup
109+
)
110+
select
111+
database_id,
112+
total_log_size_in_bytes,
113+
used_log_space_in_bytes,
114+
used_log_space_in_percent,
115+
log_space_in_bytes_since_last_backup
116+
from ' + @dbname +'.sys.dm_db_log_space_usage'
117+
118+
119+
BEGIN TRY
120+
exec (@SQL)
121+
END TRY
122+
123+
BEGIN CATCH
124+
SELECT ERROR_MESSAGE() AS ErrorMessage;
125+
END CATCH;
126+
127+
FETCH NEXT FROM log_space into @dbname
128+
END
129+
130+
CLOSE log_space
131+
DEALLOCATE log_space
132+
133+
--select the affected databases
81134
SELECT
82135
sdb.name as DbName,
83136
sdb.log_reuse_wait, sdb.log_reuse_wait_desc,
@@ -99,16 +152,14 @@ SELECT
99152
100153
sdb.database_id,
101154
sdb.recovery_model_desc,
102-
ls.total_log_size_mb,
103-
ls.active_log_size_mb,
104-
ls.total_log_size_mb - ls.active_log_size_mb as Free_Space_mb
155+
lsu.used_log_space_in_bytes/1024 as Used_log_size_MB,
156+
lsu.total_log_size_in_bytes /1024 as Total_log_size_MB,
157+
100 - lsu.used_log_space_in_percent as Percent_Free_Space
105158
INTO #CannotTruncateLog_Db
106-
FROM sys.databases AS sdb CROSS APPLY sys.dm_db_log_stats(database_id) AS ls
107-
108-
WHERE sdb.log_reuse_wait != 0;
159+
FROM sys.databases AS sdb INNER JOIN #dm_db_log_space_usage lsu ON sdb.database_id = lsu.database_id
160+
WHERE log_reuse_wait > 0
109161
110-
111-
SELECT * FROM #CannotTruncateLog_Db;
162+
SELECT * FROM #CannotTruncateLog_Db
112163
113164
114165
DECLARE no_truncate_db CURSOR FOR
@@ -121,8 +172,9 @@ FETCH NEXT FROM no_truncate_db into @log_reuse_wait, @log_reuse_wait_desc, @dbna
121172
122173
WHILE @@FETCH_STATUS = 0
123174
BEGIN
124-
if (@log_reuse_wait is not null)
125-
select '-- ''' + @dbname + ''' database --' as "Individual Database Report"
175+
if (@log_reuse_wait > 0)
176+
select '-- ''' + @dbname + ''' database has log_reuse_wait = ' + @log_reuse_wait_desc + ' --' as 'Individual Database Report'
177+
126178
127179
if (@log_reuse_wait = 1)
128180
BEGIN
@@ -132,9 +184,9 @@ BEGIN
132184
END
133185
else if (@log_reuse_wait = 2)
134186
BEGIN
135-
select 'Is '+ @recovery_model_desc +' recovery model the intended choice for your database? Review recovery models and determine if you need to change it. https://docs.microsoft.com/sql/relational-databases/backup-restore/recovery-models-sql-server'
187+
select 'Is '+ @recovery_model_desc +' recovery model the intended choice for ''' + @dbname+ ''' database? Review recovery models and determine if you need to change it. https://docs.microsoft.com/sql/relational-databases/backup-restore/recovery-models-sql-server' as RecoveryModelChoice
136188
select 'To truncate the log consider performing a transaction log backup on database ''' + @dbname+ ''' which is in ' + @recovery_model_desc +' recovery model. Be mindful of any existing log backup chains that could be broken' as Recommendation
137-
select 'BACKUP LOG [' + @dbname + '] TO DISK = ''some_volume:\some_folder\' + @dbname + '_LOG.trn''' as BackupLogCommand
189+
select 'BACKUP LOG [' + @dbname + '] TO DISK = ''some_volume:\some_folder\' + @dbname + '_LOG.trn ''' as BackupLogCommand
138190
END
139191
else if (@log_reuse_wait = 3)
140192
BEGIN
@@ -170,6 +222,7 @@ BEGIN
170222
select 'select availability_group=cast(ag.name as varchar(30)), primary_replica=cast(ags.primary_replica as varchar(30)),primary_recovery_health_desc=cast(ags.primary_recovery_health_desc as varchar(30)), synchronization_health_desc=cast(ags.synchronization_health_desc as varchar(30)),ag.failure_condition_level, ag.health_check_timeout, automated_backup_preference_desc=cast(ag.automated_backup_preference_desc as varchar(10)) from sys.availability_groups ag join sys.dm_hadr_availability_group_states ags on ag.group_id=ags.group_id' as CheckAGHealth
171223
select 'SELECT group_name=cast(arc.group_name as varchar(30)), replica_server_name=cast(arc.replica_server_name as varchar(30)), node_name=cast(arc.node_name as varchar(30)),role_desc=cast(ars.role_desc as varchar(30)), ar.availability_mode_Desc, operational_state_desc=cast(ars.operational_state_desc as varchar(30)), connected_state_desc=cast(ars.connected_state_desc as varchar(30)), recovery_health_desc=cast(ars.recovery_health_desc as varchar(30)), synhcronization_health_desc=cast(ars.synchronization_health_desc as varchar(30)), ars.last_connect_error_number, last_connect_error_description=cast(ars.last_connect_error_description as varchar(30)), ars.last_connect_error_timestamp, primary_role_allow_connections_desc=cast(ar.primary_role_allow_connections_desc as varchar(30)) from sys.dm_hadr_availability_replica_cluster_nodes arc join sys.dm_hadr_availability_replica_cluster_states arcs on arc.replica_server_name=arcs.replica_server_name join sys.dm_hadr_availability_replica_states ars on arcs.replica_id=ars.replica_id join sys.availability_replicas ar on ars.replica_id=ar.replica_id join sys.availability_groups ag on ag.group_id = arcs.group_id and ag.name = arc.group_name ORDER BY cast(arc.group_name as varchar(30)), cast(ars.role_desc as varchar(30))' as CheckReplicaHealth
172224
select 'select database_name=cast(drcs.database_name as varchar(30)), drs.database_id, drs.group_id, drs.replica_id, drs.is_local,drcs.is_failover_ready,drcs.is_pending_secondary_suspend, drcs.is_database_joined, drs.is_suspended, drs.is_commit_participant, suspend_reason_desc=cast(drs.suspend_reason_desc as varchar(30)), synchronization_state_desc=cast(drs.synchronization_state_desc as varchar(30)), synchronization_health_desc=cast(drs.synchronization_health_desc as varchar(30)), database_state_desc=cast(drs.database_state_desc as varchar(30)), drs.last_sent_lsn, drs.last_sent_time, drs.last_received_lsn, drs.last_received_time, drs.last_hardened_lsn, drs.last_hardened_time,drs.last_redone_lsn, drs.last_redone_time, drs.log_send_queue_size, drs.log_send_rate, drs.redo_queue_size, drs.redo_rate, drs.filestream_send_rate, drs.end_of_log_lsn, drs.last_commit_lsn, drs.last_commit_time, drs.low_water_mark_for_ghosts, drs.recovery_lsn, drs.truncation_lsn, pr.file_id, pr.error_type, pr.page_id, pr.page_status, pr.modification_time from sys.dm_hadr_database_replica_cluster_states drcs join sys.dm_hadr_database_replica_states drs on drcs.replica_id=drs.replica_id and drcs.group_database_id=drs.group_database_id left outer join sys.dm_hadr_auto_page_repair pr on drs.database_id=pr.database_id order by drs.database_id' as LogMovementHealth
225+
select 'For more information see https://docs.microsoft.com/en-us/troubleshoot/sql/availability-groups/error-9002-transaction-log-large' as OnlineDOCResource
173226
END
174227
else if (@log_reuse_wait in (10, 11, 12, 14))
175228
BEGIN

0 commit comments

Comments
 (0)