{"id":1542,"date":"2017-02-21T15:42:24","date_gmt":"2017-02-21T13:42:24","guid":{"rendered":"http:\/\/www.ludovicocaldara.net\/dba\/?p=1542"},"modified":"2020-08-18T16:15:11","modified_gmt":"2020-08-18T14:15:11","slug":"rcvcat-housekeeping","status":"publish","type":"post","link":"https:\/\/www.ludovicocaldara.net\/dba\/rcvcat-housekeeping\/","title":{"rendered":"RMAN Catalog Housekeeping: how to purge the old incarnations"},"content":{"rendered":"<p>First, let me apologize because every post in my blog starts with a disclaimer&#8230; but sometimes it is really necessary. \ud83d\ude09<\/p>\n<p><strong>Disclaimer: this blog post contains PL\/SQL code that deletes incarnations from your RMAN recovery catalog. Please DON&#8217;T use it unless you deeply understand what you are doing, as it can compromise your backup and recovery strategy.<\/strong><\/p>\n<p><strong>Small introduction<\/strong><\/p>\n<p>You may have a central RMAN catalog that stores all the backup metadata for your databases. If it is the case, you will have a database entry for each of your databases and a new incarnation entry for each duplicate, incomplete recovery or\u00a0 flashback (or whatever).<\/p>\n<p>You should also have a delete strategy that deletes the obsolete backups from either your DISK or SBT_TAPE media. If you have old incarnations, however, after some time you will notice that their information never goes away from your catalog, and you may end up soon or later to do some housekeeping. But there is nothing more tedious than checking and deleting the incarnations one by one, especially if you have average big numbers like this catalog:<\/p>\n<pre class=\"lang:plsql decode:true\">SQL&gt; SELECT count(*) FROM db;\r\n\r\n  COUNT(*)\r\n----------\r\n      1843\r\n\r\nSQL&gt; SELECT count(*) FROM dbinc;\r\n\r\n  COUNT(*)\r\n----------\r\n      3870\r\n\r\nSQL&gt; SELECT count(*) FROM bdf;\r\n\r\n  COUNT(*)\r\n----------\r\n   4130959\r\n\r\nSQL&gt; SELECT count(*) FROM brl;\r\n\r\n\r\n  COUNT(*)\r\n----------\r\n  14876291\r\n<\/pre>\n<p>Where <strong>db<\/strong>, <strong>dbinc<\/strong>, <strong>bdf<\/strong> and <strong>brl<\/strong> contain reslectively the registered databases, incarnations, datafile backups and archivelog backups.<\/p>\n<p><strong>Different incarnations?<\/strong><\/p>\n<p>Consider the following query:<\/p>\n<pre class=\"lang:plsql decode:true \">col dbinc_key_ for a60\r\nset pages 100 lines 200\r\nSELECT lpad(' ',2*(level-1))\r\n  || TO_CHAR(DBINC_KEY) AS DBINC_KEY_,\r\n  db_key,\r\n  db_name,\r\n  TO_CHAR(reset_time,'YYYY-MM-DD HH24:MI:SS'),\r\n  dbinc_status\r\nFROM rman.dbinc\r\n  START WITH PARENT_DBINC_KEY IS NULL\r\n  CONNECT BY prior DBINC_KEY   = PARENT_DBINC_KEY\r\nORDER BY db_name , db_key, level\r\n;<\/pre>\n<p>You can run it safely: it returns the list of incarnations hierarchically connected to their parent, by database name, key and level.<\/p>\n<p>Then you have several types of behaviors:<\/p>\n<ul>\n<li>Normal databases (created once, never restored or flashed back) will have just one or two incarnations (it depends on how they are created):<\/li>\n<\/ul>\n<pre class=\"lang:plsql highlight:0 decode:true\">DBINC_KEY                      DB_KEY DB_NAME  TO_CHAR(RESET_TIME, DBINC_ST\r\n-------------------------- ---------- -------- ------------------- --------\r\n104547357                   104546534 VxxxxxxP 2010-09-05 05:49:10 PARENT\r\n  104546535                 104546534 VxxxxxxP 2012-01-18 09:31:01 CURRENT<\/pre>\n<p>They are usually the ones that you may want to keep in your catalog, unless the database no longer exist: in this case perhaps you omitted the deletion from the catalog when you have dropped your database?<\/p>\n<ul>\n<li>Flashed back databases (flashed back multiple times) will have as many incarnations as the number of flashbacks, but all connected with the incarnation prior to the flashback:<\/li>\n<\/ul>\n<pre class=\"lang:plsql highlight:0 decode:true \">DBINC_KEY                                                        DB_KEY DB_NAME  TO_CHAR(RESET_TIME, DBINC_ST\r\n------------------------------------------------------------ ---------- -------- ------------------- --------\r\n1164696351                                                   1164696336 VxxxxxxD 2014-07-07 05:38:47 PARENT\r\n  1164696337                                                 1164696336 VxxxxxxD 2014-12-10 07:39:14 PARENT\r\n    1328815631                                               1164696336 VxxxxxxD 2016-05-12 08:22:23 PARENT\r\n      1329299866                                             1164696336 VxxxxxxD 2016-05-13 13:02:35 PARENT\r\n        1329299867                                           1164696336 VxxxxxxD 2016-05-13 14:05:53 PARENT\r\n          1329299833                                         1164696336 VxxxxxxD 2016-05-13 18:26:59 PARENT\r\n            1331239226                                       1164696336 VxxxxxxD 2016-05-17 08:09:04 PARENT\r\n              1331395102                                     1164696336 VxxxxxxD 2016-05-17 13:20:17 PARENT\r\n                1331815030                                   1164696336 VxxxxxxD 2016-05-18 07:32:13 PARENT\r\n                  1331814966                                 1164696336 VxxxxxxD 2016-05-18 10:57:45 PARENT\r\n                    1387023006                               1164696336 VxxxxxxD 2016-07-13 09:33:05 PARENT\r\n                      1407484366                             1164696336 VxxxxxxD 2016-09-09 13:25:31 PARENT\r\n                        1419007163                           1164696336 VxxxxxxD 2016-10-17 14:32:59 PARENT\r\n                          1436430179                         1164696336 VxxxxxxD 2016-12-12 15:13:55 PARENT\r\n                            1436430034                       1164696336 VxxxxxxD 2016-12-12 16:28:57 PARENT\r\n                              1437118959                     1164696336 VxxxxxxD 2016-12-14 14:48:53 PARENT\r\n                                1437365509                   1164696336 VxxxxxxD 2016-12-15 09:45:00 PARENT\r\n                                  1437365456                 1164696336 VxxxxxxD 2016-12-15 11:11:06 PARENT\r\n                                    1437484026               1164696336 VxxxxxxD 2016-12-15 13:26:37 PARENT\r\n                                      1437483983             1164696336 VxxxxxxD 2016-12-15 17:21:11 PARENT\r\n                                        1437822754           1164696336 VxxxxxxD 2016-12-16 12:07:46 CURRENT<\/pre>\n<p>Here, despite you have several incarnations, they all belong to the same database (same DB_KEY and DBID), then you must also keep it inside the recovery catalog.<\/p>\n<ul>\n<li>Non-production databases that are frequently refreshed from the production database (via duplicate) will have several incarnations with different DBIDs and DB_KEY:<\/li>\n<\/ul>\n<pre class=\"lang:plsql decode:true \">DBINC_KEY                   DB_KEY DB_NAME  TO_CHAR(RESET_TIME, DBINC_ST\r\n----------------------- ---------- -------- ------------------- --------\r\n1173852671              1173852633 VxxxxxxV 2014-07-07 05:38:47 PARENT\r\n  1173852635            1173852633 VxxxxxxV 2015-01-16 07:29:01 PARENT\r\n    1188550385          1173852633 VxxxxxxV 2015-03-16 16:06:00 CURRENT\r\n1220896058              1220896027 VxxxxxxV 2015-02-27 16:25:13 PARENT\r\n  1220896028            1220896027 VxxxxxxV 2015-07-17 08:06:00 CURRENT\r\n1233975755              1233975724 VxxxxxxV 2015-02-27 16:25:13 PARENT\r\n  1233975725            1233975724 VxxxxxxV 2015-09-10 11:23:53 CURRENT\r\n1244346785              1244346754 VxxxxxxV 2015-02-27 16:25:13 PARENT\r\n  1244346755            1244346754 VxxxxxxV 2015-10-23 07:46:34 CURRENT\r\n1281775847              1281775816 VxxxxxxV 2015-02-27 16:25:13 PARENT\r\n  1281775817            1281775816 VxxxxxxV 2016-02-08 09:44:03 CURRENT\r\n1317447322              1317447257 VxxxxxxV 2015-02-27 16:25:13 PARENT\r\n  1317447258            1317447257 VxxxxxxV 2016-04-07 12:20:56 CURRENT\r\n1323527351              1323527316 VxxxxxxV 2015-02-27 16:25:13 PARENT\r\n  1323527317            1323527316 VxxxxxxV 2016-04-29 10:09:12 CURRENT\r\n1437346753              1437346718 VxxxxxxV 2015-02-27 16:25:13 PARENT\r\n  1437346719            1437346718 VxxxxxxV 2016-12-12 13:33:31 CURRENT\r\n<\/pre>\n<p>This is usually the most frequent case: here you want to delete the old incarnations, but only <strong>as far as there are no backups<\/strong> attached to them that are still in the recovery window.<\/p>\n<ul>\n<li>You may also have orphaned incarnations:<\/li>\n<\/ul>\n<pre class=\"lang:plsql highlight:0 decode:true \">DBINC_KEY                                                        DB_KEY DB_NAME  TO_CHAR(RESET_TIME, DBINC_ST\r\n------------------------------------------------------------ ---------- -------- ------------------- --------\r\n1262827482                                                   1262827435 TxxxxxxT 2014-07-07 05:38:47 PARENT\r\n  1262827436                                                 1262827435 TxxxxxxT 2016-01-05 12:15:22 PARENT\r\n    1267262014                                               1262827435 TxxxxxxT 2016-01-19 09:15:47 PARENT\r\n      1267290962                                             1262827435 TxxxxxxT 2016-01-19 11:09:05 PARENT\r\n        1284933855                                           1262827435 TxxxxxxT 2016-02-11 11:18:52 PARENT\r\n          1299685647                                         1262827435 TxxxxxxT 2016-02-23 13:40:18 ORPHAN\r\n          1299837528                                         1262827435 TxxxxxxT 2016-02-23 17:08:36 CURRENT\r\n          1299767977                                         1262827435 TxxxxxxT 2016-02-23 15:34:13 ORPHAN\r\n          1298269640                                         1262827435 TxxxxxxT 2016-02-22 13:16:46 ORPHAN\r\n            1299517249                                       1262827435 TxxxxxxT 2016-02-23 10:37:29 ORPHAN<\/pre>\n<p>In this case, again, it depends whether the DBID and DB_KEY are the same as the current incarnation or not.<\/p>\n<p><strong>What do you need to delete?<\/strong><\/p>\n<p>Basically:<\/p>\n<ul>\n<li>Incarnations of databases that no longer exist<\/li>\n<li>Incarnations of existing databases where the database has a more recent current incarnation, only if there are no backups still in the retention window<\/li>\n<\/ul>\n<p><strong>How to do it?<\/strong><\/p>\n<p>In order to be sure 100% that you can delete an incarnation, you have to verify that there are no recent backups (for instance, no backups more rercent than the current recovery window for that database). If the database does not have a specified recovery window but rather a default &#8220;CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default&#8221;, it is a bit more problematic&#8230; in this case let&#8217;s assume that we consider &#8220;old&#8221; an incarnation that does not backup since 1 year (365 days), ok?<\/p>\n<p><strong>Getting the last backup of each database<br \/>\n<\/strong><\/p>\n<p>Sadly, there is not a single table where you can verify that. You have to collect the information from several tables. I think <strong>bdf<\/strong>, <strong>al<\/strong>, <strong>cdf<\/strong>, <strong>bs<\/strong> would suffice in most cases.<\/p>\n<p>When you delete an incarnation you specify a db_key: you have to get the last backup for each db_key, with queries like this:<\/p>\n<pre class=\"lang:plsql decode:true \">SELECT dbinc_key\r\n     ,max(completion_time) max_al_time\r\n  FROM al\r\n    GROUP by dbinc_key;<\/pre>\n<p>Putting together all the tables:<\/p>\n<pre class=\"lang:plsql decode:true\">WITH\r\n   incs AS (\r\n      SELECT lpad(' ',2*(level-1))|| to_char(dbinc_key) AS dbinc_key_\r\n\t     ,dbinc_key\r\n         ,db_key\r\n\t     ,db_name\r\n\t     ,reset_time\r\n\t     ,dbinc_status\r\n      FROM rman.dbinc\r\n        START WITH parent_dbinc_key IS NULL\r\n      CONNECT BY PRIOR dbinc_key   = parent_dbinc_key\r\n        ORDER BY db_name, db_key, level\r\n    ),\r\n   mbdf AS (\r\n      SELECT dbinc_key\r\n\t     ,max(completion_time) max_bdf_time\r\n\t  FROM bdf\r\n\t     GROUP by dbinc_key\r\n   ),\r\n   mbrl AS (\r\n      SELECT dbinc_key\r\n\t     ,max(next_time) max_brl_time\r\n\t  FROM brl\r\n\t     GROUP by dbinc_key\r\n   ),\r\n   mal AS (\r\n      SELECT dbinc_key\r\n\t     ,max(completion_time) max_al_time\r\n\t  FROM al\r\n\t     GROUP by dbinc_key\r\n   ),\r\n   mcdf AS (\r\n      SELECT dbinc_key\r\n\t     ,max(completion_time) max_cdf_time\r\n\t  FROM cdf\r\n\t     GROUP by dbinc_key\r\n   ),\r\n   mbs AS (\r\n      SELECT db_key\r\n\t     ,max(completion_time) max_bs_time\r\n\t  FROM bs\r\n\t     GROUP by db_key\r\n   )\r\nSELECT incs.db_key, db.db_id, db.REG_DB_UNIQUE_NAME AS db_uq_name , incs.db_name, dbinc_status\r\n  ,greatest(\r\n     nvl(max_bdf_time,to_date('1970-01-01','YYYY-MM-DD')),\r\n\t nvl(max_brl_time,to_date('1970-01-01','YYYY-MM-DD')),\r\n\t nvl(max_al_time,to_date('1970-01-01','YYYY-MM-DD')),\r\n\t nvl(max_cdf_time,to_date('1970-01-01','YYYY-MM-DD')),\r\n\t nvl(max_bs_time,to_date('1970-01-01','YYYY-MM-DD'))\r\n\t ) AS last_bck\r\nFROM incs\r\n  JOIN db ON (db.db_key=incs.db_key)\r\n  LEFT OUTER JOIN mbdf ON (incs.dbinc_key=mbdf.dbinc_key)\r\n  LEFT OUTER JOIN mcdf ON (incs.dbinc_key=mcdf.dbinc_key)\r\n  LEFT OUTER JOIN mbrl ON (incs.dbinc_key=mbrl.dbinc_key)\r\n  LEFT OUTER JOIN mal ON (incs.dbinc_key=mal.dbinc_key)\r\n  LEFT OUTER JOIN mbs ON (incs.db_key=mbs.db_key)\r\n;<\/pre>\n<p><strong>Getting the\u00a0 recovery window<\/strong><\/p>\n<p>The configuration information for each database is stored inside the <strong>conf<\/strong> table, but the retention information is stored in a VARCHAR2, either &#8216;TO RECOVERY WINDOW OF % DAYS&#8217; or &#8216;TO REDUNDANCY %&#8217;<\/p>\n<p>You need to convert it to a number when the retention policy is recovery windows, otherwise you default it to 365 days wher the redundancy is used. You can add a column and a join to the query:<\/p>\n<pre class=\"lang:plsql decode:true\">-- new column in the projection\r\n,nvl(to_number(substr(c.value,23,length(c.value)-27)),365) as days\r\n\r\n-- new join in the \"from\"\r\nLEFT OUTER JOIN conf c ON (c.db_key=incs.db_key AND c.NAME = 'RETENTION POLICY' AND value LIKE 'TO RECOVERY WINDOW OF %')<\/pre>\n<p>and eventually, either display if it the incarnation is no more used or filter by usage:<\/p>\n<pre class=\"lang:plsql decode:true \">-- display if the incarnation is still used\r\n,CASE WHEN\r\n     greatest(\r\n     nvl(max_bdf_time,to_date('1970-01-01','YYYY-MM-DD')),\r\n\t nvl(max_brl_time,to_date('1970-01-01','YYYY-MM-DD')),\r\n\t nvl(max_al_time,to_date('1970-01-01','YYYY-MM-DD')),\r\n\t nvl(max_cdf_time,to_date('1970-01-01','YYYY-MM-DD')),\r\n\t nvl(max_bs_time,to_date('1970-01-01','YYYY-MM-DD'))\r\n\t ) &lt; (sysdate - nvl(to_number(substr(c.value,23,length(c.value)-27)),365))\r\n\t THEN 'OLD ONE!'\r\n\t ELSE 'USED'\r\n  END AS USED\r\n\r\n-- or filter it\r\nWHERE greatest(\r\n     nvl(max_bdf_time,to_date('1970-01-01','YYYY-MM-DD')),\r\n\t nvl(max_brl_time,to_date('1970-01-01','YYYY-MM-DD')),\r\n\t nvl(max_al_time,to_date('1970-01-01','YYYY-MM-DD')),\r\n\t nvl(max_cdf_time,to_date('1970-01-01','YYYY-MM-DD')),\r\n\t nvl(max_bs_time,to_date('1970-01-01','YYYY-MM-DD'))\r\n\t ) &lt; (sysdate - nvl(to_number(substr(c.value,23,length(c.value)-27)),365))\r\n<\/pre>\n<p><strong>Delete the incarnations!<\/strong><\/p>\n<p>You can delete the incarnations with this procedure:<\/p>\n<pre class=\"lang:plsql decode:true \">BEGIN\r\n  dbms_rcvcat.unregisterdatabase(DB_KEY=&gt;:db_key, DB_ID=&gt;:db_id);\r\nEND;<\/pre>\n<p>This procedure will raise an exception (-20001, &#8216;Database not found&#8217;) when a database does not exist anymore (either already deleted by this procedure or by another session), so you need to handle it.<\/p>\n<p>Putting all together:<\/p>\n<pre class=\"lang:plsql decode:true \">col db_uq_name for a12\r\ncol dbinc_key_ for a30\r\nset pages 100 lines 200\r\nset serveroutput on\r\nDECLARE\r\n\r\n  e_dbatabase_not_found EXCEPTION;\r\n  PRAGMA EXCEPTION_INIT (e_dbatabase_not_found, -20001);\r\n\r\n  CURSOR c_old_incarnations IS\r\n  WITH\r\n   incs AS (\r\n      SELECT lpad(' ',2*(level-1))|| to_char(dbinc_key) AS dbinc_key_\r\n             ,dbinc_key\r\n         ,db_key\r\n             ,db_name\r\n             ,reset_time\r\n             ,dbinc_status\r\n      FROM rman.dbinc\r\n        START WITH parent_dbinc_key IS NULL\r\n      CONNECT BY PRIOR dbinc_key   = parent_dbinc_key\r\n        ORDER BY db_name, db_key, level\r\n    ),\r\n   mbdf AS (\r\n      SELECT dbinc_key\r\n             ,max(completion_time) max_bdf_time\r\n          FROM bdf\r\n             GROUP by dbinc_key\r\n   ),\r\n   mbrl AS (\r\n      SELECT dbinc_key\r\n             ,max(next_time) max_brl_time\r\n          FROM brl\r\n             GROUP by dbinc_key\r\n   ),\r\n   mal AS (\r\n      SELECT dbinc_key\r\n             ,max(completion_time) max_al_time\r\n          FROM al\r\n             GROUP by dbinc_key\r\n   ),\r\n   mcdf AS (\r\n      SELECT dbinc_key\r\n             ,max(completion_time) max_cdf_time\r\n          FROM cdf\r\n             GROUP by dbinc_key\r\n   ),\r\n   mbs AS (\r\n      SELECT db_key\r\n             ,max(completion_time) max_bs_time\r\n          FROM bs\r\n             GROUP by db_key\r\n   )\r\n  SELECT distinct incs.db_key, db.db_id, db.REG_DB_UNIQUE_NAME AS db_uq_name , incs.db_name\r\n  ,greatest(\r\n     nvl(max_bdf_time,to_date('1970-01-01','YYYY-MM-DD')),\r\n         nvl(max_brl_time,to_date('1970-01-01','YYYY-MM-DD')),\r\n         nvl(max_al_time,to_date('1970-01-01','YYYY-MM-DD')),\r\n         nvl(max_cdf_time,to_date('1970-01-01','YYYY-MM-DD')),\r\n         nvl(max_bs_time,to_date('1970-01-01','YYYY-MM-DD'))\r\n         ) AS last_bck\r\n  ,CASE WHEN\r\n     greatest(\r\n     nvl(max_bdf_time,to_date('1970-01-01','YYYY-MM-DD')),\r\n         nvl(max_brl_time,to_date('1970-01-01','YYYY-MM-DD')),\r\n         nvl(max_al_time,to_date('1970-01-01','YYYY-MM-DD')),\r\n         nvl(max_cdf_time,to_date('1970-01-01','YYYY-MM-DD')),\r\n         nvl(max_bs_time,to_date('1970-01-01','YYYY-MM-DD'))\r\n         ) &lt; (sysdate - nvl(to_number(substr(c.value,23,length(c.value)-27)),365))\r\n         THEN 'OLD ONE!'\r\n         ELSE 'USED'\r\n  END AS USED\r\nFROM incs\r\n  JOIN db ON (db.db_key=incs.db_key)\r\n  LEFT OUTER JOIN mbdf ON (incs.dbinc_key=mbdf.dbinc_key)\r\n  LEFT OUTER JOIN mcdf ON (incs.dbinc_key=mcdf.dbinc_key)\r\n  LEFT OUTER JOIN mbrl ON (incs.dbinc_key=mbrl.dbinc_key)\r\n  LEFT OUTER JOIN mal ON (incs.dbinc_key=mal.dbinc_key)\r\n  LEFT OUTER JOIN mbs ON (incs.db_key=mbs.db_key)\r\n  LEFT OUTER JOIN conf c ON (c.db_key=incs.db_key AND c.NAME = 'RETENTION POLICY' AND value LIKE 'TO RECOVERY WINDOW OF %')\r\n WHERE 1=1\r\n AND greatest(\r\n     nvl(max_bdf_time,to_date('1970-01-01','YYYY-MM-DD')),\r\n         nvl(max_brl_time,to_date('1970-01-01','YYYY-MM-DD')),\r\n         nvl(max_al_time ,to_date('1970-01-01','YYYY-MM-DD')),\r\n         nvl(max_cdf_time,to_date('1970-01-01','YYYY-MM-DD')),\r\n         nvl(max_bs_time,to_date('1970-01-01','YYYY-MM-DD'))\r\n         ) &lt; (sysdate - nvl(to_number(substr(c.value,23,length(c.value)-27)),365))\r\n  order by 4,3, 5\r\n  ;\r\n\r\n   r_old_incarnation    c_old_incarnations%ROWTYPE;\r\n\r\n   BEGIN\r\n        OPEN c_old_incarnations;\r\n        LOOP\r\n                FETCH c_old_incarnations INTO r_old_incarnation;\r\n                EXIT WHEN  c_old_incarnations%NOTFOUND;\r\n\r\n                dbms_output.put('Purging db: ' || r_old_incarnation.db_name);\r\n                dbms_output.put('       IncKey: ' || r_old_incarnation.db_key);\r\n                dbms_output.put('       DBID: ' || r_old_incarnation.db_id);\r\n                dbms_output.put_line('  Last BCK: ' || to_char(r_old_incarnation.last_bck,'YYYY-MM-DD'));\r\n                BEGIN\r\n                   dbms_rcvcat.unregisterdatabase(DB_KEY =&gt; r_old_incarnation.db_key, DB_ID =&gt; r_old_incarnation.db_id);\r\n                EXCEPTION\r\n                    WHEN e_dbatabase_not_found THEN\r\n                    dbms_output.put_line('Database already unregistered');\r\n                END;\r\n        END LOOP;\r\n\r\n        CLOSE c_old_incarnations;\r\n\t\r\nEND;\r\n\/<\/pre>\n<p>I have used this procedure today for the first time and it worked like a charm.<\/p>\n<p>However, if you have any adjustment or suggestion, don&#8217;t hesitate to comment it \ud83d\ude42<\/p>\n<p>HTH<\/p>\n","protected":false},"excerpt":{"rendered":"<p>First, let me apologize because every post in my blog starts with a disclaimer&#8230; but sometimes it is really necessary. \ud83d\ude09 Disclaimer: this blog post contains PL\/SQL code that deletes incarnations from your RMAN recovery catalog. Please DON&#8217;T use it &hellip; <a href=\"https:\/\/www.ludovicocaldara.net\/dba\/rcvcat-housekeeping\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[326,3,52,330,132],"tags":[300,296,297,301,44,258,299,298],"class_list":["post-1542","post","type-post","status-publish","format-standard","hentry","category-oracle","category-oracledb","category-12c","category-oracle-inst-upg","category-triblog","tag-dbms_rcvcat","tag-housekeeping","tag-purge","tag-rcvcat","tag-rman","tag-rman-catalog","tag-unregister","tag-unregister-database"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.ludovicocaldara.net\/dba\/wp-json\/wp\/v2\/posts\/1542","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ludovicocaldara.net\/dba\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ludovicocaldara.net\/dba\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ludovicocaldara.net\/dba\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ludovicocaldara.net\/dba\/wp-json\/wp\/v2\/comments?post=1542"}],"version-history":[{"count":9,"href":"https:\/\/www.ludovicocaldara.net\/dba\/wp-json\/wp\/v2\/posts\/1542\/revisions"}],"predecessor-version":[{"id":1551,"href":"https:\/\/www.ludovicocaldara.net\/dba\/wp-json\/wp\/v2\/posts\/1542\/revisions\/1551"}],"wp:attachment":[{"href":"https:\/\/www.ludovicocaldara.net\/dba\/wp-json\/wp\/v2\/media?parent=1542"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ludovicocaldara.net\/dba\/wp-json\/wp\/v2\/categories?post=1542"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ludovicocaldara.net\/dba\/wp-json\/wp\/v2\/tags?post=1542"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}