REM $Id: hotbackup.sql 3457 2008-02-04 15:43:50Z hardya $
SET SERVEROUTPUT ON
store set set_settings.sql
set feedback off pagesize 0 heading off verify off
set linesize 100 trimspool on
DEFINE backup_dir = 's:\orabackup\webmip\files\'
REM Determine the oldest archive log to be backed up
archive log list;
alter system switch logfile;
REM
REM produce a SQL script that:
REM   places each tablespace into 'backup' mode,
REM   copies the contents of the tablespace to the 
REM     backup directory,
REM   returns each tablespace from 'backup' mode
REM
PROMPT *** SPOOLING
spool do_backup.sql
WITH tsp_df AS (
SELECT tsp.tablespace_name
      ,df.file_name
      ,rownum AS current_row
      ,first_value(rownum) over(PARTITION BY tsp.tablespace_name) AS first_row
      ,last_value(rownum) over(PARTITION BY tsp.tablespace_name) AS last_row
  FROM dba_tablespaces tsp
      ,dba_data_files  df
 WHERE tsp.contents <> 'TEMPORARY'
   AND tsp.tablespace_name = df.tablespace_name
)
SELECT cmd
  FROM (SELECT 'alter tablespace ' || tablespace_name || ' begin backup;' AS cmd
              ,tablespace_name
              ,1 AS seq
          FROM tsp_df
         WHERE current_row = first_row
        UNION
        SELECT 'host ocopy ' || file_name || ' &&backup_dir' AS cmd
              ,tablespace_name
              ,2 AS seq
          FROM tsp_df
         WHERE (current_row = first_row)
            OR (current_row <> first_row AND current_row <> last_row)
            OR (current_row = last_row AND last_row <> first_row)
        UNION
        SELECT 'alter tablespace ' || tablespace_name || ' end backup;' AS cmd
              ,tablespace_name
              ,3 AS seq
          FROM tsp_df
         WHERE current_row = last_row)
 ORDER BY tablespace_name
         ,seq
/
spool off;
PROMPT *** SPOOLING COMPLETE
@set_settings
@@do_backup
REM
REM Create SQL script to add temporary files to temporary tablespaces
REM
set feedback off pagesize 0 heading off verify off
set linesize 100 trimspool on
spool create_tempfile$.sql
select 'alter tablespace '||ts.name||' add tempfile '''||df.name||''' size '|| df.bytes||' reuse;' from v$tempfile df, v$tablespace ts
where ts.ts# = df.ts#
/
spool off
host move create_tempfile$.sql &&backupdir\create_tempfiles.sql
@set_settings
REM
REM create control file for the standby database
REM create backup control file for the primary database
REM
alter database create standby controlfile as 's:\orabackup\webmip\files\standby.ctl';
alter database backup controlfile to 's:\orabackup\webmip\files\backup.ctl';
REM
REM create a database initialization script for
REM the standby database
REM
create pfile='s:\orabackup\webmip\files\initstandby.ora' from spfile;
REM
REM Determine the current archive log to be backed up
archive log list;
alter system switch logfile;
