More Related Content Similar to 3, OCP - instance management (20) 3, OCP - instance management3. Initialization Parameters
- Overview
• 初始化参数控制了oracle数据库的各个方面, 这
些参数中大概有300个是支持DBA进行设定的,
它们又分为基础参数(大概33个, 根据版本不同)
和高级参数, 通常而言DBA需要考虑的是那些基
础参数; 另外还有1500个左右的隐藏参数, 这些
参数是不支持DBA进行设定的;
• 初始化参数分为静态的和动态两种类型, 前者
在实例启动之后不能被修改, 大部分参数都是
动态的, 这些参数的设置保存在pfile或者动态
的spfile中; 除了DB_NAME参数之外所有的参数
都有默认值, 如果没有在参数文件中进行设置,
则会使用它们的默认值.
4. Initialization Parameters
- Parameter file
• oracle数据库可以使用pfile或者spfile作为启动参数文件, pfile的命名格式为:
– init${ORACLE_SID}.ora 或者 init.ora
spfile是在oracle的后期版本引入的, 命名格式为:
– spfile${ORACLE_SID}.ora 或者 spfile.ora
spfile相比pfile的好处在于:
– 动态改变参数, 无需重启数据库;
– spfile不能被人工编辑, 从而减少错误的发生;
– 可以使用RMAN对spfile进行备份.
• 实例在启动时会查看${ORACLE_HOME}/dbs(Unix, linux)或者
${ORACLE_HOME}/database目录, 并按照如下顺序读取参数文件:
– spfile${ORACLE_SID}.ora (SPFILE = Server Parameter File)
– spfile.ora (SPFILE)
– init${ORACLE_SID}.ora (PFILE)
– init.ora (PFILE)
使用下面的sql语句查看当前使用的是pfile还是spfile:
SELECT DECODE (value, NULL, 'PFILE', 'SPFILE') "Init File Type", value
FROM sys.v_$parameter WHERE name = 'spfile';
• 使用如下语句创建pfile或者spfile
create spfile [='spfilename'] from pfile [='pfilename'];
create pfile [='pfilename'] from spfile [='spfilename'];
5. Initialization Parameters
- Static vs. Dynamic
• 可以通过视图v$parameter和v$spparameter查
看当前的启动参数的设置, 前者返回的是当前
实例运行时参数设置, 后者则是spfile中保存的
参数设置, 通常情况下两者相同. 不同的情况可
能发生在: DBA修改了某个静态参数的值, 并且
写入了spfile; 或者修改某个动态参数的值, 但未
写入spfile.
• 通过如下sql语句判断参数是静态的还是动态的:
select NAME, ISSES_MODIFIABLE, ISSYS_MODIFIABLE
from v$parameter where name like '%%';
6. Initialization Parameters
- Alter Parameter Value
• 使用alter system语句修改初始化参数, 该语句会在系统级别修改
参数的值, 格式如下:
alter system set pname=pvalue
[scope=both|memory|spfile]
scope选项各个值的含义分别是:
– both 同时修改内存和spfile
– memory 仅修改内存
– spfile 仅修改spfile
默认情况下scope值为both. 需要注意以下情况会导致
该语句失败:
– 修改静态参数但scope未指定为spfile;
– 使用pfile启动数据库但指定scope为spfile;
• 根据不同的参数, 可以在system级别, session级别或者同时允许在
这两个级别进行设置. 比如optimizer_mode参数既可以在system级
别也可以在session级别设置, nls_date_format参数则只允许在会
话级别进行设置. 会话级别设置则使用alter session 语句, 该语句
的格式: alter session set pname=pvalue
7. Initialization Parameters
- Basic Parameters
• 通常DBA需要考虑的是基础启动参数, 使用如下sql
查询有哪些基础参数:
select name,value from v$parameter
where isbasic='TRUE' order by name;
下面是基础参数的一个列表(这些参数将分别在之
后的章节中讨论):
10. Database Control
- Overview
• Database Control是oracle提供的一个基于Java & Perl编写的工
具, 用于实现对数据库服务器的远程控制, 需要通过web浏览器
进行操作. 以oracle系统用户登录, 使用以下命令启动/停止/查
看Database Control的状态(执行命令之前确保正确设置了
ORACLE_HOME, ORACLE_SID, PATH等环境变量):
emctl start|stop|status dbconsole
使用类似如下的链接进行登录: https://hostname:port/em/, 会
打开下面的页面. 默认端口为1158, 具体可以查看
$ORACLE_HOME/install/portlist.ini文件.
• Database Control是oracle推荐用于数据库管理的方式, 可以用
于执行如下动作:
– 启动和关闭数据库以及监听器;
– 查看数据库运行状态, 数据库配置状态;
– 查看数据库性能信息.
12. SYSDBA vs. SYSOPER
• SYSDBA 和 SYSOPER是oracle数据库的角色, 角色是一
个权限控制的概念在以后会讲到. 通过操作系统或
者密码文件验证, 用户可以以SYSDBA或者SYSOPER角
色登录. SYSOPER角色可以在sql*plus中执行如下命令:
startup
shutdown
alert database mount|open|close|dismount
alter [database|tablespace] begin|end backup
recover
SYSDBA角色拥有对数据库的最高控制权限, 比如以
SYSDBA登录的用户可以创建用户, 创建数据库等; 默
认情况下只有SYS用户拥有SYSDBA/SYSOPER角色, SYS
用户可以将这些角色分配给其他的用户.
13. Database Startup
- Overview
• 可以通过两种方式启动oracle数据库:
– 通过SQL*PLUS命令行工具
SQL*PLUS是oracle自带的一个oracle客户端工具, 可以通过该工具连
接本地或者远程数据库, 并进行相应的操作. DBA通常使用如下的两
个步骤登录数据库:
sqlplus /nolog # 进入sqlplus, 不提示验证信息
connect username/passwd [as sysdba] # 登录数据库
startup # 运行startup命令
– 使用Database ControL
• Logon by OS Auth
如果可以访问数据库所在的操作系统并且具备相应的权限, 那么
则可以绕过数据库的验证直接以SYSDBA的身份登录, 这要求系
统用户在dba系统用户组中. 在创建数据库时, 我们创建了oracle
用户并将它设置在dba用户组中, 因此该用户可以直接以SYSDBA
身份登录, 通过以下命令: sqlplus / as sysdba. 当用户以这种方式
登录数据库时实际上是以SYS用户登录.
14. Database Startup
- Startup: nomount, mount and open
• oracle数据库的启动可以分为这些阶段: 启动实例(内存+
进程), 挂载数据库(mount), 打开数据库(open). 数据库具
有如下状态:
– SHUTDOWN(关闭)
– NOMOUNT
此时数据库实例已经启动但数据库没有被挂载.
– MOUNT
此时数据库实例已经启动, 并且已读取控制文件.
– OPEN
数据库实例已经启动, 数据文件被打开, 等待客户端用户连接.
• 在不同的数据库启动阶段需要读取相应的文件, 那么
oracle是如何读取到这些文件的呢? 下面按照数据库启动
的各个阶段进行介绍.
– NOMOUNT
此阶段需要读取数据库初始化参数文件, 参考《 Parameter file》
15. Database Startup
- Startup: nomount, mount and open
– MOUNT
此阶段需要读取控制文件, 控制文件是通过前一
阶段读取的CONTROL_FILES参数进行定位的. 这一
阶段会读取数据库数据文件/在线重做日志文件
的位置信息, 但此时不会定位和读取这些文件.
– OPEN
此阶段会根据前一阶段读取的文件位置信息对这
些文件进行定位和打开.
17. Database Shutdown
• 关闭数据库的顺序与打开数据库正好相反, 首先数据库被关闭,
然后被卸载, 最后实例被终止. 在关闭数据库阶段, 所有的回话
被终止, 活动的事务被回滚, CKPT进程被调用. 最后, 数据文件
和在线重做日志文件被关闭; 卸载阶段, 控制文件被关闭; 最后,
SGA内存被释放相应的后台进程被终止, 实例终止.
• Shutdown: NORMAL, TRANSACTIONAL, IMMEDIATE, and ABORT
执行shutdown时, 可以指定为上述四个选项:
NORMAL
默认选项, 不允许新的会话, 当所有的用户都退出登录时, 数据库被关闭;
TRANSACTIONAL
不允许新的会话, 不处在事务中的会话被终止, 其它的会话在事务完成时被
终止. 当所有的会话都终止时, 数据库被关闭;
IMMEDIATE
不允许新的会话, 所有当前连接的会话被终止, 活动的事务被回滚, 然后数
据库被关闭;
ABORT
相当于断电(power failure), 实例被立即终止.
TIP: ABORT操作不会损坏数据库, 但是在abort操作之后不建议对数据库作
备份操作.
18. Database Shutdown
• Shutdown: NORMAL, TRANSACTIONAL, IMMEDIATE,
and ABORT
前三种类型的数据库关闭均被称为有序的(orderly),
在所有的会话终止之后PMON会回滚所有未完成的
事务, 之后CKPT进程被调用, LGWR进程将所有的重做
日志写入文件; 最后文件句柄被关闭. 在这种情况下,
数据库最终处在一致的(consistent)状态.
ABORT类型的关闭被称为非有序的(disorderly), 此时
数据库处在一种不一致的(inconsistent)状态. 在数据
库下一次启动时, 会修复这种状态.
• 可以使用如下命令代替shutdown:
alter database close;
alter database dismount;
19. Alert Log and Trace File
• 告警日志文件(Alert log file)存放在数据库
BACKGROUND_DUMP_DEST参数指定的位置, 按照alert_SID.log的
格式命名, 该文件包含了对实例或者数据库采取的某些关键操作,
具体包含:
– 启动和停止数据库操作, 包含中间命令比如alter database mount;
– 实例内部错误, 比如ORA-600错误;
– 检测到的数据文件块损坏;
– 死锁信息;
– 影响数据库物理存储结构的操作, 比如创建或者重命名数据文件或
者重做日志文件;
– 修改启动参数的ALTER SYSTEM命令;
– 重做日志切换和日志归档操作.
关于数据库启动的告警日志会显示所有非默认配置的初始化参数, 结
合ALTER SYSTEM/DATABASE命令的记录, 可以得到数据库/实例的所有
历史变化, 这对于数据库问题的诊断有很大的价值.
Tip: 对于很多的DBA而言, 告警日志是他们诊断问题的第一站.
20. Data Dictionary Views
• Oracle数据字典是对数据库的定义, 动态性能视图则包含
了当前实例的运行性能信息, 这两者对于实例性能的监
控和诊断非常具有参考价值.
• Data Dictionary Views
数据字典包含的是数据库元数据, 它包括: 数据库的物理
和逻辑描述, 数据库对象(表/索引/PLSQL过程)描述, 完整
性约束, 用户定义, 安全信息, 以及性能监控信息. 数据字
典以段(segment) 存储在SYSTEM/SYSAUX表空间中. 常用
的数据字典视图有:
– DBA_OBJECTS A row for every object in the database
– DBA_DATA_FILES A row describing every datafile
– DBA_USERS A row describing each user
– DBA_TABLES A row describing each table
– DBA_ALERT_HISTORY Rows describing past alert conditions
21. Dynamic Performance Views
• 有超过300多个的动态性能视图, 这些视图的名称以
V$开头, 实际上它们是指向相应的V_$视图的同义词.
动态性能视图的数据大部分基于实例, 比如
V$INSTANCE/V$SYSSTAT是基于实例的视图, 这些视图
的数据只要实例启动了就可以读取比如数据库处在
nomount状态也可以读取这些视图;有一小部分则是
根据控制文件得到的, 比如v$database, v$datafile, 这
些视图必须等到数据库打开之后才能够被访问.
• 动态性能视图在数据库启动阶段被创建, 随着实例
的运行数据会增加或者被更新. 在数据库关闭时, 这
些视图被删除.
TIP: 性能视图和数据字典视图会存在一些重叠, 比如
v$tablespace描述的是数据字典信息; 另外字典视图
通常是复数, 而性能视图为单数.