备份打开的数据库脚本

SET feedback OFF
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.备份当前控制文件。

posted @ 2008-04-03 17:41  jimeper  阅读(403)  评论(0编辑  收藏  举报