{"id":1679,"date":"2017-08-02T21:10:17","date_gmt":"2017-08-02T19:10:17","guid":{"rendered":"http:\/\/clemente.pamplona.name\/dba\/?p=1679"},"modified":"2017-08-18T21:30:47","modified_gmt":"2017-08-18T19:30:47","slug":"trucos-para-crear-un-dataguard-standby","status":"publish","type":"post","link":"http:\/\/clemente.pamplona.name\/dba\/trucos-para-crear-un-dataguard-standby\/","title":{"rendered":"Trucos para crear un dataguard standby"},"content":{"rendered":"<p>Si consultamos la documentaci\u00f3n de Oracle la creaci\u00f3n de un datagurard es algo facil\u00edsimo, pero a la hora de la verdad, siempre hay peque\u00f1os flecos de configuraci\u00f3n antes de la creaci\u00f3n que es lo que nos puede traer de cabeza, vamos a ver en esta entrada algunos puntos que mirar antes de empezar para que todo funcione.<\/p>\n<p>Suponemos que :<\/p>\n<ul>\n<li> EL SID de la base de datos va a ser cdbtest\n<li> A la base de datos primaria la llamaremos primary , su nombre \u00fanico ser\u00e1 <i>cdbtest<\/i>\n<li> A la base de datos standby la llamaremos standby ,su nombre \u00fanico ser\u00e1 <i>cdbtest_sdby<\/i>\n<\/ul>\n<h1> Pasos a llevar a cabo en primary<\/h1>\n<p>Se gun la <a href=\"https:\/\/docs.oracle.com\/cd\/B19306_01\/server.102\/b14239\/create_ps.htm#i70011\">documentaci\u00f3n de Oracle,<\/a> deber\u00eda de bastar con:<\/p>\n<p><a href=\"http:\/\/clemente.pamplona.name\/dba\/trucos-para-crear-un-dataguard-standby\/captura-de-pantalla-2017-08-02-a-las-9-59-06\/\" rel=\"attachment wp-att-1681\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/clemente.pamplona.name\/dba\/wp-content\/uploads\/2017\/08\/Captura-de-pantalla-2017-08-02-a-las-9.59.06.png\" alt=\"\" width=\"827\" height=\"359\" class=\"aligncenter size-full wp-image-1681\" \/><\/a>, pero siempre hay cosas que podemos ir haciendo para que todo vaya a la primera <\/p>\n<h2>Activar el standby file management <\/h2>\n<p>Mediante esta opci\u00f3n los cambios que llevemos a cabo en la primary database se llevaran a cabo en la standby<\/p>\n<pre>\r\nalter system set STANDBY_FILE_MANAGEMENT=AUTO ;\r\n\r\n<\/pre>\n<h2> Crear grupos de standby redo logs <\/h2>\n<p>Estos grupos ser\u00e1n necesarios en standby, si los tenemos creados en primary ademas solucionaremos antes de que ocurran los problemas en caso de switchover.<\/p>\n<p>La sintaxis es igual que la de la creaci\u00f3n de un grupo normal a\u00f1adiendo standby <\/p>\n<pre>\r\nalter database add standby logfile group 4  '\/u01\/app\/oracle\/oradata\/cdbtest\/standby_redo04.log' size 52428800;\r\n<\/pre>\n<p>Hay que crear un  grupo de standby redo log file mas que los grupos de redo logs normales.<\/p>\n<h2> Configurar el tnsnames del servidor <\/h2>\n<p>Este es uno de los puntos importantes, el servidor debe de ser capaz de acceder por oraclenet al standby.<br \/>\nDado que los dos SID van a ser iguales, aconsejamos el poner una entrada clara en el listener.ora, en nuestro caso los llamaremos exactamente igual que el DB_UNIQU_NAME que es <i>CDBTEST_STDBY<\/i> <\/p>\n<pre>\r\nCDBTEST_STANDBY =\r\n  (DESCRIPTION =\r\n    (ADDRESS = (PROTOCOL = TCP)(HOST = standby.pamplona.name)(PORT = 1521))\r\n    (CONNECT_DATA =\r\n      (SERVER = DEDICATED)\r\n      (SERVICE_NAME = cdbtest)\r\n    )\r\n  )\r\n<\/pre>\n<p>Adem\u00e1s de esta entrada, deber\u00e1 de haber una entrada para el LOCAL_LISTENER,la teor\u00eda indica que esto ya deber\u00eda de estar configurado, pero la realidad a veces es distinta, por lo que nos aseguraremos que la variable <i>LOCAL_LISTENER<\/i>  de nuestra base de datos este correctamente configurada y tenga su entrada en el nsnames.ora . <\/p>\n<pre>\r\n\r\nLISTENER_CDBTEST =\r\n  (ADDRESS = (PROTOCOL = TCP)(HOST = alone.pamplona.name)(PORT = 1521))\r\n<\/pre>\n<h2> Configurar parametros en spfile <\/h2>\n<p>Antes de proseguir, <b>es obligatorio el uso de spfile <\/b>, la creaci\u00f3n de la replica va a ser mediante RMAN, por lo que, en caso de usar file fallar\u00eda la creaci\u00f3n del spfile en standby <\/p>\n<p>Los par\u00e1metros que hemos de poner son:<\/p>\n<h3> DB_UNIQUE_NAME<\/h3>\n<p>Este par\u00e1metro no es obligatorio en el primary, pero es recomendable, por lo que lo pondremos <\/p>\n<pre>\r\nalter system set db_unique_name='cdbtest' scope=spfile sid='*';\r\n<\/pre>\n<h3>LOG_ARCHIVE_CONFIG<\/h3>\n<p>LOG_ARCHIVE_CONFIG  habilita o deshabita la recepcion\/envio  de los redo, pero lo que realmente nos interesa es que especifica para cada una de las bases de datos del Dataguard los nombres \u00fanicos de las mismas (DB_UNIQUE_NAME)<\/p>\n<pre>\r\nalter system LOG_ARCHIVE_CONFIG='DG_CONFIG=(cdbtest,cdbtest_stby)'\r\n<\/pre>\n<h3>LOG_ARCHIVE_DEST_X<\/h3>\n<p>Otro de los valores que cambiaremos es la ubicaci\u00f3n de los redo logs, aqu\u00ed indicaremos donde va el primary y el standby, as\u00ed como los casos.<\/p>\n<pre>\r\nALTER SYSTEM SET LOG_ARCHIVE_DEST_1= 'LOCATION=\/u01\/app\/oracle\/oradata\/cdbtest\/archivelog\r\n  VALID_FOR=(ALL_LOGFILES,ALL_ROLES)';\r\nALTER SYSTEM SET log_archive_dest_2='service=CDBTEST_STANDBY ASYNC NOAFFIRM delay=0 optional compression=disable max_failure=0 max_connections=1 reopen=300 net_timeout=30 DB_UNIQUE_NAME=cdbtest_sdby valid_for=(online_logfile,all_roles)' ;\r\n<\/pre>\n<h1> Configuraciones en el servidor de Standby<\/h1>\n<p>Estas configuraciones son seguramente las que mas nos hagan fallar en el proceso, ya que en muchos documentos se dejan como algo que se asume ya est\u00e1.<br \/>\nLas configuraciones son:<\/p>\n<h2>Configuraciones de tnsnames.ora<\/h2>\n<p>Este es posiblemente el fichero que vaya a marcar el \u00e9xito de nuestra acci\u00f3n a la primera, deber\u00e1 de contar con las lineas:<\/p>\n<ul>\n<li><b>LOCAL_LISTENER<\/b> deberemos de tener una entrada distinta a la de producci\u00f3n que fijaremos en la BBDD standby\n<li><b>BBDD primaria<\/b> debemos de tener una entrada que apunte a la BBDD primaria\n<li> <b>BBDD standby<\/b>debemos de tener una entrada que apunte a la BBDD standby\n<\/ul>\n<p>LISTENER_CDBTEST_STANDBY =<br \/>\n (ADDRESS = (PROTOCOL = TCP)(HOST = standby.pamplona.name)(PORT = 1521))<\/p>\n<p>CDBTEST_PRIMARY =<br \/>\n  (DESCRIPTION =<br \/>\n    (ADDRESS = (PROTOCOL = TCP)(HOST = alone.pamplona.name)(PORT = 1521))<br \/>\n    (CONNECT_DATA =<br \/>\n      (SERVER = DEDICATED)<br \/>\n      (SERVICE_NAME = cdbtest)<br \/>\n    )<br \/>\n  )<\/p>\n<p>CDBTEST,CDBTEST_STANDBY =<br \/>\n  (DESCRIPTION =<br \/>\n    (ADDRESS = (PROTOCOL = TCP)(HOST = standby.pamplona.name)(PORT = 1521))<br \/>\n    (CONNECT_DATA =<br \/>\n      (SERVER = DEDICATED)<br \/>\n      (SID = cdbtest)<br \/>\n    )<br \/>\n)<\/p>\n<p><font color=red>IMPORTANTE:<\/font>Si miramos con atenci\u00f3n el c\u00f3digo que hemos puesto, veremos como el truco es que en el nodo standby  la conexi\u00f3n a <\/i> cdbtest<\/i> ser\u00e1 a si mismo, denotando el primario con otro nombre.<\/p>\n<h2> Configuraciones est\u00e1tica del listener <\/h2>\n<p>Adem\u00e1s de la configuraci\u00f3n standard del Listener, deberemos de definir una linea est\u00e1tica con la definici\u00f3n del standby.<\/p>\n<pre>\r\n# Configuracion estatica para el Dataguard\r\nSID_LIST_LISTENER=\r\n  (SID_LIST=\r\n    (SID_DESC= (DB_UNIQUE_NAME=cdbtest_sandby) (ORACLE_HOME=\/u01\/app\/oracle\/product\/12.1.0\/dbhome_1) \r\n(SID_NAME=cdbtest))\r\n<\/pre>\n<p>Si no tenemos esta opci\u00f3n, al intentar conectar con el rman obtendremos el error<\/p>\n<pre>\r\nRMAN-04006: error from auxiliary database: ORA-12528: TNS:listener: all appropriate instances are blocking new connections\r\n<\/pre>\n<h2> Creaci\u00f3n de las rutas f\u00edsicas de la BBDD <\/h2>\n<p>En el caso como es el del ejemplo que haya rutas f\u00edsicas para los datafiles, deber\u00e1n de estar creadas en el servidor de standby con los permisos necesarios.<\/p>\n<h2> Copiado de fichero init.ora<\/h2>\n<p>Aunque hemos dicho que es necesario que la base de datos primaria necesitaba de un fichero sprite, para poder arrancar nuestra base de datos de dataguard , la base de datos standby necesitar\u00e1 un init.ora m\u00ednimo para arrancar.<br \/>\nEste init.ora va a ser cambiado por el spfile que recuperaremos de la primary,<br \/>\nEs importante que tengamos:<\/p>\n<ul>\n<li>db_name\n<li>db_unique_name\n<li>local_listener\n<\/ul>\n<p>El resto como decimos lo eliminar\u00e1 substituir\u00e1 el proceso.<\/p>\n<pre>\r\n*.audit_file_dest='\/u01\/app\/oracle\/admin\/cdbtest\/adump'\r\n*.audit_trail='db'\r\n*.compatible='12.1.0.2.0'\r\n*.db_block_size=8192\r\n*.db_domain=''\r\n*.db_name='cdbtest'\r\n*.db_unique_name='cdbtest_sdby'\r\n*.diagnostic_dest='\/u01\/app\/oracle'\r\n*.dispatchers='(PROTOCOL=TCP) (SERVICE=cdbtestXDB)'\r\n*.enable_pluggable_database=true\r\n*.local_listener='LISTENER_CDBTEST_STANDBY'\r\n*.log_archive_config='DG_CONFIG=(cdbtest,cdbtest_sdby)'\r\n*.memory_target=4000m\r\n*.open_cursors=300\r\n*.processes=300\r\n*.remote_login_passwordfile='EXCLUSIVE'\r\n*.standby_file_management='AUTO'\r\n*.undo_tablespace='UNDOTBS1'\r\n<\/pre>\n<h1> Creaci\u00f3n de fichero de duplicado  <\/h1>\n<p>Llegamos al punto importante, el fichero de duplicado de aman.<br \/>\nEste proceso que era bastante costoso en las versiones 9 y 10 se ha facilitado much\u00edsimo en la 11 y 12.<\/p>\n<p>El fichero viene a ser algo as\u00ed <\/p>\n<pre>\r\nconnect target sys\/XXX@cdbtest_primary\r\nconnect auxiliary sys\/XXX@cdbtest\r\nDUPLICATE TARGET DATABASE\r\n  FOR STANDBY\r\n  FROM ACTIVE DATABASE\r\n  DORECOVER\r\nNOFILENAMECHECK\r\n  SPFILE\r\n\tSET db_unique_name=\"cdbtest_sdby\"  comment \"Base de datos sandby\"\r\n\tSET LOCAL_LISTENER=\"LISTENER_CDBTEST_STANDBY\"\r\n\tSET standby_file_management='AUTO'\r\n\tset log_file_name_convert='\/u01\/app\/oracle\/oradata\/cdbtest\/','\/u01\/app\/oracle\/oradata\/cdbtest\/'\r\n\r\n<\/pre>\n<p>Y los puntos importantes son:<\/p>\n<ul>\n<li><b>NOFILENAMECHECK<\/b>  Esto nos dejar\u00e1 todos los ficheros exactamente como en la primary\n<li><b> Apartado set <\/b> Aqui le decimos lo que va a cambiar del spfile respecto de la original, nosotros cambiamos:\n<ul>\n<li> <b>db_unique_name<\/b>. Indicamos el unique name de la standby\n<li> <b>LOCAL_LISTENER<\/b> Este es importante para que encuentre el listener de la maquina de la standby\n<li> <b>log_file_name_convert<\/b> La teor\u00eda indica que no deber\u00edamos de tener que indicar este par\u00e1metro, pero en diversas pruebas he tenido problemas con los redo log files, mediante esta cl\u00e1usula, indic\u00e1ndole el path de los redo log Files por duplicado (para que no cambie nada) los crea correctamente\n<\/ul>\n<\/ul>\n<h1> Duplicacion <\/h1>\n<p>Con esto solamente nos queda el proceso de duplicaci\u00f3n, que ya es algo tan sencillo como ejecutar en el servidor de standby <\/p>\n<pre>\r\n#!\/bin\/bash\r\nSET ORACLE_SID=cdbtest \r\nsqlplus \"\/as sysdba\" << EOF\r\nstartup nomount;\r\nexit;\r\nEOF\r\nrman cmdfile comandos_rman.cmd \r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Si consultamos la documentaci\u00f3n de Oracle la creaci\u00f3n de un datagurard es algo facil\u00edsimo, pero a la hora de la verdad, siempre hay peque\u00f1os flecos de configuraci\u00f3n antes de la creaci\u00f3n que es lo que nos puede traer de cabeza, &hellip; <a href=\"http:\/\/clemente.pamplona.name\/dba\/trucos-para-crear-un-dataguard-standby\/\">Sigue leyendo <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":[11,60,52],"tags":[249,254,248,806],"class_list":["post-1679","post","type-post","status-publish","format-standard","hentry","category-11g","category-12c","category-dataguard","tag-11g","tag-12c","tag-dummie","tag-standby"],"_links":{"self":[{"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/posts\/1679","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/comments?post=1679"}],"version-history":[{"count":23,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/posts\/1679\/revisions"}],"predecessor-version":[{"id":1744,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/posts\/1679\/revisions\/1744"}],"wp:attachment":[{"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/media?parent=1679"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/categories?post=1679"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/tags?post=1679"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}