This is a PL/SQL script used to generate rcp and rename datafile commands in order to create standby database. If
* there are more then 1k datafiles
* source and  destination paths are different
* source and  destination disk sizes are different
(as in my case) it might be useful.  However you should modify code to make it suitable for your case:
create table user.cmds (RCP varchar2(1000), MV varchar2(1000));
declare
    cursor c_sql is
    select name, bytes/(1024*1024) bsize from v$datafile order by name;
    sqlline c_sql%ROWTYPE;
    tsize number;
    cnt int;
begin
    open c_sql;
    fetch  c_sql into sqlline;
    tsize:=0;
    cnt:=1;
    execute immediate 'truncate table user.cmds';
     while c_sql%FOUND loop
        tsize:=tsize+sqlline.bsize;
        if cnt < 10 then
          insert into user.cmds values('rcp '||sqlline.name||' userp@server:/userdata0'||cnt||'/userp/','alter database rename file '''||sqlline.name||''' to ''/userdata0'||cnt||'/userp/'||substr(sqlline.name,19,255)||''';');
          --dbms_output.put_line('alter database rename file '''||sqlline.name||''' to ''/userdata0'||cnt||'/userp/'||substr(sqlline.name,19,255)||''';');
        else
          insert into user.cmds values('rcp '||sqlline.name||' userp@server:/userdata'||cnt||'/userp/','alter database rename file '''||sqlline.name||''' to ''/userdata'||cnt||'/userp/'||substr(sqlline.name,19,255)||''';');
        end if;
        if tsize > 95000 then 
          tsize:=0;
          cnt:=cnt+1;
        end if;
        fetch  c_sql into sqlline;
     end loop;
     commit;
     close c_sql;
end;
/
 
No comments:
Post a Comment