如何在Oracle中从远程数据库本地插入CLOB数据类型列值
How to insert CLOB data type column value locally from remote database in oracle
我正在使用数据库将数据从远程数据库提取到我的本地数据库 link.The 提取对其他远程数据库工作正常 tables 但是当我尝试插入以从远程获取数据时数据库 SOAP_MONITORING@FONIC_RETAIL table 并尝试在本地插入数据然后我收到错误消息:
EXCEPTION START EXT_SOAP_MONITORING 20.04.15 09:16:02,070559000 +02:00
EXCEPTION ORA-03113: end-of-file on communication channel
ORA-02063: preceding
line from FONIC_RETAIL
ERROR CODE-3113
ERROR:
ORA-00600: internal error code, arguments: [729], [33464], [space leak], [],
[], [], [], [], [], [], [], []
这是我面临的严重问题,但没有找到任何解决办法。 SOAP_MONITORING@FONIC_RETAIL
有 REQUEST_XML,RESPONSE_XML
列,其中包含大的 xml 字符串值,它有 CLOB
数据类型。我认为问题是因为这 2 列,因为它是 clob 数据类型并且包含大 xml 字符串,并且 clob 在使用远程 database.The SOAP_MONITORING@FONIC_RETAIL
包含序列 ID 列时出现问题生成并且我将最大 ID 保存在 CAPTURING
table 中,然后在下一次提取 15 分钟调度作业时间期间,我得到的数据 ID 大于上次保存的 ID。
这是我的程序:
PROCEDURE "EXT_SOAP_MONITORING" AS
LAST_SM_ID Number := 0;
BEGIN
--DELETE DATA FROM TEMP_SOAP_MONITORING
EXECUTE IMMEDIATE 'TRUNCATE TABLE TEMP_SOAP_MONITORING';
-- first retrieve the last id (of the newest record) which has been imported at last extraction
SELECT LAST_TASK_ID INTO LAST_SM_ID FROM CAPTURING where DB_TABLE='TEMP_SOAP_MONITORING';
-- retrieve all new records from remote SOAP_MONITORING@FONIC_RETAIL and insert it into TEMP_SOAP_MONITORING using MERGE statement
-- MERGE statement is able to retrieve CLOB fields:
merge into TEMP_SOAP_MONITORING TSM
using (
select * from
(select DISTINCT(ID),REQUEST_XML,RESPONSE_XML,WEB_SERVICE_NAME,WEB_METHOD_NAME,CREATE_DATE,ERROR_CODE,ERROR_MESSAGE from
SOAP_MONITORING@FONIC_RETAIL WHERE WEB_SERVICE_NAME='RatorWebShopService' and WEB_METHOD_NAME='placeShopOrder' and ID > LAST_SM_ID order by ID desc) where rownum <=1000
) data
ON (TSM.ID = data.ID)
when not matched then
insert(ID,REQUEST_XML,RESPONSE_XML,WEB_SERVICE_NAME,WEB_METHOD_NAME,CREATE_DATE,ERROR_CODE,ERROR_MESSAGE)
values(data.ID,data.REQUEST_XML,data.RESPONSE_XML,data.WEB_SERVICE_NAME,data.WEB_METHOD_NAME,data.CREATE_DATE,data.ERROR_CODE,data.ERROR_MESSAGE);
-- Set the newest extracted ID as LAST_TASK_ID for TEMP_SOAP_MONITORING in the Capturing table
update
CAPTURING set LAST_TASK_ID=
CASE WHEN (SELECT MAX(ID) from TEMP_SOAP_MONITORING) IS NULL THEN LAST_TASK_ID + 1 ELSE (SELECT MAX(ID) from TEMP_SOAP_MONITORING) END,
CAPTURING_DATE = CURRENT_TIMESTAMP where DB_TABLE='TEMP_SOAP_MONITORING';
-- Extract SUBSCCRIPTION_ID, ORDER_NUMBER and ORDER_TYPE from XML (CLOB) fields and store it separately in TMP_SOAP_MONITORING_IDS table:
-- first delete the last extraction data
DELETE FROM TMP_SOAP_MONITORING_IDS WHERE CREATE_DATE < SYSDATE - 7;
COMMIT;
END EXT_SOAP_MONITORING;
如 Rene 所述,您应该联系 Oracle 支持 and/or 阅读一些与此错误相关的支持文档。这可能是一个可以解决的错误
通过升级
我正在使用数据库将数据从远程数据库提取到我的本地数据库 link.The 提取对其他远程数据库工作正常 tables 但是当我尝试插入以从远程获取数据时数据库 SOAP_MONITORING@FONIC_RETAIL table 并尝试在本地插入数据然后我收到错误消息:
EXCEPTION START EXT_SOAP_MONITORING 20.04.15 09:16:02,070559000 +02:00
EXCEPTION ORA-03113: end-of-file on communication channel
ORA-02063: preceding
line from FONIC_RETAIL
ERROR CODE-3113
ERROR:
ORA-00600: internal error code, arguments: [729], [33464], [space leak], [],
[], [], [], [], [], [], [], []
这是我面临的严重问题,但没有找到任何解决办法。 SOAP_MONITORING@FONIC_RETAIL
有 REQUEST_XML,RESPONSE_XML
列,其中包含大的 xml 字符串值,它有 CLOB
数据类型。我认为问题是因为这 2 列,因为它是 clob 数据类型并且包含大 xml 字符串,并且 clob 在使用远程 database.The SOAP_MONITORING@FONIC_RETAIL
包含序列 ID 列时出现问题生成并且我将最大 ID 保存在 CAPTURING
table 中,然后在下一次提取 15 分钟调度作业时间期间,我得到的数据 ID 大于上次保存的 ID。
这是我的程序:
PROCEDURE "EXT_SOAP_MONITORING" AS
LAST_SM_ID Number := 0;
BEGIN
--DELETE DATA FROM TEMP_SOAP_MONITORING
EXECUTE IMMEDIATE 'TRUNCATE TABLE TEMP_SOAP_MONITORING';
-- first retrieve the last id (of the newest record) which has been imported at last extraction
SELECT LAST_TASK_ID INTO LAST_SM_ID FROM CAPTURING where DB_TABLE='TEMP_SOAP_MONITORING';
-- retrieve all new records from remote SOAP_MONITORING@FONIC_RETAIL and insert it into TEMP_SOAP_MONITORING using MERGE statement
-- MERGE statement is able to retrieve CLOB fields:
merge into TEMP_SOAP_MONITORING TSM
using (
select * from
(select DISTINCT(ID),REQUEST_XML,RESPONSE_XML,WEB_SERVICE_NAME,WEB_METHOD_NAME,CREATE_DATE,ERROR_CODE,ERROR_MESSAGE from
SOAP_MONITORING@FONIC_RETAIL WHERE WEB_SERVICE_NAME='RatorWebShopService' and WEB_METHOD_NAME='placeShopOrder' and ID > LAST_SM_ID order by ID desc) where rownum <=1000
) data
ON (TSM.ID = data.ID)
when not matched then
insert(ID,REQUEST_XML,RESPONSE_XML,WEB_SERVICE_NAME,WEB_METHOD_NAME,CREATE_DATE,ERROR_CODE,ERROR_MESSAGE)
values(data.ID,data.REQUEST_XML,data.RESPONSE_XML,data.WEB_SERVICE_NAME,data.WEB_METHOD_NAME,data.CREATE_DATE,data.ERROR_CODE,data.ERROR_MESSAGE);
-- Set the newest extracted ID as LAST_TASK_ID for TEMP_SOAP_MONITORING in the Capturing table
update
CAPTURING set LAST_TASK_ID=
CASE WHEN (SELECT MAX(ID) from TEMP_SOAP_MONITORING) IS NULL THEN LAST_TASK_ID + 1 ELSE (SELECT MAX(ID) from TEMP_SOAP_MONITORING) END,
CAPTURING_DATE = CURRENT_TIMESTAMP where DB_TABLE='TEMP_SOAP_MONITORING';
-- Extract SUBSCCRIPTION_ID, ORDER_NUMBER and ORDER_TYPE from XML (CLOB) fields and store it separately in TMP_SOAP_MONITORING_IDS table:
-- first delete the last extraction data
DELETE FROM TMP_SOAP_MONITORING_IDS WHERE CREATE_DATE < SYSDATE - 7;
COMMIT;
END EXT_SOAP_MONITORING;
如 Rene 所述,您应该联系 Oracle 支持 and/or 阅读一些与此错误相关的支持文档。这可能是一个可以解决的错误 通过升级