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))

浙公网安备 33010602011771号