在网上查了二天资料,终于找到个解决了这个问题的方案,记录下来.方便下次处理.
解决方案转贴自: https://blog.csdn.net/kk185800961/article/details/41865073

use DBName
go
dbcc opentran
--结果如下
/*
已复制的事务信息:
最早的分布式 LSN : (0:0:0)
最早的非分布式 LSN : (5067131:1370:2)
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
*/
DBCC loginfo() --全是2 木有 0 都是活动事务,断不了,更收缩不了。
-- 一个没有spid的东西。怎么杀啊? 查事务,
select transaction_begin_time,
case transaction_type
when 1 then 'Read/Write transaction'
when 2 then 'Read-Only transaction'
when 3 then 'System transaction'
when 4 then 'Distributed transaction'
end tran_Type,
case transaction_state
when 0 then 'not been comoletely initaialiaed yet'
when 1 then 'initaialiaed but ha notstarted'
when 2 then 'active'
when 3 then 'ended (read-only transaction)'
when 4 then 'commit initiated for distributed transaction'
when 5 then 'transaction prepared and waiting resolution'
when 6 then 'commited'
when 7 then 'being rolled back'
when 0 then 'been rolled back'
end transaction_state
from
sys.dm_tran_active_transactions
--没有发现异常的事务。没有做过复制,没有做过镜像。
--查看log状态
SELECT log_reuse_wait_desc FROM sys.databases WHERE NAME='DBName'
--REPLICATION 某做过复制,竟然出来个这。
use DBName
checkpoint
go
sp_removedbreplication 'DBName'
DBCC SHRINKFILE(DBName_Log,100);
DBCC loginfo() --还是全是活动的。
dbcc opentran 还有的那个没有spid的复制事务。

第二种场景:由于CDC导致无法收缩的解决方案
---
--关闭表的CDC
SELECT 'EXECUTE sys.sp_cdc_disable_table @source_schema = ''+ SCHEMA_NAME(schema_id) + '',@source_name = '''+ name + ''',@capture_instance = '''+ SCHEMA_NAME(schema_id) +'_' +name+'''',
schema_id,
,
is_tracked_by_cdc ,
CASE WHEN is_tracked_by_cdc = 0 THEN 'CDC功能禁用'
ELSE 'CDC功能启用'
END 描述
FROM sys.tables where is_tracked_by_cdc=1
或者
EXEC sys.sp_cdc_help_change_data_capture
CREATE TABLE #cdc
(source_schema VARCHAR(50),source_table VARCHAR(100),
captureInstance VARCHAR(100),OBJECT_ID INT,
sourceObjectid INT,start_lsn VARCHAR(100),end_lsn VARCHAR(100),
support_net_charge INT,has_drop_pending VARCHAR(10),
role_name VARCHAR(100),index_name VARCHAR(100),file_group_name VARCHAR(100),
create_date DATE,index_column_list VARCHAR(100),capture_column_list VARCHAR(100)
)
INSERT INTO #cdc EXEC sys.sp_cdc_help_change_data_capture
SELECT 'EXECUTE sys.sp_cdc_disable_table @source_schema = '''+ source_schema + ''',@source_name = '''+
source_table + ''',@capture_instance = '''+ captureInstance + ''''
FROM #cdc
--关闭数据库CDC
EXEC sys.sp_cdc_disable_db
--若关闭不了,日志中所有复制的事务都标记为分布式。当事务日志中有不再有效的复制事务并且您想要截断日志时,这非常有用,在存在紧急挂起的事务时,可以在紧急情况下使用此过程来截断事务日志。
exec sp_repldone @xactid = NULL, @xact_segno = NULL, @numtrans = 0, @time = 0, @reset = 1