SET pagesize 0
SET heading OFF
SET verify OFF
SET linesize 100
SET trimspool ON
define dir = 'c:\oracle\oradata\backup'
define fil = '&dir\backup_commands.sql'
define spo = '&dir\backup_output.lst'
prompt ***Spooling TO &fil
SET serveroutput ON
spool &fil
prompt spool &spo
prompt ARCHIVE LOG LIST;;
prompt ALTER SYSTEM SWITCH LOGFILE;;
DECLARE
CURSOR cur_tablespace IS SELECT Tablespace_name FROM dba_tablespaces WHERE status <> 'read_only';
CURSOR cur_datafile(tn VARCHAR) IS SELECT file_name FROM dba_data_files WHERE tablespace_name = tn;
BEGIN
FOR ct IN cur_tablespace LOOP
dbms_output.put_line('alter tablespace '||ct.tablespace_name || ' begin backup;');
FOR cd IN cur_datafile(ct.tablespace_name) LOOP
dbms_output.put_line('host cp '|| cd.file_name || ' &dir');
END LOOP;
dbms_output.put_line('alter tablespace '||ct.tablespace_name || ' end backup;');
END LOOP;
END;
/
prompt ALTER SYSTEM SWITCH LOGFILE;
prompt alter database backup controlfile to '&dir\backup.ctl' reuse;
prompt ARCHIVE LOG LIST;;
prompt spool OFF;;
spool OFF;
@&fil
创建数据库中所有文件的一个热备份,准备生成的找开的数据库脚本将完成以下工作:
1.切换日志文件,确保在备份前所做的所有更改都已被归档。
2.将一个表空间设置为热备份模式。
3.用操作系统命令拷贝表空间中的文件。
4.将该表空间脱离热备份模式。
5.对于每个表空间,重复步骤2-4。
6.切换日志文件,确保备份后所做的所有更改都已被归档。
7.备份当前控制文件。