Changes between Version 10 and Version 11 of manual_regente_windows_postgres9.1.3-1

Show
Ignore:
Timestamp:
10/25/13 18:11:33 (12 years ago)
Author:
roberto
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • manual_regente_windows_postgres9.1.3-1

    v10 v11  
    9999  * ALTER DATABASE nombre_basedatos SET statement_timeout=480000; 
    100100  * ALTER DATABASE nombre_basedatos SET enable_seqscan='off'; 
     101  * Comandos (en ventana cmd.exe) para restaurar una BD. 
     102{{{ 
     103#!div style="border: 0pt solid; text-align: left" 
     104   * Solo estructura,sin propietario y mensajes : 
     105C:\Archivos de programa\PostgreSQL\9.1\bin>pg_restore.exe --host localhost --port 5432 --username sistemas --dbname regente --no-owner --schema-only --verbose "C:\soft\regente.backup" 2>> "C:\logs\restore_struct.log" 
     106   * Sólo datos,sin propietario y deshabilitar disparador: 
     107C:\Archivos de programa\PostgreSQL\9.1\bin>pg_restore.exe --host localhost --port 5432 --username sistemas --dbname regente --data-only --disable-triggers --verbose "C:\soft\regente.backup" 2>> "C:\logs\restore_data.log" 
     108}}} 
     109 * Si el backup origen de datos tiene muchas instrucciones de replicación (de la tabla replicacion.rep_instrucciones) es posible que demore mucho la restauración de los datos y es posible también que dé errores, etc.[[BR]]Relacionado a lo anterior, para restaurar una base de datos, digamos para una sucursal nueva, no son necesarios los registros de replicacion.rep_instrucciones '''excepto por el último del idu_db de casa central'''.[[BR]]Se presentan a continuación los pasos para restaurar la base de datos tal como se explicó en los pasos anteriores pero teniendo en cuenta además que no se va a restaurar el contenido de replicacion.rep_instrucciones.[[BR]]Este procedimiento está agendado en el marco de la instalación de Postgres en Windows pero aplica también a la instalación de Postgres en Linux:[[BR]]'''Solución para restaurar un backup con muchas instrucciones en replicación:'''[[BR]](caso ejemplo con archivo de backup regente1.dmp y base de datos llamada demo2) 
     110  * 1) Restaurar solo el esquema 
     111  {{{ /usr/lib/postgresql/9.1/bin/pg_restore -h localhost -p 5432 -U sistemas -d demo2 -O -s -v regente1.dmp 2> errores_estruct.txt }}} 
     112  * 2) Borrar el schema replicación 
     113  {{{ DROP SCHEMA replicacion CASCADE; }}} 
     114  * 3) Quitar checks que pueden causar problemas con datos viejos: (esto no es específico del problema en cuestión acá que es evitar los datos de replicación en la restauración) 
     115   {{{ 
     116--(tb. habria que quitar los checks: chk_existencia_especificar_lote en remitos_detalles y chk_numero_en_chequera en tabla valores). 
     117ALTER TABLE remitos_detalles DROP CONSTRAINT chk_existencia_especificar_lote; 
     118ALTER TABLE remitos_detalles DROP CONSTRAINT chk_existencia_especificar_lote_unitario; 
     119ALTER TABLE remitos_detalles DROP CONSTRAINT chk_lote_articulo_correcto; 
     120ALTER TABLE valores DROP CONSTRAINT chk_numero_en_chequera; 
    101121 
     122}}} 
     123  * 4) Restaurar solo los datos 
     124  {{{ 
     125/usr/lib/postgresql/9.1/bin/pg_restore -h localhost -p 5432 -U sistemas -d demo2 -a --disable-triggers -v regente1.dmp 2> errores_datos.txt 
     126ALTER DATABASE nombre_basedatos SET statement_timeout=480000; 
     127   }}} 
     128  * 5) Volver a poner checks quitados: 
     129  {{{ 
     130--Volver a poner checks quitados, quiza ajustando algo en los datos: 
     131delete from remitos_detalles where id_lote IS NULL AND existencia_con_lote(id_articulo) 
     132ALTER TABLE remitos_detalles ADD CONSTRAINT chk_existencia_especificar_lote CHECK (NOT (id_lote IS NULL AND existencia_con_lote(id_articulo))); 
     133ALTER TABLE remitos_detalles ADD CONSTRAINT chk_existencia_especificar_lote_unitario CHECK (NOT (COALESCE(cant, 0::double precision) <> 1::double precision AND existencia_con_lote_unitario(id_articulo))); 
     134ALTER TABLE remitos_detalles ADD CONSTRAINT chk_lote_articulo_correcto CHECK (id_lote IS NULL OR lote_articulo_correcto(id_lote, id_articulo)); 
     135delete from valores where not valor_cheque_en_chequera(id_cuenta, nro, id_tipo_pago) 
     136ALTER TABLE valores ADD CONSTRAINT chk_numero_en_chequera CHECK (valor_cheque_en_chequera(id_cuenta, nro, id_tipo_pago)); 
     137  }}} 
     138  * 6) Hacer un backup de todo el schema replicacion de la base de datos de origen y restaurarla. Restaurar el contenido de tabla replicacion.tolerancia_fallo_firmas de manera manual también. 
     139       {{{ /usr/lib/postgresql/9.1/bin/pg_dump --host localhost --port 5432 --username "sistemas"  --verbose --file "/usr/src/soft/Replicacion.backup" --schema "replicacion" "regente" 2> erroresReplicacion.txt }}} 
     140  * 7) Obtener el ultimo idu_rep_instruccion del server central (se asume idu_db = 1) e insertarlo para que comience a replicar a partir de ahí: 
     141   * 7.1) Extraer las instrucciones de replicacion del archivo de backup: 
     142   {{{ pg_restore -a -t rep_instrucciones regente1.dmp > /home/sistemas/backup/rep_instrucciones.txt }}} 
     143   * 7.2) Quedarse sólo con las instrucciones del día en que se hizo el backup y ordenarlas: 
     144   {{{ 
     145cat /home/sistemas/backup/rep_instrucciones.txt | grep "2013-10-25 " > rep_instrucciones_20131025.txt 
     146sort rep_instrucciones_20131025.txt > rep_instrucciones_20131025_sorted.txt 
     147   }}} 
     148   * 7.3) tomar la ultima instruccion que comience en 1 e insertar esa idu_rep_instruccion en replicacion.rep_instrucciones del nuevo server: 
     149   {{{ 
     150mc -e rep_instrucciones_20131025_sorted.txt 
     151En este ejemplo: 
     1521: 4613012 
     153insert into replicacion.rep_instrucciones values (1,4613012,'restaurado hasta aca','2013-10-27',null,'sql'); 
     154   }}} 
     155 
     156 ==== Nota para nueva versión de Postgres 9.x (por ejemplo 9.1) al instalar Regente ==== 
     157Por cuestiones de compatibilidad cambiar en postgresql.conf o ejecutar: 
     158 * standard_conforming_strings = off 
     159 * escape_string_warning = off 
     160 * (para ejecutar en "caliente" y eventualmente replicar y sin tener que reiniciar nada: por ejemplo en una base de datos que se llama regente "alter database regente set standard_conforming_strings to off;) 
     161 
     162[[BR]] 
     163[[BR]] 
     164[wiki:manual_regente_windows Volver al manual de instalación de Regente en Windows]