当前位置:数据库 > Oracle >>

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

Oracle—用户管理的完全恢复(四)
 
一.resetlogs的作用
 
1.将当前的日志序列号重置为1,抛弃以前所有日志信息,你可以在操作系统上删除它们;
 
2.在非归档模式下,如果联机重做日志丢失,则可以创建它
 
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;

 

 
可以看到控制文件中的差异。
 
Oracle
MySQL
Access
SQLServer
DB2
Excel
SQLite
SYBASE
Postgres
如果你遇到数据库难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,