Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

seata2.1.0 服务端用mysql+SqlServer业务端 主键使用雪花算法,回滚事务报没有标识属性。无法执行 SET 操作 #6449

Open
zhao-wen-bin opened this issue Mar 28, 2024 · 6 comments · May be fixed by #6511

Comments

@zhao-wen-bin
Copy link

2024-03-28 13:52:50.385 ERROR 11556 --- [_RMROLE_1_16_16] i.seata.rm.datasource.DataSourceManager : [stacktrace]branchRollback failed. branchType:[AT], xid:[192.168.1.5:8091:6629803150973841558], branchId:[6629803150973841560], resourceId:[jdbc:sqlserver://sqlserver:1433;databaseName=DL_CP_WMS_DEVICE], applicationData:[null]. reason:[Branch session rollback failed and try again later xid = 192.168.1.5:8091:6629803150973841558 branchId = 6629803150973841560 表 'rf_collection' 没有标识属性。无法执行 SET 操作。]

io.seata.core.exception.BranchTransactionException: Branch session rollback failed and try again later xid = 192.168.1.5:8091:6629803150973841558 branchId = 6629803150973841560 表 'rf_collection' 没有标识属性。无法执行 SET 操作。
at io.seata.rm.datasource.undo.AbstractUndoLogManager.undo(AbstractUndoLogManager.java:370)
at io.seata.rm.datasource.DataSourceManager.branchRollback(DataSourceManager.java:122)
at io.seata.rm.AbstractRMHandler.doBranchRollback(AbstractRMHandler.java:125)
at io.seata.rm.AbstractRMHandler$2.execute(AbstractRMHandler.java:67)
at io.seata.rm.AbstractRMHandler$2.execute(AbstractRMHandler.java:63)
at io.seata.core.exception.AbstractExceptionHandler.exceptionHandleTemplate(AbstractExceptionHandler.java:131)
at io.seata.rm.AbstractRMHandler.handle(AbstractRMHandler.java:63)
at io.seata.rm.DefaultRMHandler.handle(DefaultRMHandler.java:68)
at io.seata.core.protocol.transaction.BranchRollbackRequest.handle(BranchRollbackRequest.java:35)
at io.seata.rm.AbstractRMHandler.onRequest(AbstractRMHandler.java:150)
at io.seata.core.rpc.processor.client.RmBranchRollbackProcessor.handleBranchRollback(RmBranchRollbackProcessor.java:63)
at io.seata.core.rpc.processor.client.RmBranchRollbackProcessor.process(RmBranchRollbackProcessor.java:58)
at io.seata.core.rpc.netty.AbstractNettyRemoting.lambda$processMessage$2(AbstractNettyRemoting.java:280)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:748)
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: 表 'rf_collection' 没有标识属性。无法执行 SET 操作。
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:262)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1624)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:594)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:524)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7194)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:2979)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:248)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:223)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeUpdate(SQLServerPreparedStatement.java:473)
at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_executeUpdate(FilterChainImpl.java:3254)
at com.alibaba.druid.filter.FilterAdapter.preparedStatement_executeUpdate(FilterAdapter.java:1075)
at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_executeUpdate(FilterEventAdapter.java:486)
at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_executeUpdate(FilterChainImpl.java:3252)
at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.executeUpdate(PreparedStatementProxyImpl.java:192)
at com.alibaba.druid.pool.DruidPooledPreparedStatement.executeUpdate(DruidPooledPreparedStatement.java:241)
at io.seata.rm.datasource.undo.AbstractUndoExecutor.executeOn(AbstractUndoExecutor.java:137)
at io.seata.rm.datasource.undo.AbstractUndoLogManager.undo(AbstractUndoLogManager.java:317)
... 16 common frames omitted

2024-03-28 13:52:50.385 INFO 11556 --- [_RMROLE_1_16_16] io.seata.rm.AbstractRMHandler : Branch Rollbacked result: PhaseTwo_RollbackFailed_Retryable
2024-03-28 13:52:51.372 INFO 11556 --- [h_RMROLE_1_1_16] i.s.c.r.p.c.RmBranchRollbackProcessor : rm handle branch rollback process:BranchRollbackRequest{xid='192.168.1.5:8091:6629803150973841558', branchId=6629803150973841560, branchType=AT, resourceId='jdbc:sqlserver://sqlserver:1433;databaseName=DL_CP_WMS_DEVICE', applicationData='null'}

@funky-eyes
Copy link
Contributor

当前undolog内容和表结构给个示例
The current undolog content and table structure give an example

@zhao-wen-bin zhao-wen-bin changed the title seata2.0 服务端用mysql+SqlServer业务端 主键使用雪花算法,回滚事务报没有标识属性。无法执行 SET 操作 seata2.1.0 服务端用mysql+SqlServer业务端 主键使用雪花算法,回滚事务报没有标识属性。无法执行 SET 操作 Mar 28, 2024
@zhao-wen-bin
Copy link
Author

zhao-wen-bin commented Mar 28, 2024

当前undolog内容和表结构给个示例 当前undolog内容和表结构给个例子

image

-- rf_collection 的表结构

IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[rf_collection]') AND type IN ('U'))
DROP TABLE [dbo].[rf_collection]
GO

CREATE TABLE [dbo].[rf_collection] (
[id] varchar(32) COLLATE Chinese_PRC_CI_AS NOT NULL,
[fixture_code] varchar(32) COLLATE Chinese_PRC_CI_AS NULL,
[fixture_name] nvarchar(64) COLLATE Chinese_PRC_CI_AS NULL,
[line_code] varchar(32) COLLATE Chinese_PRC_CI_AS NULL,
[line_name] nvarchar(64) COLLATE Chinese_PRC_CI_AS NULL,
[class_code] varchar(32) COLLATE Chinese_PRC_CI_AS NOT NULL,
[class_name] varchar(32) COLLATE Chinese_PRC_CI_AS NULL,
[warehouse_id] varchar(32) COLLATE Chinese_PRC_CI_AS NOT NULL,
[warehouse_name] nvarchar(64) COLLATE Chinese_PRC_CI_AS NULL,
[stock_location_id] varchar(32) COLLATE Chinese_PRC_CI_AS NOT NULL,
[stock_location_name] nvarchar(64) COLLATE Chinese_PRC_CI_AS NULL,
[tray_code] varchar(32) COLLATE Chinese_PRC_CI_AS NOT NULL,
[goods_id] varchar(32) COLLATE Chinese_PRC_CI_AS NOT NULL,
[goods_name] nvarchar(128) COLLATE Chinese_PRC_CI_AS NULL,
[goods_spec] nvarchar(255) COLLATE Chinese_PRC_CI_AS NULL,
[goods_bar_code] varchar(32) COLLATE Chinese_PRC_CI_AS NULL,
[goods_unit_id] varchar(32) COLLATE Chinese_PRC_CI_AS NULL,
[goods_unit_name] nvarchar(64) COLLATE Chinese_PRC_CI_AS NULL,
[goods_order_code] nvarchar(64) COLLATE Chinese_PRC_CI_AS NULL,
[goods_sap_code] nvarchar(64) COLLATE Chinese_PRC_CI_AS NULL,
[other_code] nvarchar(64) COLLATE Chinese_PRC_CI_AS NULL,
[print_date] varchar(32) COLLATE Chinese_PRC_CI_AS NULL,
[batch_code] varchar(32) COLLATE Chinese_PRC_CI_AS NULL,
[goods_status_id] varchar(32) COLLATE Chinese_PRC_CI_AS NULL,
[goods_status_name] nvarchar(64) COLLATE Chinese_PRC_CI_AS NULL,
[num] decimal(18,3) NULL,
[batch_rule_id] varchar(32) COLLATE Chinese_PRC_CI_AS NULL,
[batch_rule_name] nvarchar(64) COLLATE Chinese_PRC_CI_AS NULL,
[inout_type_id] varchar(32) COLLATE Chinese_PRC_CI_AS NULL,
[inout_type_name] nvarchar(64) COLLATE Chinese_PRC_CI_AS NULL,
[task_id] int NULL,
[is_tray] char(1) COLLATE Chinese_PRC_CI_AS DEFAULT '0' NULL,
[print_sign] char(1) COLLATE Chinese_PRC_CI_AS NULL,
[left_or_right] varchar(1) COLLATE Chinese_PRC_CI_AS NULL,
[is_in] char(1) COLLATE Chinese_PRC_CI_AS NULL,
[err_type] char(1) COLLATE Chinese_PRC_CI_AS NULL,
[tray_time] datetime DEFAULT getdate() NULL,
[src_table_code] varchar(32) COLLATE Chinese_PRC_CI_AS NULL,
[src_line] int NULL,
[order_code] varchar(12) COLLATE Chinese_PRC_CI_AS NULL,
[order_line] varchar(4) COLLATE Chinese_PRC_CI_AS NULL,
[return_id] varchar(10) COLLATE Chinese_PRC_CI_AS NULL,
[line_no] varchar(8) COLLATE Chinese_PRC_CI_AS NULL,
[remark] nvarchar(512) COLLATE Chinese_PRC_CI_AS NULL,
[create_by] varchar(32) COLLATE Chinese_PRC_CI_AS NULL,
[create_time] datetime NULL,
[update_by] varchar(32) COLLATE Chinese_PRC_CI_AS NULL,
[update_time] datetime NULL,
[tenant_id] varchar(32) COLLATE Chinese_PRC_CI_AS NULL
)
GO

ALTER TABLE [dbo].[rf_collection] SET (LOCK_ESCALATION = TABLE)
GO

EXEC sp_addextendedproperty
'MS_Description', N'主键ID',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection',
'COLUMN', N'id'
GO

EXEC sp_addextendedproperty
'MS_Description', N'输送机编码',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection',
'COLUMN', N'fixture_code'
GO

EXEC sp_addextendedproperty
'MS_Description', N'输送机名称',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection',
'COLUMN', N'fixture_name'
GO

EXEC sp_addextendedproperty
'MS_Description', N'生产线编码',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection',
'COLUMN', N'line_code'
GO

EXEC sp_addextendedproperty
'MS_Description', N'生产线名称',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection',
'COLUMN', N'line_name'
GO

EXEC sp_addextendedproperty
'MS_Description', N'班次编码',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection',
'COLUMN', N'class_code'
GO

EXEC sp_addextendedproperty
'MS_Description', N'班次名称',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection',
'COLUMN', N'class_name'
GO

EXEC sp_addextendedproperty
'MS_Description', N'库房ID',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection',
'COLUMN', N'warehouse_id'
GO

EXEC sp_addextendedproperty
'MS_Description', N'库房名称',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection',
'COLUMN', N'warehouse_name'
GO

EXEC sp_addextendedproperty
'MS_Description', N'库存地点ID',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection',
'COLUMN', N'stock_location_id'
GO

EXEC sp_addextendedproperty
'MS_Description', N'库存地点名称',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection',
'COLUMN', N'stock_location_name'
GO

EXEC sp_addextendedproperty
'MS_Description', N'托盘编码',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection',
'COLUMN', N'tray_code'
GO

EXEC sp_addextendedproperty
'MS_Description', N'产品ID',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection',
'COLUMN', N'goods_id'
GO

EXEC sp_addextendedproperty
'MS_Description', N'产品名称',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection',
'COLUMN', N'goods_name'
GO

EXEC sp_addextendedproperty
'MS_Description', N'产品规格型号',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection',
'COLUMN', N'goods_spec'
GO

EXEC sp_addextendedproperty
'MS_Description', N'产品编码',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection',
'COLUMN', N'goods_bar_code'
GO

EXEC sp_addextendedproperty
'MS_Description', N'产品单位ID',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection',
'COLUMN', N'goods_unit_id'
GO

EXEC sp_addextendedproperty
'MS_Description', N'产品单位名称',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection',
'COLUMN', N'goods_unit_name'
GO

EXEC sp_addextendedproperty
'MS_Description', N'产品条码',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection',
'COLUMN', N'goods_order_code'
GO

EXEC sp_addextendedproperty
'MS_Description', N'SAP产品编码',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection',
'COLUMN', N'goods_sap_code'
GO

EXEC sp_addextendedproperty
'MS_Description', N'其他外部产品编码',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection',
'COLUMN', N'other_code'
GO

EXEC sp_addextendedproperty
'MS_Description', N'产品日期',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection',
'COLUMN', N'print_date'
GO

EXEC sp_addextendedproperty
'MS_Description', N'产品批次',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection',
'COLUMN', N'batch_code'
GO

EXEC sp_addextendedproperty
'MS_Description', N'产品状态ID',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection',
'COLUMN', N'goods_status_id'
GO

EXEC sp_addextendedproperty
'MS_Description', N'产品状态名称',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection',
'COLUMN', N'goods_status_name'
GO

EXEC sp_addextendedproperty
'MS_Description', N'组托数量',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection',
'COLUMN', N'num'
GO

EXEC sp_addextendedproperty
'MS_Description', N'批次规则ID',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection',
'COLUMN', N'batch_rule_id'
GO

EXEC sp_addextendedproperty
'MS_Description', N'批次规则名称',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection',
'COLUMN', N'batch_rule_name'
GO

EXEC sp_addextendedproperty
'MS_Description', N'单据类型ID',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection',
'COLUMN', N'inout_type_id'
GO

EXEC sp_addextendedproperty
'MS_Description', N'单据类型名称',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection',
'COLUMN', N'inout_type_name'
GO

EXEC sp_addextendedproperty
'MS_Description', N'流水号',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection',
'COLUMN', N'task_id'
GO

EXEC sp_addextendedproperty
'MS_Description', N'托盘标志(0不是托盘,1是托盘)',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection',
'COLUMN', N'is_tray'
GO

EXEC sp_addextendedproperty
'MS_Description', N'打印标志(0等待贴标机打印,1等待人工打印,2打印完成,3贴标完成,4无需打印)',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection',
'COLUMN', N'print_sign'
GO

EXEC sp_addextendedproperty
'MS_Description', N'左右去向(0等待分配,1左,2右)',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection',
'COLUMN', N'left_or_right'
GO

EXEC sp_addextendedproperty
'MS_Description', N'直接入库标志',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection',
'COLUMN', N'is_in'
GO

EXEC sp_addextendedproperty
'MS_Description', N'采集错误类型',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection',
'COLUMN', N'err_type'
GO

EXEC sp_addextendedproperty
'MS_Description', N'组托时间',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection',
'COLUMN', N'tray_time'
GO

EXEC sp_addextendedproperty
'MS_Description', N'来源单据编码',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection',
'COLUMN', N'src_table_code'
GO

EXEC sp_addextendedproperty
'MS_Description', N'来源单据行号',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection',
'COLUMN', N'src_line'
GO

EXEC sp_addextendedproperty
'MS_Description', N'生产订单编号',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection',
'COLUMN', N'order_code'
GO

EXEC sp_addextendedproperty
'MS_Description', N'生产订单明细号',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection',
'COLUMN', N'order_line'
GO

EXEC sp_addextendedproperty
'MS_Description', N'SAP返回报工确认编号',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection',
'COLUMN', N'return_id'
GO

EXEC sp_addextendedproperty
'MS_Description', N'SAP返回报工确认计数器',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection',
'COLUMN', N'line_no'
GO

EXEC sp_addextendedproperty
'MS_Description', N'备注',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection',
'COLUMN', N'remark'
GO

EXEC sp_addextendedproperty
'MS_Description', N'创建人',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection',
'COLUMN', N'create_by'
GO

EXEC sp_addextendedproperty
'MS_Description', N'创建时间',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection',
'COLUMN', N'create_time'
GO

EXEC sp_addextendedproperty
'MS_Description', N'更新人',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection',
'COLUMN', N'update_by'
GO

EXEC sp_addextendedproperty
'MS_Description', N'更新时间',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection',
'COLUMN', N'update_time'
GO

EXEC sp_addextendedproperty
'MS_Description', N'租户ID',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection',
'COLUMN', N'tenant_id'
GO

EXEC sp_addextendedproperty
'MS_Description', N'组托信息表',
'SCHEMA', N'dbo',
'TABLE', N'rf_collection'
GO


-- Primary Key structure for table rf_collection


ALTER TABLE [dbo].[rf_collection] ADD CONSTRAINT [PK_rf_collection] PRIMARY KEY CLUSTERED ([id])
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
ON [PRIMARY]
GO

@zhao-wen-bin
Copy link
Author

zhao-wen-bin commented Mar 28, 2024

当前undolog内容和表结构给个示例 The current undolog content and table structure give an example

父服务上加@GlobalTransactional,子服务中是否需要@transactional
在子服务上加上@transactional也报这个错

服务端用的2.1.0,客户端还是用2.0.0,有影响么?

@zhao-wen-bin
Copy link
Author

当前undolog内容和表结构给个示例 The current undolog content and table structure give an example

能否加下微信

@GoodBoyCoder
Copy link
Contributor

当前版本AT模式的SqlServer在执行Delete场景回滚的时候会默认执行set identity_insert table_name ON 以开启主键插入,当表中没有标识列的情况下执行该语句就会抛出上面的问题,目前可以快速解决的方案是为该表建一个额外的标识列

The current version of SqlServer in AT mode will execute set identity_insert table_name on by default when executing Delete scenario rollback to enable primary key insertion. When there is no identity column in the table, executing this statement will throw the above problem. The current quick solution is to create an additional identity column for this table.

@zhao-wen-bin
Copy link
Author

什么时候会升级解决这个问题?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
3 participants