小插曲:
昨天下午在数据库专题培训上讲解ORACLE体系统结构,这部分内容相对来说会比较枯燥,但为了向学员传递学习体系结构的重要性,所以在中间加入了一个小实验,也就是在关闭数据库后,通过自己编写的程序去抽取数据块的行记录。直播往往是最容易翻车的哈,不管你是不是老司机。所以让学员先休息5分钟,我稍微排查了操作的各个环节,检查完后,重新操作一遍,数据块中的记录被正确抽取出来(出问题的原因,主要在于关库那一刻,buffer cache中的脏数据块还没完全落盘,而此时我已经开始运行数据块恢复程序,最终导致数据抽取失败
)。
另外还有一个问题是,在第二次实验抽取出来的数据,其中商品编号出现数据值不对,其它列的数据没问题,当时也是挺纳闷的。接受现实吧,因为近期对该抽取程序做了很多改动,测试确实有些不充分。
昨晚把程序的缺陷修正了,以下重做昨天课上的实验:
1)以oramon登录,重建t0710表。
2)插入5条记录,记录中包含有中文,负数(含小数点),随机日期和字符串。
3)5行记录均存储在4号文件,1667号数据块。
4)查出T0710表的相关信息,并拷贝到conf/obj.conf文件中,如下图红框:
5)查看obj.conf文件(每个配置项代表一张表的元数据信息)
6)主配置文件dr.conf,包含数据库字符编码,字节序,块大小,最终输出文件路径,字段间的分隔符和字段有什么符号引起来(后面生成数据文件和控制文件时需要用到)。
7)数据库物理数据文件datafile.conf。
8)在另一个终端上,提前写好chk_db_status.sh,用于检查数据库是否已关闭了,每隔两秒检查一次。
9)16点34分26秒,发出关闭数据库命令。16点34分42秒关闭完成。
10)另一个终端看到大约16点34分37秒,后台LGWR进程已关闭。
11)output目录为空,然后开始对4号文件,1667号数据块进行恢复。
12)数据库处于关闭。
13)查看恢复出来了5行记录及生成了的控制文件。数据与之前一致。
14)启动数据库。
15)验证抽取出来的数据及生成的控制文件,是否能顺利将数据导回t0710表。
通过上面案例,相信大家也认识到了数据库体系结构和原理的重要性,只要你真正地了解它的内部原理,你才能更好地去驾驭或优化它。加油。