循序渐进Oracle:数据库管理、优化与备份恢复
上QQ阅读APP看书,第一时间看更新

2.1 Oracle 的 OEM 工具

从Oracle 8开始,Oracle开始随软件提供企业管理器(Oracle Enterprise Manager,OEM), OEM是包含一系列工具的集成管理界面,Oracle在不同的版本中一直在不断地加强这个工具。

在数据库创建过程中,会出现如图2-1的左图所示的数据库身份证明界面。

图2-1 数据库身份证明

这个页面是因为安全原因,Oracle要求我们为数据库缺省用户指定口令,在Oracle 10g中,通常这个列表中会包含4个用户,其中SYS和SYSTEM用户是由来已久的数据库管理用户,而另外两个用户DBSNMP和SYSMAN用户,就是OEM要使用的系统用户。

如果在管理选项界面中不选择“Enterprise Manager 配置数据库”复选框,则DBSNMP 和SYSMAN这两个用户就不会被创建,因此进入数据库身份证明界面时,就只有SYS和SYSTEM用户,如图2-1的右图所示。

OEM除了包括了一组DBA工具,还需要一个数据存储的资料档案库,以及一个图形化显示的控制台。OEM 可以以独立模式启动,也可以通过控制台与数据库服务器上的智能代理(Intelligent Agent)协同工作。智能代理能够监控系统的特定事件并且执行任务,事件和作业的结果会被送回控制台,这样就可以在一个地方集中管理多个数据库系统。

DBSNMP用户就是用于智能代理管理工作的,而SYSMAN用户则是OEM的管理员账号。

2.1.1 传统的OEM工具

在Oracle 10g之前,OEM是基于客户端的Java应用,可以用来连接和管理Oracle数据库;从Oracle 10g开始,Oracle引入了全新的基于Web方式发布的Enterprise Manager,并且分为了2个产品,Database Control和Grid Control。

本节主要介绍如何创建和使用单数据库的DBcontrol,Grid Control需要下载单独的光盘安装;在Oracle 10g中,传统的Java版OEM客户端软件并未包含在Oracle Database Server的软件安装盘中,需要单独下载客户端软件安装盘安装。

在Oracle 9i中,安装了数据库软件之后,OEM会随之安装;在Oracle 10g中,为了缩减安装包大小,加快安装速度,Oracle将很多选件从软件安装包中剥离出去(Oracle宣称Oracle 10g的安装只需要一张光盘,花费20分钟,占用1GB的磁盘空间即可),现在OEM需要通过独立的客户端软件进行安装,这个客户端需要单独下载。在如图 2-2 所示的选择可用产品组件界面中,Enterprise Manager1 0g Java Console就是指传统的OEM客户端。

图2-2 选择可用产品组件

在安装客户端时,可以通过选择不同类型来定制安装,最小的客户端安装程序仅有498KB大小,而“管理员”选项则需约555MB空间,如图2-3所示;安装完成以后就可以通过“开始”菜单启动传统的OEM界面进行数据库管理了。

启动OEM之后,可以通过网络服务名配置文件(tnsnames.ora文件)导入相关连接,并进行相应的数据库管理,如图2-4所示。

通过OEM中会话查看等功能,可以很容易地发现活动会话当前正在执行的SQL语句及其执行计划等信息,如图2-5所示。

图2-3 选择安装类型

图2-4 导入网络连接配置

图2-5 正在执行的SQL语句及执行计划

对于长时间运行的操作,在左侧的实例中选择“会话”部分,相关Session前会显示一个时钟的标识,如图2-6所示,对于这样的会话,我们应该特别注意,通过OEM,可以在右侧看到长时间操作的详细信息,包括当前操作、历史操作及各步操作所用的时间和读取的Block数量;在右图的 SQL 部分,还能捕获最近执行的 SQL 语句及其执行计划(查询 V$SESSION_LONGOPS视图可以直接获得这些重要信息):

图2-6 长时间操作的详细信息

很多朋友还喜欢使用OEM进行高级复制的配置和管理,如图2-7所示。

图2-7 使用OEM进行高级复制的管理

虽然 OEM 管理和维护高级复制直观且简单,但是我们仍然不建议使用 OEM 来进行高级复制管理,因为Java的界面通常消耗的资源较多,加上网络连接的因素,OEM界面很容易失去响应,从而可能导致很多意外,通过命令行操作可以使我们更加熟悉Oracle的本质,又可以减少低级的意外错误。

曾经有朋友使用OEM,在网络暂时失去响应时随意在屏幕上单击,当数据库恢复响应时发现误删除了数据文件,类似的误操作曾经遇到过多起案例,值得读者注意和警醒。

2.1.2 安装Database Control选件

在使用DBCA 创建数据库的时候,可以选择是否启用Oracle Enterprise Manager Database Control管理数据库,如图2-8所示。

图2-8 是否使用Database Control管理数据库

如果在以上界面选择启用 Database Control 管理数据库,则需要在数据库中建立一个SYSMAN的Schema,用于保存Enterprise Manager的一些数据,这就是Enterprise Manager的资料档案库(Repository),其数据存储在SYSAUX表空间中,如图2-9所示。

图2-9 Enterprise Manager资料档案库存储在SYSAUX表空间

选择了使用Database Control管理数据库,则在数据库创建完成之后,Oracle会创建资料档案库及相关环境(可以参考第1章1.3节的内容)。

2.1.3 手工配置DBControl

如果在创建数据库时没有选择 DBcontrol ,或者之后修改过数据库信息,使得原有的DBcontrol失效,则可以通过emca创建、修改、重建或者删除DBcontrol的配置。

在Windows命令行下,键入emca -h命令,则可以看到相关的提示信息:

C:\>emca -h

C:\oracle\10.2.0\bin\emca.bat [操作] [模式] [数据库类型] [标记] [参数]

-h | --h | -help | --help: 打印此帮助消息

-version: 打印版本

-config dbcontrol db [-repos (create | recreate)] [-cluster] [-silent] [-backup] [参数]: 配置数据库的 Database Control

-config centralAgent (db | asm) [-cluster] [-silent] [参数]: 配置中心代理管理

-config all db [-repos (create | recreate)] [-cluster] [-silent] [-backup] [参数]: 配置 Database Control 和中心代理管理

……

现在通过手工方式来配置dbcontrol:

C:\>emca -repos create

EMCA 开始于 2007-1-25 11:01:41

EM Configuration Assistant 10.2.0.1.0 正式版

版权所有 (c) 2003, 2005, Oracle。保留所有权利。

输入以下信息:

数据库 SID: eygle

监听程序端口号: 1521

SYS 用户的口令:

SYSMAN 用户的口令:

是否继续? [yes(Y)/no(N)]: y

2007-1-25 11:01:56 oracle.sysman.emcp.EMConfig perform

信息: 正在将此操作记录到

C:\oracle\10.2.0\cfgtoollogs\emca\eygle\emca_2007-01-25_11-01-41-上午.log。

2007-1-25 11:01:57 oracle.sysman.emcp.EMReposConfig createRepository

信息: 正在创建 EM 资料档案库 (此操作可能需要一段时间)...

2007-1-25 11:06:16 oracle.sysman.emcp.EMReposConfig invoke

信息: 已成功创建资料档案库

已成功完成 Enterprise Manager 的配置

EMCA 结束于 2007-1-25 11:06:16

更详细的日志可以在$ORACLE_HOME/cfgtoollogs/emca目录下找到。

启动EM可以在命令行键入“emctl start dbconsole”命令。由于EM需要J2EE环境支持,正常创建之后,在$ORACLE_HOME 目录下将会建立一个类似$ORACLE_HOME/oc4j/j2ee/OC4J_ DBConsole_<hostname>_<sid>的目录,如果该目录结构不存在,则EM将无法启动:

C:\>set ORACLE_SID=eygle

C:\>emctl start dbconsole

OC4J Configuration issue. C:\oracle\10.2.0/oc4j/j2ee/OC4J_DBConsole_gqgai_eygle not found.

注意到以上目录结构和主机名称有关,如果服务器修改过主机名称(有时候与IP地址相关)等信息,则EM可能无法启动,此时就需要重新配置EM。

如果已经创建过了档案库,则需要指定recreate参数,注意不要在繁忙时段执行重建操作,其密集的SQL可能会引发数据库竞争。重建在命令行输入如下命令即可:

C:\>emca -config dbcontrol db -repos recreate

EMCA 开始于 2007-1-25 11:18:00

EM Configuration Assistant 10.2.0.1.0 正式版

版权所有 (c) 2003, 2005, Oracle。保留所有权利。

输入以下信息:

数据库 SID: eygle

监听程序端口号: 1521

SYS 用户的口令:

DBSNMP 用户的口令:

SYSMAN 用户的口令:

SYSMAN 用户的口令: 通知的电子邮件地址 (可选): eygle@eygle.com

通知的发件 (SMTP) 服务器 (可选): smtp.hurray.com.cn

-----------------------------------------------------------------

已指定以下设置

数据库 ORACLE_HOME ................ C:\oracle\10.2.0

数据库主机名 ................ gqgai

监听程序端口号 ................ 1521

数据库 SID ................ eygle

通知的电子邮件地址 ............... eygle@eygle.com

通知的发件 (SMTP) 服务器 ............... smtp.hurray.com.cn

-----------------------------------------------------------------

是否继续? [yes(Y)/no(N)]: y

2007-1-25 11:18:48 oracle.sysman.emcp.EMConfig perform

信息: 正在将此操作记录到

C:\oracle\10.2.0\cfgtoollogs\emca\eygle\emca_2007-01-25_11-18-00-上午.log。

2007-1-25 11:18:50 oracle.sysman.emcp.EMReposConfig dropRepository

信息: 正在删除 EM 资料档案库 (此操作可能需要一段时间)...

2007-1-25 11:20:25 oracle.sysman.emcp.EMReposConfig invoke

信息: 已成功删除资料档案库

2007-1-25 11:20:25 oracle.sysman.emcp.EMReposConfig createRepository

信息: 正在创建 EM 资料档案库 (此操作可能需要一段时间)...

2007-1-25 11:23:53 oracle.sysman.emcp.EMReposConfig invoke

信息: 已成功创建资料档案库

2007-1-25 11:24:00 oracle.sysman.emcp.ParamsManager getLocalListener

警告: 检索 gqgai 的监听程序时出错

2007-1-25 11:24:02 oracle.sysman.emcp.util.DBControlUtil startOMS

信息: 正在启动 Database Control (此操作可能需要一段时间)...

2007-1-25 11:24:52 oracle.sysman.emcp.EMDBPostConfig performConfiguration

信息: 已成功启动 Database Control

2007-1-25 11:24:53 oracle.sysman.emcp.EMDBPostConfig performConfiguration

警告: 无法创建 Database Control 快捷方式

2007-1-25 11:24:53 oracle.sysman.emcp.EMDBPostConfig performConfiguration

信息: >>>>>>>>>>> Database Control URL 为 http://gqgai:1158/em <<<<<<<<<<<

已成功完成 Enterprise Manager 的配置

EMCA 结束于 2007-1-25 11:24:53

执行成功之后,Oracle主要创建的相关目录有2个,分别是:

$ORACLE_HOME/oc4j/j2ee/OC4J_DBConsole_<hostname>_<sid>

$ORACLE_HOME/<hostname>_<sid>

可以简单看一下这两个目录的结构,如图2-10所示。

这一系列的操作完成之后,DBConsole就可以正常启动了,在Windows上的服务中,一个相关的服务(这里是OracleDBConsoleeygle)会随之自动创建,如图2-11所示。

通过服务或者命令行工具emctl都可以启动或停止console服务。

以上的步骤实际上是重复了第1章中创建数据库执行的最后一条命令:

host C:\oracle\10.2.0\bin\emca.bat -config dbcontrol db -silent -DB_UNIQUE_NAME eygle -PORT 1521 -EM_HOME C:\oracle\10.2.0 -LISTENER LISTENER -SERVICE_NAME eygle -SYS_PWD &&sysPassword -SID eygle -ORACLE_HOME  C:\oracle\10.2.0  -DBSNMP_PWD &&dbsnmpPassword  -HOST  gqgai  -LISTENER_OH C:\oracle\10.2.0 -LOG_FILE C:\oracle\admin\eygle\scripts\emConfig.log -SYSMAN_PWD &&sysmanPassword;

图2-10 目录结构

图2-11 自动创建的服务

2.1.4 启停DBConsole服务

在Windows系统上,可以通过服务来启停DBConsole,也可以通过命令行工具emctl来控制DBConsole的启停。

启动过程如下:

C:\>emctl start dbconsole

Oracle Enterprise Manager 10g Database Control Release 10.2.0.1.0

Copyright (c) 1996, 2005 Oracle Corporation. All rights reserved.

http://gqgai:1158/em/console/aboutApplication

Starting Oracle Enterprise Manager 10g Database Control ...

OracleDBConsoleeygle 服务正在启动 ................

OracleDBConsoleeygle 服务已经启动成功。

关闭服务使用如下命令:

C:\>emctl stop dbconsole

Oracle Enterprise Manager 10g Database Control Release 10.2.0.1.0

Copyright (c) 1996, 2005 Oracle Corporation. All rights reserved.

http://gqgai:1158/em/console/aboutApplication

OracleDBConsoleeygle 服务正在停止...............

OracleDBConsoleeygle 服务已成功停止。

emctl工具在Windows/Linux/UNIX下的用法是一致的,其本质是通过脚本执行一系列的命令来启动EM,具体内容可以直接打开emctl文件查看,在Windows系统上是一个批处理文件,在其他平台一般是一个Shell脚本:

C:\>which emctl

C:\oracle\10.2.0\bin/emctl.bat

2.1.5 关于DBControl乱码的解决

启动了EM之后就可以通过提示的地址和端口进行登录了,如图2-12所示。

图2-12 登录到数据库

可是在很多平台(通常是Linux/UNIX)上,如果客户端使用中文操作系统及浏览器,则很可能看到的是一系列乱码,中文不能正常显示。

这其实是和安装时的选项有关,如果数据库服务器系统环境变量设置的是中文环境,那么通常就不会有这个问题,这个问题根本原因在于安装时,JDK/JRE字符集的自动选择。

在$ORACLE_HOME/jdk/jre/lib 和$ORACLE_HOME/jre/1.4.2/lib/目录下都有多种字符集字体配置文件:

[oracle@danaly ~]$ cd $ORACLE_HOME/jdk/jre/lib

[oracle@danaly lib]$ ls font*zh_CN*

font.properties.zh_CN.Redhat font.properties.zh_CN.Redhat2.1

font.properties.zh_CN.Sun font.properties.zh_CN_UTF8.Sun

[oracle@danaly lib]$ cd $ORACLE_HOME/jre/1.4.2/lib/

[oracle@danaly lib]$ ls font*zh_CN*

font.properties.zh_CN.Redhat font.properties.zh_CN.Redhat2.1

font.properties.zh_CN.Sun font.properties.zh_CN_UTF8.Sun

只要用合适的中文字符集文件替换缺省文件(缺省字体文件为font.properties)即可,这里选择使用font.properties.zh_CN.Redhat来替换缺省字体定义文件:

[oracle@danaly lib]$ cp font.properties.zh_CN.Redhat font.properties

替换之后需要清理一下Cache,重启EM即可,Cache路径通常位于:

$ORACLE_HOME/oc4j/j2ee/oc4j_applications/applications/em/em/cabo/images/cache/zhs

清除所有GIF文件之后重新启动EM,现在登录Web页面,就可以正常显示中文了。对于一些特殊的情况,可以查看具体的properties文件,确认其中设定的字体文件是否存在。

解决乱码问题的另外一个临时性解决方案是,将客户端浏览器的首选语言选项设置为英文,那么EM将以英文方式显示提示信息,乱码就不会出现了。

2.1.6 登录及口令文件认证

在Oracle 10g的某些版本里,当使用SYS用户以SYSDBA身份登录时可能会收到如下错误:

您的用户名和/或口令无效。

Your username and/or password are invalid.

这通常是因为没有正确地设置口令文件的参数或者口令文件不存在。因为EM需要通过监听器登录数据库,SYS 用户需要通过口令文件进行身份认证,如果 remote_login_passwordfile设置为None,那么SYS用户就将无法通过EM登录:

SQL> show parameter passw

NAME TYPE VALUE

------------------------------------ ----------- -------------------------

remote_login_passwordfile string NONE

SQL> alter system set remote_login_passwordfile=exclusive scope=spfile;

系统已更改。

修改这个参数后要重启数据库才能生效。如果缺失口令文件,则需要通过orapwd工具创建口令文件。

2.1.7 通过DBControl登录数据库

通过登录界面,输入用户名及口令,选择适当的身份后就可以通过EM登录到数据库,进入数据库的第一个界面是授权许可界面,Enterprise Manager 10g Database Control发行版包含的以下高级功能只有在获得Oracle许可后才可用:

数据库诊断包;

数据库优化数据包;

配置管理包。

选择“我同意”,登录数据库,此时就可以看到详细的数据库信息,如图2-13所示。

图2-13 数据库信息

Oracle 10g的EM提供了大量丰富的功能用于管理数据库,简要地列举一些功能。

1.顶级活动页

通过这个页面可以清楚的看到不同时段的资源消耗和使用情况,如图2-14所示。

图2-14 顶级活动页

2.顶级SQL页

通过顶级SQL 页,可以找到按资源消耗排序的SQL 语句,根据Oracle 10g 的新功能,又可以通过“调度SQL优化指导”及“创建SQL优化集”来对SQL进行优化,如图2-15所示。

3.预警日志错误页

通过预警日志错误页,可以监控或查看警告日志的错误或一般性信息,如图2-16所示。

图2-15 顶级SQL页

图2-16 预警日志错误页

通过EM可以方便地查询查看警告日志文件的信息了,如图2-17所示。

图2-17 预警日志信息

2.1.8 定义自动邮件告警

Oracle 10g提供了强大的预警功能,我们可以通过配置让数据库自动发送告警邮件。

首先在设置部分可以定义管理员,用于登录EM执行管理任务,缺省的可以选择SYS用户,如图2-18所示。

为了发送告警邮件,可以在“通知方法”部分定义一个SMTP服务器及邮件地址,Oracle将通过这个服务器向外发送邮件,配置之后可以进行测试以确保邮件能够被正常接收,如图2-19的左图所示;配置接收人地址信息,可以在首选项中配置,如图2-19的右图所示。

图2-18 定义管理员

图2-19 设置通知方法

可以添加多个接收地址并定义详细的通知规则,如图2-20所示。

图2-20 设置接收地址及通知规则

缺省的Oracle已经设置了一些告警规则,但我们需要自定义一些规则满足自己的需要。

在定义告警规则之前,先来了解一下Oracle的告警方法,首先Oracle数据库内置了一系列的监控规则,用于监控数据库的运行情况,这些规则被称为“度量”,如图 2-21 所示可以查看和修改度量值。

图2-21 管理度量

这些度量是数据库告警的基础。了解了这些之后,我们可以回过头来定义数据库的通知规则,比如创建一个预警日志报警规则,就可以将可用度量部分和预警日志(也就是alert文件)相关的所有条目选择过来,如图2-22所示。

创建规则之后,还要定义“调度”,以确认发送邮件的时间,如图2-23所示。

图2-22 创建通知规则

图2-23 编辑调度定义:时段

通知调度可以设置得极其具体,不同的时间段可以通知不同的负责人,当然不同时间的邮件地址设置可以批量进行,图2-24显示了邮件定义以及通知调度。

之后如果数据库出现相关告警,则之前设置的电子邮件地址就可以收到警告邮件,如图2-25所示是一封邮件示例,提示警告日志中出现错误。

总之,Oracle 的 DBControl 的功能非常完备和强大,界面操作也相当容易,这里不再过多介绍。

图2-24 编辑调度定义:电子邮件地址

图2-25 警告邮件