数据库存储结构:
物理数据库存储结构:
必须的三类文件:
控制文件(controlFile):multiplexing the controfile 多路复用控制文件,指向其它关键文件,存储序列号和时间戳
联机重做日志文件(redo log):联机重做日志文件盒归档日志文件.最低有2个组,每一个组至少有2个成员,第一个组写完后,将第一个进行归档,開始写第二个,这么循环下去.不停机下能够对重做日志文件进行移动,加入,删除操作.
数据文件(datafile):至少创建两个数据文件(SYSTEM表空间(存储数据字典)和SYSAUX表空间(存储数据字典辅助数据)).逻辑上讲,它们为段的存储库.server进程对数据文件运行读操作,而DBWn对数据文件运行写操作.
外部文件:初始化參数文件,口令文件,归档重做日志文件,日志和跟踪文件
逻辑数据库存储结构:
oracle使用段来表述不论什么包括数据的结构,oracle里包括十几种段类型,当中最引人注目的是表段,索引段和撤销段。
oracle通过表空间形式(tablespace)方式,将逻辑存储从物理存储中抽象出来。表空间在逻辑上是一个或多个段的集合,在物理上是一个或多个文件的集合。段和数据文件之间存在多对多的关系。
考点:在oracle10G及更新版本号中,必须在创建数据库的时候创建SYSAUX表空间,假设未指定,将创建默认的SYSAUX表空间.
数据字典:
数据字典包括从逻辑上和物理上描写叙述数据库及其内容的元数据.用户定义、安全信息、完整性约束和性能监视信息都是数据字典的一部分。元数据作为一组段存储在SYSTEM和SYSAUX表空间中.
USER_视图显示有关自己的表的信息
ALL_视图显示有权訪问的对象的行
DBA_视图显示数据库每一个对象的行
表空间和数据文件之间的关联在数据库控制文件里维护.
比方SQL查询一个表的时候,查询数据字典查看表是否存在,构成表的列,然后找到表的物理位置,读取段的区间映射,区间映射列出构成表的全部区间,指明每一个区间所在的数据文件,区间从数据文件的哪个块開始以及连续的块数.
考点:哪个视图将显示数据库中全部的表?是DBA_TABLE,不是ALL_TABLES
练习:
属于SYSTEM表空间,存在于一个64KB的区间中,位于/orcl/datafile/system.256.858781235中,从文件的大约700M開始.
[oracle@localhost ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Wed Nov 19 15:19:11 2014
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options
SQL> create table lstest(ls varchar2(10));
Table created.
SQL> select tablespace_name,extent_id,bytes,file_id,block_id from dba_extents where owner='SYS' and segment_name='LSTEST';
TABLESPACE_NAME EXTENT_ID BYTES FILE_ID BLOCK_ID
------------------------------ ---------- ---------- ---------- ----------
SYSTEM 0 65536 1 89248
SQL> select name from v$datafile where file#=1;
NAME
--------------------------------------------------------------------------------
+DATA/orcl/datafile/system.256.858781235SQL> select block_size * &block_id from dba_tablespaces where tablespace_name='&tablespace_name';
Enter value for block_id: 89248
Enter value for tablespace_name: SYSTEM
old 1: select block_size * &block_id from dba_tablespaces where tablespace_name='&tablespace_name'
new 1: select block_size * 89248 from dba_tablespaces where tablespace_name='SYSTEM'
BLOCK_SIZE*89248
----------------
731119616