关于 Oracle 实例管理
理解初始化参数文件
实例由内存中构建它的参数来定义。许多参数(但不是全部)可以在启动后更改。有些参数在启动时就固定了,只能在关闭实例并再次启动时更改。
静态和动态参数文件
参数文件由两类:静态参数文件(也称pfile或初始文件)和动态服务器参数文件(也称为spfile)。无论哪种类型,初始化参数文件都在内存中存储了建立实例、启动后台进程所用参数的值。有3个默认的文件名。
在UNIX上,它们是:
$Oracle_HOME/dbs/spfile<SID>.ora
$ORACLE_HOME/dbs/spfile.ora
$ORACLE_HOME/dbs/init<SID>.ora
在windows上,它们是:
%ORACLE_HOME%\database\SPFILE<SID>.ORA
%ORACLE_HOME%\database\SPFILE.ORA
%ORACLE_HOME%\database\INIT<SID>.ORA
<SID>是指参数文件启动的实例名。上述顺序非常重要。除非在启动命令中指定了pfile,否则Oracle会按照上述列表的顺序执行,使用它找到的第一个文件,而忽略其他文件。如果它们都不存在(也没有指定非默认的pfile),实例就不会启动。
spfile是一个服务器段文件,不能重命名或重新定位。唯一的例外是使用GI,在GI注册表中可以注册非默认的文件名和位置名。在启动实例时,SMON后台进程会读取它。spfile是一个二进制文件,不能手工编辑。
要修改spfile中的值,使用ALTER SYSTEM SET命令,或者Database Express的参数编辑功能。
要创建spfile: CREATE SPFILE [ = filename ] FROM PFILE [ = filename ];
pfile是一个客户端文件,它默认存在于ORACLE_HOME目录下,但实际上它由用户进程读取,该用户进程发出启动实例的命令。可以随意重命名或移动pfile,但如果这么做,就不能在默认情况下找到它,必须在STARTUP命令上指定其名称和位置。pfile是一个ACII文本文件,可编辑。
要创建pfile: CREATE SPFILE [ = filename ] FROM SPFILE [ = filename ];
文件SPFILE<SID>.ORA最便于用作参数文件。一般情况下,仅在RAC环境中使用spfile.ora,在这个环境中,可以使用一个文件启动几个实例。只有需要手工编辑,才使用init<SID>.ora。
静态和动态参数以及初始化参数文件
要查看当前在运行的实例中生效的参数值:select name,value from v$parameter order by name;
显示磁盘上spfile中存储的值:select name,value from v$spparameter order by name;
有些参数可以在实例运行时更改,而其他参数(称为静态参数)是启动实例时就固定下来的。对于可更改参数的更改的效果是立竿见影的,并且会可选地写出到spfile中,下次停止或启动实例时,将从spfile中读取新值。
要更改静态参数,则必须将更改写入spfile中,但将在下次启动时生效。
基本参数
基本实例参数是应该为每个数据库使用的参数。要查看基本参数机器当前值:select name,value from v$parameter where isbasic='TRUE' order by name;
更改参数
语法:ALTER SYSTEM SET <name> = <value> SCOPE = MEMORY | SPFILE | BOTH
scope子句的默认值是BOTH,其含义是如果没有指定SCOPE,更改就应用于运行着的实例,并写入spfile,这是一个永久的更改。
如果不将SCOPE指定为SPFILE,将无法更改静态参数。SCOPE的默认值是BOTH,即作用于运行中的实例和spfile。如果使用pfile启动实例,那么设置SCOPE=SPFILE将失败。
启动和关闭Oracle数据库实例
启动数据库侦听器
数据库侦听器是一个进程,它监视一个端口的数据库连接请求。
lsnrctl start [ <listener> ]
lsnrctl status [ <listener> ]
启动和关闭数据库
1.使用适当权限进行连接
普通用户无权启动或关闭数据库,必须使用某种外部身份认证方式来连接数据库:必须通过操作系统进行身份验证,以拥有Oracle软件的小组成员身份出现,或者给出外部口令文件中存在的用户名/口令组合。
SYSDBA和SYSOPR并非用户,而是可以授予用户的权限。默认方式下,在未将这些权限专门授予其他用户之前,只有SYS用户才拥有这些权限。
如果拥有SYSDBA权限,就能以用户SYS的身份登录到实例,这是数据库中权力最大的用户,也是数据字典的所有者。使用SYSOPR权限可以作PUBLIC用户进行连接,PUBLIC不是普通意义上的用户,而是具有管理权限的概念用户,但它无权查看或操作数据。
2.启动:NOMOUNT、MOUNT和OPEN
实例和数据库时独立实体,可以独立存在,因此,启动过程分成多个阶段:
1.在内存中构建实例
2.用过加载控制文件启用到数据库的连接。
3.打开数据库来使用它。
在任意时刻,数据库将处于以下4中状态之一:
SHUTDOWN:关闭与数据库相关的所有文件,同时实例并不存在
NOMOUNT:实例已构建在内存中(已根据参数文件中指定的参数创建了SGA并启动某些后台进程),但是并没有连接任何 数据库,这种情况在数据库不存在时确实可能出现。
MOUNT:实例定位并读取数据库控制文件。
OPEN:将定位和打开所有数据库文件,并且终端用户能够使用数据库。
执行startup命令时,Oracle会尝试按前述的命名约定,定位参数文件。
实例一旦在NOMOUNT模式中启动成功,就可以通过读取控制文件转换到MOUNT模式。它适用CONTROL_FILE参数(在NOMOUNT模式中启动实例时,读取所适用的参数文件就可以知道这个参数)定位控制文件。如果控制文件(或者控制文件的任何多路复用副本)被损坏或丢失,就不会加载数据库,因此还需要在继续启动进程之前执行适当的动作。如果数据库的加载成功,那么控制文件的所有副本都可用并且相同。
在数据库加载阶段,所有数据文件和连接重做日志文件的名称和位置都从控制文件中读取,但是Oracle仍然没有试图查找这些文件,这些文件的查找在转换至OPEN模式时进行。如果任何文件丢失或损坏,数据库就会停留在MOUNT模式,并且只有在执行适当的动作之后才能打开。
此外,即使所有文件都存在,这些文件在数据库打开之前也必须同步。如果数据库的最近一次关闭是有序的(也就是说数据库缓冲区缓存内的所有数据库缓冲区首先通过DBWn进程被转储至硬盘),那么所有数据文件和联机重做日志文件都将同步:Oracle会知道所有已提交的事务都被安全地存储在数据文件中,并且没有任何未提交的事务被挂起等待回滚。然而,如果数据库的最近一次关闭不是有序的(如断电或服务器重启),那么Oracle必须修复损坏的文件,而且,数据库会被看做处于不一致状态。
加载和代开数据库的进程为SMON。只有在成功打开数据库之后,Oracle才允许用正常的数据字典验证方式,建立用户会话。
数据库的关闭顺序应当与数据库的启动顺序相反。在有序关闭数据期间首先关闭数据库,然后卸载,最后停止实例。在数据库关闭阶段,将终止所有会话:回滚活动的事务,通过DBWn进程将已完成的事务转储至磁盘,同时关闭数据文件和重做日志文件。在数据库卸载阶段,关闭控制文件。随后,通过解除分配SGA和终止后台进程,停止实例。
3关闭:NORMAL、TRANSACTIONAL IMMEDIATE和ABORT
shutdown [ normal | transactional | immediate | abort ]
normal:这是默认选项。使用该选项时,不许可任何新的用户连接,但是允许继续当前的所有连接。只有所有用户(自愿地)退出登录时,数据库才能真正关闭。
transactional:不许可任何新的用户连接,不存在于某个事物中的现有会话将被种猪,允许当前位于某个事物中的会话在完成该事务之后终止。一旦所有会话终止,就会关闭数据库。
immediate:不许可任何新的用户连接,当前所有连接的会话都被终止。任何活动的事务都将回滚,随后数据库会关闭。
abort:就Oracle而言,使用这个选项相当于断电。实例立即终止。此时,不会讲任何数据写入磁盘,也不会采用任何有序的方式终止正在进行的事务。
查看警报日志,访问动态性能视图
警报日志
警报日志是应用于实例和数据库的关键操作的连续记录。其位置由实例参数DIAGNOSTIC_DEST确定,它默认为ORACLE_BASE目录。警报日志的位置和命名如下:
<DIAGNOSTIC_DEST>/diag/rdbms/<DBNAME>/<INSTANCE_NAME>/trace/alter_<instance_name>.log
对于数据库和实例oracl,该值通常如下;
c:\app\oracle\diag\rdbms\orcl\orcl\trace\alter_orcl.log
/u01/app/oracle/diag/rdbms/orcl/orcl/trace/alter_orcl.log
XML格式的警报日志副本在另一个目录下维护:
<DIAGNOSTIC_DEST>/diag/rdbms/<DBNAME>/<INSTANCE_NAME>/alter
警报中记录的关键操作包括;
所有启动和关闭命令,包括中间命令,如ALTER DATABASE MOUNT。
实例的所有内部错误(如ORA-600错误,DBA只能使用My Oracle Support查看它们,如果它们是新问题,就报告给Oracle Support)。
任何检测到的数据文件块损坏情况。
任何已经发生的记录锁定死锁。
影响数据库物理结构的所有操作,如创建或重命名数据文件和联机重做日志。
调整初始化参数值的ALTER SYSTEM命令。
所有日志开关和日志归档。
启动的警报日志项显示参数文件中指定的所有初始化参数。此信息以及随后使用ALTER SYSTEM更改实例的连续记录,以及使用ALTER DATABASE更改数据库物理结构的连续记录,允许用户重新构建对数据库和实例的更改历史。
跟踪文件由各个后台进程生成,一般在遇到错误时生成。这些文件与警报日志一起放在跟踪目录中。
DDL日志
如果DBA选择启用DDL日志,就可以在日志文件中记录DDL命令。所适用的语句就记录在如下目录的文本文件ddl_<instance_name>中,并记录与XML文件log.xml相同的信息:
<DIAGNOSTIC_DEST>/diag/rdbms/<DBNAME>/<INSTANCE_NAME>/log
要启用DDL日志,实例参数ENABLE_DDL_LOGGING必须设置为TRUE(默认为FALSE)。
动态性能视图
动态性能视图有600多个,名称前缀是“V$”,事实上,它们根本不是视图,而是带有“V_$”前缀的视图上的同义词。动态性能视图填充了来自实例或控制文件的信息,前缀为DBA_、ALL_或USER_的视图则填充了来自数据字典的信息。此差异决定了可以在不同启动阶段查询哪些视图。
动态性能视图在数据库启动阶段创建,在实例的生存期内进行更新,在数据库关闭阶段被删除。这意味着动态性能视图包含了从数据库启动开始积累的值。如果数据库连续打开半年时间,那么动态性能视图具有这一段时间内建立的所有数据。