上一篇学习了oracle中常见的术语,术语应当是基于一个体系才会变的有意义。所以有必要对orale的体系结构作一下认 识。最经典的图,就是下边这张了 [img]http://dl.iteye.com/upload/attachment/546579/5aabc4f7-4b59-39ce-8314-08e5bcd072fe.png" alt="[/img]
个人觉得oracle的整个体系可以分为三个部分:物理文件管理体系、内存管理体系、用户(APP)接口调用。
本篇先从第一部分物理文件管理体系说起:
文件体系由一堆文件构成,大家都知道oracle的数据以及诸多DBMS的信息都是存储在文件中的,这样的文件主要有:
1.Data FILES(数据文件)
2.CONTROL FILES(控制文件)
3.REDO_LOG FILES(重做日志文件)
4.ARCHIVED_LOG FILES(归档日志文件)
除此之外,还有一些譬如Parameter files、password files等小文件
下面做简单的解析:
(一)data files
数据文件主要用来存储数据内容(以数据块形式)以及数据库对象,如SEQUENCE\INDEX \SYNONYM\TABLE\等,读取数据时,系统首先从数据库文件中读取数据,并存储到SGA的数据缓冲区中。这是为了减少I/O,如果读取数据时,缓冲区中已经有要读取的数据,就不需要再从磁盘中读取了。存储数据时也是一样,事务提交时改变的数据先存储到内存缓冲区中,再由oracle后台进程DBWR决定如何将其写入到数据文件中。oracle正是通过采用这样的机制,减少I/O,提高性能,增强稳定性。
(二)control files
这是一个二进制格式的文件,文件内容包括:
- 数据库名及数据库惟一标识
- ·数据文件及日志文件的标识
- ·系统恢复的必要信息,即SCN(system change number)
重做日志文件记录了对数据库的所有修改的信息。
每一个Oracle数据库中都有至少两个的重做日志文件组,每个重做日志文件组都包含了一个到多个的重做日志文件-即日志成员。同一个日志文件组中的各个日志成员之间是镜像关系,它们的内容都是一模一样的。
Oracle在写日志的时候是以日志组为单位的,只有写完了同一个日志组中的所有日志成员之后,写日志才会结束。当一个日志文件组中所有的成员同时被写满数据时,系统自动转换到下一个日志文件组,这个转换过程称为日志切换。
当日志切换后,会给前一个日志组编一个号,用于归档日志的编号,这个编号称为日志序列号。此编号由1开始,每切换一次,序列号自动加1,最大值受参数MAXLOGHISTORY限制,该参数的最大值为65534。
当oracle把最后一个日志组写满了以后,自动转向第一个日志组,这时,再向第一个日志组写日志的时候, 如果数据库运行在非归档模式下,这个日志组中的原有日志信息就会被覆盖。
(四)arechived_log files
归档日志文件用于系统出现故障时进行恢复操作
Oracle中各种物理文件的操作 SQL语句注:
创建(添加)数据文件