{"id":3977,"date":"2019-02-01T14:24:17","date_gmt":"2019-02-01T16:24:17","guid":{"rendered":"https:\/\/www.dbarj.com.br\/?p=3977"},"modified":"2019-02-01T14:25:10","modified_gmt":"2019-02-01T16:25:10","slug":"dissecting-190115-bp-psu-ru-and-rur","status":"publish","type":"post","link":"https:\/\/www.dbarj.com.br\/pt-br\/2019\/02\/dissecting-190115-bp-psu-ru-and-rur\/","title":{"rendered":"Dissecting 190115 BP, PSU, RU and RUR"},"content":{"rendered":"<p>I am quarterly writing a post dissecting the changes implemented by Oracle CPUs so we can understand better the modifications implemented by Oracle in our Databases.<\/p>\n<p>To check previous changes, follow the links below:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.dbarj.com.br\/pt-br\/2018\/11\/dissecting-181016-bp-psu-ru-and-rur\/\" target=\"_blank\" rel=\"noopener\">Dissecting 181016 BP, PSU, RU and RUR<\/a><\/li>\n<li><a href=\"\/?p=3770\" target=\"_blank\" rel=\"noopener\">Dissecting 180717 BP, PSU, RU and RUR<\/a><\/li>\n<li><a href=\"https:\/\/www.dbarj.com.br\/pt-br\/2018\/05\/dissecting-180417-bp-psu-ru-and-rur\/\" target=\"_blank\" rel=\"noopener\">Dissecting 180417 BP, PSU, RU and RUR<\/a><\/li>\n<li><a href=\"https:\/\/www.dbarj.com.br\/pt-br\/2018\/01\/dissecting-180116-bp-psu-ru-rur\/\" target=\"_blank\" rel=\"noopener\">Dissecting 180116 BP, PSU, RU and RUR<\/a><\/li>\n<li><a href=\"https:\/\/www.dbarj.com.br\/pt-br\/2017\/10\/dissecting-171017-bp-psu-ru-rur-2\/\" target=\"_blank\" rel=\"noopener\">Dissecting 171017 BP, PSU, RU and RUR<\/a><\/li>\n<\/ul>\n<p>So what oracle internal objects were changed in <strong>January 2019 &#8211; <\/strong><span style=\"text-decoration: underline;\"><strong>190115<\/strong><\/span>?<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">VERSION    PATCH      OWNER                          TYPE                 TOTAL\r\n---------- ---------- ------------------------------ --------------- ----------\r\n11.2.0.4   BP         SYS                            PACKAGE BODY             1\r\n12.1.0.2   PSU &amp; BP   SYS                            PACKAGE BODY             1\r\n12.2.0.1   JUL2018RUR SYS                            PACKAGE                  2\r\n12.2.0.1   JUL2018RUR SYS                            PACKAGE BODY             2\r\n12.2.0.1   OCT2018RUR DVSYS                          TYPE                     5\r\n12.2.0.1   OCT2018RUR SYS                            PACKAGE                  2\r\n12.2.0.1   OCT2018RUR SYS                            PACKAGE BODY             7\r\n12.2.0.1   RU         SYS                            PACKAGE                  1\r\n12.2.0.1   RU         SYS                            PACKAGE BODY             2\r\n18.0.0.0   18.3RUR    SYS                            PACKAGE                  4\r\n18.0.0.0   18.3RUR    SYS                            PACKAGE BODY             3\r\n18.0.0.0   18.4RUR    SYS                            PACKAGE                  4\r\n18.0.0.0   18.4RUR    SYS                            PACKAGE BODY             3\r\n18.0.0.0   RU         GSMADMIN_INTERNAL              PACKAGE BODY             2\r\n18.0.0.0   RU         SYS                            PACKAGE                  5\r\n18.0.0.0   RU         SYS                            PACKAGE BODY             6\r\n18.0.0.0   RU         SYS                            TYPE                     4\r\n18.0.0.0   RU         SYS                            TYPE BODY                4\r\n18.0.0.0   RU         XDB                            PACKAGE BODY             1<\/pre>\n<p>And created?<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">-<\/pre>\n<p><span style=\"font-size: 12pt; color: #800000;\"><strong>P.S: Nothing was added for 11.2 \/12.1 \/ 12.2 \/ 18c in Oracle objects.<\/strong><\/span><\/p>\n<p>So which are exactly the objects modified by 190115?<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">VERSION    PATCH           OWNER                          TYPE            NAME                           ACTION\r\n---------- --------------- ------------------------------ --------------- ------------------------------ ------\r\n11.2.0.4   BP              SYS                            PACKAGE BODY    DBMS_PARALLEL_EXECUTE_INTERNAL MOD\r\n12.1.0.2   PSU &amp; BP        SYS                            PACKAGE BODY    CDBVIEW                        MOD\r\n12.2.0.1   OCT2018RUR      DVSYS                          TYPE            SYS_YOID0000072649$            MOD\r\n12.2.0.1   OCT2018RUR      DVSYS                          TYPE            SYS_YOID0000072661$            MOD\r\n12.2.0.1   OCT2018RUR      DVSYS                          TYPE            SYS_YOID0000072667$            MOD\r\n12.2.0.1   OCT2018RUR      DVSYS                          TYPE            SYS_YOID0000072694$            MOD\r\n12.2.0.1   OCT2018RUR      DVSYS                          TYPE            SYS_YOID0000072697$            MOD\r\n12.2.0.1   OCT2018RUR      SYS                            PACKAGE BODY    DBMS_XSTREAM_ADM_INTERNAL      MOD\r\n12.2.0.1   OCT2018RUR      SYS                            PACKAGE BODY    DBMS_XSTREAM_ADM_UTL           MOD\r\n12.2.0.1   OCT2018RUR      SYS                            PACKAGE BODY    DBMS_XSTREAM_AUTH_IVK          MOD\r\n12.2.0.1   OCT2018RUR      SYS                            PACKAGE BODY    DBMS_XSTREAM_GG_INTERNAL       MOD\r\n12.2.0.1   OCT2018RUR      SYS                            PACKAGE BODY    DBMS_XSTREAM_UTL_IVK           MOD\r\n12.2.0.1   OCT2018RUR &amp;    SYS                            PACKAGE         CDBVIEW                        MOD\r\n           JUL2018RUR\r\n12.2.0.1   OCT2018RUR &amp;    SYS                            PACKAGE         CDBVIEW_INTERNAL               MOD\r\n           JUL2018RUR\r\n12.2.0.1   OCT2018RUR &amp;    SYS                            PACKAGE BODY    CDBVIEW                        MOD\r\n           JUL2018RUR\r\n12.2.0.1   OCT2018RUR &amp;    SYS                            PACKAGE BODY    CDBVIEW_INTERNAL               MOD\r\n           JUL2018RUR\r\n12.2.0.1   RU              SYS                            PACKAGE         DBMS_AUTOTASK_PRVT             MOD\r\n12.2.0.1   RU              SYS                            PACKAGE BODY    DBMS_AUTOTASK_PRVT             MOD\r\n12.2.0.1   RU              SYS                            PACKAGE BODY    DBMS_SQLPATCH                  MOD\r\n18.0.0.0   RU              GSMADMIN_INTERNAL              PACKAGE BODY    DBMS_GSM_COMMON                MOD\r\n18.0.0.0   RU              GSMADMIN_INTERNAL              PACKAGE BODY    DBMS_GSM_DBADMIN               MOD\r\n18.0.0.0   RU              SYS                            PACKAGE         DBMS_AUTOTASK_PRVT             MOD\r\n18.0.0.0   RU              SYS                            PACKAGE BODY    DBMS_AUTOTASK_PRVT             MOD\r\n18.0.0.0   RU              SYS                            PACKAGE BODY    DBMS_STATS                     MOD\r\n18.0.0.0   RU              SYS                            PACKAGE BODY    DBMS_STATS_ADVISOR             MOD\r\n18.0.0.0   RU              SYS                            TYPE            JDOM_T                         MOD\r\n18.0.0.0   RU              SYS                            TYPE            JSON_ARRAY_T                   MOD\r\n18.0.0.0   RU              SYS                            TYPE            JSON_ELEMENT_T                 MOD\r\n18.0.0.0   RU              SYS                            TYPE            JSON_OBJECT_T                  MOD\r\n18.0.0.0   RU              SYS                            TYPE BODY       JDOM_T                         MOD\r\n18.0.0.0   RU              SYS                            TYPE BODY       JSON_ARRAY_T                   MOD\r\n18.0.0.0   RU              SYS                            TYPE BODY       JSON_ELEMENT_T                 MOD\r\n18.0.0.0   RU              SYS                            TYPE BODY       JSON_OBJECT_T                  MOD\r\n18.0.0.0   RU              XDB                            PACKAGE BODY    DBMS_SODA_ADMIN                MOD\r\n18.0.0.0   RU &amp; 18.4RUR &amp;  SYS                            PACKAGE         CDBVIEW                        MOD\r\n           18.3RUR\r\n18.0.0.0   RU &amp; 18.4RUR &amp;  SYS                            PACKAGE         CDBVIEW_INTERNAL               MOD\r\n           18.3RUR\r\n18.0.0.0   RU &amp; 18.4RUR &amp;  SYS                            PACKAGE         DBMS_BACKUP_RESTORE            MOD\r\n           18.3RUR\r\n18.0.0.0   RU &amp; 18.4RUR &amp;  SYS                            PACKAGE         DBMS_REGISTRY                  MOD\r\n           18.3RUR\r\n18.0.0.0   RU &amp; 18.4RUR &amp;  SYS                            PACKAGE BODY    CDBVIEW                        MOD\r\n           18.3RUR\r\n18.0.0.0   RU &amp; 18.4RUR &amp;  SYS                            PACKAGE BODY    CDBVIEW_INTERNAL               MOD\r\n           18.3RUR\r\n18.0.0.0   RU &amp; 18.4RUR &amp;  SYS                            PACKAGE BODY    DBMS_RCVMAN                    MOD\r\n           18.3RUR<\/pre>\n<h2><strong>What changed for each? (click to see the changes)<\/strong><\/h2>\n<ul>\n<li>11.2.0.4\n<ul>\n<li><a href=\"#SYS.DBMS_PARALLEL_EXECUTE_INTERNAL.PACKAGE BODY.11.2.0.4_BP\">SYS.DBMS_PARALLEL_EXECUTE_INTERNAL &#8211; PACKAGE BODY 11g (BP)<\/a><\/li>\n<\/ul>\n<\/li>\n<li>12.1.0.2\n<ul>\n<li><a href=\"#SYS.CDBVIEW.PACKAGE BODY.12.1.0.2_PSU\">SYS.CDBVIEW &#8211; PACKAGE BODY 12cR1 (PSU &amp; BP)<\/a><\/li>\n<\/ul>\n<\/li>\n<li>12.2.0.1\n<ul>\n<li><a href=\"#DVSYS.SYS_YOID0000072649$.TYPE.12.2.0.1_OCT2018RUR\">DVSYS.SYS_YOID0000072649$ &#8211; TYPE 12cR2 (OCT2018RUR)<\/a><\/li>\n<li><a href=\"#DVSYS.SYS_YOID0000072661$.TYPE.12.2.0.1_OCT2018RUR\">DVSYS.SYS_YOID0000072661$ &#8211; TYPE 12cR2 (OCT2018RUR)<\/a><\/li>\n<li><a href=\"#DVSYS.SYS_YOID0000072667$.TYPE.12.2.0.1_OCT2018RUR\">DVSYS.SYS_YOID0000072667$ &#8211; TYPE 12cR2 (OCT2018RUR)<\/a><\/li>\n<li><a href=\"#DVSYS.SYS_YOID0000072694$.TYPE.12.2.0.1_OCT2018RUR\">DVSYS.SYS_YOID0000072694$ &#8211; TYPE 12cR2 (OCT2018RUR)<\/a><\/li>\n<li><a href=\"#DVSYS.SYS_YOID0000072697$.TYPE.12.2.0.1_OCT2018RUR\">DVSYS.SYS_YOID0000072697$ &#8211; TYPE 12cR2 (OCT2018RUR)<\/a><\/li>\n<li><a href=\"#SYS.CDBVIEW.PACKAGE.12.2.0.1_JUL2018RUR\">SYS.CDBVIEW &#8211; PACKAGE 12cR2 (OCT2018RUR &amp; JUL2018RUR)<\/a><\/li>\n<li><a href=\"#SYS.CDBVIEW_INTERNAL.PACKAGE.12.2.0.1_JUL2018RUR\">SYS.CDBVIEW_INTERNAL &#8211; PACKAGE 12cR2 (OCT2018RUR &amp; JUL2018RUR)<\/a><\/li>\n<li><a href=\"#SYS.DBMS_AUTOTASK_PRVT.PACKAGE.12.2.0.1_RU\">SYS.DBMS_AUTOTASK_PRVT &#8211; PACKAGE 12cR2 (RU)<\/a><\/li>\n<li><a href=\"#SYS.CDBVIEW.PACKAGE BODY.12.2.0.1_JUL2018RUR\">SYS.CDBVIEW &#8211; PACKAGE BODY 12cR2 (OCT2018RUR &amp; JUL2018RUR)<\/a><\/li>\n<li><a href=\"#SYS.CDBVIEW_INTERNAL.PACKAGE BODY.12.2.0.1_JUL2018RUR\">SYS.CDBVIEW_INTERNAL &#8211; PACKAGE BODY 12cR2 (OCT2018RUR &amp; JUL2018RUR)<\/a><\/li>\n<li><a href=\"#SYS.DBMS_AUTOTASK_PRVT.PACKAGE BODY.12.2.0.1_RU\">SYS.DBMS_AUTOTASK_PRVT &#8211; PACKAGE BODY 12cR2 (RU)<\/a><\/li>\n<li><a href=\"#SYS.DBMS_SQLPATCH.PACKAGE BODY.12.2.0.1_RU\">SYS.DBMS_SQLPATCH &#8211; PACKAGE BODY 12cR2 (RU)<\/a><\/li>\n<li><a href=\"#SYS.DBMS_XSTREAM_ADM_INTERNAL.PACKAGE BODY.12.2.0.1_OCT2018RUR\">SYS.DBMS_XSTREAM_ADM_INTERNAL &#8211; PACKAGE BODY 12cR2 (OCT2018RUR)<\/a><\/li>\n<li><a href=\"#SYS.DBMS_XSTREAM_ADM_UTL.PACKAGE BODY.12.2.0.1_OCT2018RUR\">SYS.DBMS_XSTREAM_ADM_UTL &#8211; PACKAGE BODY 12cR2 (OCT2018RUR)<\/a><\/li>\n<li><a href=\"#SYS.DBMS_XSTREAM_AUTH_IVK.PACKAGE BODY.12.2.0.1_OCT2018RUR\">SYS.DBMS_XSTREAM_AUTH_IVK &#8211; PACKAGE BODY 12cR2 (OCT2018RUR)<\/a><\/li>\n<li><a href=\"#SYS.DBMS_XSTREAM_GG_INTERNAL.PACKAGE BODY.12.2.0.1_OCT2018RUR\">SYS.DBMS_XSTREAM_GG_INTERNAL &#8211; PACKAGE BODY 12cR2 (OCT2018RUR)<\/a><\/li>\n<li><a href=\"#SYS.DBMS_XSTREAM_UTL_IVK.PACKAGE BODY.12.2.0.1_OCT2018RUR\">SYS.DBMS_XSTREAM_UTL_IVK &#8211; PACKAGE BODY 12cR2 (OCT2018RUR)<\/a><\/li>\n<\/ul>\n<\/li>\n<li>18.0.0.0\n<ul>\n<li><a href=\"#GSMADMIN_INTERNAL.DBMS_GSM_COMMON.PACKAGE BODY.18.0.0.0_RU\">GSMADMIN_INTERNAL.DBMS_GSM_COMMON &#8211; PACKAGE BODY 18c (RU)<\/a><\/li>\n<li><a href=\"#GSMADMIN_INTERNAL.DBMS_GSM_DBADMIN.PACKAGE BODY.18.0.0.0_RU\">GSMADMIN_INTERNAL.DBMS_GSM_DBADMIN &#8211; PACKAGE BODY 18c (RU)<\/a><\/li>\n<li><a href=\"#SYS.CDBVIEW.PACKAGE.18.0.0.0_18.3RUR\">SYS.CDBVIEW &#8211; PACKAGE 18c (RU &amp; 18.4RUR &amp; 18.3RUR)<\/a><\/li>\n<li><a href=\"#SYS.CDBVIEW_INTERNAL.PACKAGE.18.0.0.0_18.3RUR\">SYS.CDBVIEW_INTERNAL &#8211; PACKAGE 18c (RU &amp; 18.4RUR &amp; 18.3RUR)<\/a><\/li>\n<li><a href=\"#SYS.DBMS_AUTOTASK_PRVT.PACKAGE.18.0.0.0_RU\">SYS.DBMS_AUTOTASK_PRVT &#8211; PACKAGE 18c (RU)<\/a><\/li>\n<li><a href=\"#SYS.DBMS_BACKUP_RESTORE.PACKAGE.18.0.0.0_RU\">SYS.DBMS_BACKUP_RESTORE &#8211; PACKAGE 18c (RU)<\/a><\/li>\n<li><a href=\"#SYS.DBMS_BACKUP_RESTORE.PACKAGE.18.0.0.0_18.3RUR\">SYS.DBMS_BACKUP_RESTORE &#8211; PACKAGE 18c (18.3RUR)<\/a><\/li>\n<li><a href=\"#SYS.DBMS_BACKUP_RESTORE.PACKAGE.18.0.0.0_18.4RUR\">SYS.DBMS_BACKUP_RESTORE &#8211; PACKAGE 18c (18.4RUR)<\/a><\/li>\n<li><a href=\"#SYS.DBMS_REGISTRY.PACKAGE.18.0.0.0_18.4RUR\">SYS.DBMS_REGISTRY &#8211; PACKAGE 18c (18.4RUR)<\/a><\/li>\n<li><a href=\"#SYS.DBMS_REGISTRY.PACKAGE.18.0.0.0_18.3RUR\">SYS.DBMS_REGISTRY &#8211; PACKAGE 18c (18.3RUR)<\/a><\/li>\n<li><a href=\"#SYS.DBMS_REGISTRY.PACKAGE.18.0.0.0_RU\">SYS.DBMS_REGISTRY &#8211; PACKAGE 18c (RU)<\/a><\/li>\n<li><a href=\"#SYS.CDBVIEW.PACKAGE BODY.18.0.0.0_18.3RUR\">SYS.CDBVIEW &#8211; PACKAGE BODY 18c (RU &amp; 18.4RUR &amp; 18.3RUR)<\/a><\/li>\n<li><a href=\"#SYS.CDBVIEW_INTERNAL.PACKAGE BODY.18.0.0.0_18.3RUR\">SYS.CDBVIEW_INTERNAL &#8211; PACKAGE BODY 18c (RU &amp; 18.4RUR &amp; 18.3RUR)<\/a><\/li>\n<li><a href=\"#SYS.DBMS_AUTOTASK_PRVT.PACKAGE BODY.18.0.0.0_RU\">SYS.DBMS_AUTOTASK_PRVT &#8211; PACKAGE BODY 18c (RU)<\/a><\/li>\n<li><a href=\"#SYS.DBMS_RCVMAN.PACKAGE BODY.18.0.0.0_18.3RUR\">SYS.DBMS_RCVMAN &#8211; PACKAGE BODY 18c (18.3RUR)<\/a><\/li>\n<li><a href=\"#SYS.DBMS_RCVMAN.PACKAGE BODY.18.0.0.0_RU\">SYS.DBMS_RCVMAN &#8211; PACKAGE BODY 18c (RU)<\/a><\/li>\n<li><a href=\"#SYS.DBMS_RCVMAN.PACKAGE BODY.18.0.0.0_18.4RUR\">SYS.DBMS_RCVMAN &#8211; PACKAGE BODY 18c (18.4RUR)<\/a><\/li>\n<li><a href=\"#SYS.DBMS_STATS.PACKAGE BODY.18.0.0.0_RU\">SYS.DBMS_STATS &#8211; PACKAGE BODY 18c (RU)<\/a><\/li>\n<li><a href=\"#SYS.DBMS_STATS_ADVISOR.PACKAGE BODY.18.0.0.0_RU\">SYS.DBMS_STATS_ADVISOR &#8211; PACKAGE BODY 18c (RU)<\/a><\/li>\n<li><a href=\"#SYS.JDOM_T.TYPE.18.0.0.0_RU\">SYS.JDOM_T &#8211; TYPE 18c (RU)<\/a><\/li>\n<li><a href=\"#SYS.JSON_ARRAY_T.TYPE.18.0.0.0_RU\">SYS.JSON_ARRAY_T &#8211; TYPE 18c (RU)<\/a><\/li>\n<li><a href=\"#SYS.JSON_ELEMENT_T.TYPE.18.0.0.0_RU\">SYS.JSON_ELEMENT_T &#8211; TYPE 18c (RU)<\/a><\/li>\n<li><a href=\"#SYS.JSON_OBJECT_T.TYPE.18.0.0.0_RU\">SYS.JSON_OBJECT_T &#8211; TYPE 18c (RU)<\/a><\/li>\n<li><a href=\"#SYS.JDOM_T.TYPE BODY.18.0.0.0_RU\">SYS.JDOM_T &#8211; TYPE BODY 18c (RU)<\/a><\/li>\n<li><a href=\"#SYS.JSON_ARRAY_T.TYPE BODY.18.0.0.0_RU\">SYS.JSON_ARRAY_T &#8211; TYPE BODY 18c (RU)<\/a><\/li>\n<li><a href=\"#SYS.JSON_ELEMENT_T.TYPE BODY.18.0.0.0_RU\">SYS.JSON_ELEMENT_T &#8211; TYPE BODY 18c (RU)<\/a><\/li>\n<li><a href=\"#SYS.JSON_OBJECT_T.TYPE BODY.18.0.0.0_RU\">SYS.JSON_OBJECT_T &#8211; TYPE BODY 18c (RU)<\/a><\/li>\n<li><a href=\"#XDB.DBMS_SODA_ADMIN.PACKAGE BODY.18.0.0.0_RU\">XDB.DBMS_SODA_ADMIN &#8211; PACKAGE BODY 18c (RU)<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Changed Objects<\/h2>\n<p><span style=\"font-size: 12pt;\"><strong>P.S:<br \/>\n<\/strong><\/span><span style=\"font-size: 12pt;\"><strong>&gt; = Added Lines<br \/>\n&lt; = Removed Lines<\/strong><\/span><\/p>\n<h3><strong>11.2.0.4<\/strong><\/h3>\n<div id=\"SYS.DBMS_PARALLEL_EXECUTE_INTERNAL.PACKAGE BODY.11.2.0.4_BP\">SYS.DBMS_PARALLEL_EXECUTE_INTERNAL &#8211; PACKAGE BODY (BP):<\/div>\n<pre class=\"EnlighterJSRAW enlighter-collapse\" data-enlighter-language=\"diff\" data-enlighter-linenumbers=\"false\">681a682,686\r\n&gt;       \r\n&gt;       IF C.CUR_SIZE = 0 THEN\r\n&gt;         GOTO DONE;\r\n&gt;       END IF;\r\n&gt; \r\n685a691,693\r\n&gt; &lt;&lt;DONE&gt;&gt;\r\n&gt;       \r\n&gt;       \r\n687c695\r\n&lt;       IF (BUFFERED_CHUNK# = 0) THEN\r\n---\r\n&gt;       IF (BUFFERED_CHUNKS.COUNT = 0) THEN\r\n<\/pre>\n<h3><strong>12.1.0.2<\/strong><\/h3>\n<div id=\"SYS.CDBVIEW.PACKAGE BODY.12.1.0.2_PSU\">SYS.CDBVIEW &#8211; PACKAGE BODY (PSU):<\/div>\n<pre class=\"EnlighterJSRAW enlighter-collapse\" data-enlighter-language=\"diff\" data-enlighter-linenumbers=\"false\">2a3,7\r\n&gt;   type tabs_array    is varray(11) of dbms_id;\r\n&gt;   sens_table_array   tabs_array;\r\n&gt;   type sens_tabs     is table of boolean index by dbms_id;\r\n&gt;   sens_table_list    sens_tabs;\r\n&gt; \r\n22a28,29\r\n&gt;   insuff_privilege     EXCEPTION;\r\n&gt;   PRAGMA               exception_init(insuff_privilege, -1031);\r\n47a55,67\r\n&gt;   --\r\n&gt;   -- Bug 27445727 : Certain SYS owned tables like USER$, LINK$ etc. are out\r\n&gt;   -- of bounds even for DBA level users. So we should not allow cloning such\r\n&gt;   -- tables into a Container_Data view and be able to bypass this protection.\r\n&gt;   --\r\n&gt;   -- Since this procedure does not support quoted identifiers, we need not\r\n&gt;   -- worry about canonicalizing the owner or oldview_name arguments before\r\n&gt;   -- comparing against SYS and the array of sensitive tables.\r\n&gt;   --\r\n&gt;   if (upper_owner = 'SYS' and sens_table_list.exists(upper_oldview)) then\r\n&gt;     RAISE insuff_privilege;\r\n&gt;   end if;\r\n&gt; \r\n139a160,177\r\n&gt;   --\r\n&gt;   -- Initialize the list of SYS owned sensitive tables which should\r\n&gt;   -- not be allowed to be shadow-copied even within Create_CDBView.\r\n&gt;   --\r\n&gt;   -- Once ER 24598663 gets implemented, these entries will be part of a\r\n&gt;   -- SYS owned metadata table and instead of hard-coding the list, we will\r\n&gt;   -- be populating the list by fetching it from the table.\r\n&gt;   --\r\n&gt; begin\r\n&gt;   sens_table_array := tabs_array('ENC$', 'LINK$', 'USER$', 'DEFAULT_PWD$',\r\n&gt;                             'XS$VERIFIERS',  'USER_HISTORY$',\r\n&gt;                             'HIST_HEAD$', 'HISTGRM$','CDB_LOCAL_ADMINAUTH$',\r\n&gt;                             'PDB_CREATE$','PDB_SYNC$');\r\n&gt; \r\n&gt;   for i in 1..11 loop\r\n&gt;     sens_table_list(sens_table_array(i)) := TRUE;\r\n&gt;   end loop;\r\n&gt; \r\n<\/pre>\n<h3><strong>12.2.0.1<\/strong><\/h3>\n<div id=\"DVSYS.SYS_YOID0000072649$.TYPE.12.2.0.1_OCT2018RUR\">DVSYS.SYS_YOID0000072649$ &#8211; TYPE (OCT2018RUR):<\/div>\n<pre class=\"EnlighterJSRAW enlighter-collapse\" data-enlighter-language=\"diff\" data-enlighter-linenumbers=\"false\">2c2\r\n&lt; type         \"SYS_YOID0000072649$\"              as object( \"SYS_NC00001$\" RAW(16))\r\n---\r\n&gt; type         \"SYS_YOID0000072649$\"              as object( \"SYS_NC00001$\" VARCHAR2(128 BYTE), \"SYS_NC00002$\" VARCHAR2(128 BYTE), \"SYS_NC00003$\" VARCHAR2(128 BYTE))\r\n<\/pre>\n<div id=\"DVSYS.SYS_YOID0000072661$.TYPE.12.2.0.1_OCT2018RUR\">DVSYS.SYS_YOID0000072661$ &#8211; TYPE (OCT2018RUR):<\/div>\n<pre class=\"EnlighterJSRAW enlighter-collapse\" data-enlighter-language=\"diff\" data-enlighter-linenumbers=\"false\">2c2\r\n&lt; type         \"SYS_YOID0000072661$\"              as object( \"SYS_NC00001$\" RAW(16))\r\n---\r\n&gt; type         \"SYS_YOID0000072661$\"              as object( \"SYS_NC00001$\" VARCHAR2(128 BYTE), \"SYS_NC00002$\" VARCHAR2(128 BYTE))\r\n<\/pre>\n<div id=\"DVSYS.SYS_YOID0000072667$.TYPE.12.2.0.1_OCT2018RUR\">DVSYS.SYS_YOID0000072667$ &#8211; TYPE (OCT2018RUR):<\/div>\n<pre class=\"EnlighterJSRAW enlighter-collapse\" data-enlighter-language=\"diff\" data-enlighter-linenumbers=\"false\">2c2\r\n&lt; type         \"SYS_YOID0000072667$\"              as object( \"SYS_NC00001$\" RAW(16))\r\n---\r\n&gt; type         \"SYS_YOID0000072667$\"              as object( \"SYS_NC00001$\" VARCHAR2(128 BYTE), \"SYS_NC00002$\" VARCHAR2(100 BYTE), \"SYS_NC00003$\" VARCHAR2(128 BYTE), \"SYS_NC00004$\" VARCHAR2(128 BYTE), \"SYS_NC00005$\" VARCHAR2(128 BYTE), \"SYS_NC00006$\" VARCHAR2(128 BYTE), \"SYS_NC00007$\" NUMBER)\r\n<\/pre>\n<div id=\"DVSYS.SYS_YOID0000072694$.TYPE.12.2.0.1_OCT2018RUR\">DVSYS.SYS_YOID0000072694$ &#8211; TYPE (OCT2018RUR):<\/div>\n<pre class=\"EnlighterJSRAW enlighter-collapse\" data-enlighter-language=\"diff\" data-enlighter-linenumbers=\"false\">2c2\r\n&lt; type         \"SYS_YOID0000072694$\"              as object( \"SYS_NC00001$\" RAW(16))\r\n---\r\n&gt; type         \"SYS_YOID0000072694$\"              as object( \"SYS_NC00001$\" VARCHAR2(128 BYTE), \"SYS_NC00002$\" VARCHAR2(128 BYTE), \"SYS_NC00003$\" VARCHAR2(128 BYTE), \"SYS_NC00004$\" VARCHAR2(128 BYTE))\r\n<\/pre>\n<div id=\"DVSYS.SYS_YOID0000072697$.TYPE.12.2.0.1_OCT2018RUR\">DVSYS.SYS_YOID0000072697$ &#8211; TYPE (OCT2018RUR):<\/div>\n<pre class=\"EnlighterJSRAW enlighter-collapse\" data-enlighter-language=\"diff\" data-enlighter-linenumbers=\"false\">2c2\r\n&lt; type         \"SYS_YOID0000072697$\"              as object( \"SYS_NC00001$\" RAW(16))\r\n---\r\n&gt; type         \"SYS_YOID0000072697$\"              as object( \"SYS_NC00001$\" VARCHAR2(128 BYTE), \"SYS_NC00002$\" VARCHAR2(128 BYTE), \"SYS_NC00003$\" VARCHAR2(100 BYTE), \"SYS_NC00004$\" VARCHAR2(128 BYTE), \"SYS_NC00005$\" VARCHAR2(128 BYTE), \"SYS_NC00006$\" VARCHAR2(128 BYTE), \"SYS_NC00007$\" VARCHAR2(128 BYTE))\r\n<\/pre>\n<div id=\"SYS.CDBVIEW.PACKAGE.12.2.0.1_JUL2018RUR\">SYS.CDBVIEW &#8211; PACKAGE (JUL2018RUR):<\/div>\n<pre class=\"EnlighterJSRAW enlighter-collapse\" data-enlighter-language=\"diff\" data-enlighter-linenumbers=\"false\">1c1\r\n&lt; package     CDBView as\r\n---\r\n&gt; package     CDBView AUTHID CURRENT_USER as\r\n<\/pre>\n<div id=\"SYS.CDBVIEW_INTERNAL.PACKAGE.12.2.0.1_JUL2018RUR\">SYS.CDBVIEW_INTERNAL &#8211; PACKAGE (JUL2018RUR):<\/div>\n<pre class=\"EnlighterJSRAW enlighter-collapse\" data-enlighter-language=\"diff\" data-enlighter-linenumbers=\"false\">10a11,13\r\n&gt;   procedure create_cdbview(chk_upgrd IN boolean, owner IN varchar2,\r\n&gt;                          oldview_name IN varchar2, newview_name IN varchar2);\r\n&gt; \r\n<\/pre>\n<div id=\"SYS.DBMS_AUTOTASK_PRVT.PACKAGE.12.2.0.1_RU\">SYS.DBMS_AUTOTASK_PRVT &#8211; PACKAGE (RU):<\/div>\n<pre class=\"EnlighterJSRAW enlighter-collapse\" data-enlighter-language=\"diff\" data-enlighter-linenumbers=\"false\">43a44,53\r\n&gt; \r\n&gt; \r\n&gt; \r\n&gt; \r\n&gt; \r\n&gt; \r\n&gt; \r\n&gt; \r\n&gt; PROCEDURE REFRESH_CLIENT_CONFIG;\r\n&gt; \r\n<\/pre>\n<div id=\"SYS.CDBVIEW.PACKAGE BODY.12.2.0.1_JUL2018RUR\">SYS.CDBVIEW &#8211; PACKAGE BODY (JUL2018RUR):<\/div>\n<pre class=\"EnlighterJSRAW enlighter-collapse\" data-enlighter-language=\"diff\" data-enlighter-linenumbers=\"false\">3,10c3\r\n&lt; function isLegalOwnerViewName(owner IN varchar2, oldview IN varchar2,\r\n&lt;                              newview IN varchar2) return boolean;\r\n&lt; -- Create the cdb view\r\n&lt; -- private helper procedure to create the cdb view\r\n&lt; -- Note that quotes should not be added around owner, oldview_name and\r\n&lt; -- newview_name before create_cdbview is invoked since all three are used\r\n&lt; -- as literals to query dictionary views.\r\n&lt; procedure create_cdbview(chk_upgrd IN boolean, owner IN varchar2,\r\n---\r\n&gt;   procedure create_cdbview(chk_upgrd IN boolean, owner IN varchar2,\r\n12,133c5,8\r\n&lt;   sqlstmt        varchar2(4000);\r\n&lt;   col_name       varchar2(128);\r\n&lt;   comments       varchar2(4000);\r\n&lt;   col_type       number;\r\n&lt;   upper_owner    varchar2(128);\r\n&lt;   upper_oldview  varchar2(128);\r\n&lt;   quoted_owner   varchar2(130); -- 2 more than size of owner\r\n&lt;   quoted_oldview varchar2(130); -- 2 more than size of oldview_name\r\n&lt;   quoted_newview varchar2(130); -- 2 more than size of newview_name\r\n&lt;   unsupp_col_condition varchar2(4000);\r\n&lt;   colcomments          varchar2(4000);\r\n&lt;   unsupp_col_count     number;\r\n&lt;   colcommentscur       SYS_REFCURSOR;\r\n&lt;   table_not_found      EXCEPTION;\r\n&lt;   PRAGMA               exception_init(table_not_found, -942);\r\n&lt; \r\n&lt; \r\n&lt;   cursor tblcommentscur is select c.comment$\r\n&lt;                 from sys.obj$ o, sys.user$ u, sys.com$ c\r\n&lt;                 where o.name = upper_oldview and u.name = upper_owner\r\n&lt;                 and o.obj# = c.obj# and o.owner#=u.user#\r\n&lt;                 and (o.type# = 4 or o.type# = 2)\r\n&lt;                 and c.col# is null;\r\n&lt; \r\n&lt; begin\r\n&lt; \r\n&lt;   if (not isLegalOwnerViewName(owner, oldview_name, newview_name)) then\r\n&lt;     RAISE table_not_found;\r\n&lt;   end if;\r\n&lt; \r\n&lt;   -- convert owner and view names to upper case\r\n&lt;   upper_owner    := upper(owner);\r\n&lt;   upper_oldview  := upper(oldview_name);\r\n&lt; \r\n&lt;   quoted_owner   := '\"' || upper_owner         || '\"';\r\n&lt;   quoted_oldview := '\"' || upper_oldview       || '\"';\r\n&lt;   quoted_newview := '\"' || upper(newview_name) || '\"';\r\n&lt; \r\n&lt;   -- Create cdb view\r\n&lt;   sqlstmt := 'CREATE OR REPLACE VIEW ' ||\r\n&lt;      quoted_owner || '.' || quoted_newview ||\r\n&lt;      ' CONTAINER_DATA AS SELECT k.*, k.CON$NAME, k.CDB$NAME' ||\r\n&lt;      ' FROM CONTAINERS(' || quoted_owner || '.' || quoted_oldview || ') k';\r\n&lt; \r\n&lt;   --dbms_output.put_line(sqlstmt);\r\n&lt;   execute immediate sqlstmt;\r\n&lt; \r\n&lt;   -- table and column comments\r\n&lt;   open tblcommentscur;\r\n&lt;   fetch tblcommentscur into comments;\r\n&lt;   comments := replace(comments, '''','''''');\r\n&lt;   sqlstmt := 'comment on table ' || quoted_owner || '.' || quoted_newview ||\r\n&lt;               ' is ''' || comments || ' in all containers''';\r\n&lt;   -- dbms_output.put_line(sqlstmt);\r\n&lt;   execute immediate sqlstmt;\r\n&lt;   close tblcommentscur;\r\n&lt; \r\n&lt;   sqlstmt := 'comment on column ' || quoted_owner || '.' || quoted_newview ||\r\n&lt;              '.CON_ID is ''container id''';\r\n&lt;   -- dbms_output.put_line(sqlstmt);\r\n&lt;   execute immediate sqlstmt;\r\n&lt; \r\n&lt;   sqlstmt := 'comment on column ' || quoted_owner || '.' || quoted_newview ||\r\n&lt;              '.CON$NAME is ''Container Name''';\r\n&lt;   -- dbms_output.put_line(sqlstmt);\r\n&lt;   execute immediate sqlstmt;\r\n&lt; \r\n&lt;   sqlstmt := 'comment on column ' || quoted_owner || '.' || quoted_newview ||\r\n&lt;              '.CDB$NAME is ''Database Name''';\r\n&lt;   -- dbms_output.put_line(sqlstmt);\r\n&lt;   execute immediate sqlstmt;\r\n&lt; \r\n&lt;   colcomments := 'select c.name, co.comment$ ' ||\r\n&lt;                  'from sys.obj$ o, sys.col$ c, sys.user$ u, sys.com$ co ' ||\r\n&lt;                  'where o.name = ''' || upper_oldview || ''' ' ||\r\n&lt;                  'and u.name = ''' || upper_owner || ''' ' ||\r\n&lt;                  'and o.owner# = u.user# and (o.type# = 4 or o.type# = 2) ' ||\r\n&lt;                  'and o.obj# = c.obj# ' ||\r\n&lt;                  'and c.obj# = co.obj# and c.intcol# = co.col# ' ||\r\n&lt;                  -- skip hidden column\r\n&lt;                  'and bitand(c.property, 32) = 0 '||\r\n&lt;                  -- skip null comment\r\n&lt;                  'and co.comment$ is not null';\r\n&lt;                           -- skip Long, Nested Table, Varray columns\r\n&lt;   unsupp_col_condition := 'c.type# = 8 or c.type# = 122 or c.type# = 123 ' ||\r\n&lt;                           -- skip ADT and REF columns\r\n&lt;                           'or c.type# = 121 or c.type# = 111 ' ||\r\n&lt;                           -- Bug 20683085: skip Opaque Type column except\r\n&lt;                           -- xmltype stored as LOB. Check xmltype as lob using\r\n&lt;                           -- property bit KQLDCOP2_XSLB.\r\n&lt; \t\t          -- Bug 23083309: if there are unsupported columns,\r\n&lt;                           -- then XMLType column is skipped (hidden XMLType lob\r\n&lt;                           -- column is already handled)\r\n&lt;                           'or (c.type# = 58 and ' ||\r\n&lt;                               '((bitand(c.property, ' ||\r\n&lt;                                 'power(2,32)*4194304)&lt;&gt;power(2,32)*4194304) '||\r\n&lt;                                 'or :u &gt; 0)) ' ||\r\n&lt;                           -- Bug 21785587: skip long raw\r\n&lt;                           'or c.type# = 24';\r\n&lt; \r\n&lt;   sqlstmt := colcomments || ' and (' || unsupp_col_condition || ')';\r\n&lt; \r\n&lt;   unsupp_col_count := 0;\r\n&lt;   EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM (' || sqlstmt ||')'\r\n&lt;     INTO unsupp_col_count USING unsupp_col_count;\r\n&lt; \r\n&lt;   open colcommentscur for colcomments ||' and not ('||\r\n&lt;                             unsupp_col_condition ||')'\r\n&lt;                       USING unsupp_col_count;\r\n&lt;   loop\r\n&lt;     fetch colcommentscur into col_name, comments;\r\n&lt;     exit when colcommentscur%NOTFOUND;\r\n&lt; \r\n&lt;     comments := replace(comments, '''','''''');\r\n&lt;     sqlstmt := 'comment on column ' ||\r\n&lt;                quoted_owner || '.' || quoted_newview || '.' ||\r\n&lt;                col_name || ' is ''' || comments || '''';\r\n&lt;     -- dbms_output.put_line(sqlstmt);\r\n&lt;     execute immediate sqlstmt;\r\n&lt;   end loop;\r\n&lt;   close colcommentscur;\r\n&lt; end;\r\n---\r\n&gt;   begin\r\n&gt;     CDBView_internal.create_cdbview(chk_upgrd, owner, oldview_name,\r\n&gt;                                     newview_name);\r\n&gt;   end;\r\n137,140c12,19\r\n&lt;       tablename dbms_id;\r\n&lt;       colname   dbms_id;\r\n&lt;       stmt      varchar2(400);\r\n&lt;       retval    varchar2(4000);\r\n---\r\n&gt;       tablename   dbms_id;\r\n&gt;       colname     dbms_id;\r\n&gt;       stmt        varchar2(400);\r\n&gt;       retval      varchar2(4000);\r\n&gt;       isuser_sys  boolean := FALSE;\r\n&gt;       scr_priv    number  := 0;\r\n&gt;       insuff_priv exception;\r\n&gt;       pragma      exception_init(insuff_priv, -1031);\r\n141a21,47\r\n&gt;       --\r\n&gt;       -- The Current_User should either be SYS or be in possession of\r\n&gt;       -- SELECT_CATALOG_ROLE to be able to query view definitions.\r\n&gt;       -- This is how Dbms_Metadata.Get_DDL operates, so we are trying\r\n&gt;       -- to have the same privilege model here too. If none of this is\r\n&gt;       -- true, we will raise ORA-1031 error.\r\n&gt;       --\r\n&gt;       -- We are doing a direct query against SESSION_ROLES dictionary table\r\n&gt;       -- instead of using Dbms_Priv_Capture.Ses_Has_Role_Priv function, as\r\n&gt;       -- the package Dbms_Priv_Capture may not be available by the time this\r\n&gt;       -- package CDBView gets created. Also use dyn SQL for the same reason.\r\n&gt;       --\r\n&gt;       if (sys_context('userenv','current_userid') = 0) then\r\n&gt;         isuser_sys := TRUE;\r\n&gt;       else\r\n&gt;         begin\r\n&gt;           execute immediate 'select count(*) from sys.session_roles where\r\n&gt;                              role = ''SELECT_CATALOG_ROLE''' into scr_priv;\r\n&gt;         exception\r\n&gt;           when others then NULL;\r\n&gt;         end;\r\n&gt;       end if;\r\n&gt; \r\n&gt;       if NOT (isuser_sys OR scr_priv &gt; 0) then\r\n&gt;         raise insuff_priv;\r\n&gt;       end if;\r\n&gt; \r\n157,203d62\r\n&lt; \r\n&lt;   -- This function is created to prevent SQL injection. We couldn't use\r\n&lt;   -- dbms_assert because catcdbviews.sql is called before dbms_assert\r\n&lt;   -- is created\r\n&lt;   function isLegalOwnerViewName(owner IN varchar2, oldview IN varchar2,\r\n&lt;                              newview IN varchar2) return boolean as\r\n&lt;     cCheck       number;\r\n&lt;     cleanOldview varchar2(128);\r\n&lt;     cleanNewview varchar2(128);\r\n&lt;   begin\r\n&lt; \r\n&lt;     -- Check if owner already exist\r\n&lt;     execute immediate 'SELECT COUNT(*) FROM USER$ WHERE NAME = :1'\r\n&lt;              into cCheck using upper(owner);\r\n&lt;     if (cCheck = 0) then\r\n&lt;       RETURN FALSE;\r\n&lt;     end if;\r\n&lt; \r\n&lt;     -- Check if oldview already exist\r\n&lt;     execute immediate 'SELECT COUNT(*) FROM OBJ$ WHERE NAME = :1' ||\r\n&lt;                       ' AND (TYPE# = 4 OR TYPE# = 2)'\r\n&lt;              into cCheck using upper(oldview);\r\n&lt;     if (cCheck = 0) then\r\n&lt;       RETURN FALSE;\r\n&lt;     end if;\r\n&lt; \r\n&lt;     -- Check for appropriate newview name\r\n&lt;     -- The following is allowed for newview name\r\n&lt;     -- 1. Substitute 'DBA' with 'CDB'\r\n&lt;     -- 2. Substitute 'AWR_PDB' with 'CDB_HIST'\r\n&lt;     -- 3. Substitute 'ATTRIBUTES' with 'ATTRIB'\r\n&lt;     -- 4. Substitute 'DATABASE' with 'CDB'\r\n&lt;     -- 5. Remove 'REDUCED'\r\n&lt;     -- 6. Add 'AWRI$_CDB'\r\n&lt;     cleanOldview := REGEXP_REPLACE(upper(oldview),\r\n&lt;        'DBA|DATABASE|_| |HIST|ATTRIB(UTE)?S?|CDB|AWR_PDB|REDUCED');\r\n&lt;     cleanNewview := REGEXP_REPLACE(upper(newview),\r\n&lt;        'CDB|DATABASE|_| |HIST|ATTRIB(UTE)?S?|AWRI\\$');\r\n&lt; \r\n&lt;     if (cleanOldview = cleanNewview) then\r\n&lt;       RETURN TRUE;\r\n&lt;     end if;\r\n&lt; \r\n&lt;     RETURN FALSE;\r\n&lt; \r\n&lt;   end isLegalOwnerViewName;\r\n&lt; \r\n<\/pre>\n<div id=\"SYS.CDBVIEW_INTERNAL.PACKAGE BODY.12.2.0.1_JUL2018RUR\">SYS.CDBVIEW_INTERNAL &#8211; PACKAGE BODY (JUL2018RUR):<\/div>\n<pre class=\"EnlighterJSRAW enlighter-collapse\" data-enlighter-language=\"diff\" data-enlighter-linenumbers=\"false\">1c1,217\r\n&lt; package body     CDBView_internal as\r\n---\r\n&gt; package body     CDBView_Internal is\r\n&gt; \r\n&gt;   MAX_SENS_TAB_COUNT CONSTANT number := 11;\r\n&gt;   type tabs_array    is varray(MAX_SENS_TAB_COUNT) of dbms_id;\r\n&gt;   sens_table_array   tabs_array;\r\n&gt;   type sens_tabs     is table of boolean index by dbms_id;\r\n&gt;   sens_table_list    sens_tabs;\r\n&gt; \r\n&gt; function isLegalOwnerViewName(owner IN varchar2, oldview IN varchar2,\r\n&gt;                              newview IN varchar2) return boolean;\r\n&gt; -- Create the cdb view\r\n&gt; -- private helper procedure to create the cdb view\r\n&gt; -- Note that quotes should not be added around owner, oldview_name and\r\n&gt; -- newview_name before create_cdbview is invoked since all three are used\r\n&gt; -- as literals to query dictionary views.\r\n&gt; procedure create_cdbview(chk_upgrd IN boolean, owner IN varchar2,\r\n&gt;                          oldview_name IN varchar2, newview_name IN varchar2) as\r\n&gt;   sqlstmt        varchar2(4000);\r\n&gt;   col_name       dbms_id;\r\n&gt;   comments       varchar2(4000);\r\n&gt;   col_type       number;\r\n&gt;   upper_owner    varchar2(128);\r\n&gt;   upper_oldview  varchar2(128);\r\n&gt;   newview        dbms_id := newview_name;\r\n&gt;   quoted_owner   dbms_quoted_id; -- 2 more than size of owner\r\n&gt;   quoted_oldview dbms_quoted_id; -- 2 more than size of oldview_name\r\n&gt;   quoted_newview dbms_quoted_id; -- 2 more than size of newview_name\r\n&gt; \r\n&gt;   unsupp_col_condition varchar2(4000);\r\n&gt;   colcomments          varchar2(4000);\r\n&gt;   unsupp_col_count     number;\r\n&gt;   colcommentscur       SYS_REFCURSOR;\r\n&gt;   table_not_found      EXCEPTION;\r\n&gt;   PRAGMA               exception_init(table_not_found, -942);\r\n&gt;   insuff_privilege     EXCEPTION;\r\n&gt;   PRAGMA               exception_init(insuff_privilege, -1031);\r\n&gt; \r\n&gt;   cursor tblcommentscur is select c.comment$\r\n&gt;                 from sys.obj$ o, sys.user$ u, sys.com$ c\r\n&gt;                 where o.name = upper_oldview and u.name = upper_owner\r\n&gt;                 and o.obj# = c.obj# and o.owner#=u.user#\r\n&gt;                 and (o.type# = 4 or o.type# = 2)\r\n&gt;                 and c.col# is null;\r\n&gt; \r\n&gt; begin\r\n&gt; \r\n&gt;   -- convert owner and view names to upper case\r\n&gt;   upper_owner    := upper(owner);\r\n&gt;   upper_oldview  := upper(oldview_name);\r\n&gt; \r\n&gt;   --\r\n&gt;   -- No need to check for ownername, viewname correctness, if the Current_User\r\n&gt;   -- is SYS, as would be the case with most of Create_CDBView invocations\r\n&gt;   -- across RDBMS code.\r\n&gt;   --\r\n&gt;   -- As per recommendation from Mark, it is not safe to give a free pass to\r\n&gt;   -- SYS user, in case CDBView.Create_CDBView gets invoked from within a SYS\r\n&gt;   -- owned definer rights PL\/SQL code and the inputs to those could be user\r\n&gt;   -- provided and potentially malicious.\r\n&gt;   --\r\n&gt;   if (not isLegalOwnerViewName(upper_owner, upper_oldview, newview_name)) then\r\n&gt;     RAISE table_not_found;\r\n&gt;   end if;\r\n&gt; \r\n&gt;   --\r\n&gt;   -- Bug 27445727 : Certain SYS owned tables like USER$, LINK$ etc. are out\r\n&gt;   -- of bounds even for DBA level users. So we should not allow cloning such\r\n&gt;   -- tables into a Container_Data view and be able to bypass this protection.\r\n&gt;   --\r\n&gt;   -- Since this procedure does not support quoted identifiers, we need not\r\n&gt;   -- worry about canonicalizing the owner or oldview_name arguments before\r\n&gt;   -- comparing against SYS and the array of sensitive tables.\r\n&gt;   --\r\n&gt;   if (upper_owner = 'SYS' and sens_table_list.exists(upper_oldview)) then\r\n&gt;     RAISE insuff_privilege;\r\n&gt;   end if;\r\n&gt; \r\n&gt;   quoted_owner   := '\"' || upper_owner         || '\"';\r\n&gt;   quoted_oldview := '\"' || upper_oldview       || '\"';\r\n&gt;   quoted_newview := '\"' || upper(newview_name) || '\"';\r\n&gt; \r\n&gt;   -- Create cdb view\r\n&gt;   sqlstmt := 'CREATE OR REPLACE VIEW ' ||\r\n&gt;      quoted_owner || '.' || quoted_newview ||\r\n&gt;      ' CONTAINER_DATA AS SELECT k.*, k.CON$NAME, k.CDB$NAME' ||\r\n&gt;      ' FROM CONTAINERS(' || quoted_owner || '.' || quoted_oldview || ') k';\r\n&gt; \r\n&gt;   --dbms_output.put_line(sqlstmt);\r\n&gt;   execute immediate sqlstmt;\r\n&gt; \r\n&gt;   -- table and column comments\r\n&gt;   open tblcommentscur;\r\n&gt;   fetch tblcommentscur into comments;\r\n&gt;   comments := replace(comments, '''','''''');\r\n&gt;   sqlstmt := 'comment on table ' || quoted_owner || '.' || quoted_newview ||\r\n&gt;               ' is ''' || comments || ' in all containers''';\r\n&gt;   -- dbms_output.put_line(sqlstmt);\r\n&gt;   execute immediate sqlstmt;\r\n&gt;   close tblcommentscur;\r\n&gt; \r\n&gt;   sqlstmt := 'comment on column ' || quoted_owner || '.' || quoted_newview ||\r\n&gt;              '.CON_ID is ''container id''';\r\n&gt;   -- dbms_output.put_line(sqlstmt);\r\n&gt;   execute immediate sqlstmt;\r\n&gt; \r\n&gt;   sqlstmt := 'comment on column ' || quoted_owner || '.' || quoted_newview ||\r\n&gt;              '.CON$NAME is ''Container Name''';\r\n&gt;   -- dbms_output.put_line(sqlstmt);\r\n&gt;   execute immediate sqlstmt;\r\n&gt; \r\n&gt;   sqlstmt := 'comment on column ' || quoted_owner || '.' || quoted_newview ||\r\n&gt;              '.CDB$NAME is ''Database Name''';\r\n&gt;   -- dbms_output.put_line(sqlstmt);\r\n&gt;   execute immediate sqlstmt;\r\n&gt; \r\n&gt;   colcomments := 'select c.name, co.comment$ ' ||\r\n&gt;                  'from sys.obj$ o, sys.col$ c, sys.user$ u, sys.com$ co ' ||\r\n&gt;                  'where o.name = ''' || upper_oldview || ''' ' ||\r\n&gt;                  'and u.name = ''' || upper_owner || ''' ' ||\r\n&gt;                  'and o.owner# = u.user# and (o.type# = 4 or o.type# = 2) ' ||\r\n&gt;                  'and o.obj# = c.obj# ' ||\r\n&gt;                  'and c.obj# = co.obj# and c.intcol# = co.col# ' ||\r\n&gt;                  -- skip hidden column\r\n&gt;                  'and bitand(c.property, 32) = 0 '||\r\n&gt;                  -- skip null comment\r\n&gt;                  'and co.comment$ is not null';\r\n&gt;                           -- skip Long, Nested Table, Varray columns\r\n&gt;   unsupp_col_condition := 'c.type# = 8 or c.type# = 122 or c.type# = 123 ' ||\r\n&gt;                           -- skip ADT and REF columns\r\n&gt;                           'or c.type# = 121 or c.type# = 111 ' ||\r\n&gt;                           -- Bug 20683085: skip Opaque Type column except\r\n&gt;                           -- xmltype stored as LOB. Check xmltype as lob using\r\n&gt;                           -- property bit KQLDCOP2_XSLB.\r\n&gt; \t\t          -- Bug 23083309: if there are unsupported columns,\r\n&gt;                           -- then XMLType column is skipped (hidden XMLType lob\r\n&gt;                           -- column is already handled)\r\n&gt;                           'or (c.type# = 58 and ' ||\r\n&gt;                               '((bitand(c.property, ' ||\r\n&gt;                                 'power(2,32)*4194304)&lt;&gt;power(2,32)*4194304) '||\r\n&gt;                                 'or :u &gt; 0)) ' ||\r\n&gt;                           -- Bug 21785587: skip long raw\r\n&gt;                           'or c.type# = 24';\r\n&gt; \r\n&gt;   sqlstmt := colcomments || ' and (' || unsupp_col_condition || ')';\r\n&gt; \r\n&gt;   unsupp_col_count := 0;\r\n&gt;   EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM (' || sqlstmt ||')'\r\n&gt;     INTO unsupp_col_count USING unsupp_col_count;\r\n&gt; \r\n&gt;   open colcommentscur for colcomments ||' and not ('||\r\n&gt;                             unsupp_col_condition ||')'\r\n&gt;                       USING unsupp_col_count;\r\n&gt;   loop\r\n&gt;     fetch colcommentscur into col_name, comments;\r\n&gt;     exit when colcommentscur%NOTFOUND;\r\n&gt; \r\n&gt;     comments := replace(comments, '''','''''');\r\n&gt;     sqlstmt := 'comment on column ' ||\r\n&gt;                quoted_owner || '.' || quoted_newview || '.' ||\r\n&gt;                col_name || ' is ''' || comments || '''';\r\n&gt;     -- dbms_output.put_line(sqlstmt);\r\n&gt;     execute immediate sqlstmt;\r\n&gt;   end loop;\r\n&gt;   close colcommentscur;\r\n&gt; end;\r\n&gt; \r\n&gt;   -- This function is created to prevent SQL injection. We couldn't use\r\n&gt;   -- dbms_assert because catcdbviews.sql is called before dbms_assert\r\n&gt;   -- is created\r\n&gt;   function isLegalOwnerViewName(owner IN varchar2, oldview IN varchar2,\r\n&gt;                              newview IN varchar2) return boolean as\r\n&gt;     cCheck       number;\r\n&gt;     ownerId      number;\r\n&gt;     cleanOldview dbms_id;\r\n&gt;     cleanNewview dbms_id;\r\n&gt;   begin\r\n&gt; \r\n&gt;     -- Check if owner already exist\r\n&gt;     -- USER$ contains both users and roles, exclude roles from the check\r\n&gt;     begin\r\n&gt;       execute immediate 'SELECT USER# FROM USER$ WHERE TYPE# = 1 AND NAME = :1'\r\n&gt;                into ownerId using owner;\r\n&gt;     exception\r\n&gt;       when no_data_found then return false;\r\n&gt;     end;\r\n&gt; \r\n&gt;     -- Check if oldview already exist, qualify with owner# to avoid ORA-1422\r\n&gt;     -- error,if two dictionary view with the same name exists across different\r\n&gt;     -- schemas like DBA_DV_STATUS which exists in both SYS and DVSYS schemas.\r\n&gt;     begin\r\n&gt;       execute immediate 'SELECT 1 FROM OBJ$ WHERE NAME = :1' ||\r\n&gt;                         ' AND TYPE# in (2, 4) and owner# = :2'\r\n&gt;                into cCheck using oldview, ownerId;\r\n&gt;     exception\r\n&gt;       when no_data_found then return false;\r\n&gt;     end;\r\n&gt; \r\n&gt;     -- Check for appropriate newview name\r\n&gt;     -- The following is allowed for newview name\r\n&gt;     -- 1. Substitute 'DBA' with 'CDB'\r\n&gt;     -- 2. Substitute 'AWR_PDB' with 'CDB_HIST'\r\n&gt;     -- 3. Substitute 'ATTRIBUTES' with 'ATTRIB'\r\n&gt;     -- 4. Substitute 'DATABASE' with 'CDB'\r\n&gt;     -- 5. Remove 'REDUCED'\r\n&gt;     -- 6. Add 'AWRI$_CDB'\r\n&gt;     cleanOldview := REGEXP_REPLACE(upper(oldview),\r\n&gt;        'DBA|DATABASE|_| |HIST|ATTRIB(UTE)?S?|CDB|AWR_PDB|REDUCED');\r\n&gt;     cleanNewview := REGEXP_REPLACE(upper(newview),\r\n&gt;        'CDB|DATABASE|_| |HIST|ATTRIB(UTE)?S?|AWRI\\$');\r\n&gt; \r\n&gt;     if (cleanOldview = cleanNewview) then\r\n&gt;       RETURN TRUE;\r\n&gt;     end if;\r\n&gt; \r\n&gt;     RETURN FALSE;\r\n&gt; \r\n&gt;   end isLegalOwnerViewName;\r\n17c233,251\r\n&lt; end;\r\n---\r\n&gt;   --\r\n&gt;   -- Initialize the list of SYS owned sensitive tables which should\r\n&gt;   -- not be allowed to be shadow-copied even within Create_CDBView.\r\n&gt;   --\r\n&gt;   -- Once ER 24598663 gets implemented, these entries will be part of a\r\n&gt;   -- SYS owned metadata table and instead of hard-coding the list, we will\r\n&gt;   -- be populating the list by fetching it from the table.\r\n&gt;   --\r\n&gt; begin\r\n&gt;   sens_table_array := tabs_array('ENC$', 'LINK$', 'USER$', 'DEFAULT_PWD$',\r\n&gt;                             'XS$VERIFIERS',  'USER_HISTORY$',\r\n&gt;                             'HIST_HEAD$', 'HISTGRM$','CDB_LOCAL_ADMINAUTH$',\r\n&gt;                             'PDB_CREATE$','PDB_SYNC$');\r\n&gt; \r\n&gt;   for i in 1..MAX_SENS_TAB_COUNT loop\r\n&gt;     sens_table_list(sens_table_array(i)) := TRUE;\r\n&gt;   end loop;\r\n&gt; \r\n&gt; end CDBView_Internal;\r\n<\/pre>\n<div id=\"SYS.DBMS_AUTOTASK_PRVT.PACKAGE BODY.12.2.0.1_RU\">SYS.DBMS_AUTOTASK_PRVT &#8211; PACKAGE BODY (RU):<\/div>\n<pre class=\"EnlighterJSRAW enlighter-collapse\" data-enlighter-language=\"diff\" data-enlighter-linenumbers=\"false\">171a172,186\r\n&gt; \r\n&gt; \r\n&gt; \r\n&gt; \r\n&gt; \r\n&gt; \r\n&gt; \r\n&gt; \r\n&gt; PROCEDURE REFRESH_CLIENT_CONFIG IS\r\n&gt;   EXTERNAL LANGUAGE C\r\n&gt;   NAME \"ketrcc_refresh_client_config\"\r\n&gt;   WITH CONTEXT\r\n&gt;   PARAMETERS(CONTEXT)\r\n&gt;   LIBRARY DBMS_AUTOTASK_PRVT_LIB;\r\n&gt; \r\n<\/pre>\n<div id=\"SYS.DBMS_SQLPATCH.PACKAGE BODY.12.2.0.1_RU\">SYS.DBMS_SQLPATCH &#8211; PACKAGE BODY (RU):<\/div>\n<pre class=\"EnlighterJSRAW enlighter-collapse\" data-enlighter-language=\"diff\" data-enlighter-linenumbers=\"false\">67a68,70\r\n&gt;   \r\n&gt;   ORIG_CONTAINER_NAME VARCHAR2(128) := NULL;\r\n&gt;   \r\n77a81,106\r\n&gt;   \r\n&gt;   \r\n&gt;   \r\n&gt;   FUNCTION CHECK_CONTAINER_SWITCH(E_MSG OUT VARCHAR2) RETURN BOOLEAN IS\r\n&gt;     L_CONTAINER_NAME VARCHAR2(128);\r\n&gt;     CONTAINER_SWITCHED BOOLEAN;\r\n&gt;   BEGIN\r\n&gt;     SELECT SYS_CONTEXT('userenv', 'con_name')\r\n&gt;       INTO L_CONTAINER_NAME\r\n&gt;       FROM DUAL;\r\n&gt; \r\n&gt;     DEBUG_PUT_LINE('l_container_name '||L_CONTAINER_NAME||' orig_container_name '||ORIG_CONTAINER_NAME);\r\n&gt; \r\n&gt;     IF ORIG_CONTAINER_NAME IS NULL OR\r\n&gt;        L_CONTAINER_NAME != ORIG_CONTAINER_NAME THEN\r\n&gt;       E_MSG := 'Unexpected container change to ' || L_CONTAINER_NAME;\r\n&gt;       CONTAINER_SWITCHED := TRUE;\r\n&gt;     ELSE\r\n&gt;       E_MSG := NULL;\r\n&gt;       CONTAINER_SWITCHED := FALSE;\r\n&gt;     END IF;\r\n&gt; \r\n&gt;     RETURN CONTAINER_SWITCHED;\r\n&gt;   END;\r\n&gt; \r\n&gt;   \r\n150c179,180\r\n&lt;           S_NOTOK_COMPONENTS = NOTOK_COMPONENTS\r\n---\r\n&gt;           S_NOTOK_COMPONENTS = NOTOK_COMPONENTS,\r\n&gt;           S_CONTAINER_NAME = ORIG_CONTAINER_NAME\r\n163a194\r\n&gt;     L_MSG VARCHAR2(300);\r\n194c225,226\r\n&lt;            S_NOTOK_COMPONENTS\r\n---\r\n&gt;            S_NOTOK_COMPONENTS,\r\n&gt;            S_CONTAINER_NAME\r\n224c256,257\r\n&lt;       NOTOK_COMPONENTS\r\n---\r\n&gt;       NOTOK_COMPONENTS,\r\n&gt;       ORIG_CONTAINER_NAME\r\n227a261,265\r\n&gt;     \r\n&gt;     IF CHECK_CONTAINER_SWITCH(L_MSG) THEN\r\n&gt;       RAISE_APPLICATION_ERROR(-20003, L_MSG);\r\n&gt;     END IF;\r\n&gt; \r\n259d296\r\n&lt; \r\n285c322\r\n&lt;     RETURN '$Header: rdbms\/src\/server\/dict\/plsicds\/prvtsqlpatch.sql \/st_rdbms_12.2.0.1.0dbbp\/3 2018\/05\/02 15:37:07 surman Exp $';\r\n---\r\n&gt;     RETURN '$Header: rdbms\/src\/server\/dict\/plsicds\/prvtsqlpatch.sql \/st_rdbms_12.2.0.1.0dbbp\/4 2018\/10\/09 03:33:10 sanagara Exp $';\r\n603a641,642\r\n&gt;     CONTAINER_SWITCHED BOOLEAN := FALSE;\r\n&gt;     L_MSG VARCHAR2(300);\r\n608,610c647,655\r\n&lt;     UPDATE DBA_REGISTRY_SQLPATCH\r\n&lt;       SET STATUS = 'END'\r\n&lt;       WHERE ROWID = CURRENT_REGISTRY_ROWID;\r\n---\r\n&gt;     \r\n&gt;     \r\n&gt;     CONTAINER_SWITCHED := CHECK_CONTAINER_SWITCH(L_MSG);\r\n&gt; \r\n&gt;     IF NOT CONTAINER_SWITCHED THEN\r\n&gt;       \r\n&gt;       UPDATE DBA_REGISTRY_SQLPATCH\r\n&gt;         SET STATUS = 'END'\r\n&gt;         WHERE ROWID = CURRENT_REGISTRY_ROWID;\r\n616,617c661,662\r\n&lt;       WHERE S_CURRENT_PATCH_ID = CURRENT_PATCH.PATCH_ID\r\n&lt;       AND S_CURRENT_PATCH_UID = CURRENT_PATCH.PATCH_UID;\r\n---\r\n&gt;         WHERE S_CURRENT_PATCH_ID = CURRENT_PATCH.PATCH_ID\r\n&gt;         AND S_CURRENT_PATCH_UID = CURRENT_PATCH.PATCH_UID;\r\n619c664,665\r\n&lt;     COMMIT;\r\n---\r\n&gt;       COMMIT;\r\n&gt;    END IF;\r\n648a695,700\r\n&gt; \r\n&gt;     \r\n&gt;     IF CONTAINER_SWITCHED THEN\r\n&gt;       RAISE_APPLICATION_ERROR(-20003, L_MSG);\r\n&gt;     END IF;\r\n&gt; \r\n661a714\r\n&gt;     L_MSG VARCHAR2(300);\r\n667a721,725\r\n&gt;     \r\n&gt;     IF CHECK_CONTAINER_SWITCH(L_MSG) THEN\r\n&gt;       RAISE_APPLICATION_ERROR(-20003, L_MSG);\r\n&gt;     END IF;\r\n&gt; \r\n670,671c728,734\r\n&lt;       DEBUG_PUT_LINE('  initialize not complete, never install');\r\n&lt;       RETURN NOTHING_SQL;\r\n---\r\n&gt;       \r\n&gt;       \r\n&gt;       \r\n&gt;       \r\n&gt;       \r\n&gt;       \r\n&gt;       RAISE_APPLICATION_ERROR(-20004, 'Uninitialized state in install_file');\r\n1013a1077,1082\r\n&gt; \r\n&gt;     \r\n&gt;     SELECT SYS_CONTEXT('userenv', 'con_name')\r\n&gt;       INTO ORIG_CONTAINER_NAME\r\n&gt;       FROM DUAL;\r\n&gt; \r\n<\/pre>\n<div id=\"SYS.DBMS_XSTREAM_ADM_INTERNAL.PACKAGE BODY.12.2.0.1_OCT2018RUR\">SYS.DBMS_XSTREAM_ADM_INTERNAL &#8211; PACKAGE BODY (OCT2018RUR):<\/div>\n<pre class=\"EnlighterJSRAW enlighter-collapse\" data-enlighter-language=\"diff\" data-enlighter-linenumbers=\"false\">445c445\r\n&lt;         END IF;\r\n---\r\n&gt;       END IF;\r\n496c496\r\n&lt;       INCREMENT := INCREMENT + 1;      \r\n---\r\n&gt;       INCREMENT := INCREMENT + 1;\r\n583c583\r\n&lt;       END IF;\r\n---\r\n&gt;     END IF;\r\n2727c2727\r\n&lt; \r\n---\r\n&gt;     \r\n3310c3310\r\n&lt;     HAS_ROLE            NUMBER := 0;\r\n---\r\n&gt;     HAS_ROLE        NUMBER := 0;\r\n3433c3433\r\n&lt; \r\n---\r\n&gt;       \r\n3484c3484\r\n&lt;  \r\n---\r\n&gt; \r\n<\/pre>\n<div id=\"SYS.DBMS_XSTREAM_ADM_UTL.PACKAGE BODY.12.2.0.1_OCT2018RUR\">SYS.DBMS_XSTREAM_ADM_UTL &#8211; PACKAGE BODY (OCT2018RUR):<\/div>\n<pre class=\"EnlighterJSRAW enlighter-collapse\" data-enlighter-language=\"diff\" data-enlighter-linenumbers=\"false\">687c687\r\n&lt;                SCN     OCINUMBER,  SCN INDICATOR SB2,\r\n---\r\n&gt;                SCN OCINUMBER, SCN INDICATOR SB2,\r\n689,690c689,690\r\n&lt;                POS     OCIRAW,     POS  INDICATOR SB2,\r\n&lt;                POS     MAXLEN SB4, POS LENGTH SB4)\r\n---\r\n&gt;                POS OCIRAW, POS  INDICATOR SB2,\r\n&gt;                POS MAXLEN SB4, POS LENGTH SB4)\r\n1526c1526\r\n&lt;       DBMS_XSTREAM_ADM_UTL.CONVERT_SCN_TO_POS(PROCESSED_LWM_SCN,\r\n---\r\n&gt;       DBMS_XSTREAM_ADM_UTL.CONVERT_SCN_TO_POS(PROCESSED_LWM_SCN, \r\n<\/pre>\n<div id=\"SYS.DBMS_XSTREAM_AUTH_IVK.PACKAGE BODY.12.2.0.1_OCT2018RUR\">SYS.DBMS_XSTREAM_AUTH_IVK &#8211; PACKAGE BODY (OCT2018RUR):<\/div>\n<pre class=\"EnlighterJSRAW enlighter-collapse\" data-enlighter-language=\"diff\" data-enlighter-linenumbers=\"false\">792c792\r\n&lt;     INCREMENT := INCREMENT + 1;     \r\n---\r\n&gt;     INCREMENT := INCREMENT + 1; \r\n908c908\r\n&lt;     END IF;    \r\n---\r\n&gt;     END IF;\r\n<\/pre>\n<div id=\"SYS.DBMS_XSTREAM_GG_INTERNAL.PACKAGE BODY.12.2.0.1_OCT2018RUR\">SYS.DBMS_XSTREAM_GG_INTERNAL &#8211; PACKAGE BODY (OCT2018RUR):<\/div>\n<pre class=\"EnlighterJSRAW enlighter-collapse\" data-enlighter-language=\"diff\" data-enlighter-linenumbers=\"false\">77a78\r\n&gt;       PRBA NUMBER := RBA;\r\n87c88\r\n&lt;           SEQ# = SEQNO AND RBA = RBA AND INDEX# = INDEX_NUM;\r\n---\r\n&gt;           SEQ# = SEQNO AND RBA = PRBA AND INDEX# = INDEX_NUM;\r\n91c92\r\n&lt;           SEQ# = SEQNO AND RBA = RBA AND INDEX# = INDEX_NUM;\r\n---\r\n&gt;           SEQ# = SEQNO AND RBA = PRBA AND INDEX# = INDEX_NUM;\r\n<\/pre>\n<div id=\"SYS.DBMS_XSTREAM_UTL_IVK.PACKAGE BODY.12.2.0.1_OCT2018RUR\">SYS.DBMS_XSTREAM_UTL_IVK &#8211; PACKAGE BODY (OCT2018RUR):<\/div>\n<pre class=\"EnlighterJSRAW enlighter-collapse\" data-enlighter-language=\"diff\" data-enlighter-linenumbers=\"false\">1438c1438\r\n&lt;       ' queue=' || QUEUE_NAME || ' src_db=' || SOURCE_DATABASE || \r\n---\r\n&gt;       ' queue=' || QUEUE_NAME || ' src_db=' || SOURCE_DATABASE ||\r\n2908c2908\r\n&lt;         END IF;\r\n---\r\n&gt;       END IF; \r\n<\/pre>\n<h3><strong>18.0.0.0<\/strong><\/h3>\n<div id=\"SYS.DBMS_ISCHED.PACKAGE BODY.18.0.0.0_RU\">SYS.DBMS_ISCHED &#8211; PACKAGE BODY (RU):<\/div>\n<pre class=\"EnlighterJSRAW enlighter-collapse\" data-enlighter-language=\"diff\" data-enlighter-linenumbers=\"false\">7763a7764\r\n&gt; \r\n7775,7778c7776,7788\r\n&lt;   CUR_SCHEMA           IN VARCHAR2) IS\r\n&lt; CANON_JOB_NAME     DBMS_ID;\r\n&lt; CANON_JOB_SUBNAME  DBMS_ID;\r\n&lt; CANON_JOB_OWNER    DBMS_ID;\r\n---\r\n&gt;   CUR_SCHEMA           IN VARCHAR2,\r\n&gt;   LOCK_NAME           OUT DBMS_ID,\r\n&gt;   LOCK_HANDLE         OUT VARCHAR2,\r\n&gt;   RECIPIENTS_LIST     OUT DBMS_UTILITY.LNAME_ARRAY,\r\n&gt;  NEW_RAISE_EVENTS_NUM OUT PLS_INTEGER,\r\n&gt;   CANON_JOB_NAME   IN OUT DBMS_ID,\r\n&gt;  CANON_JOB_SUBNAME IN OUT DBMS_ID,\r\n&gt;   CANON_JOB_OWNER  IN OUT DBMS_ID,\r\n&gt;   CUR_FLAGS           OUT NUMBER,\r\n&gt;   DOES_SUB_EXIST      OUT BOOLEAN,\r\n&gt;   DOES_REG_EXIST      OUT BOOLEAN,\r\n&gt;   REAL_JB_NAME        IN VARCHAR2 \r\n&gt; ) IS\r\n7782d7791\r\n&lt; NEW_RAISE_EVENTS_NUM PLS_INTEGER := 0;\r\n7791d7799\r\n&lt; EVENT_10862       PLS_INTEGER := 0;\r\n7798,7799d7805\r\n&lt; LOCK_NAME                  DBMS_ID;\r\n&lt; LOCK_HANDLE                VARCHAR2(128);\r\n7802d7807\r\n&lt; RECIPIENTS_LIST   DBMS_UTILITY.LNAME_ARRAY;\r\n7805d7809\r\n&lt; CUR_FLAGS              NUMBER;\r\n7807c7811\r\n&lt; REAL_JOB_NAME          VARCHAR2(2 * ORA_MAX_NAME_LEN + 5) := JOB_NAME;\r\n---\r\n&gt; REAL_JOB_NAME          VARCHAR2(2 * ORA_MAX_NAME_LEN + 5) := REAL_JB_NAME;\r\n7817c7821,7822\r\n&lt;    SYS.DBMS_ISCHED.TRACE_EMAIL('Entering add_job_email_notification');\r\n---\r\n&gt;    SYS.DBMS_ISCHED.TRACE_EMAIL('Entering ' || \r\n&gt;          'dbms_isched.add_job_email_notification');\r\n7819a7825,7836\r\n&gt;   IF DO_TRC THEN\r\n&gt;     SYS.DBMS_ISCHED.TRACE_EMAIL('Current user: ' ||\r\n&gt;           SYS_CONTEXT('USERENV','CURRENT_USER') );\r\n&gt;     SYS.DBMS_ISCHED.TRACE_EMAIL('Session user: ' ||\r\n&gt;           SYS_CONTEXT('USERENV','SESSION_USER') );\r\n&gt;     SYS.DBMS_ISCHED.TRACE_EMAIL('Current schema: ' ||\r\n&gt;           SYS_CONTEXT('USERENV','CURRENT_SCHEMA') );\r\n&gt;   END IF;\r\n&gt; \r\n&gt;   NEW_RAISE_EVENTS_NUM := 0;\r\n&gt;   CUR_FLAGS := 0;\r\n&gt; \r\n7844,7868c7861,7862\r\n&lt;   RESOLVE3_NAME(REAL_JOB_NAME, CANON_JOB_NAME, CANON_JOB_SUBNAME,\r\n&lt;     CANON_JOB_OWNER, CUR_SCHEMA);\r\n&lt; \r\n&lt;   \r\n&lt;   FULL_JOB_NAME := '\"'||CANON_JOB_OWNER||'\".\"'||CANON_JOB_NAME||'\"';\r\n&lt; \r\n&lt;   \r\n&lt;   IF INVOKER != CANON_JOB_OWNER AND INVOKER != 'SYS' AND\r\n&lt;     BITAND(SYS_PRIVS, 2) = 0\r\n&lt;   THEN\r\n&lt;     \r\n&lt;     BEGIN\r\n&lt;       SYS.DBMS_ISCHED_UTL.CHECK_OBJECT_PRIVS(CANON_JOB_NAME, CANON_JOB_OWNER, 'JOB',\r\n&lt;         INVOKER, 'ALTER', TRUE, SYS_PRIVS);\r\n&lt;     EXCEPTION WHEN OTHERS THEN\r\n&lt;       \r\n&lt;       IF SQLCODE = -23306 AND CANON_JOB_SUBNAME IS NULL\r\n&lt;        AND REAL_JOB_NAME = JOB_NAME THEN\r\n&lt;         REAL_JOB_NAME := '\"'||CUR_SCHEMA||'\".' || JOB_NAME;\r\n&lt;         GOTO TRY_RESOLVE_AGAIN;\r\n&lt;       ELSE\r\n&lt;         RAISE;\r\n&lt;       END IF;\r\n&lt;     END;\r\n&lt;   END IF;\r\n---\r\n&gt;   FULL_JOB_NAME := DBMS_ASSERT.ENQUOTE_NAME(CANON_JOB_OWNER, FALSE) ||'.'||\r\n&gt;                    DBMS_ASSERT.ENQUOTE_NAME(CANON_JOB_NAME , FALSE);\r\n7892c7886,7890\r\n&lt;       REAL_JOB_NAME := '\"'||CUR_SCHEMA||'\".' || JOB_NAME;\r\n---\r\n&gt;       REAL_JOB_NAME := DBMS_ASSERT.ENQUOTE_NAME(CUR_SCHEMA, FALSE) ||\r\n&gt;                        '.' || JOB_NAME;\r\n&gt;       \r\n&gt;       RESOLVE3_NAME(REAL_JOB_NAME, CANON_JOB_NAME, CANON_JOB_SUBNAME,\r\n&gt;       CANON_JOB_OWNER, CUR_SCHEMA);\r\n7981,7990d7978\r\n&lt;   \r\n&lt;   \r\n&lt;   \r\n&lt;   DBMS_SYSTEM.READ_EV(10862, EVENT_10862);\r\n&lt;   IF EVENT_10862 = 0 THEN\r\n&lt;     EXECUTE IMMEDIATE\r\n&lt;       'ALTER SESSION SET EVENTS ''10862 TRACE NAME CONTEXT FOREVER, LEVEL 1''';\r\n&lt;   END IF;\r\n&lt; \r\n&lt;   \r\n7992,7993c7980,7981\r\n&lt;     'select count(*) from sys.dba_QUEUE_SUBSCRIBERS where owner=''SYS''\r\n&lt;        and queue_name=''SCHEDULER$_EVENT_QUEUE'' and consumer_name=:lname'\r\n---\r\n&gt;     'select count(*) from sys.user_QUEUE_SUBSCRIBERS where \r\n&gt;        queue_name=''SCHEDULER$_EVENT_QUEUE'' and consumer_name=:lname'\r\n7996,8003c7984,7985\r\n&lt;   BEGIN\r\n&lt;     \r\n&lt;     DBMS_AQADM.ADD_SUBSCRIBER\r\n&lt;      (QUEUE_NAME =&gt; 'SYS.SCHEDULER$_EVENT_QUEUE',\r\n&lt;       SUBSCRIBER =&gt; SYS.AQ$_AGENT(LOCK_NAME, NULL, NULL));\r\n&lt;   EXCEPTION WHEN OTHERS THEN\r\n&lt;     IF SQLCODE = -24034 THEN NULL;\r\n&lt;     ELSE\r\n---\r\n&gt;     DOES_SUB_EXIST := FALSE;\r\n&gt;     BEGIN\r\n8005,8007c7987,7994\r\n&lt;       IF EVENT_10862 = 0 THEN\r\n&lt;         EXECUTE IMMEDIATE 'ALTER SESSION SET EVENTS ' ||\r\n&lt;           '''10862 TRACE NAME CONTEXT OFF''' ;\r\n---\r\n&gt;       DBMS_AQADM.ADD_SUBSCRIBER\r\n&gt;        (QUEUE_NAME =&gt; 'SYS.SCHEDULER$_EVENT_QUEUE',\r\n&gt;         SUBSCRIBER =&gt; SYS.AQ$_AGENT(LOCK_NAME, NULL, NULL));\r\n&gt;     EXCEPTION WHEN OTHERS THEN\r\n&gt;       IF SQLCODE = -24034 THEN NULL;\r\n&gt;       ELSE\r\n&gt;         LOCK_ERROR := DBMS_LOCK.RELEASE(LOCKHANDLE=&gt;LOCK_HANDLE);\r\n&gt;         RAISE;\r\n8009,8019c7996,7998\r\n&lt; \r\n&lt;       LOCK_ERROR := DBMS_LOCK.RELEASE(LOCKHANDLE=&gt;LOCK_HANDLE);\r\n&lt;       RAISE;\r\n&lt;     END IF;\r\n&lt;   END;\r\n&lt;   END IF;\r\n&lt; \r\n&lt;   \r\n&lt;   IF EVENT_10862 = 0 THEN\r\n&lt;     EXECUTE IMMEDIATE 'ALTER SESSION SET EVENTS ' ||\r\n&lt;       '''10862 TRACE NAME CONTEXT OFF''' ;\r\n---\r\n&gt;     END;\r\n&gt;   ELSE\r\n&gt;     DOES_SUB_EXIST := TRUE;\r\n8025,8029d8003\r\n&lt;   IF ROW_COUNT = 0 THEN\r\n&lt;     \r\n&lt;     SYS.DBMS_AQADM_SYS.ENABLE_DB_ACCESS(LOCK_NAME,INVOKER,TRUE);\r\n&lt;   END IF;\r\n&lt; \r\n8033a8008,8012\r\n&gt;   EXCEPTION WHEN OTHERS THEN\r\n&gt;     LOCK_ERROR := DBMS_LOCK.RELEASE(LOCKHANDLE=&gt;LOCK_HANDLE);\r\n&gt;     RAISE;\r\n&gt;   END;\r\n&gt; \r\n8035,8042c8014,8020\r\n&lt;     \r\n&lt;     \r\n&lt;     REGINFO := SYS.AQ$_REG_INFO('SYS.SCHEDULER$_EVENT_QUEUE:\"'||LOCK_NAME||'\"',\r\n&lt;                                 DBMS_AQ.NAMESPACE_AQ,\r\n&lt;                                 'plsql:\/\/SYS.SCHEDULER$_JOB_EVENT_HANDLER',\r\n&lt;                                  NULL);\r\n&lt;     REGLIST := SYS.AQ$_REG_INFO_LIST(REGINFO);\r\n&lt;     DBMS_AQ.REGISTER ( REGLIST, 1 );\r\n---\r\n&gt;     DOES_REG_EXIST := FALSE;\r\n&gt;   ELSE \r\n&gt;     DOES_REG_EXIST := TRUE;\r\n&gt;   END IF;\r\n&gt; \r\n&gt;   IF DO_TRC THEN\r\n&gt;    SYS.DBMS_ISCHED.TRACE_EMAIL('Exiting dbms_isched.add_job_email_notification');\r\n8045a8024,8078\r\n&gt; \r\n&gt; END;\r\n&gt; \r\n&gt; PROCEDURE ADD_JOB_EMAIL_NOTIFICATION_PH3\r\n&gt; (\r\n&gt;   RECIPIENTS_LIST      IN DBMS_UTILITY.LNAME_ARRAY,\r\n&gt;   NEW_RAISE_EVENTS_NUM IN PLS_INTEGER,\r\n&gt;   CANON_JOB_NAME       IN DBMS_ID,\r\n&gt;   CANON_JOB_SUBNAME    IN DBMS_ID,\r\n&gt;   CANON_JOB_OWNER      IN DBMS_ID,\r\n&gt;   INVOKER              IN VARCHAR2,\r\n&gt;   SENDER               IN VARCHAR2,\r\n&gt;   SUBJECT              IN VARCHAR2,\r\n&gt;   BODY                 IN VARCHAR2,\r\n&gt;   FILTER_CONDITION     IN VARCHAR2,\r\n&gt;   LOCK_NAME            IN DBMS_ID,\r\n&gt;   LOCK_HANDLE          IN VARCHAR2,\r\n&gt;   CUR_FLAGS            IN NUMBER,\r\n&gt;   RECIPIENTS           IN VARCHAR2,\r\n&gt;   EVENTS               IN VARCHAR2\r\n&gt; ) IS\r\n&gt; TYPE EVENT_NAME_LIST IS TABLE OF DBMS_ID;\r\n&gt; TYPE EVENT_NUMBER_LIST IS TABLE OF NUMBER;\r\n&gt; EVENT_NAMES EVENT_NAME_LIST :=  EVENT_NAME_LIST('JOB_STARTED',\r\n&gt;   'JOB_SUCCEEDED', 'JOB_FAILED', 'JOB_BROKEN', 'JOB_COMPLETED',\r\n&gt;   'JOB_STOPPED', 'JOB_SCH_LIM_REACHED', 'JOB_DISABLED',\r\n&gt;   'JOB_CHAIN_STALLED','JOB_OVER_MAX_DUR','JOB_RUN_COMPLETED','JOB_ALL_EVENTS');\r\n&gt; EVENT_NUMBERS EVENT_NUMBER_LIST :=\r\n&gt;   EVENT_NUMBER_LIST(1,2,4,8,16,32,64,128,256,512,2+4+32,1024-1);\r\n&gt; EVENT_10862       PLS_INTEGER := 0;\r\n&gt; LOCK_ERROR        PLS_INTEGER;\r\n&gt; FULL_JOB_NAME     VARCHAR2(3 * ORA_MAX_NAME_LEN + 8);\r\n&gt; DO_TRC            BOOLEAN := FALSE;\r\n&gt; EV_27402          PLS_INTEGER;\r\n&gt; BEGIN\r\n&gt;   \r\n&gt;   DBMS_SYSTEM.READ_EV(27402, EV_27402);\r\n&gt;   IF BITAND(EV_27402,128)=128 THEN DO_TRC := TRUE; END IF;\r\n&gt; \r\n&gt;   \r\n&gt;   IF DO_TRC THEN\r\n&gt;    SYS.DBMS_ISCHED.TRACE_EMAIL('Entered add_job_email_notification_ph3');\r\n&gt;   END IF;\r\n&gt; \r\n&gt;   IF DO_TRC THEN\r\n&gt;     SYS.DBMS_ISCHED.TRACE_EMAIL('Current user: ' ||\r\n&gt;           SYS_CONTEXT('USERENV','CURRENT_USER') );\r\n&gt;     SYS.DBMS_ISCHED.TRACE_EMAIL('Session user: ' ||\r\n&gt;           SYS_CONTEXT('USERENV','SESSION_USER') );\r\n&gt;     SYS.DBMS_ISCHED.TRACE_EMAIL('Current schema: ' ||\r\n&gt;           SYS_CONTEXT('USERENV','CURRENT_SCHEMA') );\r\n&gt;   END IF;\r\n&gt; \r\n&gt;   BEGIN \r\n&gt;   \r\n8152a8186,8189\r\n&gt;   FULL_JOB_NAME := DBMS_ASSERT.ENQUOTE_NAME(CANON_JOB_OWNER, FALSE) ||'.'||\r\n&gt;                    DBMS_ASSERT.ENQUOTE_NAME(CANON_JOB_NAME , FALSE);\r\n&gt; \r\n&gt;   \r\n8159c8196,8197\r\n&lt;         FULL_JOB_NAME := FULL_JOB_NAME ||'.\"'||CANON_JOB_SUBNAME||'\"';\r\n---\r\n&gt;         FULL_JOB_NAME := FULL_JOB_NAME ||'.'||\r\n&gt;                          DBMS_ASSERT.ENQUOTE_NAME(CANON_JOB_SUBNAME,FALSE);\r\n8165a8204,8208\r\n&gt; \r\n&gt;   \r\n&gt;   IF DO_TRC THEN\r\n&gt;    SYS.DBMS_ISCHED.TRACE_EMAIL('Exiting add_job_email_notification_ph3');\r\n&gt;   END IF;\r\n<\/pre>\n<div id=\"GSMADMIN_INTERNAL.DBMS_GSM_COMMON.PACKAGE BODY.18.0.0.0_RU\">GSMADMIN_INTERNAL.DBMS_GSM_COMMON &#8211; PACKAGE BODY (RU):<\/div>\n<pre class=\"EnlighterJSRAW enlighter-collapse\" data-enlighter-language=\"diff\" data-enlighter-linenumbers=\"false\">1575a1576\r\n&gt;   LOC_PVALUE    VARCHAR2(4096);\r\n1595a1597,1603\r\n&gt;     LOC_PVALUE := DBMS_ASSERT.NOOP(PVALUE);\r\n&gt; \r\n&gt;     \r\n&gt;     IF LOC_PVALUE IS NULL OR LOC_PVALUE = '' THEN\r\n&gt;       LOC_PVALUE := '''''';\r\n&gt;     END IF;\r\n&gt; \r\n1597,1599c1605,1607\r\n&lt;                        'ALTER SYSTEM SET \"'||\r\n&lt;                        DBMS_ASSERT.NOOP(PNAME)||\r\n&lt;                        '\"='||DBMS_ASSERT.NOOP(PVALUE)||\r\n---\r\n&gt;                        'ALTER SYSTEM SET '||\r\n&gt;                        DBMS_ASSERT.ENQUOTE_NAME(PNAME)||\r\n&gt;                        '='||DBMS_ASSERT.NOOP(LOC_PVALUE)||\r\n1604,1606c1612,1614\r\n&lt;     EXECUTE IMMEDIATE 'ALTER SYSTEM SET \"'||\r\n&lt;                        DBMS_ASSERT.NOOP(PNAME)||\r\n&lt;                        '\"='||DBMS_ASSERT.NOOP(PVALUE)||\r\n---\r\n&gt;     EXECUTE IMMEDIATE 'ALTER SYSTEM SET '||\r\n&gt;                        DBMS_ASSERT.ENQUOTE_NAME(PNAME)||\r\n&gt;                        '='||DBMS_ASSERT.NOOP(LOC_PVALUE)||\r\n1683,1685c1691,1693\r\n&lt;                        'ALTER SYSTEM SET \"'||\r\n&lt;                        DBMS_ASSERT.NOOP(PNAME)||\r\n&lt;                        '\"='||DBMS_ASSERT.NOOP(LOC_PVALUE)||\r\n---\r\n&gt;                        'ALTER SYSTEM SET '||\r\n&gt;                        DBMS_ASSERT.ENQUOTE_NAME(PNAME)||\r\n&gt;                        '='||DBMS_ASSERT.NOOP(LOC_PVALUE)||\r\n1690,1692c1698,1700\r\n&lt;       EXECUTE IMMEDIATE 'ALTER SYSTEM SET \"'||\r\n&lt;                         DBMS_ASSERT.NOOP(PNAME)||\r\n&lt;                         '\"='||DBMS_ASSERT.NOOP(LOC_PVALUE)||\r\n---\r\n&gt;       EXECUTE IMMEDIATE 'ALTER SYSTEM SET '||\r\n&gt;                         DBMS_ASSERT.ENQUOTE_NAME(PNAME)||\r\n&gt;                         '='||DBMS_ASSERT.NOOP(LOC_PVALUE)||\r\n1770,1772c1778,1780\r\n&lt;                         'ALTER SYSTEM SET \"'||\r\n&lt;                         DBMS_ASSERT.NOOP(PNAME)||\r\n&lt;                         '\"='||DBMS_ASSERT.NOOP(LOC_PVALUE)||\r\n---\r\n&gt;                         'ALTER SYSTEM SET '||\r\n&gt;                         DBMS_ASSERT.ENQUOTE_NAME(PNAME)||\r\n&gt;                         '='||DBMS_ASSERT.NOOP(LOC_PVALUE)||\r\n1777,1779c1785,1787\r\n&lt;       EXECUTE IMMEDIATE 'ALTER SYSTEM SET \"'||\r\n&lt;                         DBMS_ASSERT.NOOP(PNAME)||\r\n&lt;                         '\"='||DBMS_ASSERT.NOOP(LOC_PVALUE)||\r\n---\r\n&gt;       EXECUTE IMMEDIATE 'ALTER SYSTEM SET '||\r\n&gt;                         DBMS_ASSERT.ENQUOTE_NAME(PNAME)||\r\n&gt;                         '='||DBMS_ASSERT.NOOP(LOC_PVALUE)||\r\n<\/pre>\n<div id=\"GSMADMIN_INTERNAL.DBMS_GSM_DBADMIN.PACKAGE BODY.18.0.0.0_RU\">GSMADMIN_INTERNAL.DBMS_GSM_DBADMIN &#8211; PACKAGE BODY (RU):<\/div>\n<pre class=\"EnlighterJSRAW enlighter-collapse\" data-enlighter-language=\"diff\" data-enlighter-linenumbers=\"false\">1341,1343c1341,1343\r\n&lt;     DBMS_GSM_COMMON.SETDBPARAMETER( '_dbgroup_name', '');\r\n&lt;     DBMS_GSM_COMMON.RESETDBPARAMETER('_dbgroup_name');\r\n&lt;     DBMS_GSM_COMMON.SETDBPARAMETER( '_shd_reptype', '');\r\n---\r\n&gt;     DBMS_GSM_COMMON.SETDBPARAMETER( '_shardgroup_name', '');\r\n&gt;     DBMS_GSM_COMMON.RESETDBPARAMETER('_shardgroup_name');\r\n&gt;     DBMS_GSM_COMMON.SETDBPARAMETER( '_shd_reptype', TO_CHAR(0));\r\n<\/pre>\n<div id=\"SYS.CDBVIEW.PACKAGE.18.0.0.0_18.3RUR\">SYS.CDBVIEW &#8211; PACKAGE (18.3RUR):<\/div>\n<pre class=\"EnlighterJSRAW enlighter-collapse\" data-enlighter-language=\"diff\" data-enlighter-linenumbers=\"false\">1c1\r\n&lt; package     CDBView as\r\n---\r\n&gt; package     CDBView AUTHID CURRENT_USER as\r\n<\/pre>\n<div id=\"SYS.CDBVIEW_INTERNAL.PACKAGE.18.0.0.0_18.3RUR\">SYS.CDBVIEW_INTERNAL &#8211; PACKAGE (18.3RUR):<\/div>\n<pre class=\"EnlighterJSRAW enlighter-collapse\" data-enlighter-language=\"diff\" data-enlighter-linenumbers=\"false\">10a11,13\r\n&gt;   procedure create_cdbview(chk_upgrd IN boolean, owner IN varchar2,\r\n&gt;                          oldview_name IN varchar2, newview_name IN varchar2);\r\n&gt; \r\n<\/pre>\n<div id=\"SYS.DBMS_AUTOTASK_PRVT.PACKAGE.18.0.0.0_RU\">SYS.DBMS_AUTOTASK_PRVT &#8211; PACKAGE (RU):<\/div>\n<pre class=\"EnlighterJSRAW enlighter-collapse\" data-enlighter-language=\"diff\" data-enlighter-linenumbers=\"false\">43a44,53\r\n&gt; \r\n&gt; \r\n&gt; \r\n&gt; \r\n&gt; \r\n&gt; \r\n&gt; \r\n&gt; \r\n&gt; PROCEDURE REFRESH_CLIENT_CONFIG;\r\n&gt; \r\n<\/pre>\n<div id=\"SYS.DBMS_BACKUP_RESTORE.PACKAGE.18.0.0.0_RU\">SYS.DBMS_BACKUP_RESTORE &#8211; PACKAGE (RU):<\/div>\n<pre class=\"EnlighterJSRAW enlighter-collapse\" data-enlighter-language=\"diff\" data-enlighter-linenumbers=\"false\">12c12\r\n&lt;   bannerVersion CONSTANT VARCHAR2(15) := '18.04.00.00';\r\n---\r\n&gt;   bannerVersion CONSTANT VARCHAR2(15) := '18.05.00.00';\r\n24,26c24,26\r\n&lt;   fsn  CONSTANT NUMBER := instr('18.04.00.00', '.');\r\n&lt;   msn  CONSTANT NUMBER := instr('18.04.00.00', '.', fsn + 1);\r\n&lt;   psn  CONSTANT NUMBER := instr('18.04.00.00', '.', msn + 1);\r\n---\r\n&gt;   fsn  CONSTANT NUMBER := instr('18.05.00.00', '.');\r\n&gt;   msn  CONSTANT NUMBER := instr('18.05.00.00', '.', fsn + 1);\r\n&gt;   psn  CONSTANT NUMBER := instr('18.05.00.00', '.', msn + 1);\r\n29c29\r\n&lt;                            to_number(substr('18.04.00.00', 1, fsn - 1));\r\n---\r\n&gt;                            to_number(substr('18.05.00.00', 1, fsn - 1));\r\n31c31\r\n&lt;                to_number(substr('18.04.00.00', fsn + 1, msn - fsn - 1));\r\n---\r\n&gt;                to_number(substr('18.05.00.00', fsn + 1, msn - fsn - 1));\r\n33c33\r\n&lt;               to_number(substr('18.04.00.00',  msn + 1, psn - msn - 1));\r\n---\r\n&gt;               to_number(substr('18.05.00.00',  msn + 1, psn - msn - 1));\r\n35c35\r\n&lt;                              to_number(substr('18.04.00.00',  psn + 1));\r\n---\r\n&gt;                              to_number(substr('18.05.00.00',  psn + 1));\r\n<\/pre>\n<div id=\"SYS.DBMS_BACKUP_RESTORE.PACKAGE.18.0.0.0_18.3RUR\">SYS.DBMS_BACKUP_RESTORE &#8211; PACKAGE (18.3RUR):<\/div>\n<pre class=\"EnlighterJSRAW enlighter-collapse\" data-enlighter-language=\"diff\" data-enlighter-linenumbers=\"false\">12c12\r\n&lt;   bannerVersion CONSTANT VARCHAR2(15) := '18.04.00.00';\r\n---\r\n&gt;   bannerVersion CONSTANT VARCHAR2(15) := '18.03.02.00';\r\n24,26c24,26\r\n&lt;   fsn  CONSTANT NUMBER := instr('18.04.00.00', '.');\r\n&lt;   msn  CONSTANT NUMBER := instr('18.04.00.00', '.', fsn + 1);\r\n&lt;   psn  CONSTANT NUMBER := instr('18.04.00.00', '.', msn + 1);\r\n---\r\n&gt;   fsn  CONSTANT NUMBER := instr('18.03.02.00', '.');\r\n&gt;   msn  CONSTANT NUMBER := instr('18.03.02.00', '.', fsn + 1);\r\n&gt;   psn  CONSTANT NUMBER := instr('18.03.02.00', '.', msn + 1);\r\n29c29\r\n&lt;                            to_number(substr('18.04.00.00', 1, fsn - 1));\r\n---\r\n&gt;                            to_number(substr('18.03.02.00', 1, fsn - 1));\r\n31c31\r\n&lt;                to_number(substr('18.04.00.00', fsn + 1, msn - fsn - 1));\r\n---\r\n&gt;                to_number(substr('18.03.02.00', fsn + 1, msn - fsn - 1));\r\n33c33\r\n&lt;               to_number(substr('18.04.00.00',  msn + 1, psn - msn - 1));\r\n---\r\n&gt;               to_number(substr('18.03.02.00',  msn + 1, psn - msn - 1));\r\n35c35\r\n&lt;                              to_number(substr('18.04.00.00',  psn + 1));\r\n---\r\n&gt;                              to_number(substr('18.03.02.00',  psn + 1));\r\n<\/pre>\n<div id=\"SYS.DBMS_BACKUP_RESTORE.PACKAGE.18.0.0.0_18.4RUR\">SYS.DBMS_BACKUP_RESTORE &#8211; PACKAGE (18.4RUR):<\/div>\n<pre class=\"EnlighterJSRAW enlighter-collapse\" data-enlighter-language=\"diff\" data-enlighter-linenumbers=\"false\">12c12\r\n&lt;   bannerVersion CONSTANT VARCHAR2(15) := '18.04.00.00';\r\n---\r\n&gt;   bannerVersion CONSTANT VARCHAR2(15) := '18.04.01.00';\r\n24,26c24,26\r\n&lt;   fsn  CONSTANT NUMBER := instr('18.04.00.00', '.');\r\n&lt;   msn  CONSTANT NUMBER := instr('18.04.00.00', '.', fsn + 1);\r\n&lt;   psn  CONSTANT NUMBER := instr('18.04.00.00', '.', msn + 1);\r\n---\r\n&gt;   fsn  CONSTANT NUMBER := instr('18.04.01.00', '.');\r\n&gt;   msn  CONSTANT NUMBER := instr('18.04.01.00', '.', fsn + 1);\r\n&gt;   psn  CONSTANT NUMBER := instr('18.04.01.00', '.', msn + 1);\r\n29c29\r\n&lt;                            to_number(substr('18.04.00.00', 1, fsn - 1));\r\n---\r\n&gt;                            to_number(substr('18.04.01.00', 1, fsn - 1));\r\n31c31\r\n&lt;                to_number(substr('18.04.00.00', fsn + 1, msn - fsn - 1));\r\n---\r\n&gt;                to_number(substr('18.04.01.00', fsn + 1, msn - fsn - 1));\r\n33c33\r\n&lt;               to_number(substr('18.04.00.00',  msn + 1, psn - msn - 1));\r\n---\r\n&gt;               to_number(substr('18.04.01.00',  msn + 1, psn - msn - 1));\r\n35c35\r\n&lt;                              to_number(substr('18.04.00.00',  psn + 1));\r\n---\r\n&gt;                              to_number(substr('18.04.01.00',  psn + 1));\r\n<\/pre>\n<div id=\"SYS.DBMS_REGISTRY.PACKAGE.18.0.0.0_18.4RUR\">SYS.DBMS_REGISTRY &#8211; PACKAGE (18.4RUR):<\/div>\n<pre class=\"EnlighterJSRAW enlighter-collapse\" data-enlighter-language=\"diff\" data-enlighter-linenumbers=\"false\">13c13\r\n&lt;                                '18.4.0.0.0';\r\n---\r\n&gt;                                '18.4.1.0.0';\r\n<\/pre>\n<div id=\"SYS.DBMS_REGISTRY.PACKAGE.18.0.0.0_18.3RUR\">SYS.DBMS_REGISTRY &#8211; PACKAGE (18.3RUR):<\/div>\n<pre class=\"EnlighterJSRAW enlighter-collapse\" data-enlighter-language=\"diff\" data-enlighter-linenumbers=\"false\">13c13\r\n&lt;                                '18.4.0.0.0';\r\n---\r\n&gt;                                '18.3.2.0.0';\r\n<\/pre>\n<div id=\"SYS.DBMS_REGISTRY.PACKAGE.18.0.0.0_RU\">SYS.DBMS_REGISTRY &#8211; PACKAGE (RU):<\/div>\n<pre class=\"EnlighterJSRAW enlighter-collapse\" data-enlighter-language=\"diff\" data-enlighter-linenumbers=\"false\">13c13\r\n&lt;                                '18.4.0.0.0';\r\n---\r\n&gt;                                '18.5.0.0.0';\r\n<\/pre>\n<div id=\"SYS.CDBVIEW.PACKAGE BODY.18.0.0.0_18.3RUR\">SYS.CDBVIEW &#8211; PACKAGE BODY (18.3RUR):<\/div>\n<pre class=\"EnlighterJSRAW enlighter-collapse\" data-enlighter-language=\"diff\" data-enlighter-linenumbers=\"false\">3,10c3\r\n&lt; function isLegalOwnerViewName(owner IN varchar2, oldview IN varchar2,\r\n&lt;                               newview IN varchar2) return varchar2;\r\n&lt; -- Create the cdb view\r\n&lt; -- private helper procedure to create the cdb view\r\n&lt; -- Note that quotes should not be added around owner, oldview_name and\r\n&lt; -- newview_name before create_cdbview is invoked since all three are used\r\n&lt; -- as literals to query dictionary views.\r\n&lt; procedure create_cdbview(chk_upgrd IN boolean, owner IN varchar2,\r\n---\r\n&gt;   procedure create_cdbview(chk_upgrd IN boolean, owner IN varchar2,\r\n12,133c5,8\r\n&lt;   sqlstmt        varchar2(4000);\r\n&lt;   col_name       varchar2(128);\r\n&lt;   comments       varchar2(4000);\r\n&lt;   col_type       number;\r\n&lt;   newview        varchar2(128);\r\n&lt;   quoted_owner   varchar2(130); -- 2 more than size of owner\r\n&lt;   quoted_oldview varchar2(130); -- 2 more than size of oldview_name\r\n&lt;   quoted_newview varchar2(130); -- 2 more than size of newview_name\r\n&lt;   unsupp_col_condition varchar2(4000);\r\n&lt;   colcomments          varchar2(4000);\r\n&lt;   unsupp_col_count     number;\r\n&lt;   colcommentscur       SYS_REFCURSOR;\r\n&lt;   table_not_found      EXCEPTION;\r\n&lt;   PRAGMA               exception_init(table_not_found, -942);\r\n&lt; \r\n&lt; \r\n&lt;   cursor tblcommentscur is select c.comment$\r\n&lt;                 from sys.obj$ o, sys.user$ u, sys.com$ c\r\n&lt;                 where o.name = oldview_name and u.name = owner\r\n&lt;                 and o.obj# = c.obj# and o.owner#=u.user#\r\n&lt;                 and (o.type# = 4 or o.type# = 2)\r\n&lt;                 and c.col# is null;\r\n&lt; \r\n&lt; begin\r\n&lt; \r\n&lt;   newview := isLegalOwnerViewName(owner, oldview_name, newview_name);\r\n&lt;   if (newview is NULL) then\r\n&lt;     RAISE table_not_found;\r\n&lt;   end if;\r\n&lt; \r\n&lt;   quoted_owner   := '\"' || owner               || '\"';\r\n&lt;   quoted_oldview := '\"' || oldview_name  || '\"';\r\n&lt;   quoted_newview := '\"' || newview       || '\"';\r\n&lt; \r\n&lt;   -- Create cdb view\r\n&lt;   sqlstmt := 'CREATE OR REPLACE VIEW ' ||\r\n&lt;      quoted_owner || '.' || quoted_newview ||\r\n&lt;      ' CONTAINER_DATA AS' ||\r\n&lt;      ' SELECT k.*, k.CON$NAME, k.CDB$NAME, k.CON$ERRNUM, k.CON$ERRMSG' ||\r\n&lt;      ' FROM CONTAINERS(' || quoted_owner || '.' || quoted_oldview || ') k';\r\n&lt; \r\n&lt;   execute immediate sqlstmt;\r\n&lt; \r\n&lt;   -- table and column comments\r\n&lt;   open tblcommentscur;\r\n&lt;   fetch tblcommentscur into comments;\r\n&lt;   comments := replace(comments, '''','''''');\r\n&lt;   sqlstmt := 'comment on table ' || quoted_owner || '.' || quoted_newview ||\r\n&lt;               ' is ''' || comments || ' in all containers''';\r\n&lt;   execute immediate sqlstmt;\r\n&lt;   close tblcommentscur;\r\n&lt; \r\n&lt;   sqlstmt := 'comment on column ' || quoted_owner || '.' || quoted_newview ||\r\n&lt;              '.CON_ID is ''container id''';\r\n&lt;   execute immediate sqlstmt;\r\n&lt; \r\n&lt;   sqlstmt := 'comment on column ' || quoted_owner || '.' || quoted_newview ||\r\n&lt;              '.CON$NAME is ''Container Name''';\r\n&lt;   execute immediate sqlstmt;\r\n&lt; \r\n&lt;   sqlstmt := 'comment on column ' || quoted_owner || '.' || quoted_newview ||\r\n&lt;              '.CDB$NAME is ''Database Name''';\r\n&lt;   execute immediate sqlstmt;\r\n&lt; \r\n&lt;   sqlstmt := 'comment on column ' || quoted_owner || '.' || quoted_newview ||\r\n&lt;              '.CON$ERRNUM is ''Error Number''';\r\n&lt;   execute immediate sqlstmt;\r\n&lt; \r\n&lt;   sqlstmt := 'comment on column ' || quoted_owner || '.' || quoted_newview ||\r\n&lt;              '.CON$ERRMSG is ''Error Message''';\r\n&lt;   execute immediate sqlstmt;\r\n&lt; \r\n&lt;   colcomments := 'select c.name, co.comment$ ' ||\r\n&lt;                  'from sys.obj$ o, sys.col$ c, sys.user$ u, sys.com$ co ' ||\r\n&lt;                  'where o.name = :1 ' ||\r\n&lt;                  'and u.name = :2 ' ||\r\n&lt;                  'and o.owner# = u.user# and (o.type# = 4 or o.type# = 2) ' ||\r\n&lt;                  'and o.obj# = c.obj# ' ||\r\n&lt;                  'and c.obj# = co.obj# and c.intcol# = co.col# ' ||\r\n&lt;                  -- skip hidden column\r\n&lt;                  'and bitand(c.property, 32) = 0 '||\r\n&lt;                  -- skip null comment\r\n&lt;                  'and co.comment$ is not null';\r\n&lt;                           -- skip Long, Nested Table, Varray columns\r\n&lt;   unsupp_col_condition := 'c.type# = 8 or c.type# = 122 or c.type# = 123 ' ||\r\n&lt;                           -- skip ADT and REF columns\r\n&lt;                           'or c.type# = 121 or c.type# = 111 ' ||\r\n&lt;                           -- Bug 20683085: skip Opaque Type column except\r\n&lt;                           -- xmltype stored as LOB. Check xmltype as lob using\r\n&lt;                           -- property bit KQLDCOP2_XSLB.\r\n&lt; \t\t          -- Bug 23083309: if there are unsupported columns,\r\n&lt;                           -- then XMLType column is skipped (hidden XMLType lob\r\n&lt;                           -- column is already handled)\r\n&lt;                           'or (c.type# = 58 and ' ||\r\n&lt;                               '((bitand(c.property, ' ||\r\n&lt;                                 'power(2,32)*4194304)&lt;&gt;power(2,32)*4194304) '||\r\n&lt;                                 'or :3 &gt; 0)) ' ||\r\n&lt;                           -- Bug 21785587: skip long raw\r\n&lt;                           'or c.type# = 24';\r\n&lt; \r\n&lt;   sqlstmt := colcomments || ' and (' || unsupp_col_condition || ')';\r\n&lt; \r\n&lt;   unsupp_col_count := 0;\r\n&lt;   EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM (' || sqlstmt ||')'\r\n&lt;     INTO unsupp_col_count USING oldview_name, owner, unsupp_col_count;\r\n&lt; \r\n&lt;   open colcommentscur for colcomments ||' and not ('||\r\n&lt;                             unsupp_col_condition ||')'\r\n&lt;                       USING oldview_name, owner, unsupp_col_count;\r\n&lt;   loop\r\n&lt;     fetch colcommentscur into col_name, comments;\r\n&lt;     exit when colcommentscur%NOTFOUND;\r\n&lt; \r\n&lt;     comments := replace(comments, '''','''''');\r\n&lt;     sqlstmt := 'comment on column ' ||\r\n&lt;                quoted_owner || '.' || quoted_newview || '.' ||\r\n&lt;                col_name || ' is ''' || comments || '''';\r\n&lt; \r\n&lt;     execute immediate sqlstmt;\r\n&lt;   end loop;\r\n&lt;   close colcommentscur;\r\n&lt; end;\r\n---\r\n&gt;   begin\r\n&gt;     CDBView_internal.create_cdbview(chk_upgrd, owner, oldview_name,\r\n&gt;                                     newview_name);\r\n&gt;   end;\r\n137,140c12,19\r\n&lt;       tablename dbms_id;\r\n&lt;       colname   dbms_id;\r\n&lt;       stmt      varchar2(400);\r\n&lt;       retval    varchar2(4000);\r\n---\r\n&gt;       tablename   dbms_id;\r\n&gt;       colname     dbms_id;\r\n&gt;       stmt        varchar2(400);\r\n&gt;       retval      varchar2(4000);\r\n&gt;       isuser_sys  boolean := FALSE;\r\n&gt;       scr_priv    number  := 0;\r\n&gt;       insuff_priv exception;\r\n&gt;       pragma      exception_init(insuff_priv, -1031);\r\n141a21,47\r\n&gt;       --\r\n&gt;       -- The Current_User should either be SYS or be in possession of\r\n&gt;       -- SELECT_CATALOG_ROLE to be able to query view definitions.\r\n&gt;       -- This is how Dbms_Metadata.Get_DDL operates, so we are trying\r\n&gt;       -- to have the same privilege model here too. If none of this is\r\n&gt;       -- true, we will raise ORA-1031 error.\r\n&gt;       --\r\n&gt;       -- We are doing a direct query against SESSION_ROLES dictionary table\r\n&gt;       -- instead of using Dbms_Priv_Capture.Ses_Has_Role_Priv function, as\r\n&gt;       -- the package Dbms_Priv_Capture may not be available by the time this\r\n&gt;       -- package CDBView gets created. Also use dyn SQL for the same reason.\r\n&gt;       --\r\n&gt;       if (sys_context('userenv','current_userid') = 0) then\r\n&gt;         isuser_sys := TRUE;\r\n&gt;       else\r\n&gt;         begin\r\n&gt;           execute immediate 'select count(*) from sys.session_roles where\r\n&gt;                              role = ''SELECT_CATALOG_ROLE''' into scr_priv;\r\n&gt;         exception\r\n&gt;           when others then NULL;\r\n&gt;         end;\r\n&gt;       end if;\r\n&gt; \r\n&gt;       if NOT (isuser_sys OR scr_priv &gt; 0) then\r\n&gt;         raise insuff_priv;\r\n&gt;       end if;\r\n&gt; \r\n157,207d62\r\n&lt; \r\n&lt;   -- This function is created to prevent SQL injection. We couldn't use\r\n&lt;   -- dbms_assert because catcdbviews.sql is called before dbms_assert\r\n&lt;   -- is created\r\n&lt;   function isLegalOwnerViewName(owner IN varchar2, oldview IN varchar2,\r\n&lt;                              newview IN varchar2) return varchar2 as\r\n&lt;     cCheck       number;\r\n&lt;     cleanOldview varchar2(128);\r\n&lt;     cleanNewview varchar2(128);\r\n&lt;   begin\r\n&lt; \r\n&lt;     -- Check if owner already exist\r\n&lt;     execute immediate 'SELECT COUNT(*) FROM USER$ WHERE NAME = :1'\r\n&lt;              into cCheck using owner;\r\n&lt;     if (cCheck = 0) then\r\n&lt;       RETURN NULL;\r\n&lt;     end if;\r\n&lt; \r\n&lt;     -- Check if oldview already exist\r\n&lt;     execute immediate 'SELECT COUNT(*) FROM OBJ$ WHERE NAME = :1' ||\r\n&lt;                       ' AND (TYPE# = 4 OR TYPE# = 2)'\r\n&lt;              into cCheck using oldview;\r\n&lt;     if (cCheck = 0) then\r\n&lt;       RETURN NULL;\r\n&lt;     end if;\r\n&lt; \r\n&lt;     if (not REGEXP_LIKE(newview, '^[A-Za-z_][A-Za-z0-9_$#]*$')) then\r\n&lt;       RETURN NULL;\r\n&lt;     end if;\r\n&lt; \r\n&lt;     -- Check for appropriate newview name\r\n&lt;     -- The following is allowed for newview name\r\n&lt;     -- 1. Substitute 'DBA' with 'CDB'\r\n&lt;     -- 2. Substitute 'AWR_PDB' with 'CDB_HIST'\r\n&lt;     -- 3. Substitute 'ATTRIBUTES' with 'ATTRIB'\r\n&lt;     -- 4. Substitute 'DATABASE' with 'CDB'\r\n&lt;     -- 5. Remove 'REDUCED'\r\n&lt;     -- 6. Add 'AWRI$_CDB'\r\n&lt;     cleanOldview := REGEXP_REPLACE(oldview,\r\n&lt;        'DBA|DATABASE|_| |HIST|ATTRIB(UTE)?S?|CDB|AWR_PDB|REDUCED');\r\n&lt;     cleanNewview := REGEXP_REPLACE(newview,\r\n&lt;        'CDB|DATABASE|_| |HIST|ATTRIB(UTE)?S?|AWRI\\$');\r\n&lt; \r\n&lt;     if (cleanOldview &lt;&gt; cleanNewview) then\r\n&lt;       RETURN NULL;\r\n&lt;     end if;\r\n&lt; \r\n&lt;     RETURN newview;\r\n&lt; \r\n&lt;   end isLegalOwnerViewName;\r\n&lt; \r\n<\/pre>\n<div id=\"SYS.CDBVIEW_INTERNAL.PACKAGE BODY.18.0.0.0_18.3RUR\">SYS.CDBVIEW_INTERNAL &#8211; PACKAGE BODY (18.3RUR):<\/div>\n<pre class=\"EnlighterJSRAW enlighter-collapse\" data-enlighter-language=\"diff\" data-enlighter-linenumbers=\"false\">1c1,229\r\n&lt; package body     CDBView_internal as\r\n---\r\n&gt; package body     CDBView_Internal is\r\n&gt; \r\n&gt;   type sens_tabs     is table of boolean index by dbms_id;\r\n&gt;   --\r\n&gt;   -- Initialize the list of SYS owned sensitive tables which should\r\n&gt;   -- not be allowed to be shadow-copied even within Create_CDBView.\r\n&gt;   --\r\n&gt;   -- Once ER 24598663 gets implemented, these entries will be part of a\r\n&gt;   -- SYS owned metadata table and instead of hard-coding the list, we will\r\n&gt;   -- be populating the list by fetching it from the table.\r\n&gt;   --\r\n&gt;   sens_table_list CONSTANT sens_tabs := sens_tabs('ENC$'=&gt;TRUE, 'LINK$'=&gt;TRUE,\r\n&gt;                                  'USER$'=&gt;TRUE,         'DEFAULT_PWD$'=&gt;TRUE,\r\n&gt;                                  'XS$VERIFIERS'=&gt;TRUE,  'USER_HISTORY$'=&gt;TRUE,\r\n&gt;                                  'HIST_HEAD$'=&gt;TRUE,    'HISTGRM$'=&gt;TRUE,\r\n&gt;                                  'CDB_LOCAL_ADMINAUTH$'=&gt;TRUE,\r\n&gt;                                  'PDB_CREATE$'=&gt;TRUE,   'PDB_SYNC$'=&gt;TRUE);\r\n&gt; \r\n&gt; function isLegalOwnerViewName(owner IN varchar2, oldview IN varchar2,\r\n&gt;                               newview IN varchar2) return varchar2;\r\n&gt; -- Create the cdb view\r\n&gt; -- private helper procedure to create the cdb view\r\n&gt; -- Note that quotes should not be added around owner, oldview_name and\r\n&gt; -- newview_name before create_cdbview is invoked since all three are used\r\n&gt; -- as literals to query dictionary views.\r\n&gt; procedure create_cdbview(chk_upgrd IN boolean, owner IN varchar2,\r\n&gt;                          oldview_name IN varchar2, newview_name IN varchar2) as\r\n&gt;   sqlstmt        varchar2(4000);\r\n&gt;   col_name       dbms_id;\r\n&gt;   comments       varchar2(4000);\r\n&gt;   col_type       number;\r\n&gt;   newview        dbms_id := newview_name;\r\n&gt;   quoted_owner   dbms_quoted_id; -- 2 more than size of owner\r\n&gt;   quoted_oldview dbms_quoted_id; -- 2 more than size of oldview_name\r\n&gt;   quoted_newview dbms_quoted_id; -- 2 more than size of newview_name\r\n&gt;   unsupp_col_condition varchar2(4000);\r\n&gt;   colcomments          varchar2(4000);\r\n&gt;   unsupp_col_count     number;\r\n&gt;   colcommentscur       SYS_REFCURSOR;\r\n&gt;   table_not_found      EXCEPTION;\r\n&gt;   PRAGMA               exception_init(table_not_found, -942);\r\n&gt;   insuff_privilege     EXCEPTION;\r\n&gt;   PRAGMA               exception_init(insuff_privilege, -1031);\r\n&gt; \r\n&gt;   cursor tblcommentscur is select c.comment$\r\n&gt;                 from sys.obj$ o, sys.user$ u, sys.com$ c\r\n&gt;                 where o.name = oldview_name and u.name = owner\r\n&gt;                 and o.obj# = c.obj# and o.owner#=u.user#\r\n&gt;                 and (o.type# = 4 or o.type# = 2)\r\n&gt;                 and c.col# is null;\r\n&gt; \r\n&gt; begin\r\n&gt; \r\n&gt;   --\r\n&gt;   -- No need to check for ownername, viewname correctness, if the Current_User\r\n&gt;   -- is SYS, as would be the case with most of Create_CDBView invocations\r\n&gt;   -- across RDBMS code.\r\n&gt;   --\r\n&gt;   -- As per recommendation from Mark, it is not safe to give a free pass to\r\n&gt;   -- SYS user, in case CDBView.Create_CDBView gets invoked from within a SYS\r\n&gt;   -- owned definer rights PL\/SQL code and the inputs to those could be user\r\n&gt;   -- provided and potentially malicious.\r\n&gt;   --\r\n&gt;   newview := isLegalOwnerViewName(owner, oldview_name, newview_name);\r\n&gt;   if (newview is NULL) then\r\n&gt;     RAISE table_not_found;\r\n&gt;   end if;\r\n&gt; \r\n&gt;   --\r\n&gt;   -- Bug 27445727 : Certain SYS owned tables like USER$, LINK$ etc. are out\r\n&gt;   -- of bounds even for DBA level users. So we should not allow cloning such\r\n&gt;   -- tables into a Container_Data view and be able to bypass this protection.\r\n&gt;   --\r\n&gt;   -- Since this procedure does not support quoted identifiers, we need not\r\n&gt;   -- worry about canonicalizing the owner or oldview_name arguments before\r\n&gt;   -- comparing against SYS and the array of sensitive tables.\r\n&gt;   --\r\n&gt;   if (owner = 'SYS' and sens_table_list.exists(oldview_name)) then\r\n&gt;     RAISE insuff_privilege;\r\n&gt;   end if;\r\n&gt; \r\n&gt;   quoted_owner   := '\"' || owner         || '\"';\r\n&gt;   quoted_oldview := '\"' || oldview_name  || '\"';\r\n&gt;   quoted_newview := '\"' || newview       || '\"';\r\n&gt; \r\n&gt;   -- Create cdb view\r\n&gt;   sqlstmt := 'CREATE OR REPLACE VIEW ' ||\r\n&gt;      quoted_owner || '.' || quoted_newview ||\r\n&gt;      ' CONTAINER_DATA AS' ||\r\n&gt;      ' SELECT k.*, k.CON$NAME, k.CDB$NAME, k.CON$ERRNUM, k.CON$ERRMSG' ||\r\n&gt;      ' FROM CONTAINERS(' || quoted_owner || '.' || quoted_oldview || ') k';\r\n&gt; \r\n&gt;   execute immediate sqlstmt;\r\n&gt; \r\n&gt;   -- table and column comments\r\n&gt;   open tblcommentscur;\r\n&gt;   fetch tblcommentscur into comments;\r\n&gt;   comments := replace(comments, '''','''''');\r\n&gt;   sqlstmt := 'comment on table ' || quoted_owner || '.' || quoted_newview ||\r\n&gt;               ' is ''' || comments || ' in all containers''';\r\n&gt;   execute immediate sqlstmt;\r\n&gt;   close tblcommentscur;\r\n&gt; \r\n&gt;   sqlstmt := 'comment on column ' || quoted_owner || '.' || quoted_newview ||\r\n&gt;              '.CON_ID is ''container id''';\r\n&gt;   execute immediate sqlstmt;\r\n&gt; \r\n&gt;   sqlstmt := 'comment on column ' || quoted_owner || '.' || quoted_newview ||\r\n&gt;              '.CON$NAME is ''Container Name''';\r\n&gt;   execute immediate sqlstmt;\r\n&gt; \r\n&gt;   sqlstmt := 'comment on column ' || quoted_owner || '.' || quoted_newview ||\r\n&gt;              '.CDB$NAME is ''Database Name''';\r\n&gt;   execute immediate sqlstmt;\r\n&gt; \r\n&gt;   sqlstmt := 'comment on column ' || quoted_owner || '.' || quoted_newview ||\r\n&gt;              '.CON$ERRNUM is ''Error Number''';\r\n&gt;   execute immediate sqlstmt;\r\n&gt; \r\n&gt;   sqlstmt := 'comment on column ' || quoted_owner || '.' || quoted_newview ||\r\n&gt;              '.CON$ERRMSG is ''Error Message''';\r\n&gt;   execute immediate sqlstmt;\r\n&gt; \r\n&gt;   colcomments := 'select c.name, co.comment$ ' ||\r\n&gt;                  'from sys.obj$ o, sys.col$ c, sys.user$ u, sys.com$ co ' ||\r\n&gt;                  'where o.name = :1 ' ||\r\n&gt;                  'and u.name = :2 ' ||\r\n&gt;                  'and o.owner# = u.user# and (o.type# = 4 or o.type# = 2) ' ||\r\n&gt;                  'and o.obj# = c.obj# ' ||\r\n&gt;                  'and c.obj# = co.obj# and c.intcol# = co.col# ' ||\r\n&gt;                  -- skip hidden column\r\n&gt;                  'and bitand(c.property, 32) = 0 '||\r\n&gt;                  -- skip null comment\r\n&gt;                  'and co.comment$ is not null';\r\n&gt;                           -- skip Long, Nested Table, Varray columns\r\n&gt;   unsupp_col_condition := 'c.type# = 8 or c.type# = 122 or c.type# = 123 ' ||\r\n&gt;                           -- skip ADT and REF columns\r\n&gt;                           'or c.type# = 121 or c.type# = 111 ' ||\r\n&gt;                           -- Bug 20683085: skip Opaque Type column except\r\n&gt;                           -- xmltype stored as LOB. Check xmltype as lob using\r\n&gt;                           -- property bit KQLDCOP2_XSLB.\r\n&gt; \t\t          -- Bug 23083309: if there are unsupported columns,\r\n&gt;                           -- then XMLType column is skipped (hidden XMLType lob\r\n&gt;                           -- column is already handled)\r\n&gt;                           'or (c.type# = 58 and ' ||\r\n&gt;                               '((bitand(c.property, ' ||\r\n&gt;                                 'power(2,32)*4194304)&lt;&gt;power(2,32)*4194304) '||\r\n&gt;                                 'or :3 &gt; 0)) ' ||\r\n&gt;                           -- Bug 21785587: skip long raw\r\n&gt;                           'or c.type# = 24';\r\n&gt; \r\n&gt;   sqlstmt := colcomments || ' and (' || unsupp_col_condition || ')';\r\n&gt; \r\n&gt;   unsupp_col_count := 0;\r\n&gt;   EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM (' || sqlstmt ||')'\r\n&gt;     INTO unsupp_col_count USING oldview_name, owner, unsupp_col_count;\r\n&gt; \r\n&gt;   open colcommentscur for colcomments ||' and not ('||\r\n&gt;                             unsupp_col_condition ||')'\r\n&gt;                       USING oldview_name, owner, unsupp_col_count;\r\n&gt;   loop\r\n&gt;     fetch colcommentscur into col_name, comments;\r\n&gt;     exit when colcommentscur%NOTFOUND;\r\n&gt; \r\n&gt;     comments := replace(comments, '''','''''');\r\n&gt;     sqlstmt := 'comment on column ' ||\r\n&gt;                quoted_owner || '.' || quoted_newview || '.' ||\r\n&gt;                col_name || ' is ''' || comments || '''';\r\n&gt; \r\n&gt;     execute immediate sqlstmt;\r\n&gt;   end loop;\r\n&gt;   close colcommentscur;\r\n&gt; end;\r\n&gt; \r\n&gt;   -- This function is created to prevent SQL injection. We couldn't use\r\n&gt;   -- dbms_assert because catcdbviews.sql is called before dbms_assert\r\n&gt;   -- is created\r\n&gt;   function isLegalOwnerViewName(owner IN varchar2, oldview IN varchar2,\r\n&gt;                              newview IN varchar2) return varchar2 as\r\n&gt;     cCheck       number;\r\n&gt;     ownerId      number;\r\n&gt;     cleanOldview dbms_id;\r\n&gt;     cleanNewview dbms_id;\r\n&gt;   begin\r\n&gt; \r\n&gt;     -- Check if owner already exist\r\n&gt;     -- USER$ contains both users and roles, exclude roles from the check\r\n&gt;     begin\r\n&gt;       execute immediate 'SELECT USER# FROM USER$ WHERE TYPE# = 1 AND NAME = :1'\r\n&gt;                into ownerId using owner;\r\n&gt;     exception\r\n&gt;       when no_data_found then return null;\r\n&gt;     end;\r\n&gt; \r\n&gt;     -- Check if oldview already exist, qualify with owner# to avoid ORA-1422\r\n&gt;     -- error,if two dictionary view with the same name exists across different\r\n&gt;     -- schemas like DBA_DV_STATUS which exists in both SYS and DVSYS schemas.\r\n&gt;     begin\r\n&gt;       execute immediate 'SELECT 1 FROM OBJ$ WHERE NAME = :1' ||\r\n&gt;                         ' AND TYPE# in (2, 4) and owner# = :2'\r\n&gt;                into cCheck using oldview, ownerId;\r\n&gt;     exception\r\n&gt;       when no_data_found then return null;\r\n&gt;     end;\r\n&gt; \r\n&gt;     if (not REGEXP_LIKE(newview, '^[A-Za-z_][A-Za-z0-9_$#]*$')) then\r\n&gt;       RETURN NULL;\r\n&gt;     end if;\r\n&gt; \r\n&gt;     -- Check for appropriate newview name\r\n&gt;     -- The following is allowed for newview name\r\n&gt;     -- 1. Substitute 'DBA' with 'CDB'\r\n&gt;     -- 2. Substitute 'AWR_PDB' with 'CDB_HIST'\r\n&gt;     -- 3. Substitute 'ATTRIBUTES' with 'ATTRIB'\r\n&gt;     -- 4. Substitute 'DATABASE' with 'CDB'\r\n&gt;     -- 5. Remove 'REDUCED'\r\n&gt;     -- 6. Add 'AWRI$_CDB'\r\n&gt;     cleanOldview := REGEXP_REPLACE(oldview,\r\n&gt;        'DBA|DATABASE|_| |HIST|ATTRIB(UTE)?S?|CDB|AWR_PDB|REDUCED');\r\n&gt;     cleanNewview := REGEXP_REPLACE(newview,\r\n&gt;        'CDB|DATABASE|_| |HIST|ATTRIB(UTE)?S?|AWRI\\$');\r\n&gt; \r\n&gt;     if (cleanOldview &lt;&gt; cleanNewview) then\r\n&gt;       RETURN NULL;\r\n&gt;     end if;\r\n&gt; \r\n&gt;     RETURN newview;\r\n&gt; \r\n&gt;   end isLegalOwnerViewName;\r\n17c245\r\n&lt; end;\r\n---\r\n&gt; end CDBView_Internal;\r\n<\/pre>\n<div id=\"SYS.DBMS_AUTOTASK_PRVT.PACKAGE BODY.18.0.0.0_RU\">SYS.DBMS_AUTOTASK_PRVT &#8211; PACKAGE BODY (RU):<\/div>\n<pre class=\"EnlighterJSRAW enlighter-collapse\" data-enlighter-language=\"diff\" data-enlighter-linenumbers=\"false\">171a172,186\r\n&gt; \r\n&gt; \r\n&gt; \r\n&gt; \r\n&gt; \r\n&gt; \r\n&gt; \r\n&gt; \r\n&gt; PROCEDURE REFRESH_CLIENT_CONFIG IS\r\n&gt;   EXTERNAL LANGUAGE C\r\n&gt;   NAME \"ketrcc_refresh_client_config\"\r\n&gt;   WITH CONTEXT\r\n&gt;   PARAMETERS(CONTEXT)\r\n&gt;   LIBRARY DBMS_AUTOTASK_PRVT_LIB;\r\n&gt; \r\n<\/pre>\n<div id=\"SYS.DBMS_RCVMAN.PACKAGE BODY.18.0.0.0_18.3RUR\">SYS.DBMS_RCVMAN &#8211; PACKAGE BODY (18.3RUR):<\/div>\n<pre class=\"EnlighterJSRAW enlighter-collapse\" data-enlighter-language=\"diff\" data-enlighter-linenumbers=\"false\">122c122\r\n&lt; CATALOGVERSION CONSTANT VARCHAR2(11) := '18.04.00.00'; \r\n---\r\n&gt; CATALOGVERSION CONSTANT VARCHAR2(11) := '18.03.02.00'; \r\n24766d24765\r\n&lt;       END IF;\r\n24768,24788c24767,24790\r\n&lt;       \r\n&lt;       \r\n&lt;       \r\n&lt;       \r\n&lt;       \r\n&lt;       \r\n&lt;       \r\n&lt;       IF (AVAILABLE_FROMSCN_ACT IS NULL OR\r\n&lt;           (USABLE_INCR.DFNUMBER_OBJ = LOCAL.DFNUMBER_OBJ AND\r\n&lt;            USABLE_INCR.DFCREATIONSCN_OBJ = LOCAL.DFCREATIONSCN_OBJ AND\r\n&lt;            LOCAL.TOSCN_ACT &lt; AVAILABLE_FROMSCN_ACT)) THEN\r\n&lt;          IF (AVAILABLE_FROMSCN_ACT IS NULL) THEN\r\n&lt;             DEB(DEB_PRINT, 'available_fromSCN_act set to ' ||\r\n&lt;                            AVAILABLE_FROMSCN_ACT || ' for file# ' ||\r\n&lt;                            LOCAL.DFNUMBER_OBJ || ', creation_scn '||\r\n&lt;                            LOCAL.DFCREATIONSCN_OBJ);\r\n&lt;          ELSE\r\n&lt;             DEB(DEB_PRINT, 'broken chain, available_fromSCN_act set to ' ||\r\n&lt;                            AVAILABLE_FROMSCN_ACT || ' for file ' ||\r\n&lt;                            LOCAL.DFNUMBER_OBJ || ', creation_scn '||\r\n&lt;                            LOCAL.DFCREATIONSCN_OBJ);\r\n---\r\n&gt;          \r\n&gt;          \r\n&gt;          \r\n&gt;          \r\n&gt;          \r\n&gt;          \r\n&gt;          \r\n&gt;          IF (AVAILABLE_FROMSCN_ACT IS NULL OR\r\n&gt;              (USABLE_INCR.DFNUMBER_OBJ = LOCAL.DFNUMBER_OBJ AND\r\n&gt;               USABLE_INCR.DFCREATIONSCN_OBJ = LOCAL.DFCREATIONSCN_OBJ AND\r\n&gt;               LOCAL.TOSCN_ACT &lt; AVAILABLE_FROMSCN_ACT)) THEN\r\n&gt;             IF (AVAILABLE_FROMSCN_ACT IS NULL) THEN\r\n&gt;                DEB(DEB_PRINT, 'available_fromSCN_act set to ' ||\r\n&gt;                               AVAILABLE_FROMSCN_ACT || ' for file# ' ||\r\n&gt;                               LOCAL.DFNUMBER_OBJ || ', creation_scn '||\r\n&gt;                               LOCAL.DFCREATIONSCN_OBJ);\r\n&gt;             ELSE\r\n&gt;                DEB(DEB_PRINT, 'broken chain, available_fromSCN_act set to ' ||\r\n&gt;                               AVAILABLE_FROMSCN_ACT || ' for file ' ||\r\n&gt;                               LOCAL.DFNUMBER_OBJ || ', creation_scn '||\r\n&gt;                               LOCAL.DFCREATIONSCN_OBJ);\r\n&gt;             END IF;\r\n&gt;             USABLE_INCR := LOCAL;\r\n&gt;             AVAILABLE_FROMSCN_ACT := LOCAL.FROMSCN_ACT;\r\n24790,24791d24791\r\n&lt;          USABLE_INCR := LOCAL;\r\n&lt;          AVAILABLE_FROMSCN_ACT := LOCAL.FROMSCN_ACT;\r\n27206,27208d27205\r\n&lt; \r\n&lt;     \r\n&lt;     IF (DFREC.PDBID &lt;= 1 OR TRANSLATEPDB2NAME(DFREC.PDBID) IS NOT NULL) THEN\r\n27210d27206\r\n&lt;     END IF;\r\n29226c29222\r\n&lt;   ,NBLOCKS         OUT     NUMBER\r\n---\r\n&gt;   ,NBLOCKS         OUT     BINARY_INTEGER\r\n<\/pre>\n<div id=\"SYS.DBMS_RCVMAN.PACKAGE BODY.18.0.0.0_RU\">SYS.DBMS_RCVMAN &#8211; PACKAGE BODY (RU):<\/div>\n<pre class=\"EnlighterJSRAW enlighter-collapse\" data-enlighter-language=\"diff\" data-enlighter-linenumbers=\"false\">122c122\r\n&lt; CATALOGVERSION CONSTANT VARCHAR2(11) := '18.04.00.00'; \r\n---\r\n&gt; CATALOGVERSION CONSTANT VARCHAR2(11) := '18.05.00.00'; \r\n25510,25512c25510,25512\r\n&lt;          IF (LBREC.DF_CKP_MOD_TIME &lt; UNTILTIME OR\r\n&lt;              (UNTILTIME IS NULL AND\r\n&lt;               LBREC.DF_CHECKPOINT_CHANGE# &lt;= UNTILSCN)) THEN\r\n---\r\n&gt;          IF ((UNTILTIME IS NULL AND UNTILSCN IS NULL) OR\r\n&gt;              LBREC.DF_CKP_MOD_TIME &lt; UNTILTIME       OR\r\n&gt;              LBREC.DF_CHECKPOINT_CHANGE# &lt;= UNTILSCN) THEN\r\n<\/pre>\n<div id=\"SYS.DBMS_RCVMAN.PACKAGE BODY.18.0.0.0_18.4RUR\">SYS.DBMS_RCVMAN &#8211; PACKAGE BODY (18.4RUR):<\/div>\n<pre class=\"EnlighterJSRAW enlighter-collapse\" data-enlighter-language=\"diff\" data-enlighter-linenumbers=\"false\">122c122\r\n&lt; CATALOGVERSION CONSTANT VARCHAR2(11) := '18.04.00.00'; \r\n---\r\n&gt; CATALOGVERSION CONSTANT VARCHAR2(11) := '18.04.01.00'; \r\n<\/pre>\n<div id=\"SYS.DBMS_STATS.PACKAGE BODY.18.0.0.0_RU\">SYS.DBMS_STATS &#8211; PACKAGE BODY (RU):<\/div>\n<pre class=\"EnlighterJSRAW enlighter-collapse\" data-enlighter-language=\"diff\" data-enlighter-linenumbers=\"false\">53868a53869,53926\r\n&gt; \r\n&gt;   \r\n&gt; \r\n&gt; \r\n&gt; \r\n&gt; \r\n&gt; \r\n&gt; \r\n&gt; \r\n&gt; \r\n&gt; \r\n&gt; \r\n&gt; \r\n&gt;   PROCEDURE INIT_ADVISOR_TASK_PARAMETER(\r\n&gt;     TASK_NAME     IN VARCHAR2,\r\n&gt;     PARAMETER     IN VARCHAR2,\r\n&gt;     VALUE         IN VARCHAR2)\r\n&gt;   IS\r\n&gt;     IN_EXEC          BOOLEAN := FALSE;     \r\n&gt;   BEGIN\r\n&gt; \r\n&gt;     \r\n&gt;     \r\n&gt;     BEGIN\r\n&gt;       DBMS_STATS_ADVISOR.SET_TASK_PARAMETER(TASK_NAME, PARAMETER, VALUE);\r\n&gt;     EXCEPTION\r\n&gt;       WHEN OTHERS THEN\r\n&gt;         IF (SQLCODE = -13647) THEN\r\n&gt;           IN_EXEC := TRUE;\r\n&gt;         ELSE\r\n&gt;           RAISE;\r\n&gt;         END IF;\r\n&gt;     END;\r\n&gt; \r\n&gt; \r\n&gt;    \r\n&gt;    \r\n&gt;    IF (IN_EXEC = TRUE) THEN\r\n&gt; \r\n&gt;      BEGIN\r\n&gt;        DBMS_STATS_ADVISOR.CANCEL_TASK(TASK_NAME);\r\n&gt;      EXCEPTION\r\n&gt;        WHEN OTHERS THEN\r\n&gt;          \r\n&gt;          \r\n&gt;          \r\n&gt;          IF (IS_URGENT_ERROR) THEN\r\n&gt;            RAISE;\r\n&gt;          END IF;\r\n&gt;      END;\r\n&gt; \r\n&gt;      DBMS_STATS_ADVISOR.SET_TASK_PARAMETER(TASK_NAME, PARAMETER, VALUE);\r\n&gt; \r\n&gt;    END IF;\r\n&gt; \r\n&gt;   END INIT_ADVISOR_TASK_PARAMETER;\r\n&gt; \r\n&gt;      \r\n53873a53932,53943\r\n&gt; \r\n&gt; \r\n&gt; \r\n&gt; \r\n&gt; \r\n&gt; \r\n&gt; \r\n&gt; \r\n&gt; \r\n&gt; \r\n&gt; \r\n&gt; \r\n53882a53953,53957\r\n&gt;     ELSE\r\n&gt;       INIT_ADVISOR_TASK_PARAMETER(PRVT_ADVISOR.TASK_RESERVED_NAME_ASTAT, \r\n&gt;                                  'DAYS_TO_EXPIRE', 'UNLIMITED');\r\n&gt;       INIT_ADVISOR_TASK_PARAMETER(PRVT_ADVISOR.TASK_RESERVED_NAME_ASTAT, \r\n&gt;                                  'EXECUTION_DAYS_TO_EXPIRE', 30);\r\n53890a53966,53970\r\n&gt;     ELSE\r\n&gt;       INIT_ADVISOR_TASK_PARAMETER(PRVT_ADVISOR.TASK_RESERVED_NAME_ISTAT, \r\n&gt;                                  'DAYS_TO_EXPIRE', 'UNLIMITED');\r\n&gt;       INIT_ADVISOR_TASK_PARAMETER(PRVT_ADVISOR.TASK_RESERVED_NAME_ISTAT, \r\n&gt;                                  'EXECUTION_DAYS_TO_EXPIRE', 30);\r\n<\/pre>\n<div id=\"SYS.DBMS_STATS_ADVISOR.PACKAGE BODY.18.0.0.0_RU\">SYS.DBMS_STATS_ADVISOR &#8211; PACKAGE BODY (RU):<\/div>\n<pre class=\"EnlighterJSRAW enlighter-collapse\" data-enlighter-language=\"diff\" data-enlighter-linenumbers=\"false\">3308a3309,3318\r\n&gt;     \r\n&gt;     \r\n&gt;     \r\n&gt;     \r\n&gt;     DBMS_STATS.SET_ADVISOR_TASK_PARAMETER(TNAME, \r\n&gt;       'DAYS_TO_EXPIRE', 'UNLIMITED');\r\n&gt;     DBMS_STATS.SET_ADVISOR_TASK_PARAMETER(TNAME, \r\n&gt;       'EXECUTION_DAYS_TO_EXPIRE', 30);\r\n&gt; \r\n&gt;     \r\n4583a4594,4600\r\n&gt;       WHEN UPPER(PARAMETER) = 'DAYS_TO_EXPIRE' THEN\r\n&gt;         DBMS_ADVISOR.SET_TASK_PARAMETER(TNAMEU, PARAMETER, VALUE);\r\n&gt; \r\n&gt;       WHEN UPPER(PARAMETER) = 'EXECUTION_DAYS_TO_EXPIRE' THEN\r\n&gt;         DBMS_ADVISOR.SET_TASK_PARAMETER(TNAMEU, PARAMETER, VALUE);\r\n&gt; \r\n&gt;       \r\n<\/pre>\n<div id=\"SYS.JDOM_T.TYPE.18.0.0.0_RU\">SYS.JDOM_T &#8211; TYPE (RU):<\/div>\n<pre class=\"EnlighterJSRAW enlighter-collapse\" data-enlighter-language=\"diff\" data-enlighter-linenumbers=\"false\">57,58c57,58\r\n&lt;   --MEMBER FUNCTION  put(key VARCHAR2, val CLOB) RETURN BOOLEAN,\r\n&lt;   --MEMBER FUNCTION  put(key VARCHAR2, val BLOB) RETURN BOOLEAN,\r\n---\r\n&gt;   MEMBER FUNCTION  put(key VARCHAR2, val CLOB) RETURN BOOLEAN,\r\n&gt;   MEMBER FUNCTION  put(key VARCHAR2, val BLOB) RETURN BOOLEAN,\r\n83,84c83,84\r\n&lt;   --MEMBER FUNCTION  append(val CLOB) RETURN BOOLEAN,\r\n&lt;   --MEMBER FUNCTION  append(val BLOB) RETURN BOOLEAN,\r\n---\r\n&gt;   MEMBER FUNCTION  append(val CLOB) RETURN BOOLEAN,\r\n&gt;   MEMBER FUNCTION  append(val BLOB) RETURN BOOLEAN,\r\n98,101c98,101\r\n&lt;   --MEMBER FUNCTION  put(pos NUMBER, val CLOB, overwrite BOOLEAN)\r\n&lt;   --                 RETURN BOOLEAN,\r\n&lt;   --MEMBER FUNCTION  put(pos NUMBER, val BLOB, overwrite BOOLEAN)\r\n&lt;   --                 RETURN BOOLEAN,\r\n---\r\n&gt;   MEMBER FUNCTION  put(pos NUMBER, val CLOB, overwrite BOOLEAN)\r\n&gt;                    RETURN BOOLEAN,\r\n&gt;   MEMBER FUNCTION  put(pos NUMBER, val BLOB, overwrite BOOLEAN)\r\n&gt;                    RETURN BOOLEAN,\r\n<\/pre>\n<div id=\"SYS.JSON_ARRAY_T.TYPE.18.0.0.0_RU\">SYS.JSON_ARRAY_T &#8211; TYPE (RU):<\/div>\n<pre class=\"EnlighterJSRAW enlighter-collapse\" data-enlighter-language=\"diff\" data-enlighter-linenumbers=\"false\">49,50c49,50\r\n&lt;    --MEMBER      PROCEDURE append(val CLOB),\r\n&lt;    --MEMBER      PROCEDURE append(val BLOB),\r\n---\r\n&gt;    MEMBER      PROCEDURE append(val CLOB),\r\n&gt;    MEMBER      PROCEDURE append(val BLOB),\r\n65,68c65,68\r\n&lt;    --MEMBER      PROCEDURE put(pos NUMBER, val CLOB,\r\n&lt;    --                            overwrite BOOLEAN DEFAULT FALSE),\r\n&lt;    --MEMBER      PROCEDURE put(pos NUMBER, val BLOB,\r\n&lt;    --                           overwrite BOOLEAN DEFAULT FALSE),\r\n---\r\n&gt;    MEMBER      PROCEDURE put(pos NUMBER, val CLOB,\r\n&gt;                              overwrite BOOLEAN DEFAULT FALSE),\r\n&gt;    MEMBER      PROCEDURE put(pos NUMBER, val BLOB,\r\n&gt;                              overwrite BOOLEAN DEFAULT FALSE),\r\n<\/pre>\n<div id=\"SYS.JSON_ELEMENT_T.TYPE.18.0.0.0_RU\">SYS.JSON_ELEMENT_T &#8211; TYPE (RU):<\/div>\n<pre class=\"EnlighterJSRAW enlighter-collapse\" data-enlighter-language=\"diff\" data-enlighter-linenumbers=\"false\">35c35,36\r\n&lt;    MEMBER PROCEDURE mergepatch(self IN OUT NOCOPY JSON_ELEMENT_T, patch VARCHAR2),\r\n---\r\n&gt;    MEMBER PROCEDURE mergepatch(self IN OUT NOCOPY JSON_ELEMENT_T,\r\n&gt;                                patch VARCHAR2),\r\n<\/pre>\n<div id=\"SYS.JSON_OBJECT_T.TYPE.18.0.0.0_RU\">SYS.JSON_OBJECT_T &#8211; TYPE (RU):<\/div>\n<pre class=\"EnlighterJSRAW enlighter-collapse\" data-enlighter-language=\"diff\" data-enlighter-linenumbers=\"false\">57,58c57,58\r\n&lt;    --MEMBER      PROCEDURE put(key VARCHAR2, val CLOB),\r\n&lt;    --MEMBER      PROCEDURE put(key VARCHAR2, val BLOB),\r\n---\r\n&gt;    MEMBER      PROCEDURE put(key VARCHAR2, val CLOB),\r\n&gt;    MEMBER      PROCEDURE put(key VARCHAR2, val BLOB),\r\n<\/pre>\n<div id=\"SYS.JDOM_T.TYPE BODY.18.0.0.0_RU\">SYS.JDOM_T &#8211; TYPE BODY (RU):<\/div>\n<pre class=\"EnlighterJSRAW enlighter-collapse\" data-enlighter-language=\"diff\" data-enlighter-linenumbers=\"false\">227,239c227,239\r\n&lt;      --MEMBER FUNCTION put(key VARCHAR2, val CLOB) RETURN BOOLEAN IS EXTERNAL\r\n&lt;      --name \"setClob_Obj\" library DBMS_JDOM_LIB WITH CONTEXT\r\n&lt;      --parameters(context, self, self INDICATOR sb2,\r\n&lt;      --                  key OCIString, key INDICATOR sb2,\r\n&lt;      --                  val OCILobLocator, val INDICATOR sb2,\r\n&lt;      --                  RETURN INDICATOR sb4, return);\r\n&lt; \r\n&lt;     --MEMBER FUNCTION put(key VARCHAR2, val BLOB) RETURN BOOLEAN IS EXTERNAL\r\n&lt;     -- name \"setBlob_Obj\" library DBMS_JDOM_LIB WITH CONTEXT\r\n&lt;     -- parameters(context, self, self INDICATOR sb2,\r\n&lt;     --                   key OCIString, key INDICATOR sb2,\r\n&lt;     --                   val OCILobLocator, val INDICATOR sb2,\r\n&lt;     --                   RETURN INDICATOR sb4, return);\r\n---\r\n&gt;      MEMBER FUNCTION put(key VARCHAR2, val CLOB) RETURN BOOLEAN IS EXTERNAL\r\n&gt;      name \"setClob_Obj\" library DBMS_JDOM_LIB WITH CONTEXT\r\n&gt;      parameters(context, self, self INDICATOR sb2,\r\n&gt;                        key OCIString, key INDICATOR sb2,\r\n&gt;                        val OCILobLocator, val INDICATOR sb2,\r\n&gt;                        RETURN INDICATOR sb4, return);\r\n&gt; \r\n&gt;     MEMBER FUNCTION put(key VARCHAR2, val BLOB) RETURN BOOLEAN IS EXTERNAL\r\n&gt;     name \"setBlob_Obj\" library DBMS_JDOM_LIB WITH CONTEXT\r\n&gt;      parameters(context, self, self INDICATOR sb2,\r\n&gt;                        key OCIString, key INDICATOR sb2,\r\n&gt;                        val OCILobLocator, val INDICATOR sb2,\r\n&gt;                        RETURN INDICATOR sb4, return);\r\n373,383c373,383\r\n&lt;     --MEMBER FUNCTION append(val CLOB) RETURN BOOLEAN is EXTERNAL\r\n&lt;     -- name \"addClob_Arr\" library DBMS_JDOM_LIB WITH CONTEXT\r\n&lt;     -- parameters(context, self, self INDICATOR sb2,\r\n&lt;     --                    val OCILobLocator, val INDICATOR sb2,\r\n&lt;     --                    RETURN INDICATOR sb4, return);\r\n&lt; \r\n&lt;     --MEMBER FUNCTION append(val BLOB) RETURN BOOLEAN is EXTERNAL\r\n&lt;     -- name \"addBlob_Arr\" library DBMS_JDOM_LIB WITH CONTEXT\r\n&lt;     -- parameters(context, self, self INDICATOR sb2,\r\n&lt;     --                    val OCILobLocator, val INDICATOR sb2,\r\n&lt;     --                    RETURN INDICATOR sb4, return);\r\n---\r\n&gt;     MEMBER FUNCTION append(val CLOB) RETURN BOOLEAN is EXTERNAL\r\n&gt;      name \"addClob_Arr\" library DBMS_JDOM_LIB WITH CONTEXT\r\n&gt;      parameters(context, self, self INDICATOR sb2,\r\n&gt;                         val OCILobLocator, val INDICATOR sb2,\r\n&gt;                         RETURN INDICATOR sb4, return);\r\n&gt; \r\n&gt;     MEMBER FUNCTION append(val BLOB) RETURN BOOLEAN is EXTERNAL\r\n&gt;      name \"addBlob_Arr\" library DBMS_JDOM_LIB WITH CONTEXT\r\n&gt;      parameters(context, self, self INDICATOR sb2,\r\n&gt;                         val OCILobLocator, val INDICATOR sb2,\r\n&gt;                         RETURN INDICATOR sb4, return);\r\n<\/pre>\n<div id=\"SYS.JSON_ARRAY_T.TYPE BODY.18.0.0.0_RU\">SYS.JSON_ARRAY_T &#8211; TYPE BODY (RU):<\/div>\n<pre class=\"EnlighterJSRAW enlighter-collapse\" data-enlighter-language=\"diff\" data-enlighter-linenumbers=\"false\">163,173c163,173\r\n&lt;    --MEMBER PROCEDURE append(val CLOB) AS\r\n&lt;    --  hack boolean;\r\n&lt;    --BEGIN\r\n&lt;    --  hack := dom.append(val);\r\n&lt;    --END;\r\n&lt; \r\n&lt;    --MEMBER PROCEDURE append(val BLOB) AS\r\n&lt;    --  hack boolean;\r\n&lt;    --BEGIN\r\n&lt;    --  hack := dom.append(val);\r\n&lt;    --END;\r\n---\r\n&gt;    MEMBER PROCEDURE append(val CLOB) AS\r\n&gt;      hack boolean;\r\n&gt;    BEGIN\r\n&gt;      hack := dom.append(val);\r\n&gt;    END;\r\n&gt; \r\n&gt;    MEMBER PROCEDURE append(val BLOB) AS\r\n&gt;      hack boolean;\r\n&gt;    BEGIN\r\n&gt;      hack := dom.append(val);\r\n&gt;    END;\r\n223,235c223,235\r\n&lt;    --MEMBER PROCEDURE put(pos NUMBER, val CLOB,\r\n&lt;    --                     overwrite BOOLEAN DEFAULT FALSE) AS\r\n&lt;    --  hack boolean;\r\n&lt;    --BEGIN\r\n&lt;    --  hack := dom.put(pos, val, overwrite);\r\n&lt;    --END;\r\n&lt; \r\n&lt;    --MEMBER PROCEDURE put(pos NUMBER, val BLOB,\r\n&lt;    --                     overwrite BOOLEAN DEFAULT FALSE) AS\r\n&lt;    --  hack boolean;\r\n&lt;    --BEGIN\r\n&lt;    --  hack := dom.put(pos, val, overwrite);\r\n&lt;    --END;\r\n---\r\n&gt;    MEMBER PROCEDURE put(pos NUMBER, val CLOB,\r\n&gt;                         overwrite BOOLEAN DEFAULT FALSE) AS\r\n&gt;      hack boolean;\r\n&gt;    BEGIN\r\n&gt;      hack := dom.put(pos, val, overwrite);\r\n&gt;    END;\r\n&gt; \r\n&gt;    MEMBER PROCEDURE put(pos NUMBER, val BLOB,\r\n&gt;                         overwrite BOOLEAN DEFAULT FALSE) AS\r\n&gt;      hack boolean;\r\n&gt;    BEGIN\r\n&gt;      hack := dom.put(pos, val, overwrite);\r\n&gt;    END;\r\n<\/pre>\n<div id=\"SYS.JSON_ELEMENT_T.TYPE BODY.18.0.0.0_RU\">SYS.JSON_ELEMENT_T &#8211; TYPE BODY (RU):<\/div>\n<pre class=\"EnlighterJSRAW enlighter-collapse\" data-enlighter-language=\"diff\" data-enlighter-linenumbers=\"false\">177c177,178\r\n&lt;   MEMBER PROCEDURE mergepatch(self IN OUT NOCOPY JSON_ELEMENT_T, patch VARCHAR2) AS\r\n---\r\n&gt;   MEMBER PROCEDURE mergepatch(self IN OUT NOCOPY JSON_ELEMENT_T,\r\n&gt;                               patch VARCHAR2) AS\r\n<\/pre>\n<div id=\"SYS.JSON_OBJECT_T.TYPE BODY.18.0.0.0_RU\">SYS.JSON_OBJECT_T &#8211; TYPE BODY (RU):<\/div>\n<pre class=\"EnlighterJSRAW enlighter-collapse\" data-enlighter-language=\"diff\" data-enlighter-linenumbers=\"false\">163,173c163,173\r\n&lt;    --MEMBER PROCEDURE put(key VARCHAR2, val CLOB) AS\r\n&lt;    --  hack boolean;\r\n&lt;    --BEGIN\r\n&lt;    --  hack := dom.put(key, val);\r\n&lt;    --END;\r\n&lt; \r\n&lt;    --MEMBER PROCEDURE put(key VARCHAR2, val BLOB) AS\r\n&lt;    --  hack boolean;\r\n&lt;    --BEGIN\r\n&lt;    --  hack := dom.put(key, val);\r\n&lt;    --END;\r\n---\r\n&gt;    MEMBER PROCEDURE put(key VARCHAR2, val CLOB) AS\r\n&gt;      hack boolean;\r\n&gt;    BEGIN\r\n&gt;      hack := dom.put(key, val);\r\n&gt;    END;\r\n&gt; \r\n&gt;    MEMBER PROCEDURE put(key VARCHAR2, val BLOB) AS\r\n&gt;      hack boolean;\r\n&gt;    BEGIN\r\n&gt;      hack := dom.put(key, val);\r\n&gt;    END;\r\n<\/pre>\n<div id=\"XDB.DBMS_SODA_ADMIN.PACKAGE BODY.18.0.0.0_RU\">XDB.DBMS_SODA_ADMIN &#8211; PACKAGE BODY (RU):<\/div>\n<pre class=\"EnlighterJSRAW enlighter-collapse\" data-enlighter-language=\"diff\" data-enlighter-linenumbers=\"false\">86a87,90\r\n&gt;   ERR_IDX_DESCENDANT_STEP          CONSTANT  NUMBER := -40756;\r\n&gt;   ERR_IDX_TRAIL_LEAD_STEP          CONSTANT  NUMBER := -40757;\r\n&gt;   ERR_IDX_SPL_CHAR_STEP            CONSTANT  NUMBER := -40758;\r\n&gt;   ERR_IDX_WILDCARD_STEP            CONSTANT  NUMBER := -40759;\r\n436c440,444\r\n&lt;   FUNCTION TRANSLATE_JSON_PATH(P_PATH IN VARCHAR2) RETURN VARCHAR2\r\n---\r\n&gt;   FUNCTION TRANSLATE_JSON_PATH(P_PATH IN VARCHAR2,\r\n&gt;                                P_ALLOW_ARRAY_STEP      BOOLEAN DEFAULT TRUE,\r\n&gt;                                P_ALLOW_DESCENDANT_STEP BOOLEAN DEFAULT TRUE,\r\n&gt;                                P_ALLOW_WILDCARD_STEP   BOOLEAN DEFAULT TRUE)\r\n&gt;   RETURN VARCHAR2\r\n452a461,463\r\n&gt;     V_HAS_ARRAY_STEP       BOOLEAN := FALSE;\r\n&gt;     V_HAS_DESCENDANT_STEP  BOOLEAN := FALSE;\r\n&gt;     V_HAS_WILDCARD_STEP    BOOLEAN := FALSE;\r\n469c480,485\r\n&lt;       IF (V_CHR = V_STEP_SEP) AND (NOT(V_IN_QUOTES)) THEN\r\n---\r\n&gt;       IF (V_CHR = V_STEP_SEP AND (I = 1 OR I = V_PATH_LEN)) THEN\r\n&gt;         SYS.DBMS_SODA_UTIL.RAISE_SYSTEM_ERROR(ERR_IDX_TRAIL_LEAD_STEP);\r\n&gt;       ELSIF (V_CHR = V_STEP_SEP) AND (NOT(V_IN_QUOTES)) THEN\r\n&gt;         IF (V_NXT = V_STEP_SEP) THEN\r\n&gt;           V_HAS_DESCENDANT_STEP := TRUE;\r\n&gt;         END IF;\r\n472c488\r\n&lt;           V_NEED_QUOTES := TRUE;\r\n---\r\n&gt;           V_NEED_QUOTES := FALSE;\r\n506a523,536\r\n&gt;       \r\n&gt;       IF NOT (V_IN_QUOTES) AND (V_CHR IN ('$','@')) THEN\r\n&gt;         IF (V_NXT = '.' OR I = V_PATH_LEN) THEN\r\n&gt;           SYS.DBMS_SODA_UTIL.RAISE_SYSTEM_ERROR(ERR_IDX_SPL_CHAR_STEP,\r\n&gt;                                                 V_CHR, P_PATH, I);\r\n&gt;         END IF;        \r\n&gt;       END IF;\r\n&gt;       \r\n&gt;       IF NOT (V_IN_QUOTES) AND (V_CHR IN ('*')) THEN\r\n&gt;         IF (V_NXT = '.' OR I = V_PATH_LEN) THEN\r\n&gt;           V_HAS_WILDCARD_STEP := TRUE;\r\n&gt;         END IF;        \r\n&gt;       END IF;\r\n&gt;       \r\n508c538\r\n&lt;         SYS.DBMS_SODA_UTIL.RAISE_SYSTEM_ERROR(ERR_IDX_NO_ARRAYS);\r\n---\r\n&gt;         V_HAS_ARRAY_STEP := TRUE;\r\n511c541\r\n&lt;         IF (INSTR('0123456789', V_CHR) &gt; 0) THEN\r\n---\r\n&gt;         IF (INSTR(DIGITS_CHARS, V_CHR) &gt; 0) THEN\r\n565a596,604\r\n&gt;     IF NOT (P_ALLOW_ARRAY_STEP) AND V_HAS_ARRAY_STEP THEN\r\n&gt;       SYS.DBMS_SODA_UTIL.RAISE_SYSTEM_ERROR(ERR_IDX_NO_ARRAYS);\r\n&gt;     END IF;\r\n&gt;     IF NOT (P_ALLOW_DESCENDANT_STEP) AND V_HAS_DESCENDANT_STEP THEN\r\n&gt;       SYS.DBMS_SODA_UTIL.RAISE_SYSTEM_ERROR(ERR_IDX_DESCENDANT_STEP);\r\n&gt;     END IF;\r\n&gt;     IF NOT (P_ALLOW_WILDCARD_STEP) AND V_HAS_WILDCARD_STEP THEN\r\n&gt;       SYS.DBMS_SODA_UTIL.RAISE_SYSTEM_ERROR(ERR_IDX_WILDCARD_STEP);\r\n&gt;     END IF;\r\n576c615\r\n&lt;       V_NEED_QUOTES := TRUE;\r\n---\r\n&gt;       V_NEED_QUOTES := FALSE;\r\n1289c1328\r\n&lt;       V_KEY_PATH := TRANSLATE_JSON_PATH(V_KEY_PATH);\r\n---\r\n&gt;       V_KEY_PATH := TRANSLATE_JSON_PATH(V_KEY_PATH, FALSE, FALSE, FALSE);\r\n1292c1331,1332\r\n&lt;       V_PARTITION_PATH := TRANSLATE_JSON_PATH(V_PARTITION_PATH);\r\n---\r\n&gt;       V_PARTITION_PATH := TRANSLATE_JSON_PATH(V_PARTITION_PATH, FALSE, FALSE,\r\n&gt;                                               FALSE);\r\n2267c2307\r\n&lt;         P_SPATIAL := TRANSLATE_JSON_PATH(P_SPATIAL);\r\n---\r\n&gt;         P_SPATIAL := TRANSLATE_JSON_PATH(P_SPATIAL, FALSE, FALSE, TRUE);\r\n2321c2361,2362\r\n&lt;                 P_PATHS(J) := TRANSLATE_JSON_PATH(P_PATHS(J));\r\n---\r\n&gt;                 P_PATHS(J) := TRANSLATE_JSON_PATH(P_PATHS(J), FALSE, FALSE,\r\n&gt;                                                   TRUE);\r\n<\/pre>\n<hr \/>\n<p>Useful Links:<\/p>\n<ul>\n<li>Download Assistant: <a href=\"https:\/\/support.oracle.com\/epmos\/faces\/DocumentDisplay?id=2118136.2\" target=\"_blank\" rel=\"noopener\">MOS Note: 2118136.2<\/a><\/li>\n<li>2019 January CPU: <a href=\"https:\/\/www.oracle.com\/technetwork\/security-advisory\/cpujan2019-5072801.html\" target=\"_blank\" rel=\"noopener\">https:\/\/www.oracle.com\/technetwork\/security-advisory\/cpujan2019-5072801.html<\/a><\/li>\n<\/ul>\n<b>Have you enjoyed? Please leave a comment or give a \ud83d\udc4d!<\/b>\n<div class='watch-action'><div class='watch-position align-left'><div class='action-like'><a class='lbg-style2 like-3977 jlk' href='javascript:void(0)' data-task='like' data-post_id='3977' data-nonce='de4404f630' rel='nofollow'><img class='wti-pixel' src='https:\/\/www.dbarj.com.br\/wp-content\/plugins\/wti-like-post\/images\/pixel.gif' title='Like' \/><span class='lc-3977 lc'>+2<\/span><\/a><\/div><\/div> <div class='status-3977 status align-left'><\/div><\/div><div class='wti-clear'><\/div>","protected":false},"excerpt":{"rendered":"<p>I am quarterly writing a post dissecting the changes implemented by Oracle CPUs so we can understand better the modifications implemented by Oracle in our Databases. To check previous changes, follow the links below: Dissecting 181016 BP, PSU, RU and RUR Dissecting 180717 BP, PSU, RU and RUR Dissecting 180417 BP, PSU, RU and RUR &hellip; <\/p>\n<p><a class=\"more-link btn\" href=\"https:\/\/www.dbarj.com.br\/pt-br\/2019\/02\/dissecting-190115-bp-psu-ru-and-rur\/\">Continue lendo<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19,2],"tags":[],"class_list":["post-3977","post","type-post","status-publish","format-standard","hentry","category-security","category-database","item-wrap"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Dissecting 190115 BP, PSU, RU and RUR - DBA - Rodrigo Jorge - Oracle Tips and Guides<\/title>\n<meta name=\"description\" content=\"All the changes performed by Oracle January 2019 Database CPU (190115) dissected.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dbarj.com.br\/pt-br\/2019\/02\/dissecting-190115-bp-psu-ru-and-rur\/\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"DBA RJ\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"64 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/2019\\\/02\\\/dissecting-190115-bp-psu-ru-and-rur\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/2019\\\/02\\\/dissecting-190115-bp-psu-ru-and-rur\\\/\"},\"author\":{\"name\":\"DBA RJ\",\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/#\\\/schema\\\/person\\\/28a44ca3a6633fe4156ad1ea209d40a9\"},\"headline\":\"Dissecting 190115 BP, PSU, RU and RUR\",\"datePublished\":\"2019-02-01T16:24:17+00:00\",\"dateModified\":\"2019-02-01T16:25:10+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/2019\\\/02\\\/dissecting-190115-bp-psu-ru-and-rur\\\/\"},\"wordCount\":920,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/#\\\/schema\\\/person\\\/28a44ca3a6633fe4156ad1ea209d40a9\"},\"articleSection\":[\"Database Security\",\"Oracle Database General\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/2019\\\/02\\\/dissecting-190115-bp-psu-ru-and-rur\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/2019\\\/02\\\/dissecting-190115-bp-psu-ru-and-rur\\\/\",\"url\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/2019\\\/02\\\/dissecting-190115-bp-psu-ru-and-rur\\\/\",\"name\":\"Dissecting 190115 BP, PSU, RU and RUR - DBA - Rodrigo Jorge - Oracle Tips and Guides\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/#website\"},\"datePublished\":\"2019-02-01T16:24:17+00:00\",\"dateModified\":\"2019-02-01T16:25:10+00:00\",\"description\":\"All the changes performed by Oracle January 2019 Database CPU (190115) dissected.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/2019\\\/02\\\/dissecting-190115-bp-psu-ru-and-rur\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/2019\\\/02\\\/dissecting-190115-bp-psu-ru-and-rur\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/2019\\\/02\\\/dissecting-190115-bp-psu-ru-and-rur\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Dissecting 190115 BP, PSU, RU and RUR\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/#website\",\"url\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/\",\"name\":\"DBA - Rodrigo Jorge - Oracle Tips and Guides\",\"description\":\"Blog about Databases, Security and High Availability\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/#\\\/schema\\\/person\\\/28a44ca3a6633fe4156ad1ea209d40a9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/#\\\/schema\\\/person\\\/28a44ca3a6633fe4156ad1ea209d40a9\",\"name\":\"DBA RJ\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/RodrigoJorgePOUG19.png\",\"url\":\"https:\\\/\\\/www.dbarj.com.br\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/RodrigoJorgePOUG19.png\",\"contentUrl\":\"https:\\\/\\\/www.dbarj.com.br\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/RodrigoJorgePOUG19.png\",\"width\":712,\"height\":712,\"caption\":\"DBA RJ\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/RodrigoJorgePOUG19.png\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Dissecting 190115 BP, PSU, RU and RUR - DBA - Rodrigo Jorge - Oracle Tips and Guides","description":"All the changes performed by Oracle January 2019 Database CPU (190115) dissected.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dbarj.com.br\/pt-br\/2019\/02\/dissecting-190115-bp-psu-ru-and-rur\/","twitter_misc":{"Escrito por":"DBA RJ","Est. tempo de leitura":"64 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbarj.com.br\/pt-br\/2019\/02\/dissecting-190115-bp-psu-ru-and-rur\/#article","isPartOf":{"@id":"https:\/\/www.dbarj.com.br\/pt-br\/2019\/02\/dissecting-190115-bp-psu-ru-and-rur\/"},"author":{"name":"DBA RJ","@id":"https:\/\/www.dbarj.com.br\/pt-br\/#\/schema\/person\/28a44ca3a6633fe4156ad1ea209d40a9"},"headline":"Dissecting 190115 BP, PSU, RU and RUR","datePublished":"2019-02-01T16:24:17+00:00","dateModified":"2019-02-01T16:25:10+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbarj.com.br\/pt-br\/2019\/02\/dissecting-190115-bp-psu-ru-and-rur\/"},"wordCount":920,"commentCount":2,"publisher":{"@id":"https:\/\/www.dbarj.com.br\/pt-br\/#\/schema\/person\/28a44ca3a6633fe4156ad1ea209d40a9"},"articleSection":["Database Security","Oracle Database General"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbarj.com.br\/pt-br\/2019\/02\/dissecting-190115-bp-psu-ru-and-rur\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbarj.com.br\/pt-br\/2019\/02\/dissecting-190115-bp-psu-ru-and-rur\/","url":"https:\/\/www.dbarj.com.br\/pt-br\/2019\/02\/dissecting-190115-bp-psu-ru-and-rur\/","name":"Dissecting 190115 BP, PSU, RU and RUR - DBA - Rodrigo Jorge - Oracle Tips and Guides","isPartOf":{"@id":"https:\/\/www.dbarj.com.br\/pt-br\/#website"},"datePublished":"2019-02-01T16:24:17+00:00","dateModified":"2019-02-01T16:25:10+00:00","description":"All the changes performed by Oracle January 2019 Database CPU (190115) dissected.","breadcrumb":{"@id":"https:\/\/www.dbarj.com.br\/pt-br\/2019\/02\/dissecting-190115-bp-psu-ru-and-rur\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbarj.com.br\/pt-br\/2019\/02\/dissecting-190115-bp-psu-ru-and-rur\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbarj.com.br\/pt-br\/2019\/02\/dissecting-190115-bp-psu-ru-and-rur\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.dbarj.com.br\/pt-br\/"},{"@type":"ListItem","position":2,"name":"Dissecting 190115 BP, PSU, RU and RUR"}]},{"@type":"WebSite","@id":"https:\/\/www.dbarj.com.br\/pt-br\/#website","url":"https:\/\/www.dbarj.com.br\/pt-br\/","name":"DBA - Rodrigo Jorge - Oracle Tips and Guides","description":"Blog about Databases, Security and High Availability","publisher":{"@id":"https:\/\/www.dbarj.com.br\/pt-br\/#\/schema\/person\/28a44ca3a6633fe4156ad1ea209d40a9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbarj.com.br\/pt-br\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":["Person","Organization"],"@id":"https:\/\/www.dbarj.com.br\/pt-br\/#\/schema\/person\/28a44ca3a6633fe4156ad1ea209d40a9","name":"DBA RJ","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.dbarj.com.br\/wp-content\/uploads\/2019\/09\/RodrigoJorgePOUG19.png","url":"https:\/\/www.dbarj.com.br\/wp-content\/uploads\/2019\/09\/RodrigoJorgePOUG19.png","contentUrl":"https:\/\/www.dbarj.com.br\/wp-content\/uploads\/2019\/09\/RodrigoJorgePOUG19.png","width":712,"height":712,"caption":"DBA RJ"},"logo":{"@id":"https:\/\/www.dbarj.com.br\/wp-content\/uploads\/2019\/09\/RodrigoJorgePOUG19.png"}}]}},"_links":{"self":[{"href":"https:\/\/www.dbarj.com.br\/pt-br\/wp-json\/wp\/v2\/posts\/3977","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbarj.com.br\/pt-br\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbarj.com.br\/pt-br\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbarj.com.br\/pt-br\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbarj.com.br\/pt-br\/wp-json\/wp\/v2\/comments?post=3977"}],"version-history":[{"count":1,"href":"https:\/\/www.dbarj.com.br\/pt-br\/wp-json\/wp\/v2\/posts\/3977\/revisions"}],"predecessor-version":[{"id":3982,"href":"https:\/\/www.dbarj.com.br\/pt-br\/wp-json\/wp\/v2\/posts\/3977\/revisions\/3982"}],"wp:attachment":[{"href":"https:\/\/www.dbarj.com.br\/pt-br\/wp-json\/wp\/v2\/media?parent=3977"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbarj.com.br\/pt-br\/wp-json\/wp\/v2\/categories?post=3977"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbarj.com.br\/pt-br\/wp-json\/wp\/v2\/tags?post=3977"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}