使用Seata 1.3.0版本,测试A服务调用B服务,且A方法中,手动写了一个异常,测试是否正常回滚(Mysql已经测试过)
发现报错:ORA-02289: 序列不存在
一看就是undo_log这张表的sequence没有建立,导致数据保存不了,
太久没有用oracle了,之前搜索undo_log的建表SQL是直接在网上搜索的,所以缺少了建sequence的部分
在代码里(\incubator-seata-1.3.0\script\client\at\db目录)下,找到了oracle.sql,删除了旧表,跑一下sql就OK了
【其实是想用2.1.0的,因为支持了sqlserver,但是因为这个版本还是预发布版,以及涉及到的其它组件的版本,以及jdk要求等,最终弃用】
-- for AT mode you must to init this sql for you business database. the seata server not need it. CREATE TABLE undo_log ( id NUMBER(19) NOT NULL, branch_id NUMBER(19) NOT NULL, xid VARCHAR2(100) NOT NULL, context VARCHAR2(128) NOT NULL, rollback_info BLOB NOT NULL, log_status NUMBER(10) NOT NULL, log_created TIMESTAMP(0) NOT NULL, log_modified TIMESTAMP(0) NOT NULL, PRIMARY KEY (id), CONSTRAINT ux_undo_log UNIQUE (xid, branch_id) ); COMMENT ON TABLE undo_log IS 'AT transaction mode undo table'; -- Generate ID using sequence and trigger CREATE SEQUENCE UNDO_LOG_SEQ START WITH 1 INCREMENT BY 1;
标签:回滚,Seata,1.3,undo,报错,NULL,id,log From: https://www.cnblogs.com/uoky/p/18311528