目录
LLL的数据库培训—第二部分—Oracle基础知识培训—第5讲—Oracle11g的体系结构2(物理结构+逻辑结构)
一、数据库结构
1、Oracle 数据库由操作系统文件组成,这些文件为数据库信息提供实际物理存储区
2、Oracle 数据库包括逻辑结构和物理结构
二、物理结构
物理结构就是Oracle数据库所使用的操作系统物理文件。
1、 主要物理文件可分为三类:
数据文件:数据文件用于存储数据库数据,如表、索引数据等。
控制文件:控制文件是记录数据库物理结构的二进制文件。
在线日志文件:记录对数据库的所有修改信息,用于故障恢复。
丢失这些文件,数据库不可以继续运行,需要进行介质恢复。
2、非主要物理文件包括:
参数文件:$ORACLE_HOME/dbs/spfile.ora或initorcl.ora等
密码文件:$ORACLE_HOME/dbs/
告警和跟踪文件:/data/u01/app/oracle/diag/rdbms/orcl/orcl/trace
归档日志文件:恢复数据使用
备份文件:expdp,exp,rman备份
丢失这些文件,数据库仍然可以继续运行,不需要进行介质恢复。
三、数据库结构——逻辑结构
1、Oracle的逻辑组件包括:
上图,圆角型方框为实体,实线表示关系,单线表示单一的关系,三线(鹰爪线)表示多的关系,于是可以得到:
(1)每个数据库是有一个或多个表空间组成的(至少一个)
(2)每个表空间基于一个或多个操作系统的数据文件(至少一个)
(3)每个表空间中可以存放一个或多个段(segment)
(4)每个段有一个或多个区(extent)组成
(5)每个区是有一个或多个连续的oracle数据块组成
(6)每个oracle数据块是有一个或多个操作系统数据块组成
(7)每个操作系统数据文件是有一个或多个区组成
(8)每个操作系统数据文件是有一个或多个操作系统数块组成。
2、层次关系
3、表空间
(1)表空间是数据库中最大的逻辑单位,一个 Oracle 数据库至少包含一个表空间,就是名为SYSTEM的系统表空间。
(2)每个表空间是由一个或多个数据文件组成的,一个数据文件只能与一个表空间相关联。
(3)表空间的大小等于构成该表空间的所有数据文件大小之和。
(4)创建表空间语法:
CREATE TABLESPACE tablespacename DATAFILE 'filename' [SIZE integer [K|M]] [AUTOEXTEND [OFF|ON]];
4、段、区、块
(1)段:
段是构成表空间的逻辑存储结构,段由一组区组成。
按照段所存储数据的特征,将段分为若干种类型,主要有数据段、索引段、回退段和临时段。
(2)区:
区为段分配空间,它由连续的数据块组成。
当段中的所有空间已完全使用时,系统自动为该段分配一个新区。
区不能跨数据文件存在,只能存在于一个数据文件中。
(3)块:
数据块是Oracle服务器所能分配、读取或写入的最小存储单元。
Oracle服务器以数据块为单位管理数据文件的存储空间。
SQL>show parameter db_block_size;——8192字节,每个块就是8192,每次读取,至少是8192字节;
SQL>select ename form emp where empno =7934; ——把ename所在的数据块,完整的从硬盘督导数据库缓冲区,再交给用户。
虽然ename只有6个字节,但是因为块就是最小存储单元,依然会读取8192字节数据,
(4)模式(模式=用户)
模式是对用户所创建的数据库对象的总称。
模式对象包括表、视图、索引、同义词、序列、过程和程序包等。
5、案例
conn test/123
(1)查看当前用户在那个默认表空间下【test_tbs】
select * from dba_users where username='TEST';
(2)查看当前用户下的表-[test1]
select * from user_tables;
(3)查看表空间下的段和区
select * from dba_segments where tablespace_name='TEST_TBS' select * from dba_extents where tablespace_name='TEST_TBS'
(4)回收站数据
删除表:
drop table test1 purge; select * from user_recyclebin
四、查看表空间信息
1、查看表空间:
SQL>select * from v$tablespace;
2、查看dba数据文件,和v$tablespace联合查看
(1)查看表空间资源使用情况:
SELECT UPPER(F.TABLESPACE_NAME) "表空间名", D.TOT_GROOTTE_MB "表空间大小(M)", D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)", TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,2),'990.99') "使用比", F.TOTAL_BYTES "空闲空间(M)", F.MAX_BYTES "最大块(M)" FROM (SELECT TABLESPACE_NAME, ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES, ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES FROM SYS.DBA_FREE_SPACE GROUP BY TABLESPACE_NAME) F, (SELECT DD.TABLESPACE_NAME, ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB FROM SYS.DBA_DATA_FILES DD GROUP BY DD.TABLESPACE_NAME) D WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME ORDER BY 4 DESC;
(2)查看表空间以及其下数据文件
中文展示: select b.file_name 物理文件名, b.tablespace_name 表空间, b.bytes/1024/1024 大小M, (b.bytes-sum(nvl(a.bytes,0)))/1024/1024 已使用M, substr((b.bytes-sum(nvl(a.bytes,0)))/(b.bytes)*100,1,5) 利用率 from dba_free_space a,dba_data_files b where a.file_id=b.file_id group by b.tablespace_name,b.file_name,b.bytes order by b.tablespace_name; 英文展示: select b.file_name datafile, b.tablespace_name tablespace, b.bytes/1024/1024 total_M, (b.bytes-sum(nvl(a.bytes,0)))/1024/1024 used_M, substr((b.bytes-sum(nvl(a.bytes,0)))/(b.bytes)*100,1,5) percent from dba_free_space a,dba_data_files b where a.file_id=b.file_id group by b.tablespace_name,b.file_name,b.bytes order by b.tablespace_name;
7、默认表空间(从v$tablespace中查看)
SYSTEM、SYSAUX、TEMP、UNDOTBS1、USERS、EXAMPLE
(1)SYSTEM是系统表空间,存放系统的最基本的信息,如果SYSTEM表空间坏掉,Oracle将无法启动。
(2)SYSAUX从10g中引入,作为SYSTEM的辅助表空间,用以减少SYSTEM表空间的负荷 。
以前其他表空间中的一些组件,现在放到SYSAUX表空间中了。
比如,以前SYSTEM表空间中LogMiner、以前SYSTEM表空间中Logical Standby、Spatial、以前DRSYS表空间中Oracle Text等。
(3)TEMP是临时表空间,当排序不能在分配的空间中完成时,就会使用磁盘排序的方式,即在Oracle实例中的临时表空间中进行。
(4)UNDOTBS1是撤销表空间,是UNDO类型的表空间,保存用户进行DML操作中,修改前的数据。
(5)USERS是数据库默认的永久表空间。
用户创建后,如果默认,那么用户下的数据都在USERS这个表空间中,
select * from dba_users where username='TEST';
(6)EXAMPLE是数据库测试用例所涉及的表的所属表空间。
8、创建表空间及用户的关系
(1)用户创建后:
SQL> create user test identified by test;
(2)test:
用户默认是在USES表空间下,后期test用户下的表和所有数据都在此表空间下。
SQL> select default_tablespace from dba_users where username='TEST'; SQL> select * from dba_tables where owner='TEST';
(3)如果创建过程,指定了表空间,则就在此表空间中;
SQL>create user messhycbz identified by "Mes#shycbz" default tablespace MESPRD_TBSP temporary tablespace TEMP profile DEFAULT;
(4)更改数据库的默认表空间为其他的;
SQL> alter database default tablespace test_tbs;