• Oracle—用户管理的完全恢复(四)


           在用户管理的备份(三)中,最后打开数据库时,用了alter database open resetlogs;的命令,这里为什么用resetlogs命令?


    一.resetlogs的作用


    1.将当前的日志序列号重置为1,抛弃以前所有日志信息,你可以在操作系统上删除它们;


    2.在非归档模式下,如果联机重做日志丢失,则可以创建它;参考:Oracle—用户管理的完全恢复(一)


    3.更新控制文件里面的信息;


    4.更新所有当前的数据文件,联机重做日志文件和相关的归档日志文件并用新的SCN号开始。


    所以你使用备份的控制文件或者不完全恢复,则必须使用resetlogs来打开数据库。


    在归档文件名格式中有个参数%r,它就是表示incarnation号的。


    二.数据在数据库中的位置


    commit后数据会被放在联机重做日志中;如果发生检查点,则把数据放在数据文件中;若触发归档,则数据会放在归档日志中。


    下面来实验证明一下,上面的结论,


    1.创建个表,插入数据,


    SQL> create table t3(id int,name char(10))  tablespace app1;

    Table created.


    SQL> insert into t3 values(0,'apple');

    1 row created.


    2.查看当前的联机重做日志文件


       SQL> select group#,members,status from  v$log;

        GROUP#    MEMBERS STATUS

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

             1          1 CURRENT

             2          1 INACTIVE

             3          1 ACTIVE

    可以看到当前的联机重做日志文件是1号,再通过查看视图v$logfile可以看到1号是哪个。


    SQL> select * from v$logfile;

        GROUP# STATUS  TYPE    MEMBER                              IS_

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

             1         ONLINE  /u01/oradata/wilson/redo01.log      NO

             3         ONLINE  /u01/oradata/wilson/redo03.log      NO

             2         ONLINE  /u01/oradata/wilson/redo02.log      NO



    3.查看联机重做文件


    因为还没有提交,来查看一下redo01.log ,


    [oracle@oracle11g wilson]$ strings  redo01.log  |   grep apple

    看不到数据,


    然后提交数据,可以看到

    [oracle@oracle11g wilson]$ strings redo01.log | grep apple

    apple     

    有了插入的数据了。


    4.查看数据文件


    [oracle@oracle11g wilson]$ strings  app1_01.dbf  |  grep apple

    在内存中的脏数据没有写到数据文件中之前是没有结果的,


    手动发生检查点,

    SQL> alter system  checkpoint;

    System altered.


    再次查看数据文件,

    [oracle@oracle11g wilson]$ strings app1_01.dbf | grep apple

    apple     ,

    可以查看到数据了。


    5.查看归档日志文件


    因为联机重做日志文件还没归档,所有手动归档一下,

    SQL> alter system archive log current;

    System altered.


    查看新归档的日志文件,

    [oracle@oracle11g arch]$ strings sun_1_0000000004_824956547.arc |  grep apple

    apple     

    可以看到有数据在,从而很清楚了每个步骤数据会在什么地方。


    三.只读表空间的恢复

    1.如果一直是只读表空间,损坏了则直接还原就可以;


    2.备份时候是只读表空间,然后改为可读可写表空间,损坏了则还原和恢复即可;


    3.备份时候是可读可写表空间,然后改为只读表空间,损坏了则还原和恢复即可;


    特别注意是,只读表空间会影响到控制文件,当使用重建的控制文件,使用备份的控制文件时(不含有只读表空间的信息)或者是重命名数据文件时,要使用命令alter database rename ‘......’ to ‘........’;来修改控制文件。

    下面通过备份控制文件的脚本来查看在有无只读表空间时,控制文件有什么不同。


    备份控制文件,

    SQL> alter database backup controlfile to trace as '/tmp/t1.sql';

    Database altered.


    将app2表空间改为只读表空间,

    SQL> alter  tablespace app2 read only;

    Tablespace altered.


    再备份控制文件,

    SQL> alter database backup controlfile to trace as '/tmp/t2.sql';

    Database altered.


    对比在有无只读表空间下的控制文件备份,备份是创建控制文件的脚本。

    [oracle@oracle11g tmp]$ diff t1.sql t2.sql 

    70d69

    <   '/u01/oradata/wilson/app2_01.dbf',

    98a98,103

    > -- Files in read-only tablespaces are now named.

    > ALTER DATABASE RENAME FILE 'MISSING00006'

    >   TO '/u01/oradata/wilson/app2_01.dbf';

    > -- Online the files in read-only tablespaces.

    > ALTER TABLESPACE "APP2" ONLINE;

    140d144

    <   '/u01/oradata/wilson/app2_01.dbf',

    165a170,175

    > -- Files in read-only tablespaces are now named.

    > ALTER DATABASE RENAME FILE 'MISSING00006'

    >   TO '/u01/oradata/wilson/app2_01.dbf';

    > -- Online the files in read-only tablespaces.

    > ALTER TABLESPACE "APP2" ONLINE;


    可以看到控制文件中的差异。

  • 相关阅读:
    java 分割
    我就骂你了,我tm还想打你呢
    就两个人,怎么搞管理?
    年底得了个公司奖金,但是我却高兴不起来
    Microsoft.VisualStudio.TestTools.UnitTesting 命名空间
    Python2.7.6标准库内建函数
    几种xml读取方法比较
    无论怎么样都不能成为你对别人发脾气的理由
    【产品策划】在移动互联网时代的多媒体社交
    DES加密 超详解 及 C++编程实现
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3236972.html
Copyright © 2020-2023  润新知