错误38824:CREATE或REPLACE命令可能无法更改现有对象的EDITIONABLE属性

时间:2018-09-07 08:28:50

标签: oracle

我们正在实现数据库生产对象(如包,过程,触发器&co)的单元测试系统。为此,我们有一个容器,可以从https://github.com/oracle/docker-images/tree/master/OracleDatabase创建数据库。 然后,我们执行脚本来创建模式,用户,授予一些特权,创建良好的表空间...然后,我们使用Data Pump Oracle来Expdp和Impdp模式。这些步骤是成功的。

当我们尝试对过程和程序包执行测试时,出现问题。由于编译错误“ ORA-38824:CREATE或REPLACE命令可能无法更改现有对象的EDITIONABLE属性”,因此在架构中找不到它们。

但是,如果我们放弃测试的程序,然后重新创建它,该错误将不再出现。事情是我们不想手动删除并重新创建该过程。

我们的环境与容器数据库之间的唯一区别是,当我们从头开始创建过程/程序包时,对象详细信息中的Editionable参数在容器中的容器中为“ N”,而在我们的环境中为“ Y”。

似乎必须在数据库级别设置对象的可编辑参数。 但是问题是在哪里可以设置?

我们试图“更改USER X启用版本”;没有成功,因为它会导致“ ORA-38813:架构X不支持的版本”。

Impdp和Expdp是否引起麻烦?

我们尝试在expdp impdp流程中使用“ source_edition”和“ target_edition”。 我们显然缺少了某些东西或做错了什么,但是我们找不到。

我已经在互联网上进行搜索,但是没有太多人面临这个问题。

能否请您提供帮助?

先谢谢了。 文森特。

2 个答案:

答案 0 :(得分:0)

我检查了Oracle支持网站(应该更早完成此操作),并且该错误与12c中的错误有关。例如,在一个这样的文档(Meta Link Document)中,它表示如下。因此,请通过提高SR将此问题转给Oracle,很有可能他们会提出有关Oracle版本升级的建议:

请应用合并补丁程序错误27314007:对于漏洞的12.2.0.1.0上的合并请求25557064 26645487

使用以下步骤进行升级:

  1. 停止当前的DBUA会话。
  2. 下载补丁并将其应用于12.2 Oracle主页。
  3. 还原12.1数据库。
  4. 重新运行从12.1到12.2的升级。

谢谢

答案 1 :(得分:0)

我最近经历了此过程,并对其进行了分析,因此我们将不使用EDITIONABLE功能,因此我在下面运行了命令,保留了NONEDITIONABLE对象,因为那样就替换了这些对象。并且在DBA_OBJECTS表中,EDITIONABLE列为N,因此,当需要进行展示时,就没有问题。

DECLARE
  TYPE t_cursor IS REF CURSOR;
  TYPE t_string_array IS TABLE OF VARCHAR2(1000) INDEX BY BINARY_INTEGER;
  vcursor      t_cursor;
  varraystring t_string_array;
  vstring      VARCHAR2(500);
  i            BINARY_INTEGER;
BEGIN
  OPEN vcursor FOR
    select 'ALTER ' || do.object_type || ' ' || do.owner || '.' || do.object_name || ' NONEDITIONABLE'
      from DBA_OBJECTS do
     where do.editionable = 'Y'
       and do.owner NOT IN('QS_CB','DIP','PERFSTAT','QS_ADM','PM','SH','HR','OE','ODM_MTR','WKPROXY','ANONYMOUS','OWNER','SYS','SYSTEM','SCOTT','SYSMAN','XDB','DBSNMP','EXFSYS','OLAPSYS','MDSYS','WMSYS','WKSYS','DMSYS','ODM','EXFSYS','CTXSYS','LBACSYS','ORDPLUGINS','SQLTXPLAIN','OUTLN','TSMSYS','XS$NULL','TOAD','STREAM','SPATIAL_CSW_ADMIN','SPATIAL_WFS_ADMIN','SI_INFORMTN_SCHEMA','QS','QS_CBADM','QS_CS','QS_ES','QS_OS','QS_WS','PA_AWR_USER','OWBSYS_AUDIT','OWBSYS','ORDSYS','ORDDATA','ORACLE_OCM','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','MGMT_VIEW','MDDATA','FLOWS_FILES','FLASHBACK','AWRUSER','APPQOSSYS','APEX_PUBLIC_USER','DVSYS')
       and do.object_type IN ('FUNCTION','LIBRARY','PACKAGE BODY','PACKAGE','PROCEDURE','TRIGGER','TYPE','TYPE BODY','SYNONYM','VIEW');
  LOOP
    FETCH vcursor BULK COLLECT
      INTO varraystring;
    EXIT WHEN varraystring.count = 0;
    FOR i IN varraystring.first .. varraystring.last LOOP
      EXECUTE IMMEDIATE varraystring(i);
    END LOOP;
    EXIT WHEN vcursor%NOTFOUND;
  END LOOP;
  CLOSE vcursor;
END;