吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 548|回复: 7
收起左侧

[经验求助] 数据库出现故障

[复制链接]
liang5186 发表于 2026-9-21 11:40
25吾爱币
数据库出现故障,列名 "SampleCollectionTime"无效。列名“BatchVerified” 无效。是单独出现的每次只出现一个故障
     请求大佬指点,经过查询发现订阅库中字段名后会被增加 “空格” 符,导致查不到列,尝试过修改列名、重建过订阅均都能临时解决次问题,过一段时间问题依旧出现。不能上次图片有点难受

图片地址:
链接: https://pan.baidu.com/s/1HqRbwb3_MGSv-lxbvNvAeg?pwd=w6cu 提取码: w6cu



发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| liang5186 发表于 2026-9-21 11:48

帅帅糖爸 发表于 2026-9-21 16:51
SQL Server 复制同步问题——列名被追加空格导致查询失败
清理并重建受影响的列
[SQL] 纯文本查看 复制代码
-- 在订阅库执行,检查是否有列名带尾随空格
SELECT COLUMN_NAME, LEN(COLUMN_NAME) as 长度
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME IN ('你的表名')
AND COLUMN_NAME <> RTRIM(COLUMN_NAME);


如果确认有尾随空格,修复:
[SQL] 纯文本查看 复制代码
-- 重命名带空格的列(先改列名)
EXEC sp_rename '你的表.SampleCollectionTime ', 'SampleCollectionTime';
EXEC sp_rename '你的表.BatchVerified ', 'BatchVerified';
 楼主| liang5186 发表于 2026-9-22 09:04
帅帅糖爸 发表于 2026-9-21 16:51
SQL Server 复制同步问题——列名被追加空格导致查询失败
清理并重建受影响的列
[mw_shl_code=sql,true]- ...

我之前已经检查过,就是多了“空格”,我也修复过,但是过一段时间,问题依然会出现,重建订阅我也都尝试过了,还是不行
帅帅糖爸 发表于 2026-9-23 08:26
liang5186 发表于 2026-9-22 09:04
我之前已经检查过,就是多了“空格”,我也修复过,但是过一段时间,问题依然会出现,重建订阅我也都尝试 ...

是否是发布端的问题?
发布端一刷新,空格数据就带过来了

[SQL] 纯文本查看 复制代码
EXEC sp_rename N'dbo.你的表.[SampleCollectionTime ]', N'SampleCollectionTime', N'COLUMN';
EXEC sp_rename N'dbo.你的表.[BatchVerified]',       N'BatchVerified',       N'COLUMN';


按发布端的干净结构重新建表、重新生成 sp_MSins/sp_MSupd
 楼主| liang5186 发表于 2026-9-23 09:39
帅帅糖爸 发表于 2026-9-23 08:26
是否是发布端的问题?
发布端一刷新,空格数据就带过来了

1.发布端数据是正常的,字段没有问题。
2.尝试过DDL 触发器和SQL Server Profiler跟踪错误来源,都没有找到问题原因。
3.SQLServer列名“BatchVerified” 无效,错误号: 207,查询后的错误原因:订阅库的字段名后面多出“空格”符,使用命令修改后恢复正常,过一段时间还会出现同样的错误。
帅帅糖爸 发表于 2026-9-24 08:15
触发器在发布端?在订阅服务器的订阅库 LIS_Dxp上,建一个 DDL 审计触发器,把所有改表动作落库:
[SQL] 纯文本查看 复制代码
USE LIS_Dxp;
GO

IF OBJECT_ID('dbo.DDLAuditLog') IS NULL
CREATE TABLE dbo.DDLAuditLog(
    id INT IDENTITY(1,1) PRIMARY KEY,
    PostTime DATETIME DEFAULT GETDATE(),
    LoginName SYSNAME,
    HostName SYSNAME, 
    ProgramName SYSNAME,
    SPID INT,
    EventType SYSNAME,
    ObjectName SYSNAME,
    TSQLCommand NVARCHAR(MAX) 
);
GO

CREATE OR ALTER TRIGGER trg_AuditDDL_Subscriber
ON DATABASE
FOR ALTER_TABLE, CREATE_TABLE, DROP_TABLE, RENAME
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @ed XML = EVENTDATA();
    INSERT INTO dbo.DDLAuditLog(PostTime, LoginName, HostName, ProgramName, SPID, EventType, ObjectName, TSQLCommand)
    SELECT GETDATE(), SUSER_SNAME(), HOST_NAME(), PROGRAM_NAME(), @@SPID,
           @ed.value('(//EventType)[1]','SYSNAME'),
           @ed.value('(//ObjectName)[1]','SYSNAME'),
           @ed.value('(//TSQLCommand/CommandText)[1]','NVARCHAR(MAX)');
END;
GO


等出现问题后,复查
[SQL] 纯文本查看 复制代码
SELECT * FROM dbo.DDLAuditLog
WHERE ObjectName = 'Exam_Sample' OR TSQLCommand LIKE '%BatchVerified%'
ORDER BY PostTime DESC;


应该就能查到元凶了
 楼主| liang5186 发表于 2026-10-8 16:09
帅帅糖爸 发表于 2026-9-24 08:15
触发器在发布端?在订阅服务器的订阅库 LIS_Dxp上,建一个 DDL 审计触发器,把所有改表动作落库:
[mw_shl ...

这种方法我也试过了,什么都没有查询到,我还使用过SQL Server Profiler来跟踪,都没有查到任何东西
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-11-11 09:07

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表