最好给全文档。谢谢!

解决方案 »

  1.   

    3、冷备份方案的实施 
    3.1 冷备份数据库的步骤 
    (1)关闭数据库; 
    (2)备份所有相关的数据库文件:初始化参数文件、控制文件(可用select name from v$controlfile;列出所有控制文件)、数据文件(可用select name from v$datafile;列出所有数据文件)、Redo日志(可用select member from v$logfile;列出所有redo日志文件)、归档的Redo日志(可用select sequence#,first_time from v$loghist;列出所有归档redo日志文件的顺序号和产生时间)。 
    3.2 冷备份数据库的脚本文件coldbak.cmd 
    rem Oracle数据库冷备份脚本文件名coldbak.cmd 
    rem 用于Windows NT/2000 平台,已经过严密的测试,大家可以试验!!! 
    rem 该脚本执行后,在c:temp目录中产生db_restrict.sql、db_shut.sql、db_start.sql、 
    rem cold.sql、cold.cmd等5个脚本文件,冷备份的核心命令在cold.cmd中。 
    rem 设置SID 
    set oracle_sid=tmq 
    rem 设置初始化参数文件 
    set my_pfile=e:oracleora81databaseinittmq.ora 
    set my_ifile=E:OracleADMINtmqpfileinit.ora 
    rem 设置归档日志目录 
    set my_archive_dir=E:OracleORADATAtmqarchive 
    rem 设置internal帐户的密码 
    set my_password=oracle 
    rem 建立临时目录 
    mkdir c:temp 
    set my_temp=c:temp 
    rem 建立备份目录,该目录必须有足够大的空间用于存放数据库的备份文件 
    mkdir e:backup 
    set my_bakdir=e:backup 
    rem ==== (1) create script file db_restrict.sql===== 
    echo connect internal/%my_password%; > %my_temp%db_restrict.sql 
    echo shutdown immediate; >> %my_temp%db_restrict.sql 
    echo startup restrict pfile=%my_pfile%; >>%my_temp%db_restrict.sql 
    echo exit >> %my_temp%db_restrict.sql 
    rem ==== (2) create script file db_shut.sql ===== 
    echo connect internal/%my_password%; >%my_temp%db_shut.sql 
    echo shutdown immediate; >>%my_temp%db_shut.sql 
    echo exit >>%my_temp%db_shut.sql 
    rem ==== (3) create script file db_start.sql ===== 
    echo connect internal/%my_password%; >%my_temp%db_start.sql 
    echo startup pfile=%my_pfile%; >>%my_temp%db_start.sql 
    echo exit >>%my_temp%db_start.sql 
    svrmgrl @%my_temp%db_restrict.sql 
    rem ==== (4) create script file cold.sql ===== 
    echo set heading off; >%my_temp%cold.sql 
    echo set feedback off; >>%my_temp%cold.sql 
    echo spool %my_temp%cold.cmd; >>%my_temp%cold.sql 
    echo 在这里设计冷备份的命令,备份控制文件、数据文件和日志文件 
    echo select 'copy ' ^|^| name ^|^| ' %my_bakdir%' from v$controlfile; >>%my_temp%cold.sql 
    echo select 'copy ' ^|^| member ^|^| ' %my_bakdir%' from v$logfile; >>%my_temp%cold.sql 
    echo select 'copy ' ^|^| file_name ^|^| ' %my_bakdir%' from dba_data_files; >>%my_temp%cold.sql 
    echo spool off; >>%my_temp%cold.sql 
    echo exit >>%my_temp%cold.sql 
    rem ===== (5) run cold.sql to genrate cold.cmd ======== 
    sqlplus internal/%my_password% @%my_temp%cold.sql 
    echo 在这里设计冷备份的命令,备份参数文件、归档日志文件 
    echo. >> %my_temp%cold.cmd 
    echo copy %my_pfile% %my_bakdir% >> %my_temp%cold.cmd 
    echo copy %my_ifile% %my_bakdir% >> %my_temp%cold.cmd 
    echo. >> %my_temp%cold.cmd 
    echo copy %my_archive_dir%*.* %my_bakdir% >> %my_temp%cold.cmd 
    rem ===== shut down database ======== 
    svrmgrl @%my_temp%db_shut.sql 
    rem ====== run cold.cmd to perform the cold backup 开始执行冷备份 ====== 
    call %my_temp%cold.cmd 
    rem ====== start up the database ======= 
    svrmgrl @%my_temp%db_start.sql 
    echo ===== the cold backup is completed!!! ====== 
      

  2.   

    4、热备份方案的实施 
    4.1 热备份数据库的前提条件:数据库运行在归档模式 
    Oracle数据库的redo日志记录在数据库上进行的所有活动。LGWR后台进程以一种循环方式写这些日志文件,从第一个redo日志到下一个,直到该组的最后一个,然后由从第一个日志写起。 
    在非归档模式下,当循环写到最后一个日志文件后,就重写第一个日志。因此,非归档模式下唯一的数据库恢复办法就是使用冷备份。 
    在归档模式下,当redo日志满时,一个ARCH后台进程就读取全部redo日志,然后将其写到归档日志。因此,可以使用热备份和点恢复。在归档日志模式下,如果归档日志目的空间已满,数据库活动将暂时停止,只有释放一些空间后,数据库才能继续运行。通常,background_dump_destination将产生一个跟踪文件来显示归档方面的问题。 
    Oracle数据库安装默认运行在非归档模式,通过以下步骤可以从非归档模式转换为归档模式: 
    (1)编辑参数文件init.ora,设置以下参数 
    # 设置数据库自动归档 
    log_archive_start = true 
    # 设置归档日志文件的目录,该目录必须事先已建立,并有大量可利用的空间 
    log_archive_dest_1="location=%oracle_base% oradata%oracle_sid%archive" 
    # 设置归档日志文件名的格式。%s表示顺序号,%t表示线程号。 
    log_archive_format = "%oracle_sid%%T%S.ARC" 
    (2)在svrmgrl上运行以下命令 
    svrmgrl>connect internal/YOUR_PASSWORD 
    svrmgrl>shutdown immediate; 
    svrmgrl>startup mount exclusive; 
    svrmgrl>alter database archivelog; 
    svrmgrl>alter database open; 
    svrmgrl>shutdown immediate; 
    (3)执行数据库冷备份 
    当数据库运行在归档模式下,数据库恢复过程要求使用冷备份时,归档日志是必需的。 
    (4)正常启动数据库,并确认数据库运行在归档模式 
    svrmgrl > startup; 
    svrmgrl > select * from v$database; 其log_mode会显示数据库是否归档模式 
    svrmgrl > archive log list; 也会显示数据库是否归档模式 
    如果Oracle数据库运行在归档模式,当进行数据库维护时,可能需要暂停数据库的归档,在完成维护后,再重新启动归档模式。通过以下步骤可以从归档模式转换为非归档模式: 
    svrmgrl>connect internal/YOUR_PASSWORD 
    svrmgrl>shutdown immediate; 
    svrmgrl>startup mount exclusive; 
    svrmgrl>alter database noarchivelog; 
    svrmgrl>alter database open; 
    svrmgrl > select * from v$database; 其log_mode会显示数据库是否归档模式 
    svrmgrl > archive log list; 也会显示数据库是否归档模式 
      

  3.   

    4.2 热备份数据库的步骤 
    (1)拷贝init.ora文件到备份目录(参数文件在数据库启动后处于关闭状态)。 
    (2)将需要备份的某个表空间置于开始备份模式。 
    (3)使用ocopy.exe拷贝表空间,然后将该表空间置于结束备份模式中(ocopy.exe不能用于直接拷贝联机的数据库文件)。 
    (4)对数据库中的每个表空间执行步骤2和3(可以通过视图dba_tablespaces和v$datafile查看数据库中有哪些表空间和数据文件)。 
    (5)通过在svrmgrl上执行archive log list命令获取当前的日志顺序号,从oldest online log sequence开始到current log sequence的联机redo日志应该是热备份的一部分。 
    (6)在svrmgrl上执行alter system switch logfile;命令来强迫日志切换,以便所有的日志都被归档。 
    (7)使用alter database backup controlfile to trace;命令获得控制文件的一个备份,可以到%oracle_base%admin%oracle_sid%udump目录中寻找最新的跟踪文件,其中有重建控制文件的全部命令。 
    (8)使用windows nt的命令从%log_archive_dest%中拷贝归档的日志文件到备份目录。 
    4.3 热备份数据库的脚本文件hotbak.cmd 
    rem Oracle数据库热备份脚本文件名hotbak.cmd 
    rem 用于Windows NT/2000 平台,已经过严密的测试,大家可以试验!!! 
    rem 该脚本执行后,在c:temp目录中产生minlog.sql、minlog.cmd、 
    rem tblspc01.sql、tblspc02.sql、control01.sql、control02.sql、 
    rem maxlog.sql、maxlog.cmd、archive.sql、archive.cmd等10个脚本文件。 
    rem 设置SID 
    set oracle_sid=tmq 
    rem 设置初始化参数文件 
    set my_pfile=e:oracleora81databaseinittmq.ora 
    set my_ifile=E:OracleADMINtmqpfileinit.ora 
    rem 设置归档日志目录 
    set my_archive_dir=E:OracleORADATAtmqarchive 
    rem 设置internal帐户的密码 
    set my_password=oracle 
    rem 建立临时目录 
    mkdir c:temp 
    set my_temp=c:temp 
    rem 建立备份目录,该目录必须有足够大的空间用于存放数据库的备份文件 
    mkdir e:backup 
    set my_bakdir=e:backup 
    rem ===== (1) 开始备份参数文件 ======= 
    echo Backing up the init.ora file 
    copy %my_pfile% %my_bakdir% 
    copy %my_ifile% %my_bakdir% 
    rem ===== (2) 创建minlog.sql脚本获取最小的online redo日志顺序号 ===== 
    echo set heading off; >%my_temp%minlog.sql 
    echo set feedback off; >>%my_temp%minlog.sql 
    echo spool %my_temp%minlog.cmd; >>%my_temp%minlog.sql 
    echo select 'set minlog_value=' ^|^| min(sequence#) from v$log where upper(status)=upper('INACTIVE'); >>%my_temp%minlog.sql 
    echo spool off; >>%my_temp%minlog.sql 
    echo select 'exit;' from dual; >>%my_temp%minlog.sql 
    echo exit; >>%my_temp%minlog.sql 
    rem ===== (3) run minlog.sql to genrate minlog.cmd ======== 
    sqlplus internal/%my_password% @%my_temp%minlog.sql 
    rem ===== (4) run minlog.cmd to set minlog_value ======== 
    call %my_temp%minlog.cmd 
    rem === (5) 创建tblspc01.sql脚本用于生成备份数据文件的脚本文件tblspc02.sql === 
    echo set heading off; >%my_temp%tblspc01.sql 
    echo set feedback off; >>%my_temp%tblspc01.sql 
    echo spool %my_temp%tblspc02.sql; >>%my_temp%tblspc01.sql 
    echo select 'connect internal/%my_password%;' from dual; >>%my_temp%tblspc01.sql 
    echo select 'alter tablespace ' ^|^| tablespace_name ^|^| ' begin backup;' from dba_tablespaces; >>%my_temp%tblspc01.sql 
    echo select 'host start/wait ocopy ' ^|^| file_name ^|^| ' %my_bakdir%;' from dba_data_files; >>%my_temp%tblspc01.sql 
    echo select 'alter tablespace ' ^|^| tablespace_name ^|^| ' end backup;' from dba_tablespaces; >>%my_temp%tblspc01.sql 
    echo spool off; >>%my_temp%tblspc01.sql 
    echo select 'exit;' from dual; >>%my_temp%tblspc01.sql 
    echo exit; >>%my_temp%tblspc01.sql 
    rem ===== (6) run tblspc01.sql to genrate tblspc02.sql ======== 
    sqlplus internal/%my_password% @%my_temp%tblspc01.sql 
    rem ===== (7) on svrmgrl run tblspc02.sql to backup the datafiles ======== 
    svrmgrl @%my_temp%tblspc02.sql 
      

  4.   

    rem ===== (8) 创建maxlog.sql脚本获取最大的online redo日志顺序号 ===== 
    echo set heading off; >%my_temp%maxlog.sql 
    echo set feedback off; >>%my_temp%maxlog.sql 
    echo spool %my_temp%maxlog.cmd; >>%my_temp%maxlog.sql 
    echo select 'set maxlog_value=' ^|^| max(sequence#) from v$log where upper(status)=upper('CURRENT'); >>%my_temp%maxlog.sql 
    echo spool off; >>%my_temp%maxlog.sql 
    echo select 'alter system switch logfile;' from dual; >> %my_temp%maxlog.sql 
    echo select 'exit;' from dual; >>%my_temp%maxlog.sql 
    echo exit; >>%my_temp%maxlog.sql 
    rem ===== (9) run maxlog.sql to genrate maxlog.cmd ======== 
    sqlplus internal/%my_password% @%my_temp%maxlog.sql 
    rem ===== (10) run maxlog.cmd to set maxlog_value ======== 
    call %my_temp%maxlog.cmd 
    rem == (11) 创建control01.sql脚本用于生成备份控制文件的脚本文件control02.sql === 
    echo set heading off; >%my_temp%control01.sql 
    echo set feedback off; >>%my_temp%control01.sql 
    echo spool %my_temp%control02.sql; >>%my_temp%control01.sql 
    echo select 'connect internal/%my_password%;' from dual; >>%my_temp%control01.sql 
    echo select 'alter database backup controlfile to trace;' from dual; >>%my_temp%control01.sql 
    echo spool off; >>%my_temp%control01.sql 
    echo select 'exit;' from dual; >>%my_temp%control01.sql 
    echo exit; >>%my_temp%control01.sql 
    rem ===== (12) run control01.sql to genrate control02.sql ======== 
    sqlplus internal/%my_password% @%my_temp%control01.sql 
    rem ===== (13) on svrmgrl run control02.sql to backup the datafiles ======== 
    svrmgrl @%my_temp%control02.sql 
    rem ===== (14) 创建archive.sql脚本用于生成备份归档日志文件的脚本文件archive.cmd ===== 
    echo set heading off; >%my_temp%archive.sql 
    echo set feedback off; >>%my_temp%archive.sql 
    echo spool %my_temp%archive.cmd; >>%my_temp%archive.sql 
    rem 仅备份与本次热备份相关的日志文件 
    echo select 'copy ' ^|^| name ^|^| ' %my_bakdir%' from V_$ARCHIVED_LOG where sequence# between %minlog_value% and %maxlog_value%+1; >>%my_temp%archive.sql 
    echo spool off; >>%my_temp%archive.sql 
    echo select 'exit;' from dual; >>%my_temp%archive.sql 
    echo exit; >>%my_temp%archive.sql 
    rem ===== (15) run archive.sql to genrate archive.cmd ======== 
    sqlplus internal/%my_password% @%my_temp%archive.sql 
    rem ===== (16) run archive.cmd to backup the archive log files ======== 
    call %my_temp%archive.cmd 
    rem ===== the end ====== 
    echo ===== the hot backup is completed!!! ====== 
      

  5.   

    5、使用export作为备份策略 
    5.1 export的命令选项说明 
    Oracle数据库的exp工具提供tables、users、full database、tablespace四种级别的导出方式,把指定的数据库内容导出到一个或者多个oracle二进制文件中,该文件只允许用imp工具来读取,imp的命令选项可用imp help=y来查阅。 
    您可以通过输入 EXP 命令以及各种自变量来控制“导出”的运行方式。要指定参数,您可以使用关键字: 
    格式:EXP KEYWORD=value 或 KEYWORD=(value1,value2,...,valueN) 
    实例:EXP SCOTT/TIGER GRANTS=Y TABLES=(EMP,DEPT,MGR) 
    或 TABLES=(T1:P1,T1:P2),如果 T1 是分区表 
    USERID 必须是命令行中的第一个参数。 
      

  6.   

    6、各种备份策略的自动执行方法 
    不管是冷备份、热备份,还是export备份;不管是unix平台,还是windows平台,都可以利用at命令来定时、自动执行上述备份策略。AT 命令安排在特定日期和时间运行命令和程序,在windows nt平台上必须首先运行调度服务(schedule),才能使用at命令。 
    AT命令用法如下: 
    AT [computername] [ [id] [/DELETE] | /DELETE [/YES]] 
    AT [computername] time [/INTERACTIVE] 
    [ /EVERY:date[,...] | /NEXT:date[,...]] "command" 
    computername 指定远程计算机。 如果省略这个参数,会计划在本地计算机上运行命令。 
    id 指定给已计划命令的识别号。 
    /delete 删除某个已计划的命令。如果省略 id,计算机上所有已计划的命令都会被删除。 
    /yes 不需要进一步确认时,跟删除所有作业的命令一起使用。 
    time 指定运行命令的时间。 
    /interactive 允许作业在运行时,与当时登录的用户桌面进行交互。 
    /every:date[,...] 每个月或每个星期在指定的日期运行命令。如果省略日期,则默认为在每月的本日运行。 
    /next:date[,...] 指定在下一个指定日期(如,下周四)运行命令。如果省略日期,则默认为在每月的本日运行。 
    "command" 准备运行的 Windows NT 命令或批处理程序。 
    举例如下: 
    (1) 每周五19:00执行冷备份 
    at 19:00 /every:F "coldbak.cmd" 
    (2) 每周二20:00执行热备份 
    at 20:00 /every:T "coldbak.cmd" 
    (3) 每周一、二、三、四、五21:00执行export备份 
    at 20:00 /every:M,T,W,Th,F "expbak.cmd"