{"id":4170,"date":"2023-09-13T14:13:41","date_gmt":"2023-09-13T14:13:41","guid":{"rendered":"https:\/\/oracleconraul.com\/?p=4170"},"modified":"2024-02-28T22:37:50","modified_gmt":"2024-02-28T22:37:50","slug":"recuperar-base-de-datos-mismo-host-con-rman","status":"publish","type":"post","link":"https:\/\/oracleconraul.com\/index.php\/2023\/09\/13\/recuperar-base-de-datos-mismo-host-con-rman\/","title":{"rendered":"Recuperar Base de datos en el mismo Host con Rman"},"content":{"rendered":"\n<p>Aunque suele ser menos habitual tener que recuperar una base de datos en la misma m\u00e1quina que en un host diferente,  en esta entrada vamos a indicar los pasos necesarios para poder recuperar una base de datos en el mismo host, en este caso no estamos usando ASM como almacenamiento. La base de datos origen se llama \u00abtest\u00bb y nuestra copia se llamar\u00e1 \u00abtestcopy\u00bb.<\/p>\n\n\n\n<p>Para ello partimos de un <strong>backup <\/strong>realizado con anterioridad.<\/p>\n\n\n\n<p>En nuestro caso hemos lanzado el siguiente:<\/p>\n\n\n\n<p class=\"has-ast-global-color-8-color has-ast-global-color-4-background-color has-text-color has-background has-small-font-size\">RMAN&gt; run {<br> allocate channel t1 type disk;<br> allocate channel t2 type disk;<br> allocate channel t3 type disk;<br> allocate channel t4 type disk;<br> backup format &#8216;\/u01\/backup\/%U&#8217;  (base de datos);<br> backup format &#8216;\/u01\/backup\/%U&#8217;  (archivelog all);<br> backup format &#8216;\/u01\/backup\/%U&#8217; current controlfile;<br> }<\/p>\n\n\n\n<p>Antes de comenzar, vamos a crear la <strong>entrada en el oratab <\/strong>de la nueva base de datos.<br>Editamos el fichero oratab y a\u00f1adimos la nueva base de datos:<\/p>\n\n\n\n<p class=\"has-ast-global-color-8-color has-ast-global-color-4-background-color has-text-color has-background has-small-font-size\"><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-ast-global-color-8-color\">vi \/etc\/oratab<\/mark><br><br>test:\/u01\/sw:N<br><strong>testcopy:\/u01\/sw:N<\/strong><\/p>\n\n\n\n<p>El primer paso es<strong> copiar el pfile de la base de datos actual<\/strong>, en nuestro caso \u00abtest\u00bb con el que arrancaremos nuestra base de datos, basta con los m\u00ednimos par\u00e1metros necesarios. Un fichero init con los par\u00e1metros m\u00ednimos ser\u00eda algo parecido a lo que muestro aqu\u00ed posteriormente.  <br>Muy importante fijarse en los par\u00e1metros \u00abdb_create_file_dest\u00bb donde indicamos donde se guardar\u00e1n nuestros datos,  en este escenario es muy importante, ya que estamos recuperando la base de datos en un mismo host donde tenemos nuestra base de datos origen, tambi\u00e9n es muy importante el par\u00e1metro \u00abdb_unique_name\u00bb, que diferenciar\u00e1 nuestra copia de la original.<\/p>\n\n\n\n<p class=\"has-ast-global-color-2-color has-ast-global-color-4-background-color has-text-color has-background has-small-font-size\">[oracle@localhost dbs]$ cat inittestcopy.ora<br>*.compatible=&#8217;19.0.0&#8242;<br>*.db_block_size=8192<br>*.db_create_file_dest=&#8217;\/data\/testcopy\/&#8217;<br>*.db_name=&#8217;test&#8217;<br>*.db_unique_name=&#8217;testcopy&#8217;<br>*.diagnostic_dest=&#8217;\/u01\/app\/oracle&#8217;<br>*.open_cursors=300<br>*.pga_aggregate_target=797m<br>*.processes=300<br>*.remote_login_passwordfile=&#8217;EXCLUSIVE&#8217;<br>*.sga_target=2388m<br>*.undo_tablespace=&#8217;UNDOTBS1&#8242;<\/p>\n\n\n\n<p><strong>Creamos el spfile<\/strong> de nuestra nueva base de datos a trav\u00e9s del pfile.<\/p>\n\n\n\n<p class=\"has-ast-global-color-8-color has-ast-global-color-4-background-color has-text-color has-background has-small-font-size\">SQL&gt; create spfile from pfile=&#8217;inittestcopy.ora&#8217;;<br>File created.<br><\/p>\n\n\n\n<p>Comprobamos que el spfile se ha creado correctamente:<\/p>\n\n\n\n<p class=\"has-ast-global-color-8-color has-ast-global-color-4-background-color has-text-color has-background has-small-font-size\">SQL&gt; startup nomount<br><br>ORACLE instance started.<br>Total System Global Area 2516581464 bytes<br>Fixed Size 8899672 bytes<br>Variable Size 536870912 bytes<br>Database Buffers 1962934272 bytes<br>Redo Buffers 7876608 bytes<br><br>SQL&gt; show parameter pfile<br><br>NAME        TYPE          VALUE<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br>spfile         string        \/u01\/sw\/dbs\/<strong>spfiletestcopy.ora<\/strong><br><br><\/p>\n\n\n\n<p><br><strong>Restauramos el controlfile:<\/strong><\/p>\n\n\n\n<p>Nos conectamos a RMAN y recuperamos el controlfile.<br>Nota. Podemos localizar el backup del controlfile, conect\u00e1ndonos a la base de datos \u00aboriginal\u00bb, o base de datos a copiar, en nuestro caso <strong>test <\/strong>y ejecutar el siguiente comando.<\/p>\n\n\n\n<p class=\"has-ast-global-color-8-color has-ast-global-color-4-background-color has-text-color has-background has-small-font-size\">RMAN&gt; list backup of controlfile;<\/p>\n\n\n\n<p>Conectados ya a la base de datos <strong>testcopy<\/strong>, a trav\u00e9s de rman, recuperamos  la copia del controlfile que hemos localizado con anterioridad.<\/p>\n\n\n\n<p class=\"has-ast-global-color-8-color has-ast-global-color-4-background-color has-text-color has-background has-small-font-size\">RMAN&gt; restore controlfile from &#8216;\/u01\/backup\/0e267imt_1_1&#8217;;<br>Starting restore at 12-SEP-23<br>using target database control file instead of recovery catalog<br>allocated channel: ORA_DISK_1<br>channel ORA_DISK_1: SID=17 device type=DISK<br>channel ORA_DISK_1: restoring control file<br>channel ORA_DISK_1: restore complete, elapsed time: 00:00:03<br>output file name=\/data\/testcopy\/TESTCOPY\/controlfile\/o1_mf_lj1qob64_.ctl<br>Finished restore at 12-SEP-23<br><\/p>\n\n\n\n<p><strong>Montamos la base de datos:<\/strong><\/p>\n\n\n\n<p class=\"has-ast-global-color-8-color has-ast-global-color-4-background-color has-text-color has-background has-small-font-size\">RMAN&gt; alter database mount;<br>released channel: ORA_DISK_1<br>Statement processed<\/p>\n\n\n\n<p>Antes de lanzar la recuperaci\u00f3n de la base de datos, vamos a asegurarnos que los<strong> ficheros de redo logs<\/strong> se encuentran en la ruta adecuada. Esto lo podemos hacer con la siguiente query:<\/p>\n\n\n\n<p class=\"has-ast-global-color-8-color has-ast-global-color-4-background-color has-text-color has-background has-small-font-size\">&nbsp;set lines 200<br>&nbsp;&nbsp;&nbsp;&nbsp; col member format a60<br>&nbsp;&nbsp;&nbsp;&nbsp; select a.thread#,a.group#,b.type,b.member,a.bytes\/1048576<br>&nbsp;&nbsp;&nbsp;&nbsp; from v$log a,v$logfile b<br>&nbsp;&nbsp;&nbsp;&nbsp; where a.group#=b.group# order by a.group#;<\/p>\n\n\n\n<p>Si los redo logs apuntan a la antigua base de datos hay que cambiarlos a la ubicaci\u00f3n que tendr\u00e1n en nuestra nueva base de datos. Para ello lanzamos el siguiente comando:<\/p>\n\n\n\n<p class=\"has-ast-global-color-8-color has-ast-global-color-4-background-color has-text-color has-background has-small-font-size\">SQL&gt; alter database rename file &#8216;&lt;old file location and name&gt;&#8217; to &#8216;&lt;new location and name&gt;&#8217;;<\/p>\n\n\n\n<p>Puedes ayudarte con alguna query como la siguiente para hacerlo de forma autom\u00e1tica;<\/p>\n\n\n\n<p class=\"has-ast-global-color-8-color has-ast-global-color-4-background-color has-text-color has-background has-small-font-size\">select &#8216;ALTER DATABASE RENAME FILE \u00bb&#8217;||member||\u00bb&#8217; TO \u00bb&lt;localizaci\u00f3n destino&gt; ||substr(member,INSTR(member,&#8217;\\&#8217;,-1,1),length(member)) ||\u00bb&#8217;;&#8217; from v$logfile;<\/p>\n\n\n\n<p>Ejecutamos el rename de  los datafiles y lo comprobamos con la query lanzada anteriormente para asegurarnos que el cambio de ubicaci\u00f3n es el correcto:<\/p>\n\n\n\n<p class=\"has-ast-global-color-8-color has-ast-global-color-4-background-color has-text-color has-background has-small-font-size\">ALTER DATABASE RENAME FILE &#8216;\/data\/test\/TEST\/onlinelog\/o1_mf_3_hz8q3jd1_.log&#8217; TO &#8216;\/data\/<strong>testcopy<\/strong>\/TESTCOPY\/redolog\/o1_mf_3_hz8q3jd1_.log&#8217;;<br>ALTER DATABASE RENAME FILE &#8216;\/u01\/app\/oracle\/fast_recovery_area\/TEST\/onlinelog\/o1_mf_3_hz8q4lbd_.log&#8217; TO &#8216;\/data\/testcopy\/TESTCOPY\/redolog\/o1_mf_3_hz8q4lbd_.log&#8217;;<br>ALTER DATABASE RENAME FILE &#8216;\/data\/test\/TEST\/onlinelog\/o1_mf_2_hz8q3jcc_.log&#8217; TO &#8216;\/data\/testcopy\/TESTCOPY\/redolog\/o1_mf_2_hz8q3jcc_.log&#8217;;<br>ALTER DATABASE RENAME FILE &#8216;\/u01\/app\/oracle\/fast_recovery_area\/TEST\/onlinelog\/o1_mf_2_hz8q4qgp_.log&#8217; TO &#8216;\/data\/testcopy\/TESTCOPY\/redolog\/o1_mf_2_hz8q4qgp_.log&#8217;;<br>ALTER DATABASE RENAME FILE &#8216;\/data\/test\/TEST\/onlinelog\/o1_mf_1_hz8q3jbo_.log&#8217; TO &#8216;\/data\/testcopy\/TESTCOPY\/redolog\/o1_mf_1_hz8q3jbo_.log&#8217;;<br>ALTER DATABASE RENAME FILE &#8216;\/u01\/app\/oracle\/fast_recovery_area\/TEST\/onlinelog\/o1_mf_1_hz8q4lfp_.log&#8217; TO &#8216;\/data\/testcopy\/TESTCOPY\/redolog\/o1_mf_1_hz8q4lfp_.log&#8217;;<\/p>\n\n\n\n<p class=\"has-ast-global-color-8-color has-ast-global-color-4-background-color has-text-color has-background has-small-font-size\">SQL&gt; set lines 200<br>col member format a60<br>select a.thread#,a.group#,b.type,b.member,a.bytes\/1048576<br>from v$log a,v$logfile b<br>where a.group#=b.group# order by a.group#;SQL&gt; SQL&gt; 2 3<br>THREAD# GROUP# TYPE MEMBER A.BYTES\/1048576<br><br>1      1 ONLINE  \/data\/<strong>testcopy<\/strong>\/TESTCOPY\/redolog\/o1_mf_1_hz8q4lfp_.log<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Realizamos la<strong> restauraci\u00f3n de la base de datos<\/strong>, a trav\u00e9s del backup de RMAN.<\/p>\n\n\n\n<p>Con la base destino (testcopy), montada lanzamos el siguiente comando:<\/p>\n\n\n\n<p class=\"has-ast-global-color-8-color has-ast-global-color-6-background-color has-text-color has-background has-small-font-size\">run{<br>set newname for database to &#8216;\/data\/tescopy\/TESCOPY\/%U&#8217;;<br>RESTORE DATABASE;<br>SWITCH DATAFILE ALL;<br>RECOVER DATABASE;<br>}<\/p>\n\n\n\n<p>El comando \u00abset newname for database to\u00bb, indica d\u00f3nde queremos que se almacenen nuestros ficheros de nuestra nueva BBDD, esto puede realizarse de forma manual, renombrando cada datafile o de la forma expuesta en este documento.<br><br>Si todo es correcto, se tendr\u00e1 una salida similar a esta:<\/p>\n\n\n\n<p class=\"has-ast-global-color-8-color has-ast-global-color-6-background-color has-text-color has-background has-small-font-size\">Starting restore at 13-SEP-23<br>using target database control file instead of recovery catalog<br>allocated channel: ORA_DISK_1<br>channel ORA_DISK_1: SID=237 device type=DISK<br>channel ORA_DISK_1: starting datafile backup set restore<br>channel ORA_DISK_1: specifying datafile(s) to restore from backup set<br>channel ORA_DISK_1: restoring datafile 00004 to \/data\/tescopy\/TESCOPY<br>.<br>.<br>starting media recovery<br>archived log for thread 1 with sequence 23 is already on disk as file \/u01\/app\/oracle\/fast_recovery_area\/TEST\/archivelog\/2023_09_12\/o1_mf_1_23_lj1pkgkj_.arc<br>archived log file name=\/u01\/app\/oracle\/fast_recovery_area\/TEST\/archivelog\/2023_09_12\/o1_mf_1_23_lj1pkgkj_.arc thread=1 sequence=23<br>unable to find archived log<br>archived log thread=1 sequence=24<br>RMAN-00571: ===========================================================<br>RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============<br>RMAN-00571: ===========================================================<br>RMAN-03002: failure of recover command at 09\/13\/2023 13:15:18<br>RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 24 and starting SCN of 313766<br><\/p>\n\n\n\n<p>En esta salida indica que se ha recuperado correctamente la base de datos y que se ha aplicado el \u00faltimo archive disponible.<br>En este momento ya podemos<strong> abrir nuestra base de datos<\/strong>.<\/p>\n\n\n\n<p class=\"has-ast-global-color-8-color has-ast-global-color-6-background-color has-text-color has-background has-small-font-size\">SQL&gt; alter database open resetlogs;<br>Database altered.<\/p>\n\n\n\n<p>Comprobamos que todo es correcto:<\/p>\n\n\n\n<p class=\"has-ast-global-color-8-color has-ast-global-color-6-background-color has-text-color has-background has-small-font-size\">SQL&gt; select name from v$datafile;<br><br>\/data<strong>\/tescopy\/TESCOPY\/<\/strong>data_D-TEST_TS-SYSTEM_FNO-1<br>\/data\/tescopy\/TESCOPY\/data_D-TEST_TS-SYSAUX_FNO-3<br>\/data\/tescopy\/TESCOPY\/data_D-TEST_TS-UNDOTBS1_FNO-4<br>\/data\/tescopy\/TESCOPY\/data_D-TEST_TS-USERS_FNO-7<br><\/p>\n\n\n\n<p class=\"has-ast-global-color-8-color has-ast-global-color-6-background-color has-text-color has-background has-small-font-size\">SQL&gt; Select member from v$logfile;<br><br>\/data<strong>\/testcopy\/TESTCOPY\/<\/strong>onlinelog\/o1_mf_3_lj37cp5g_.log<br>\/data\/testcopy\/TESTCOPY\/onlinelog\/o1_mf_2_lj37cp4r_.log<br>\/data\/testcopy\/TESTCOPY\/onlinelog\/o1_mf_1_lj37cp41_.log<br><\/p>\n\n\n\n<p>En este \u00faltimo punto, ya tendr\u00edamos la base de datos recuperada, en este caso puede ser interesante cambiar renombrar la base de datos, ya que el DBID y el DB_NAME de la base de datos original y la copia ser\u00e1 el mismo. Para ello recomiendo realizarlo con la herramienta NID, mejor que de forma manual.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Aunque suele ser menos habitual tener que recuperar una base de datos en la misma m\u00e1quina que en un host diferente, en esta entrada vamos a indicar los pasos necesarios para poder recuperar una base de datos en el mismo host, en este caso no estamos usando ASM como almacenamiento. La base de datos origen<\/p>\n<div class=\"more-link\">\n\t\t\t\t <a href=\"https:\/\/oracleconraul.com\/index.php\/2023\/09\/13\/recuperar-base-de-datos-mismo-host-con-rman\/\" class=\"link-btn theme-btn\"><span>Read More <\/span> <i class=\"fa fa-caret-right\"><\/i><\/a>\n\t\t\t<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"wpupg_custom_link":[],"wpupg_custom_link_behaviour":[],"wpupg_custom_link_nofollow":[],"wpupg_custom_image":[],"wpupg_custom_image_id":[],"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[14],"tags":[26],"class_list":["post-4170","post","type-post","status-publish","format-standard","hentry","category-oracle","tag-instalacion"],"_links":{"self":[{"href":"https:\/\/oracleconraul.com\/index.php\/wp-json\/wp\/v2\/posts\/4170","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/oracleconraul.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/oracleconraul.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/oracleconraul.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/oracleconraul.com\/index.php\/wp-json\/wp\/v2\/comments?post=4170"}],"version-history":[{"count":71,"href":"https:\/\/oracleconraul.com\/index.php\/wp-json\/wp\/v2\/posts\/4170\/revisions"}],"predecessor-version":[{"id":4592,"href":"https:\/\/oracleconraul.com\/index.php\/wp-json\/wp\/v2\/posts\/4170\/revisions\/4592"}],"wp:attachment":[{"href":"https:\/\/oracleconraul.com\/index.php\/wp-json\/wp\/v2\/media?parent=4170"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/oracleconraul.com\/index.php\/wp-json\/wp\/v2\/categories?post=4170"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/oracleconraul.com\/index.php\/wp-json\/wp\/v2\/tags?post=4170"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}