zoukankan      html  css  js  c++  java
  • 3.手工备份恢复关闭数据库的备份与完全还原(练习1、2)

    保护数据最简单的方式就是把所有的数据库文件复制到另一个地方,一旦出现问题,可以把这些文件覆盖到原来的位置进行恢复,然后启动数据库,这样的操作叫做完全(或全部)一致数据库库备份与恢复。这里特别说明的是一致数据库备份通常指的是冷备份(关闭数据库),在这种状态下数据文件、重做日志以及控制文件都被标以相同的SCN号。

    第3、4节将介绍三种完全恢复:
    (1)数据库完全关闭备份和还原,不进行恢复;
    (2)完全的关闭备份和恢复;
    (3)不完全恢复。

    练习1:备份关闭的数据库

    本练习将备份PRACTICE所有的数据文件,接着模拟出现严重故障,删除所有的数据库文件,然后从备份还原所有数据库文件,并打开数据库。

    步骤一:生成数据库活动日志

    在这里我们向TINA用户DATE_LOG表插入数据,在数据还原后查看该笔数据是否存在,以确认还原是否成功,其脚本如下:

    1 --向DATE_LOG插入一笔10年后的数据,插入后查看是否存在
    2 SQL>INSERT INTO tina.date_log values (sysdate+10*365);
    3 SQL>COMMIT;
    4 SQL>ALTER SESSION SET nls_date_format=’yyyy-MM-dd HH24:mi:ss’;
    5 SQL>SELECT create_date FROM tina.date_log;

     

    步骤二:创建备份脚本

    利用脚本创建执行命令是一种快速、简便、保证脚本正确的方法,下面我们将创建一个名为closed_copy.sql的数据库脚本,这些脚本添加错误处理、验证、日志等部分可以使用在工作中。 

     1 Remark Set SQL*Plus varivalbes to manipulate output
     2 set feedback off heading off verify off trimspool off
     3 set pagesize 0 linesize 200
     4 Remark Set SQL*Plus user variables used in this script
     5 define dir = 'D:\oracle\CODE\chap4'
     6 define fil = 'D:\oracle\CODE\tmp\closed_backup_commands.sql'
     7 prompt *** Spooling to &fil
     8 Remark Create a command file with file backup commands
     9 spool &fil
    10    select 'host copy ' || name || ' &dir' from v$datafile order by 1;
    11    select 'host copy ' || member || ' &dir' from v$logfile order by 1;
    12    select 'host copy ' || name || ' &dir' from v$controlfile order by 1;
    13    select ‘host copy ‘ || name || ‘ &dir’ from v$tempfile order by 1;
    14 spool off;
    15 remark Shutdown the database cleanly
    16 shutdown immediate;
    17 Remark Run the copy file commands form the operating system
    18 @&fil
    19 Remark Start the database again
    20 startup;

     

    • 第2-3行设置SQL*Plus变量,避免从数据库中提取的结果在命令文件中显示不必要的内容;
    • 第5-6行在脚本范围内为命令制定用户变量, dir变量指定了备份文件将被拷贝的路径位置,fil则指定了生成备份命令的文件名称,在接下来的脚本中,可以通过在变量名前加&来引用该变量;
    • 第7行使用SQL*Plus提示命令显示输出结果;
    • 第9行通知SQL*Plus将所有的屏幕结果输出结果写入一个文件,该文件名为变量fil所定义的closed_backup_commands.sql
    • 第10-13行给出了多个操作系统命令,执行对PRACTICE数据库中每一个数据文件的拷贝。符号||用于连接SQL命令中的字符串,使用V$动态视图复制各个数据文件、联机重做日志文件、控制文件以及临时文件。Host用于在SQL*Plus提示符下运行操作系统命令;
    • 第14行停止向closed_backup_commands.sql文件写命令;
    • 第16行正常关闭数据库;
    • 第18行开始执行前面创建的所有命令,由于数据库文件较大,将需要较多时间执行;
    • 第20行再次启动数据库。
      注意:以上脚本执行需要以SYSDBA角色SYS或SYSTEM连接数据库

    步骤三:运行备份脚本

    通过步骤二创建了closed_copy.sql脚本,此时利用start或@命令运行该脚本:

    1 SQL> @D:\oracle\CODE\chap4\closed_copy.sql

     

    在运行过程中将出现命令行窗口,不要关闭,运行后在目标路径出现PRACTICE数据库的拷贝,如下图所示:

     

    练习2:还原整个数据库

    本练习中将还原上一练习中复制PRACTICE数据库所有文件,一旦文件还原,不需要恢复就能打开数据库。

    步骤一:删除数据库文件

    为了模拟真实环境,我们可以设想一名新手在数据库关闭状态下,意外地删除了数据库所有文件,在这里我们关闭数据库并删除PRACTICE数据库中所有数据库文件。

     

    步骤二:还原备份数据库文件

    通过复制上一练习备份的数据库文件到PRACTICE数据库文件位置上。

     

    步骤三:打开数据库

    这里我们通过先加载控制文件启动数据库,具体脚本如下: 

    1 SQL>startup mount

     

    以下讨论非必要,但有助于了解数据库还原、恢复机制。打开数据库的告警日志D:\oracle\product\10.1.0\admin\PRACTICE\bdump\alert_practice.log(视实际情况打开)

     

    通过以上信息我们可以知道在数据库关闭时,需要关闭SMON、ARCHIVE等进程后才能完全关闭数据库。对上面通过mount启动数据库,查看相关列检查是否和关闭时间是否一致: 

    1 SQL>ALTER SESSION SET NLS_DATE_FORMAT=’yyyy-MM-dd HH24:mi:ss’;
    2 SQL>SELECT file#, status, checkpoint_change#, checkpoint_time,
    3             Last_change#, last_time FROM v$datafile;

    通过查询可以发现数据库关闭的时间2010-01-10 15:10:32正是数据文件检查点发生的时间2010-01-10 15:10:31:

     

    1 SQL> SELECT group#, sequence#, status, first_change#, first_time FROM V$log ORDER BY first_change#;

     

    上述文件中,数据文件检查点的SCN是513045,当前重做日志中的第一个更改号是510573,因此,数据库备份发生在重做日志的第3组为当前状态时。
    在扫描了已加载的控制文件的视图后,可以使用ALTER DATABASE OPEN命令打开数据库。

     

    步骤四:确认数据库还原
    除非数据文件、控制文件和联机重做日志一致,否则打开不了Oracle数据库。可以从TINA.DATE_LOG查询数据,确认是否存在一笔比当前时间大10年的数据。
    --向DATE_LOG插入一笔10年后的数据,插入后查看是否存在

    1 SQL>ALTER SESSION SET nls_date_format=’yyyy-MM-dd HH24:mi:ss’;
    2 SQL>SELECT create_date FROM tina.date_log ORDER BY create_date DESC;

      

  • 相关阅读:
    jsp mysql 配置线程池
    服务端 模拟 检测 攻击。。乱写
    硕思闪客精灵 7.2 破解版
    unity UnityAwe 插件
    smartfoxserver 2x 解决 Math NAN
    unity 断点下载
    java 监听文件目录修改
    wind7 64 setup appjs
    sfs2x 修改jvm 内存
    unity ngui 解决图层问题
  • 原文地址:https://www.cnblogs.com/shishanyuan/p/1643991.html
Copyright © 2011-2022 走看看