oracle 错误38824:CREATE OR REPLACE命令不能更改现有对象的EDITIONABLE属性

zpgglvta  于 2023-04-05  发布在  Oracle
关注(0)|答案(3)|浏览(742)

我们正在实现我们的数据库生产对象的单元测试系统,如包,过程,触发器和公司。要做到这一点,我们有一个容器,它从https://github.com/oracle/docker-images/tree/master/OracleDatabase创建数据库。然后我们执行脚本,创建模式,用户,授予一些特权,创建良好的表空间......然后我们使用数据泵Oracle expdp和impdp模式。这些步骤是成功的。
当我们尝试对我们的过程和包执行测试时出现问题。由于编译错误“ORA-38824:CREATE OR REPLACE命令不能更改现有对象的EDITIONABLE属性”。
但是如果我们删除测试的过程,然后重新创建它,错误就不会再出现了。事情是我们不想手动删除并重新创建过程。
我们的环境和容器数据库之间的唯一区别是,当我们从头开始创建一个过程/包时,对象详细信息中的Editionable参数在容器中位于'N',而在我们的环境中位于'Y'。
似乎对象的Editionable参数必须在数据库级别设置。但问题是它可以在哪里设置?
我们尝试'ALTER USER X ENABLE EDITIONS;'未成功,因为它导致'ORA-38813:架构X '不支持版本。
Impdp和Expdp是否造成了麻烦?
我们尝试使用'source_edition'和'target_edition'作为我们的expdp/impdp进程。我们显然遗漏了一些东西或做错了一些事情,但我们无法找到什么。
我在互联网上搜索过,但没有太多人面临这个问题。
你能帮我们吗?
先谢谢你了文森特。

klr1opcd

klr1opcd1#

我检查了Oracle支持网站(应该早点这样做),这个错误与12c中的一个错误有关。例如,在一个这样的文档(Meta Link Document)中,它是这样说的。所以请通过提出SR将这个问题提交给Oracle,他们很可能会返回Oracle版本升级的建议:
请应用合并修补程序错误27314007:在12.2.0.1.0之上针对错误25557064 26645487的合并请求
使用以下步骤进行升级:
1.停止当前的DBUA会话。
1.下载此修补程序并将其应用于12.2 Oracle主目录。
1.还原12.1数据库。
1.重新运行从12.1到12.2的升级。
谢啦

kb5ga3dv

kb5ga3dv2#

我最近经历了这个,分析它,我们不会使用EDITIONABLE功能,所以我运行下面的命令,留下NONEDITIONABLE对象,因为这样对象就被替换了。在DBA_OBJECTS表中,EDITIONABLE列是N,所以当需要执行imp时,没有问题。

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;
d7v8vwbk

d7v8vwbk3#

不是大问题,只是授予访问权限问题。从SYS/Admin用户运行此查询
授权创建过程;

相关问题