document.write("");

seata 1.6.1 linux server MySQL DB 切换为 Oracle DB报错

1. SQL 问题

从seata 中拿到的Oracle SQL ,无法直接执行,(/seata-cluster-1.6.1/seata-server01/script/server/db/oracle.sql)

执行到lock_table 建表SQL,报错

ORA-00907: missing right parenthesis

原因为如下SQL的 DEFAULT 0 写法,Oracle不支持

CREATE TABLE lock_table
(
    row_key        VARCHAR2(128) NOT NULL,
    xid            VARCHAR2(128),
    transaction_id NUMBER(19),
    branch_id      NUMBER(19)    NOT NULL,
    resource_id    VARCHAR2(256),
    table_name     VARCHAR2(32),
    pk             VARCHAR2(36),
    status         NUMBER(3)     NOT NULL DEFAULT 0,
    gmt_create     TIMESTAMP(0),
    gmt_modified   TIMESTAMP(0),
    PRIMARY KEY (row_key)
);

去掉DEFAULT 0后,补充执行

   ALTER TABLE lock_table MODIFY status DEFAULT 0;
   

即可

执行添加index报错(如下sql)

CREATE INDEX idx_xid ON lock_table (xid);

是因为index名称在之前已经被使用,更换一个新的index名称即可

如:

CREATE INDEX lock_idx_xid ON lock_table (xid);

 

2. 驱动问题

更改seata db配置后,重启报错,原因为没有oracle驱动

自行下载oracle8.jar 放到 seata-cluster-1.6.1/seata-server01/lib/jdbc/文件夹下即可

 3. 运行报错,调整字段长度

Caused by: oracle.jdbc.OracleDatabaseException: ORA-12899: value too large for column "SEATA_DB"."LOCK_TABLE"."ROW_KEY" (actual: 249, maximum: 128)

执行如下SQL,修改lock_tabke表的row_key与pk字段长度即可

ALTER TABLE  "LOCK_TABLE" 
MODIFY ("ROW_KEY" VARCHAR2(1024 BYTE))
MODIFY ("PK" VARCHAR2(1024 BYTE))

 

posted @ 2025-04-04 09:38  人间春风意  阅读(31)  评论(0)    收藏  举报