document.write("");

Seata 1.3.0 Oracle 回滚测试验证 报错 ORA-02289: 序列不存在

使用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;

  

posted @ 2024-07-19 15:12  人间春风意  阅读(39)  评论(0编辑  收藏  举报