首页 > 解决方案 > 通过 DB Link 从 MariaDB 获取 LONGTEXT 到 Oracle

问题描述

我的目标是将包含LONGTEXT从 MariaDB(10.1.26 64 位)的表复制到 Oracle(12.1.0.1.0 64 位)

这是我的initCCS.ora文件:

HS_FDS_CONNECT_INFO=CCS
HS_FDS_TRACE_LEVEL=INFO
HS_FDS_SHAREABLE_NAME=/path/to/libodbc/libodbc.so
HS_KEEP_REMOTE_COLUMN_SIZE=LOCAL
HS_NLS_NCHAR=UCS2
HS_LANGUAGE=AMERICAN_AMERICA.UTF8
set ODBCINI=/path/to/odbc/ini/odbc.ini

这是odbc.iniCCS 的一部分:

[CCS]
Driver = /path/to/lib/libmaodbc.so
server = mariadb.server.loc
database = db_name
CHARSET = UTF8

这是我要复制的表(我已将其简化为仅包含 2 列):

+--------------+--------------+-------------+
|    Column    | Mariadb type | Oracle type |
+--------------+--------------+-------------+
| ID           | INTEGER      | INTEGER     |
| LONG_CONTENT | LONGTEXT     | CLOB        |
+--------------+--------------+-------------+

LONG_CONTENT列包含巨大的字符串(超过 32k 个符号)。

当我尝试复制没有LONGTEXT列的表时,它工作正常:

insert into local_table (id)
select id from remote_table@ccs

当我尝试复制LONGTEXT列时 - 我得到ORA-00997

insert into local_table (id, long_content) 
select id, long_content from remote_table@ccs

ORA-00997: 非法使用 LONG 数据类型

我尝试使用 CTAS 复制此表:

create table local_temp_table as
select *
from remote_table@ccs

ORA-00997: 非法使用 LONG 数据类型

对已复制的行使用更新:

update local_table lt
set lt.long_content = (
    select rt.long_content
    from remote_table@ccs rt
    where rt.id = lt.id
)

ORA-00997: 非法使用 LONG 数据类型

使用动态 sql:

execute immediate 'insert into local_table (long_content) select long_content from remote_table@ccs where id = 1';

ORA-00997: 非法使用 LONG 数据类型

当我尝试复制带有LONGBLOB列的表时出现相同的错误。

在这一点上,我不确定是什么导致了问题——我的设置,或者我在 PL/SQL 中复制表的方法。

标签: oraclemariadboracle12cdblink

解决方案


推荐阅读