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

 
Oracle高级培训 第4课 学习笔记
本课笔记中的页码与《Oracle9i 数据库管理基础II Ed 1.1 Vol.2.pdf》对应
指南下载地址:
 
作者: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( 基于时间点的表空间恢复技术 )
不是恢复整个数据库,而是仅仅把一个表空间恢复,其它表空间不动。
这种技术更高明且复杂。
 
一个数据文件只能属于一个表空间,一个表空间可以包含多个数据文件。
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值