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;

      

  • 相关阅读:
    数据库MySQL调优实战经验总结
    Apache常见功能实战详解
    使用HeartBeat实现高可用HA的配置过程详解
    Nginx实现集群的负载均衡配置过程详解
    CentOS系统通过PXE实现批量无人值守安装
    CentOS 7 网卡命名修改为eth0格式
    Nagios 系统监控基本安装配置过程详解
    LAMP 系统服务搭建过程详解
    使用 python 管理 mysql 开发工具箱
    C++标准库string类型的使用和操作总结
  • 原文地址:https://www.cnblogs.com/shishanyuan/p/1643991.html
Copyright © 2011-2022 走看看