Instance Management
Overview
• 实例管理主要讨论以下方面的内容:
 – 数据库初始化参数的设置
 – 数据库的启动和关闭
 – 数据库告警日志和跟踪文件
 – 数据字典和动态性能视图
实例的管理对于数据库的性能调优 和 灾难
恢复均十分重要, 一个好的oracle DBA应当十
分熟悉这些内容.
Initialization Parameters
             - Overview
• 初始化参数控制了oracle数据库的各个方面, 这
  些参数中大概有300个是支持DBA进行设定的,
  它们又分为基础参数(大概33个, 根据版本不同)
  和高级参数, 通常而言DBA需要考虑的是那些基
  础参数; 另外还有1500个左右的隐藏参数, 这些
  参数是不支持DBA进行设定的;
• 初始化参数分为静态的和动态两种类型, 前者
  在实例启动之后不能被修改, 大部分参数都是
  动态的, 这些参数的设置保存在pfile或者动态
  的spfile中; 除了DB_NAME参数之外所有的参数
  都有默认值, 如果没有在参数文件中进行设置,
  则会使用它们的默认值.
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'];
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 '%%';
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
Initialization Parameters
            - Basic Parameters
• 通常DBA需要考虑的是基础启动参数, 使用如下sql
  查询有哪些基础参数:
 select name,value from v$parameter
      where isbasic='TRUE' order by name;
 下面是基础参数的一个列表(这些参数将分别在之
 后的章节中讨论):
Initialization Parameters
    - Basic Parameters
Initialization Parameters
    - Basic Parameters
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推荐用于数据库管理的方式, 可以用
  于执行如下动作:
  – 启动和关闭数据库以及监听器;
  – 查看数据库运行状态, 数据库配置状态;
  – 查看数据库性能信息.
Database Listener
• oracle数据库监听器用于接收对数据库的连接请求,
  有3中方式启动监听器:
 – 使用lsnrctl工具命令
   使用oracle用户登录后, 运行lsnrctl start|stop|status命令
 – 使用database control
    在相关的页面中可以找到启动与停止监听器的链接




 – windows平台上可注册为系统服务
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
 用户可以将这些角色分配给其他的用户.
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用户登录.
Database Startup
 - Startup: nomount, mount and open
• oracle数据库的启动可以分为这些阶段: 启动实例(内存+
  进程), 挂载数据库(mount), 打开数据库(open). 数据库具
  有如下状态:
  – SHUTDOWN(关闭)
  – NOMOUNT
    此时数据库实例已经启动但数据库没有被挂载.
  – MOUNT
    此时数据库实例已经启动, 并且已读取控制文件.
  – OPEN
    数据库实例已经启动, 数据文件被打开, 等待客户端用户连接.
• 在不同的数据库启动阶段需要读取相应的文件, 那么
  oracle是如何读取到这些文件的呢? 下面按照数据库启动
  的各个阶段进行介绍.
  – NOMOUNT
  此阶段需要读取数据库初始化参数文件, 参考《 Parameter file》
Database Startup
- Startup: nomount, mount and open
 – MOUNT
 此阶段需要读取控制文件, 控制文件是通过前一
 阶段读取的CONTROL_FILES参数进行定位的. 这一
 阶段会读取数据库数据文件/在线重做日志文件
 的位置信息, 但此时不会定位和读取这些文件.
 – OPEN
 此阶段会根据前一阶段读取的文件位置信息对这
 些文件进行定位和打开.
Database Startup
- Startup: nomount, mount and open
Database Shutdown
• 关闭数据库的顺序与打开数据库正好相反, 首先数据库被关闭,
  然后被卸载, 最后实例被终止. 在关闭数据库阶段, 所有的回话
  被终止, 活动的事务被回滚, CKPT进程被调用. 最后, 数据文件
  和在线重做日志文件被关闭; 卸载阶段, 控制文件被关闭; 最后,
  SGA内存被释放相应的后台进程被终止, 实例终止.
• Shutdown: NORMAL, TRANSACTIONAL, IMMEDIATE, and ABORT
  执行shutdown时, 可以指定为上述四个选项:
  NORMAL
  默认选项, 不允许新的会话, 当所有的用户都退出登录时, 数据库被关闭;
  TRANSACTIONAL
  不允许新的会话, 不处在事务中的会话被终止, 其它的会话在事务完成时被
  终止. 当所有的会话都终止时, 数据库被关闭;
  IMMEDIATE
  不允许新的会话, 所有当前连接的会话被终止, 活动的事务被回滚, 然后数
  据库被关闭;
  ABORT
  相当于断电(power failure), 实例被立即终止.
  TIP: ABORT操作不会损坏数据库, 但是在abort操作之后不建议对数据库作
  备份操作.
Database Shutdown
• Shutdown: NORMAL, TRANSACTIONAL, IMMEDIATE,
  and ABORT
  前三种类型的数据库关闭均被称为有序的(orderly),
  在所有的会话终止之后PMON会回滚所有未完成的
  事务, 之后CKPT进程被调用, LGWR进程将所有的重做
  日志写入文件; 最后文件句柄被关闭. 在这种情况下,
  数据库最终处在一致的(consistent)状态.
  ABORT类型的关闭被称为非有序的(disorderly), 此时
  数据库处在一种不一致的(inconsistent)状态. 在数据
  库下一次启动时, 会修复这种状态.
• 可以使用如下命令代替shutdown:
  alter database close;
  alter database dismount;
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而言, 告警日志是他们诊断问题的第一站.
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
Dynamic Performance Views
• 有超过300多个的动态性能视图, 这些视图的名称以
  V$开头, 实际上它们是指向相应的V_$视图的同义词.
  动态性能视图的数据大部分基于实例, 比如
  V$INSTANCE/V$SYSSTAT是基于实例的视图, 这些视图
  的数据只要实例启动了就可以读取比如数据库处在
  nomount状态也可以读取这些视图;有一小部分则是
  根据控制文件得到的, 比如v$database, v$datafile, 这
  些视图必须等到数据库打开之后才能够被访问.
• 动态性能视图在数据库启动阶段被创建, 随着实例
  的运行数据会增加或者被更新. 在数据库关闭时, 这
  些视图被删除.
  TIP: 性能视图和数据字典视图会存在一些重叠, 比如
  v$tablespace描述的是数据字典信息; 另外字典视图
  通常是复数, 而性能视图为单数.
END