基础知识1——数据物理,逻辑存储结构

物理数据库结构

三类必须的文件:控制文件(control file),联机重做日志文件(online redo log file),数据文件(data file)
其它外部文件:初始化参数文件,口令文件,归档重做日志文件,日志,跟踪文件.

控制文件:指向数据库其余部分的指针,联机重做日志文件和数据文件的位置,更新的归档日志文件位置,存储维护数据库完整性的信息, 重要的序列号和时间戳,没配置恢复目录时,备份的详细信息也存储在控制文件里. 最少1个最多8个,建议多路复用控制文件.

重做日志(redo log):按时间顺序存储应用于数据库的一连串变更向量,包含重建(或重做)所有已完成工作的最少限度的信息. 数据文件或数据库受损,可以将变更向量来恢复.

两类重做日志文件:联机重做日志文件(必须要有的)和归档日志文件(可选,但建议必须有).

每个数据库至少有两个联机重做日志文件,或者说有两组,每组至少一个成员——其中一个组接受当前更改,另一个组可用于归档. 每次日志切换将生成归档重做日志问及那.建议多路复用技术进行保护重做日志文件.这样,丢失某个组的一个成员,只要其它成员 存在,数据库仍能运行. 重做日志文件建议50MB以上,也别太大.

数据文件:创建数据库至少要有两个数据文件,SYSTEM表空间(存储数据字典)和SYSAUX表空间(存储数据字典的辅助数据).
数据文件的大小和数量不受限制,值受主操作系统和硬件功能的限制.数据文件是可见的物理结构,段(segment)是数据的存储结构,典型的段是 表和索引.可随时重命名,移动,添加,删除数据文件,也可重设其大小.但请记住!某些数据文件的某些操作会产生停机时间.
在操作系统级别看,数据文件由多个操作系统块组成,内部将数据文件的格式设置为oracle块.在每个数据文件中这些块连续编号,创建数据文件时块大小固定不变, 跟操作系统块大小没关系.

块中存在头部分和数据区域,还有一些空间空间.头部分包含行目录信息,行锁定信息.数据区域包含行本身,行,索引键等. 当用户会话使用数据时,服务器进程允许会话在磁盘上找到相关的块,将其复制到db buffer.  服务器进程对数据文件执行读操作,DBWn对数据文件执行写操作.
数据文件应定期备份,可由RAID技术进行保护. 

其他数据库文件
实例参数文件(instance parameter file):实例启动时,SGA根据参数文件设置内存,启动后台进程,这是实例启动所需的唯一文件. 其中的参数只有一个是必须的-DB_NAME参数,此文件虽小,但必须有,有时叫pfile有时叫spfile.

口令文件(password file): 用户通过提交用户名和口令来建立对话. oracle根据存储爱数据字典的用户定义对用户名和口令进行验证.

归档重做日志文件(archive redo log files): 联机日志变满切换时,此进程会将日志文件复制到归档日志文件中.

警报日志和跟踪文件(alert log and trace files):警报日志是影响实例和数据库的重要操作的相关信息记录:只记录重要的事件. 比如启动和关闭,更改数据库的物理结构和更改控制实例的参数,后台进程会在检测到错误条件时生成跟踪文件,有时也报告特定事件.






逻辑数据库结构

oracle通过表空间的方式将逻辑存储从物理存储中抽象出来.表空间逻辑上是段的集合,物理上是一个或多个数据文件的集合.
使用"关系分析"术语说:段和数据文件存在多对多关系:可将一个表分布在多个数据文件中,一个数据文件也可能包含多个表的一部分.

段由多个块组成.

区间(extent):数据文件中编号连续的一系列块,通过为段新添区间,段会扩大,这些区间不必相邻,可以来自作为段所在表空间一部分的任何
数据文件.




逻辑上讲:一个表空间包含多个段,每个段包含多个区间,区间是一组oracle块.
物理上讲:数据文件由多个操作系统块组成,一个oracle包含多个操作系统块.


数据字典:
从逻辑上和物理上描述数据库及其内容的元数据,元数据作为一组段存储在system和sysaux表空间中.

!不要对数据字典做任何改动!手痒痒去拍墙,别瞎改数据字典

视图查询数据字典,大部分视图有三种:DBA_  ALL_    USER_

USER_前缀的视图描述查询视图的用户拥有的对象
ALL_前缀的视图显示描述你有权访问的对象的行
DBA_前缀的视图将显示数据库中每个对象的行

表空间和数据文件之间的关联在数据库控制文件中维护,其中列出所有数据文件,指明其所属表空间.如果没有控制文件,实例就 无法找到数据文件,无法识别组成SYSTEM表空间的文件,只有打开SYSTEM表空间时,实例才可能访问数据字典,才能打开数据库.






来个练习:创建一个表段,计算出它的物理位置

create table testtb (c1 varchar2(10));

确定表所在空间,区间大小,区间所在文件编号,及其作为区间开始位置的文件块:

select tablespace_name,extent_id,bytes,file_id,block_id from dba_extents
where owner='SCOTT' and segment_name='TESTTB'



根据名称确定文件,替代前面查询中的file_id

select name from v$datafile
where file#=:file_id                --file_id=4
---------------------------------------------------------------------------------------------
name
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\USERS01.DBF

计算出区间在文件中的位置(按它在文件中的开始字节数)

select block_size * :block_id from dba_tablespaces
where tablespace_name='USERS'           --block_id=314 



可见,表testtb存在于一个64KB区间中,此区间位于文件D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\USERS01.DBF中,从文件的 大约3.4MB处开始.






 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25025926/viewspace-1067689/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/25025926/viewspace-1067689/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值