数据库体系结构
定义:
数据库的组成,工作过程,数据库中的数据的组成与管理机制。
组成:
实例、用户进程、服务器进程、数据库文件、
其他文件(参数文件、口令文件、归档文件)。
oracle的概念:
程序全局区(PGA):
定义:
服务器进程使用的一块包含数据和控制信息的内存区域,
PGA是非共享的内存,在服务器进程启动或创建时分配的
(在系统运行时,排序,连接等操作也需要对PGA分配)。
用命令查看:
SQL> show parameter area_size
oracle实例:
后台进程和内存结构的集合。
系统全局区(SGA):
定义:
实例启动时,oracle为实例分配的一个内存块, 这个内存块称为SGA。
是一个庞大的内存空间,会分配一个SGA,
系统全局区并启动一些oracle的后台进程(守护进程)。
组成:
共享池:
缓存一些"程序"数据的地方。
数据缓冲区:
数据在写到磁盘之前或从磁盘读取数据之后,
这些数据存储在块缓冲区缓存中。
日志缓冲区:
数据需写到在线重做日志中,在写到磁盘之前
要在重做缓冲区中临时缓存这些数据。提高访问速度。
JAVA池:
数据中运行java代码会用到。
大池:
用于大块内存分配。共享池不处理。
查看:
SQL> select pool,sum(bytes)bytes from v$sgastat group by pool;
oracle中内存=SGA+PGA
一个实例中只能有一个SGA,所有的服务器进程和后台进程都共享一个SGA。
数据库:
数据的集合,
物理上指存储数据库信息的一组操作系统文件。
物理结构:
构成数据库的一组操作系统文件(3种文件):
数据文件,控制文件,重做日志文件。
逻辑结构:
数据库数据的逻辑存储结构(表空间,段)和模式对象(表,视图等)。
SQL语句的执行过程:
1、编译,语法、语义检查。
2、共享池:
library cache:
缓存正确的SQL语句。
data dictionary cache(数据字典缓存):
缓存权限和对象数据及属性。
防止共享池不够用,采用先进先出的规则:
后执行的sql语句会覆盖先执行的SQL语句。
3、data buffer cache :
从磁盘或存储中将数据块调入内存,缓存在buffer cache中。
4、redo log buffer(重做日志缓冲区):
执行增删改查操作之后,变化后的数据先写入重做日志缓冲区,
变化之前的数据放入重做日志缓冲中。
最后再将变化后的数据写入数据缓存区。
保证在数据恢复时,事务需要提交还是撤回。
查看:
SQL> show parameter shared_pool_size;
//显示0表示自动化管理。
SQL> select name,bytes/1024/1024||‘MB‘ from v$sgainfo;
// 查看共享池的大小。
SQL> set timing on
//启动时间。
SQL> select * from scott.emp;
//查询scott.emp表。
SQL> show parameter db_cache_size;
//查询缓冲区的大小。
oracle进程:
用户进程:
数据库用户请求连接服务器启动。
服务器进程:
用户建立会话并连接实例时启动。
后台进程:
启动实例时启动。
后台进程(5个进程):
DBWn进程:
数据写入进程(DBWR)
将buffer cache中的脏数据写入到硬盘中数据文件中。
脏数据:
修改过的数据存放在内存缓冲区中,事务没有提交,
修改过还没有写入硬盘数据文件的数据。
SQL> col description for a40;
SQL> select paddr,name,description from v$bgprocess where name like ‘DBW%‘;
进程监控进程(PMON):
管理用户会话,会在某个会话出现问题时执行适当的操作。
系统监控进程(SMON):
实例启动时SMON进程会检查所有数据文件的同步信息与控制文件中
记录的检查点信息是否一致,不一致就启动实例恢复操作。
CKPT进程是给SMON进程使用的。
日志写入进程(LGWR):
只有一个。
用户提交事务时触发lgwr进程。
red log buffer空间的三分之一空间被使用完时会触发lgwr进程。
脏数据写入磁盘之前,该LGWR进程将日志信息先写入到日志文件中,
每隔3秒中执行这样的操作。
LGWR进程不能有多个,日志顺序是串行写入,不能做并行写入,
否则无法做数据恢复。
$ ps -elf | grep ora_ |grep lgwr
//查看LGWR进程。
SQL> select paddr,name,description from v$bgprocess where name like ‘LG%‘;
检查点进程(CKPT):
检查所有数据文件和控制文件的头部是否一致,时确保数据完整性的机制。
CKPT进程负责更新数据文件和控制文件的头部信息,并保存检查点信息,
保证数据库日志文件和数据文件的同步。
原理:
在数据库恢复时,只需找到CKPT保存的最后一次检查点,
可根据它确定在日志文件中恢复数据的起始位置,
重新执行之后的日志信息即可。
SQL> select paddr,name,description from v$bgprocess;
//查询所有后台进程。
SQL> select * from v$bgprocess where paddr< >‘00‘;
//检索paddr是00的进程。
SQL> select * from v$bgprocess where paddr=‘00‘;
oracle的存储结构
物理结构:
主要文件:
数据文件:
物理存储数据库数据的文件.dbf。
特点:
每一个数据文件只与一个数据库相联系。
一个表空间可包含一个或多个数据文件。
一个数据库文件只属于一个表空间。
重做日志文件:
扩展名是.log,记录了对数据的所有更改信息,
并提供了一种数据恢复机制,
确保在系统崩溃和其他意外出现后重新恢复数据库。
控制文件:
扩展名.ctl, 是一个二进制文件,
包括数据文件和重做日志文件的名称和位置。
是数据库启动及运行所必须的文件。
其他文件:
参数文件,归档日志文件,密码文件。
逻辑结构:
包括表空间,段,区,块和模式等。
表空间:
永久表空间,临时表空间,撤销表空间。
系统表空间:
SYSTEM,SYSAUX,USERS和TEMP。
oracle用户管理
SYS :
oracle中的超级用户,数据库中所有数据字典和视图都存储在SYS模式中,
SYS用户只能以SYSOPER或SYSDBA角色登录系统。
SYSTEM:
oracle中默认的数据库管理员,拥有DBA的权限。
SCOTT :
oracle数据库的一个示范用户,在数据库安装时创建。
要访问数据库:必须通过oracle身份验证(2种方法):
配置应用程序要求每个需要进行访问的个体都具有不同的数据库账户。
配置应用程序自身作为公共用户连接数据库并在内部处理应用程序级别的权限。
注意:
在数据库内部必须创建一个或多个允许操作数据的用户。
SQL> select * from dba_users;
//查看数据库里面所有用户。有dba权限的账号才可以。
SQL> select * from all_users;
//查看你能管理的所有用户。
SQL> select * from user_users;
//查看当前用户信息。