您的位置:首页 > 数据库 > Oracle

Oracle高级培训 第4课 学习笔记

2006-10-11 00:24 633 查看
Oracle高级培训 第4课 学习笔记
本课笔记中的页码与《Oracle9i 数据库管理基础II Ed 1.1 Vol.2.pdf》对应
指南下载地址:
http://blog.csdn.net/magus_yang/archive/2006/10/10/1328283.aspx

作者:JackYang (JackYang.sh@gmail.com)
日期:2006-10-11

P47
在没有备份的情况下恢复数据文件
两种情况:
有一个数据文件丢失,而且这个数据文件没有备份。或者这个数据文件已经备份,但备份文件丢失。

存在两个限制
系统表空间的文件没有备份或备份丢了,没办法恢复
控制文件必须在数据文件丢失之前创建的,在数据文件丢失之后创建的控制文件没用。

P48
这个时候创建的数据文件是空文件。
通过recover命令,把redo log file中的信息重做一遍。

在原来位置创建文件。如果是磁盘坏了,不能再原地创建,那么就用下面一条命令。

P49
第三步,利用归档日志文件和重做日志文件,来进行一次RECOVER

实验一:
实验目的:在没有备份的情况下恢复数据文件。原地重建
1. 启动数据库的服务OracleServiceDB1

2. E:/lab10g> set ORACLE_SID=DB1

3. E:/lab10g > sqlplus /nolog

4. SQL> connect sys/ora123 as sysdba

5. SQL> archive log list
确认是否在归档模式下

6. SQL> column name format a30

7. SQL> select name from v$tablespace;

8. SQL> select * from deptuser2;

9. SQL> alter tablespace user2 offline immediate;
把整个表空间user2 offline

10. SQL> alter system checkpoint;
执行一次强行的check point

11. 删除oradata/db1/ 路径下的USER02.DBF

12. SQL> alter tablespace user2 online;
这时候会报错,说无法找到表空间对应的文件。

13. SQL> select * from v$recover_file;
查看哪个文件即OFFLINE又ERROR(FILE NOT FOUND)

14. SQL> alter database create datafile ‘E:/ora01g/oradata/db1/user02.dbf’;
原来的文件已经没有了,用这条命令重建表空间文件

15. SQL> select * from v$recover_file;
虽然仍然显示OFFLINE,但已经不是FILE_NOT_FOUND了

16. SQL> alter tablespace user2 online;
这时候文件仍然打不开,因为文件是空的

17. SQL> recover tablespace user2;
会提示用9号文件进行恢复
可以选CANCEL、AUTO、RETURN(建议)

18. SQL> alter tablespace user2 online;
这时候成功online

19. SQL> select * from v$recover_file;
不会再显示有文件OFFLINE

实验二:
实验目的:异地重建
1. SQL> alter tablespace user2 offline immediate;

2. SQL> select * from deptuser2;

3. 删除USER02.DBF

4. SQL> select * from v$recover_file;
显示有文件OFFLINE且FILE_NOT_FOUND

5. SQL> alter database create datafile ‘E:/ora01g/oradata/db1/user02.dbf’ as ‘D:/oradata/db1/dbf/user02.dbf’ reuse;
换了一个地方来重建

6. SQL> select name,file# from v$datafile;
可以看到file7的文件路径在D盘,和其他文件不同

7. SQL> recover tablespace user2;

8. SQL> alter tablespace user2 online;
使表空间文件重新online

P51
只读表空间恢复
把表空间变成只读状态以后,要马上备份。一致在只读状态下,不用做恢复操作。
一旦从只读进入读写状态,就要进行恢复操作。
只读变读写,恢复操作要从只读以后开始。备份之后恢复到只读结束时,后面用redologfile来恢复

P52
重新创建控制文件
控制文件丢失,没有了,怎么来重新创建。

条件:先对控制文件建立一个ASCII的备份。
实验三:
实验目的:重新创建控制文件
1. SQL> alter database backup controlfile to trace;
创建控制文件的一个ASCII的备份

2. SQL> show parameter user_dump_dest
查看trace创建的目的地
db1_ora_2840.TRC 文本文件,很多多余部分可以删除,只留下CREATECONTROLFILE

CREATE CONTROLFILE REUSE DATABASE ‘DB1’ NORESETLOGS ARCHIVELOG是关键
上面一段是NORESETLOG,下面一段是RESETLOG,后面再讲两种情况各自的应用范围。

3. SQL> host copy e:/ora01g/oradata/db1/udump/db1_ora_444.trc crectl.sql
把TRC文件复制为一个SQL文件

4. SQL> shutdown immediate;
模拟故障,把数据库关闭,然后删掉控制文件

5. 删除两个控制文件CON1.CTL和CON2.CTL,然后用startup,就无法打开

6. SQL> startup nomount
nomount只打开初始化参数文件,不打开控制文件

7. SQL> @crectl
创建了控制文件

8. SQL> alter database open;
数据库打开成功

控制文件丢失,而且没有备份二进制文件的情况下,可以用TRACE文件来恢复。

实验四:
被删除了大部分信息的TRACE文件,无法恢复数据文件
1. SQL> select * from deptuser2;

2. SQL> alter tablesapce user2 offline immediate;

3. 把数据文件删掉,这时候由于前面的实验,数据文件改在D盘了

4. SQL> select * from v$recover_file;

5. SQL> alter database create datafile ‘D:/oradata/db1/dbf/user02.dbf’;
报创建失败,数据文件在控制文件之前创建,没有足够的历史信息。

所以,重建控制文件之后,要把数据库做一次备份。

P79
用户管理的不完全恢复
之前所说的恢复都是完全恢复。

P81
redo log file丢失
归档日志文件丢失
这种状况下就要执行不完全恢复

P82
需要进行不完全恢复的情况
重做日志文件和数据文件,只丢一个都能恢复,两个都丢就无法恢复了。

数据库恢复到表被删除之前,但别的表插入的数据都没了。

备份的控制文件就是老的控制文件,数据库只能恢复到一个比较旧的状态。

所以,数据库的结构已发生变化,就应该备份控制文件,所以控制文件备份很频繁。
控制文件很小,所以应该勤做备份。
一般都设置两个控制文件,一个坏了,另外一个还能顶上

P83
不完全恢复的类型
创建了一个表空间,把这个表空间删掉,恢复一定要用删除表空间之前的控制文件。

用户的误操作最难恢复,DROP任何东西都要非常小心。

P85
不完全恢复
非常复杂,需要认真对待

恢复操作失败,意味数据恢复不了。

恢复前不做备份,万一恢复失败,没有补救措施。恢复前做了备份,可以尝试多次恢复。

不完全恢复时alter database open 时要加resetlogs

P87
报警日志很长,重要的信息又不多。

P88
用户管理的不完全恢复的过程

不完全恢复要还原所有数据文件。之前归档模式下,只要恢复坏掉的数据文件。
开始和最后都要进行备份。

P89
RECOVER 命令
数据库可以恢复到某一个时间

using backup controlfile一定是二进制的备份控制文件

用TRACE文件不是恢复而是重建。

P90
表EMPLOYEES被误删除。
数据库的活动很少,表示没有什么数据写入/修改。

P91
关闭数据库,并备份。
不完全恢复,必须还原所有数据文件。等于是对所有文件作了一次同步。
装载数据库startup mount。
恢复到表被删除之前的时刻。

删掉一个表空间,可以看到什么时候删掉的。
但删掉一个表,是看不到什么时候删掉的。

P93
v$logfile中有一个很重要的信息FIRST_TIME.

P94
重做日志中有2、3个member,表示多元备份。

实验五:
实验目的:应用Oralce基于时间点的数据库恢复技术来进行不完全恢复。
1. 启动ORACLE服务OracleServiceDB3

2. E:/lab10g> set ORACLE_SID=DB3

3. E:/lab10g> sqlplus /nolog

4. SQL> connect sys/ora123 as sysdba

5. SQL> startup mount

6. SQL> archive log list
结果显示当前数据库在非归档模式

7. SQL> alter database archivelog
使数据库进入归档模式

8. SQL> archive log list

9. SQL> alter database open;

10. SQL> alter system archive log current;

11. SQL> create tablespace data1 datafile ‘E:/ora01g/oradata/db3/data1.dbf’ size 2m;
创建一个新的表空间

12. SQL> create table dept tablespace data1 as select * from scott.dept;
创建一个新表

13. SQL> commit;

14. SQL> select * from dept;

15. SQL> insert into dept(deptno.dname) values(20,’before drop’);

16. SQL> commit;

17. SQL> select * from dept;

18. SQL> create table dept2 tablespace data1 as select * from scott.dept;

19. SQL> insert into dept2(deptno.dname) values(20,’before drop’);

20. SQL> commit;

21. SQL> alter database begin backup;
数据库联机状态下的备份,需要begin backup和end backup
begin backup执行之后,所以对数据库操作的数据,不是写到数据文件中去,而是写到redo log file中去。

22. SQL> host mkdir d:/oradata/db3
23. SQL> host mkdir d:/oradata/db3/hot

24. SQL> host copy e:/ora01g/oradata/db3/*.dbf d:/oradata/db3/hot
先作一次备份。

25. SQL> alter database end backup;

26. SQL> alter system archive log current;
每做好一次备份要做一次归档。

27. SQL> alter database backup controlfile to ‘D:/oradata/db3/hot/con1.ctl’;

28. SQL> select to_char(sysdate.’YYYY-MM-DD HH24:MI:SS’) from dual;
确定恢复时until的时间

29. SQL> drop table dept;

30. SQL> select * from dept;
这个时候报表不存在的错误。

31. SQL> select * from dept2;

32. SQL> insert into dept2(deptno.dname) values(28,’after drop’);

33. SQL> commit;

34. SQL> select * from dept2;
恢复之后before drop纪录存在,after drop那条纪录应该没有。

35. 把E:/ora01g/oradata/db3/ 路径下的DATA1.dbf删掉,所有的数据文件(后缀名为DBF)都要删掉

36. 把D盘下D:/oradata/db3/hot路径下的数据文件(除TEMP.DBF)都复制回E:/ora01g/oradata/db3 路径下,这是还原操作。

37. SQL> shutdown immediate

38. SQL> startup mount
由于数据文件恢复了,控制文件还是老的,数据文件和控制文件的SCN不一致,所以只能mount不能open。

39. SQL> select * from v$recovery_file;

40. SQL> alter database until ‘2006-10-10 20:28:08’;

41. SQL> alter database open;
报错,不完全恢复一定要用resetlogs

42. SQL> alter database open resetlogs;

43. SQL> select * from dept;
恢复回来了

44. SQL> select * from dept2;
before drop记录在,但after drop记录(删除表之后插入的记录)已经不在了。

这个实验使用的技术是DBPITR(database point in time recovery)Oracle 基于时间点的数据库恢复技术
最大缺点,所有表空间在恢复时间点之后的数据都丢失。

TSPITR(基于时间点的表空间恢复技术)
不是恢复整个数据库,而是仅仅把一个表空间恢复,其它表空间不动。
这种技术更高明且复杂。

一个数据文件只能属于一个表空间,一个表空间可以包含多个数据文件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: