Suponha que os datafiles do tablespace TSX estejam no diskgroup +DG1 e que serão transportados ao diskgroup +DG2. A tarefa é simples e envolve os seguintes passos para cada datafile (executados no RMAN):
- Fazer uma cópia no diskgroup destino: backup as copy datafile file# format '+DG2';
- Colocar o datafile atual offline: sql 'alter database datafile file# offline';
- Fazer a troca para o backup: switch datafile file# to copy;
- Fazer recover do novo datafile: recover datafile file#;
- Colocar o datafile online: sql 'alter database datafile file# online';
- Apagar datafile original: delete datafilecopy 'filename';
Se o tablespace tiver muitos arquivos, ou a tarefa tiver que ser executada em vários ambientes, vale a pena escrever uma consulta (ou uma função) para gerar o script:
select case step.n
when 1 then
'backup as copy datafile '||file#||' format ''+DG2'';'
when 2 then
'sql ''alter database datafile '||file#||' offline'';'
when 3 then
'switch datafile '||file#||' to copy;'
when 4 then
'recover datafile '||file#||';'
when 5 then
'sql ''alter database datafile '||file#||' online'';'
when 6 then
'delete datafilecopy '''||df.name||''';'
end
esac
from v$tablespace ts
inner join v$datafile df on ts.ts#=df.ts#,
(select rownum n from all_tables where rownum<7) step
where ts.name=:TABLESPACE_NAME
order by df.file#, step.n
E o resultado será algo assim:
backup as copy datafile 106 format '+DG2';
sql 'alter database datafile 106 offline';
switch datafile 106 to copy;
recover datafile 106;
sql 'alter database datafile 106 online';
delete datafilecopy '+DG1/mydb/datafile/tsx_data.265.122421389';
backup as copy datafile 138 format '+DG2';
sql 'alter database datafile 138 offline';
switch datafile 138 to copy;
recover datafile 138;
sql 'alter database datafile 138 online';
delete datafilecopy '+DG1/mydb/datafile/tsx_data.263.183291830';
Nenhum comentário:
Postar um comentário