zoukankan      html  css  js  c++  java
  • Oracle—用户管理的完全恢复(一)

    一.分类

         可以分为在非归档模式下和归档模式下的完全恢复,完全恢复主要是针对归档模式下的,在非归档模式下很难做到完全恢复,除非是在做恢复时,联机重做日志还没有被重写。


    二.非归档的有关性质

        

       1.在非归档模式下,在丢失数据文件后唯一的选择是执行完整的数据库还原,而不能进行恢复;

        

       2.还原完整的数据库是还原所用的数据文件和控制文件;


       3.还原前提是要备份,因为是非归档模式所以只能进行冷备份,主要备份所有的数据文件和控制文件。对于联机重做日志文件,在正常关闭数据库的情况下,可以不备份它,但是在不正常关闭数据库的情况下要进行备份,建议备份下来,这样就可以不用重建了。


    有关备份可以查看:Oracle—用户管理的备份(一)



    三.非归档模式下的恢复

        

     1.如果放数据文件的磁盘没有损坏,只是某种原因导致某些数据文件的丢失,那么只要把备份的数据库(所有数据文件和控制文件),复制到原来的地方即可。

      

    2.如果是磁盘损坏,则不能放到原来的位置了,必须放到新的磁盘下。这样就要修改参数文件和控制文件的信息, 才能正常打开数据库。


    3..现在模拟第二种情况(即磁盘损坏),首先对数据库进行冷备份,新建个目录/u01/ubackup,在/u01/oradata/wilson下的所有文件(数据文件,控制文件和联机重做日志文件)复制到ubackup目录下。命令如下,

     [oracle@oracle11g ubackup]$ cp  /u01/oradata/wilson/*   /u01/ubackup


    现在假设挂载在/u01/oradata/wilson目录上的磁盘损坏了,

    [oracle@oracle11g wilson]$ rm -f *.dbf  (删除数据文件,模拟磁盘损坏)


    现在因为这个磁盘损坏了,所以原来冷备份的数据库不能再还原到这个磁盘上了,必须加一个新的磁盘。在虚拟机上可以添加个新的磁盘(8G),然后在/u01/oradata/下新建个目录md用于挂载新的磁盘。

    [oracle@oracle11g oradata]$ mkdir  md



    1)给新的磁盘进行分区,


    [root@oracle11g ~]# fdisk /dev/sdb

    Command (m for help): n

    Partition number (1-8): 1

    First cylinder (0-1866): 1

    Last cylinder or +size or +sizeM or +sizeK (1-1866, default 1866): 1866

    Command (m for help): p

    Disk /dev/sdb (Sun disk label): 7 heads, 80 sectors, 1866 cylinders

    Units = cylinders of 560 * 512 bytes

       Device Flag    Start       End    Blocks   Id  System

    /dev/sdb1             1      1866    522200   83  Linux native


    因为磁盘较小,所以直接划分为一个分区。可以在目录/dev下看到多了一个sdb1


    2)对sdb1做系统文件,命令如下,


    [root@oracle11g dev]# mkfs.ext3  sdb1


    3)把这个磁盘挂载到/u01/oradata/md目录山,命令如下,


    [root@oracle11g oradata]# mount   /dev/sdb1  /u01/oradata/md



    4)在/u01/oradata目录下可以看到,


    [oracle@oracle11g oradata]$ ll

    total 17

    drwxr-xr-x 3 root   root     1024 Aug 29 23:10 md

    drwxr-x--- 3 oracle oinstall 4096 Aug 25 17:09 wilson


    md属于root,用户oralce不能使用,故修改一下权限,命令如下,

    [root@oracle11g oradata]# chown -R  oracle:oinstall  md


    5)切换到oracle用户(su - oracle),把冷备份的数据库复制到/u01/oradata/md目录下,

    [oracle@oracle11g md]$ cp   /u01/ubackup/*  /u01/oradata/md/


    (6)修改spfile,先将spfile转换为pfile,因为pfile为文本类型,可以直接修改。

     SQL> create  spfile from pfile;

    File created.


    pfile 原来和/u01/oradata/wilson/目录有关的,改为/u01/oradata/md。修改好了,再转换为spfile,命令如下,

    SQL> create spfile from pfile;

    File created.



    (7)在控制文件中有关数据文件,联机重做日志文件和临时文件还在原来的位置,所有修改控制文件。 因为spfile修改好了,所以数据库可以进入mount状态了。


       —— 这个时候可以通过查看v$datafile动态性能视图来看到数据文件的位置和名称。


    SQL> select file#,name from v$datafile;


            FILE#   NAME

           ---------- -----------------------------------

             1  /u01/oradata/wilson/system01.dbf

             2  /u01/oradata/wilson/sysaux01.dbf

             3  /u01/oradata/wilson/undotbs01.dbf

             4  /u01/oradata/wilson/users01.dbf

             5  /u01/oradata/wilson/example01.dbf

             6  /u01/oradata/wilson/paul01.dbf

             7  /u01/oradata/wilson/sun01.dbf

             8  /u01/oradata/wilson/smallundo1.dbf

             9  /u01/oradata/wilson/assm_1.dbf

            10  /u01/oradata/wilson/mssm_1dbf

            11  /u01/oradata/wilson/paul02.dbf

          FILE# NAME

    -      --------- -----------------------------------

            12   /u01/oradata/wilson/appl_01.dbf

    12 rows selected.


    修改控制文件中数据文件的名称,命令如下,

    SQL> alter database rename file '/u01/oradata/wilson/system01.dbf' to '/u01/oradata/md/system01.dbf';

      

    把每个数据文件都修改一下,或者做个批量修改。



     ——通过查看v$logfile动态性能视图来看联机重做日志文件的位置和名称。


    SQL> select group#,member from  v$logfile;

        GROUP#   MEMBER

         ---------- -----------------------------------

             3 /u01/oradata/wilson/redo03.log

             1 /u01/oradata/wilson/redo01.log

             2 /u01/oradata/wilson/redo02.log


    修改控制文件中联机重做日志文件的名称,命令如下,


    SQL>alter database rename file '/u01/oradata/wilson/redo01.log'  to    '/u01/oradata/md/redo01.log' ;

    把每个联机重做日志文件都修改一下。



    ——通过查看v$tempfile动态性能视图来看临时文件的位置和名称。


    SQL> select file#,name from  v$tempfile;

          FILE#   NAME

        ---------- -----------------------------------

             1 /u01/oradata/wilson/temp01.dbf

             2 /u01/oradata/wilson/mytemp01.dbf

    修改控制文件中临时文件的名称,命令如下,


    SQL>alter database rename file ‘/u01/oradata/wilson/temp01.dbf' to    ‘/u01/oradata/md/temp01.dbf';

    把每个临时文件都修改一下。



    (8)可以打开数据库了,命令如下,


     SQL> alter database  open;



    四.在前面说明了备份了联机重做日志文件的情况,下面来说明如果没有备份联机重做日志的情况。(非归档模式中)


    1.恢复步骤:

    1)关闭数据库;


    2)从备份中还原数据文件和控制文件;


    3)基于cancel的恢复;


    4)在打开数据库时,带上resetlogs选项。


    2.前两步参照上面介绍的,现在在目录/u01/oradata/md下删除联机重做日志文件,命令如下,


    [oracle@oracle11g md]$ rm    -f    redo0*

    然后进入mount状态,恢复命令如下,


    SQL> recover  database  until cancel using backup controlfile;

    提示输入cancel,使用如下命令,可以重新创建联机重做日志,


    SQL> alter database open resetlogs;

    这样既可正常打开数据库了。

  • 相关阅读:
    存储过程语法
    ORA-20000:ORU-10027:buffer overflow,limit of 2000 bytes.
    ORACLE 存储过程异常捕获并抛出
    Sqlldr导入txt文件内容到数据库中
    ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项
    oracle将一个表中字段的值赋值到另一个表中字段(批量)
    (三)Solr——Solr的基本使用
    (二)Solr——Solr界面介绍
    jrebel 7免费激活(非破解) 和 IntelliJ Idea 2017 免费激活方法
    (一)Solr——简介和安装配置
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3233768.html
Copyright © 2011-2022 走看看