数据库有3层结构:
1、进程结构:用户进程、服务器进程、后台进程
2、内存结构:PGA、SGA
3、物理结构(存储结构):数据文件、控制文件、日志文件、密码文件、归档日志等等。
DBA User process
1、工具使用:sqlplus,pl/sql develop,sqldevelop,toad,...
2、访问数据库:
a、本机(sock方式 IPC):$ sqlplus / as sysdba
b、通过TCP建立链接到oracle服务器:
$ sqlplus sys/oracle@ora10g as sysdba
$ tnsping ora10g
ora10g --> 必须在 $ORCLE_HOME/network/admin/tnsnames.ora 配置出如何访问到远程数据库服务器
也可以:
$ sqlplus sys/oracle@updba.host.com:1521/ora10g as sysdba
--> 不需要任何配置,但oracle服务器必须在$ORCLE_HOME/network/admin/listener.org定义被远程方式
c、oracle网络配置
3、User process 和 server process 建立链接之后,把相关信息存储在PGA,
PGA ( Program Global Area 程序全局区)是一块包含一个服务进程的数据和控制信息的内存区域,Stack space。
4、 UGA(User Global Area 用户全局区)由用户会话数据、游标状态和索引区组成,Session information, Sort area, Hash area。
5、数据语句执行过程:
1)、用户进程执行一个查询语句,select * from table_name where id = 3829;
2)、用户进程已经跟服务器进程,把用户进程的信息存储到PGA的UGA中。
3)、语句经过PGA处理后传递给实例(instance)。
4)、实例中的共享池(Shared Pool)负责处理这条语句。
5)、库缓存区去判断语句,是否软分析(是否以前查过)还是硬分析(语法分析,是否需要优化,。。。)
6)、根据CBO得到的执行计划准备去执行语句
7)、查询语句中的对象存放在那个表空间的,指定的行放在那个块里面的?
8)、数据字典缓存区得到这些信息。
9)、开始执行。。。
10)、判断在数据缓存区(database buffer cache)中是否缓存了需要的块?
11)、如果是,在内存读数据得到需要的行的结果返回给用户,用户看到执行的结果。
12)、如果没有,则服务器进程把块从磁盘读入database buffer cache缓存下来,然后ndo缓存块会对该数据做镜像,然后读镜像中的数据得到行的结果,用户看到了执行的结果。