一、Oracle数据库体系结构
体系结构由下面组件组成:
1、Oracle服务器(Server):由数据库实例和数据库文件组成,另外在用户建立与服务器的连接时启动服务器进程并分配PGA(程序全局区)
(1)数据库实例(Instance)
数据库实例由一些内存区和后台进程组成。
(a)内存区:共享池、数据库高速缓存、重做日志缓存、流池以及其他可选内存区
(b)后台进程:系统监控进程(SMON)、进程监控(PMON)、数据库写进程(DBWR)、日志写进程(LGWR)、检验点进程(CKPT)、其他进程
(2)数据库文件
数据库文件由数据文件、控制文件、重做日志文件组成。
(a)数据文件:数据库中的实际数据
(b)控制文件:包含维护数据库和验证数据库完整性的信息,是二进制文件。
(c)重做日志文件:包含数据库发生变化的记录,在发生故障时用于数据恢复。
2、服务器进程
3、用户进程
4、参数文件
也称为数据库初始化文件,定义数据库实例的特性,包含为SGA中内存结构分配空间的参数。
分为pfile文件和spfile文件。
(a)pfile文件:文件名默认为init.ora,属于静态文件,可以使用文本编辑器编辑,修改后需要重启实例才生效。
(b)spfile文件:文件名默认为spfile<ORACLE_SID>.ora,属于二进制的动态文件,只能通过Oracle指令修改,修改后直接生效。
Oracle 11g默认使用spfile启动,也可以使用pfile文件启动数据库,如:startup pfile='d:\init_123.ora'
5、密码文件
授予用户启动和关闭数据库实例。
6、归档日志文件
二、数据库启动过程
启动过程涉及到三个状态:nomount、mount、open
1、nomount状态
只打开数据库实例。
使用startup nomount启动。
C:\Users\LC>sqlplus /nolog
SQL> connect /as sysdba
已连接。
SQL> startup nomount
ORACLE 例程已经启动。
Total System Global Area 1686925312 bytes
Fixed Size 2176368 bytes
Variable Size 989858448 bytes
Database Buffers 687865856 bytes
Redo Buffers 7024640 bytes
SQL> select * from v$controlfile;
未选定行
SQL> show parameter control_files;
NAME TYPE VALUE
---------------------------------------------------------------------------------------------------------------
control_files string D:\APP\LC\ORADATA\TESTDB\CONTROL01.CTL, D:\APP\LC\FLASH_RECOVERY_AREA\TESTDB\CONTROL02.CTL
说明:
select * from v$controlfile;用于测试此时控制文件是否已打开。
show parameter control_files;获取控制文件的位置。
2、mount状态
根据参数文件中控制文件的位置找到并打开控制文件,读取控制文件中的各种参数信息,如数据文件和日志文件的位置等。
启动到mount状态有二种方式,一是使用指令startup mount直接启动到mount状态,二是在数据库是nomount状态时使用alter指令切换到mount状态。
SQL> alter database mount;
数据库已更改。
此时使用select * from v$controlfile;能查询到控制文件的信息。
但是此时数据库并没有打开,数据文件无法读取,例如查询表会出错。
3、open状态
将打开数据文件并进行一系列的检查工作,这些检查工作用于数据恢复;
启动到open状态有二种方式,一是使用指令startup(默认是open)或startup open直接启动到open状态,二是在数据库是nomount或mount状态时使用alter指令切换到open状态。在启动数据库时,可以执行startup直接启动数据库到open状态,这个过程仍然要经历上面三个状态。
SQL> alter database open;
数据库已更改。
三、数据库关闭过程
关闭过程和启动相反,经历了close、dismount、shutdown。
可以分步关闭,也可以直接关闭。
分步关闭:
1、close数据库
关闭数据文件、日志文件等。
SQL> alter database close;
数据库已更改。
2、dismount数据库
关闭控制文件。
SQL> alter database dismount;
数据库已更改。
3、shutdown数据库
关闭实例。
shutdown有4个参数:shutdown normal(默认)、shutdown immediate(推荐)、shutdown transactional、shutdown abort
SQL> shutdown
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
另外,有一次测试中,shutdown immediate以后再startup 报错:监听程序当前无法识别连接描述符中请求的服务
关闭当前sqlplus窗口,在开始运行-> sqlplus / as sysdba -> startup