第一章 数据库的启动与关闭
1.Oracle启动过程中,观察告警日志,先列出参数文件中费缺省参数,然后是后台进程启动过程,包含PID和OS ID两个信息,其中PID表示该进程在数据库内部的标识符编号,而OS ID则代表该进程在操作系统上的进程编号。
注:9i没有OS ID,10g有,11g为每个进程增加了时间标记。
为什么没有PID=1的进程?
查看v$process视图
v$process.addr=v$session.paddr
$ORACLE_HOME/dbs spfile<ORACLE_SID>.ora ---> spfile.ora --->init<ORACLE_SID>.ora 这三个都不存在,则数据库无法启动
show parameter spfile 查看是否使用了spfile文件,value不为null则使用了spfile文件
?代表ORACLE_HOME ,@ 代表ORACLE_SID
同一个ORACLE_HOME下,oracle根据ORACLE_SID将实例区分开来,但是在不同的ORACLE_HOME下,即使是同一台主机,oracle也能创建相同ORACLE_SID的实例。
instance_name是初始化参数,默认值为ORACLE_SID。但是不同的实例可以拥有相同的instance_name。在同一个ORACLE_HOME下,只要ORACLE_SID不同,数据库并不校INSTANCE_NAME,show parameter instance_name即可看到。但是在v$instance视图中,instance_name始终和oracle_sid保持一致。
监听器动态注册时,注册信息里的instance是instance_name参数
db_name不超过8个字符,监听器动态注册的时候,作为缺省服务名注册。
RMAN非常特殊,oracle允许在不存在参数文件的情况下启动一个实例,数据库db_name缺省为DUMMY,这是极端情况。
在nomount状态,可以查询v$parameter视图,这部分信息来自参数文件。
v$recover_file
mount状态,控制文件每3秒更新一次,heartbeat 心跳。
如果不存在password文件,则远程用户无法使用sysdba/sysoper身份登录数据库。
password文件在mount阶段检测,但即使该文件不存在,数据库也能正常mount,只在告警日志文件中报错。(oracle 9i)
从oracle10g开始,启动过程中,即使找不到password文件,数据库也不报错,只是和口令文件相关的部分功能无法使用。
lk<ORACLE_SID>文件,锁定文件。数据库启动时锁定,关闭时释放。
oracle OPEN阶段的一致性校验
1.检查数据文件头中的检查点计数(checkpoint cnt)是否和控制文件中的检查点计数一致,此步骤检查用以确认数据文件是来自同一版本,而不是从备份中恢复而来(因为checkpoint cnt不会被冻结,会一直被修改,和scn不同)。(介质恢复?)
如果检查点计数检查通过,则数据库进行第二次检查。
2.检查数据文件头开始SCN和控制文件中记录的该文件的SCN是否一致,如一致,则不需要恢复。(实例恢复?)
监听器文件(listener.ora)主要包括两个部分
1.LISTENER信息,包含监听的协议,地址,端口。
2.SID_LIST_LISTENER信息,
SID_NAME=PLSExtProc 是数据库缺省就包含的对外部存储过程提供的本地监听
GLOBAL_DBNAME 和客户端请求中的SERVICE_NAME相匹配
通过服务名,oracle可以把客户端和服务器彻底隔离开。客户端不需要关心数据库的名字,实例名是什么。
动态注册,PMON进程。
动态注册的服务名,实例状态为READY,静态为UNKNOWN。
local_listener参数,指定数据库实例动态注册到哪个监听器上。在tnsnames.ora文件中,可以配置非默认端口监听器的解析。
remote_listener 远程注册
shutdown abort 之前,最好alter system checkpoint,减少数据库启动时实例恢复时间。