martes, 27 de enero de 2009

CREAR BASE STANDBY en ORACLE 7

Como primer paso debemos la base de datos primaria debe esta en modo ARCHIVELOG.

SVRMGR> connect internal
Connected.SVRMGR> select * from v$database;
NAME CREATED LOG_MODE CHECKPOINT ARCHIVE_CH
--------- -------------------- ------------ ---------- ----------
DATA 06/16/06 17:24:55 ARCHIVELOG 4728248833 4728248830
1 row selected.SVRMGR>
Si no se encuentra en modo ARCHIVELOG los pasos son.seteo de los parámetros del initlog_archive_dest = /opt1/oracle/arch/
log_archive_start = true
shutdown de la base.

STARTUP MOUNT EXCLUSIVE;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;

listo ahora esta en archivelog mode
una vez comprobado esto hay que hacer un backup.


yo utilize este para generar el script de bkp debido a que la base tenía datafiles sobre raw devices y sobre archivos planos.


set serveroutput on size 100000
spool /opt1/oracle/dbs/copia_hot.sql
BEGIN

DECLARE
v_sentencia VARCHAR2(500);
secuencia number;
v_termina varchar2(50);
v_archivo varchar2(50);
BEGIN
secuencia := 0;
dbms_output.put_line('set serveroutput on;');

dbms_output.put_line('spool /opt1/oracle/dbs/copia_hot.log;');
FOR i IN (SELECT tablespace_name,SUM(bytes)

FROM dba_data_files
GROUP BY tablespace_name
ORDER BY 2 DESC)
LOOP
BEGIN
dbms_output.put_line ('alter tablespace 'i.tablespace_name' begin backup;');
FOR j IN ( SELECT file_name
FROM dba_data_files
WHERE tablespace_name = i.tablespace_name)
LOOP
secuencia := secuencia + 1;
select upper(substr(j.file_name,(length(j.file_name))-3,length(j.file_name))),

substr(file_name,(instr(file_name,'/',1,((length(file_name) - nvl(length(replace(file_name, '/', '')),0)) /length('/'))))+1)
into v_termina, v_archivo
from dba_data_files
where file_name = j.file_name
and tablespace_name = i.tablespace_name;

if v_termina = '.DBF' then

dbms_output.put_line ('!rcp ' j.file_name ' oracle1@destino:'j.file_name';');

dbms_output.put_line ('!rsh destino -l oracle1 chmod 660 'j.file_name';');

else

dbms_output.put_line ('!dd if='j.file_name' bs=2048k rsh bbatrece -l oracle1 "dd of=' j.file_name' bs=2048k";');

end if;

END LOOP;

dbms_output.put_line ('alter tablespace 'i.tablespace_name' end backup;');
dbms_output.put_line ('alter system archive log current;');

END;

END LOOP;

END;

dbms_output.put_line ('ALTER DATABASE CREATE STANDBY CONTROLFILE AS''''/opt1/oracle/dbs/controlsb.ctl'''';');

begin

for cur1 in ( select upper(substr(name,(length(name))-3,length(name))) termina, name archivo
from v$controlfile)
loop

if cur1.termina = '.CTL' then

dbms_output.put_line ('!rcp /opt1/oracle/dbs/controlsb.ctl destino:'cur1.archivo';'); else
dbms_output.put_line ('!dd if=/opt1/oracle/dbs/controlsb.ctl bs=2048k rsh destino-l oracle1 "dd of='cur1.archivo' bs=2048k";');

end if;

end loop;

dbms_output.put_line('spool off;');
dbms_output.put_line('exit;');

END;/

spool OFF


Con este script se genera otro como este.



set serveroutput on;
spool /opt1/oracle/dbs/copia_hot.log;
alter tablespace COMERCIAL begin backup;
!rcp /oracle/oradata03/comercial1.dbf oracle1@destino:/oracle/oradata03/comercial1.dbf;
!rsh destino -l oracle1 chmod 660 /oracle/oradata03/comercial1.dbf;
!dd if=/dev/rdsk/c120t0d9s2 bs=2048k rsh destino -l oracle1 "dd of=/dev/rdsk/c120t0d9s2 bs=2048k";
!dd if=/dev/rdsk/c120t0d11s4 bs=2048k rsh destino -l oracle1 "dd of=/dev/rdsk/c120t0d11s4 bs=2048k";
!dd if=/dev/rdsk/c120t0d2s1 bs=2048k rsh destino -l oracle1 "dd of=/dev/rdsk/c120t0d2s1 bs=2048k";!rcp /oradata/SPERIF/base/comercial2.dbf oracle1@destino:/oradata/SPERIF/base/comercial2.dbf;
!rsh destino -l oracle1 chmod 660 /oradata/SPERIF/base/comercial2.dbf;
;alter tablespace COMERCIAL end backup;

etc...etc...etc

Luego de estar copiado todo junto con el home de ORACLE
se genera el controlfile para la Standby.


ALTER DATABASE CREATE STANDBY CONTROLFILE AS'/opt1/oracle/dbs/controlsb.ctl';

se copia el control file generado pisando el o los control files en el destino.

rcp /opt1/oracle/dbs/controlsb.ctl destino:/opt1/oracle/dbs/ctlSPERIF02.ctl;

una vez hecho esto se intenta subir la base para ver que funcione.


svrmgrl <
startup nomount;
alter database mount standby database;
recover standby database;
auto
quit
EOF

Ahora va a aplicar todos los archive logs que necesite aplicar.