Monday, May 20, 2019

Oracle : ORA-30554: function-based index XDB.XDB$ACL_XIDX is disabled

ACL creation failing with

ORA-30554: function-based index XDB.XDB$ACL_XIDX is disabled


BEGIN 
    DBMS_NETWORK_ACL_ADMIN.create_acl(acl => 'Resolve_Access.xml',
         description  => 'Resolve Network Access using UTL_INADDR', 
                                      principal    => 'SYS', 
                                      is_grant     => TRUE, 
                                      privilege    => 'resolve', 
                                      start_date   => NULL, 
                                      end_date     => NULL 
                                                          ); 

    COMMIT; 
END; 
/
BEGIN
*
ERROR at line 1:
ORA-30554: function-based index XDB.XDB$ACL_XIDX is disabled
ORA-06512: at "SYS.DBMS_NETWORK_ACL_ADMIN", line 258
ORA-06512: at line 2

Fix :

SQL> select owner, index_name, status, domidx_status, domidx_opstatus,funcidx_status from dba_indexes where domidx_opstatus is not null;

OWNER                          INDEX_NAME                     STATUS   DOMIDX_STATU DOMIDX FUNCIDX_
------------------------------ ------------------------------ -------- ------------ ------ --------
XDB                            XDBHI_IDX                      VALID    VALID        VALID  ENABLED
XDB                            XDB$ACL_XIDX                   VALID    VALID        VALID  DISABLED

SQL> alter index XDB.XDB$ACL_XIDX rebuild;

Index altered.

SQL> select owner, index_name, status, domidx_status, domidx_opstatus,funcidx_status from dba_indexes where domidx_opstatus is not null;

OWNER                          INDEX_NAME                     STATUS   DOMIDX_STATU DOMIDX FUNCIDX_
------------------------------ ------------------------------ -------- ------------ ------ --------
XDB                            XDBHI_IDX                      VALID    VALID        VALID  ENABLED
XDB                            XDB$ACL_XIDX                   VALID    VALID        VALID  ENABLE


No Rerun the Create ACL command


BEGIN 
    DBMS_NETWORK_ACL_ADMIN.create_acl(acl => 'Resolve_Access.xml',
         description  => 'Resolve Network Access using UTL_INADDR', 
                                      principal    => 'SYS', 
                                      is_grant     => TRUE, 
                                      privilege    => 'resolve', 
                                      start_date   => NULL, 
                                      end_date     => NULL 
                                                          ); 

    COMMIT; 
END; 

PL/SQL procedure successfully completed.