Oracle10g(精选8篇)
Oracle10g 篇1
0 引言
在维护设备的过程中, 我们常常会涉及到对Oracle数据库的一些基本操作。然而, 当我们想更深入了解它时, Oracle的复杂性以及UNIX系统人机界面的单调性却总是令我们感到难以上手。本文将介绍如何通过Oracle企业管理器对数据库进行监控与操作以及如何在UNIX环境下配置使用Oracle10g企业管理器。
1 OEM简介
1.1 OEM概述
Oracle Enterprise Manager (Oracle企业管理器, 简称OEM) 是通过一组Oracle程序, 为管理分布式环境提供管理服务。它为管理员提供了一个基于Internet标准的管理框架, 一个稳定的控制台程序, 一组实用的管理工具。
OEM控制台与每一个服务器上的智能化代理 (Intelligent Agent) 相对应。智能化代理能够监控系统的特定事件并且执行任务 (作业) 就象你在系统本地一样。事件和作业的结果会被送回控制台, 这样DBA就可以从任何可以访问Web应用的位置通过OEM对数据库和其他服务进行各种管理和监控操作。
1.2 OEM的功能
实现对Oracle运行环境的完全管理, 包括Oracle数据库、Oracle应用服务器、HTTP服务器等的管理;
实现对单个Oracle数据库的本地管理, 包括系统监控、性能诊断与优化、系统维护、对象管理、存储管理、安全管理等;
实现对多个Oracle数据库的集中管理。
2 OEM的应用
2.1 OEM的用户与登录
OEM管理员是可以登录到OEM控制台, 并执行设置封锁期、电子邮件通知调度、设置首选身份证明等管理任务的数据库用户。在默认情况下, 只有SYS, SYSTEM和SYSMAN三个数据库用户才能登录和使用OEM控制台。其中, SYSMAN用户是OEM控制台的超级用户, 是在安装OEM的过程中创建的, 用于执行系统配置、全局配置等任务。通常需要创建其他普通的OEM控制台管理员, 进行OEM控制台的日常管理和维护工作。
2.2 OEM的属性页
OEM登陆后即进入其主目录页面, 该页面用来显示数据库运行状态的信息。点击“性能”, 即进入“性能”属性页, 通过该页面可以实时监控数据库服务器运行状态, 提供系统运行参数。通过“管理”属性页, 可以配置和调整数据库的各个方面, 以提高性能和调整设置。通过“维护”属性页, 可以实现数据库的备份与恢复, 将数据导出到文件或从文件中导入数据, 将数据从文件加载到Oracle数据库中, 收集、估计和删除统计信息, 同时提高对数据库对象进行SQL查询的性能。
2.3 小结
通过以上的介绍, 我们不难看出OEM具有非常强大的功能和极为友好的人机交互界面。利用OEM, 在数据库维护过程中, 我们可以以极低的成本和极小的复杂性换取高可用性、可伸缩性和极佳的服务性能;在数据库的查询操作中, 我们可以很直观的看到数据库中所有的表、视图、索引等, 以及其中所包含的所有字段, 操作简便, 结果显示清晰明了, 格式化效果好。所以, OEM为我们学习、维护Oracle数据库提供了有力的技术支持。
3 OEM的配置
在人机界面以命令行方式为主的UNIX系统环境下, 单调、抽象的操作方式无疑给我们对数据库的维护增添了不少困难, 而集成了强大功能的OEM就是我们的“答案”。这里我们结合OEM的三层框架结构, 总结一下在UNIX环境下OEM的配置过程。
3.1 三层框架结构
Oracle企业管理器的不同于以往的客户-服务器结构, 具有三层框架结构, 即客户层、管理服务层和节点层。
客户层
客户层又可称为应用层或者交互层, 相当于客户端。在这一层上可运行控制台程序、管理工具以及各种客户应用程序, 并且可以有多个控制台程序同时运行。具有图形界面的控制台程序极大的方便了数据库管理员。
管理服务层
管理服务层由管理服务器和资料档案库组成。其中Oracle管理服务器是整个企业管理器三层框架结构的核心, 由它来提供管理的账户、处理进程, 以及作业、事件等管理功能。资料档案库主要是用来存放所有的系统信息、应用程序信息、被管理节点的状态信息, 以及系统管理工具包的信息。Oracle管理服务器有一项最重要的职能就是把一个任务分配给多个智能代理来执行。
结点层
结点层由若干个结点组成, 一个结点可以是一个数据库, 还可以是其他类型的对象或者目标。在各个结点上都运行有智能代理, 负责该结点的本地处理及监控。智能代理的运行独立于数据库及结点中的其他对象或目标, 独立于控制台, 独立于管理应用程序, 并且独立于Oracle管理服务器。这样做的一个好处就是:当整个系统其他部分变得不可用时, 智能代理还能够独立的运行。
3.2 在UNIX下配置OEM
3.2.1 配置节点层
为了管理结点和结点上的oracle服务, 必须在结点上配置并运行一个智能代理。
(1) 运行root.sh:
每一次oracle安装之后, 都必须运行root.sh脚本。该脚本设置了智能代理的执行文件的访问权限。此脚本还创建或更新智能代理所用来确定是否系统上的所有数据库都可以发现的oratab文件。验证oratab文件列出了系统中的每个数据库, 并且遵循了正确的语法。root.sh shell脚本文件应当已经写下了Oracle Home和SID的值。
(2) 检查dbsnmp的文件访问权限:
为了验证root.sh已被成功的执行了, 检查dbsnmp的文件访问权限:
列出关于dbsnmp的相关详细信息:
如果dbsnmp的所有者是root, 访问权限是-rwsr-xr-x, 说明root.sh被成功的执行了。
(3) 在Unix上启动智能代理:
在UNIX系统上, 智能代理是由"lsnrctl"程序来启动和停止dbsnmp进程的。
3.2.2 配置Oracle管理服务层
Oracle管理服务器 (OMS) 提供了在EM客户端和被管理结点之间的集中控制。OMS要有一个EM库 (Repository) 来存储所有的系统数据, 应用数据和环境中被管理结点的状态。
(1) 检测是否启动OEM服务
这里显示警告, 提示需要添加或者重新建立库。我们可以通过运行企业管理器配置助理来完成创建。
3.2.3 配置客户层
从Oracle10g开始, Oracle极大的增强了OEM工具, 并通过服务器端进行EM工具全面展现。在10g中, 客户端可以不必安装任何Oracle客户端工具, 仅凭浏览器就可以调用强大的EM工具。
(1) 启动EM工具控制台
在Server端, 可以通过如下命令启动EM工具控制台:
(2) 访问EM工具控制台
启动完成后, 我们就可以通过在浏览器端输入相应的url访问EM工具控制台了。
4 结束语
Oracle OEM是一个基于Java框架开发的集成化管理工具, 它为数据库管理员提供了一个功能强大、界面友好的数据库管理平台。通过它, 我们可以更加准确、更加深入的认识Oracle数据库, 为保障设备安全运行打下扎实的基础。
Oracle10g 篇2
在CentOS6.2操作系统下,安装oracle10g时出现如下报错:
查询文档会发现这个报错,是缺少glibc-devel的32位包所导致的,处理如下:
解决方法:
中止安装,否则即使安装完成相关rpm包后,后续仍会依据先前的检查出现其它报错,
建议到系统光盘下找到对应的glibc-devel的32位包文件,此处环境为CentOS6.2系统,找到相关包进行rpm安装,如下操作:
[root@hyl Packages]# rpm -ivh glibc-devel-2.12-1.47.el6.i686.rpm
warning: glibc-devel-2.12-1.47.el6.i686.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Preparing... ########################################### [100%]
1:glibc-devel ########################################### [100%]
Oracle10g 篇3
1 数据库性能的评价依据
优化数据库系统的性能, 通常是采取相应措施, 既减少对磁盘的访问而又能获得用户所需要的相关数据, 以达到降低系统对用户的响应时间、提高数据吞吐量、提升数据库的可用性的目标。评价一个数据库的性能是否优异的一些通用准则如下所述。
1.1 系统响应时间
系统响应时间是指从用户按下提交按钮到数据显示在输出设备上所花费的时间。系统响应时间是评价数据库性能的一项重要指标, 很多客户对系统响应时间都有严格的要求, 因此缩短系统响应时间非常重要。
1.2 数据加载时间
为满足加载数据的时间需求, 管理员可调整计算机的I/O子系统缩短数据加载时间, 而系统其他方面的性能会由此受到影响。此时可分别调整系统的数据库运行性能和数据加载性能, 将影响减至最小。
1.3 系统实际吞吐量
吞吐量是指在给定单位时间内传送的位 (bit) 数量。实际吞吐量是指在给定间隔内接收到的用户数据量减去必须重新传输的字节数后的吞吐量。提高系统吞吐量的方法为:1) 减少系统总的响应时间;2) 减少服务时间。
1.4 对用户支持能力
另一个评价系统性能的重要因素是系统对用户的支持能力。要使系统能支持更多的用户, 必须对系统在相关方面进行配置和调整。
2 影响数据库系统性能的主要因素
通过对数据库性能评价依据的分析, 发现很多因素都会影响Oracle 10g的性能。比如:数据库服务器、CPU、内存、网络、I/O、应用程序性能以及由用户所产生的数据库负载等。
下面列出的是一些导致系统性能下降的主要因素:
1) 数据库服务器:数据库服务器由数据库和实例组成, 是整个管理系统的核心。数据库的主要功能是保存数据, 其存储结构分为逻辑存储结构和物理存储结构。物理存储结构描述Oracle外部及其所处的操作系统环境中文件组织和管理数据的方式, 逻辑存储结构描述Oracle内部组织和管理数据的方式。
Oracle实例是指数据库服务器的内存及相关后台进程, 又称为Oracle数据库引擎。启动数据库后, 由实例来访问和控制磁盘中的数据文件。实例由SGA (System Global Area, 系统全局区) 和后台处理进程组成。
2) CPU:如某个数据库事务或其它应用占用了CPU资源, 其它数据库事务运行将可能会停滞, 从而延迟对数据库的响应。
3) 操作系统:操作系统控制和管理各种资源, 合理组织计算机系统的工作流程, 帮助用户合理利用和分配资源, 为用户提供方便的工作环境, 为多个用户提供安全高效的计算机资源共享。
4) 网络系统:系统的吞吐量和响应时间过长, 有可能是网络方面存在问题。数据库服务器与应用程序之间的交互是通过网络来进行的。在整个网络系统中, 影响较大的是网络I/O。I/O子系统如果超载, 系统输入输出量加大, 系统获得数据的等待时间延长, 从而影响整个系统的运行性能。
5) 实现应用程序:对数据库性能影响比较大的因素还包括实现应用程序的方法。如连接数据库的方式、SQL语句的灵活运用、使用数据库对象的情况以及数据库端程序设计等。
3 数据库系统性能调配优化的方法
通过对影响Oracle数据库性能的因素进行分析, 我们可以从以下几个方面对数据库系统进行配置, 以调整和优化系统的运行性能。
3.1 合理设计数据库
数据库的设计在系统设计中是一个非常重要的环节, 从根本上来说就是要实现数据的共享和安全存取。一个优秀的数据库设计必须要实现用户对于数据的要求, 而同时又要实现对数据的关联性、安全性、可移植性和可扩容性的要求等。
1) 明确系统所属的数据库类型。
在进行数据库设计时, 先要分清楚数据库所属的类型, 常见的有在线分析系统 (OLAP) 和在线事务处理系统 (OLTP) 。数据库的内存效率, 内存各种指标的命中率、并发操作控制等, 是在设计OLTP系统时特别要注意的。而数据分析、SQL执行时间、磁盘I/O及强调分区等。在设计OLAP系统的设计时要特别强调。现在购买火车票使用的网上订票系统, 就是一个典型的OLTP系统。如并发操作考虑不充分, 当遇到春节期间在线购票的用户太多时, 有可能导致系统近于瘫痪。
根据自己的经验设计数据库, 将系统资源分配给相关的用户, 尽量限制应用程序的用户数量, 对系统资源的使用情况密切监控, 了解用户所使用的资源数, 重视监控系统, 对系统调整及其结果做好详细记录。
2) 创建适用的数据文件。
每个Oracle数据库都有一个或多个数据文件, 数据库的主要作用是来保存在这些相关的数据文件。通过使用命令:select status, bytes, name from v$datafile, 可以查看数据文件的存放位置、大小和状态。OLTP系统是SQL语句提交和数据块变化都非常频繁的系统。为减少重复的SQL解析和物理I/O, 可采用变量绑定技术实现SQL的重用, 同时让数据块尽可能的保存在内存中, 以改善和提高数据库的性能。
3) 正确使用索引。
正确创建和正确使用索引具有很多优势。如在快速存取数据、实施数据的唯一性和参照完整性、多表检索查询数据时, 利用索引可以减少排序和分组的时间, 减少系统开销。对于Oracle系统来讲, 并不是创建了索引就一定会使用索引, 当Oracle自动搜集了表和索引的统计信息之后, 才会确定是否要使用索引, 只有高选择性的索引才会比全表扫描更有效率。因此, 对于规模比较小的表、频繁进行更新的表、在查询中很少用到的列等, 建议不要创建索引。
索引建立后会将占用磁盘空间, 当对数据进行插入、更新和删除等操作等操作后, 系统将重建索引, 延长了数据修改的时间, 所以, 应在需要的时候才创建索引, 在不需要索引时将其删除。适合建立索引的字段列一般为:主键列、表的外键、经常用于查询或多表连接的字段列、经常用于WHERE子句、ORDER BY子句、或GROUP BY子句的字段列等, 在这些字段列上创建索引, 会加快检索的速度。而对于在查询中很少使用的列、在表中具有较多重复值的字段列、数据需要频繁变更的字段列则不宜创建索引。因为在这类字段列上建立索引, 其检索性能会远远小于其修改性能, 得不偿失。
3.2 调整与优化内存管理
Oracle的内存结构包含两个部分:系统全局区 (SGA) 和程序全局区 (PGA) 。SGA主要包括了以下的数据结构:数据缓冲、重做日志缓冲、共享池、Java池、大池、流池、数据字典缓存及其他信息等, 这些部分的分配是否合理直接影响数据库的性能。
内存不足将减少数据的缓冲区空间, 影响系统访问最近存放的数据, 从而导致操作系统进行页面交换时频繁使用虚拟内存, 使计算机系统增加额外的I/O开销。
对那些支持大量连接的系统, 为保证计算机系统的可用资源能适用不同的用户对系统的资源需求, 要对内存做好详细计划, 严格控制与网络和连接用户有关的操作系统资源。
3.2.1 数据缓冲区
Oracle系统最近使用过的数据库数据块存放在数据缓冲区中。当用户下一次访问相同的数据时, 系统直接从数据缓冲区中读取数据返回给用户, 缩短查询时间。如果用户请求的数据不在数据缓冲区中, 则服务器进程要再次到数据文件中去读取数据给用户, 查询时间将延长。因此, 尽可能多的将用户请求数据保存在缓冲区中, 能较大的提高数据的操作性能。
许多大小相同的缓冲块组成了数据缓冲区。Oracle的数据缓冲区的大小直接由初始化参数文件中的db_cache_size参数决定。Oracle允许指定不同的数据块大小, 其中标准块的大小由db_block_size定义, 而非标准块的数据缓存区大小由db_nK_cache_size定义, 其中n为2、4、6、8、16或32。标准块和非标准块大小之和构成了数据缓冲区的实际大小。如, 假设在某个初始化参数文件中具有如下设置:
以上说明数据库标准块的大小为4KB, 具有标准块的大小的数据缓冲区为1024M, 除此之外还有块大小为2KB的数据缓冲256MB, 块大小为8KB的数据缓冲512MB。
使用较大的数据缓冲区, 可以提高数据库的访问性能。但数据缓冲区过大, 会给有限的系统物理内存带来压力, 数据库和操作系统其他方面的性能将受到影响。如果要查询数据缓冲区的大小, 可以使用具有DBA权限的用户按如下方法查看:SQL>show parameter db。
检查数据库缓冲区大小还可以通过查看数据缓冲区空闲率 (Free Ratio) 以及命中率 (Hit Ratio) 来实现。
1) 空闲率的检查方法
查询数据字典v$latch_children可以检测数据缓冲区是否有空闲, 得到的空闲冲突比例应该接近于0, 否则可以减少数据缓冲区大小。
2) 查询数据高速缓冲区的命中率的方法
计算公式:Hit Ratio=1- (physical reads/ (db block gets+consisten gets) ) 。
若命中率低可以加大INITXXX.ORA中DB_BLOCK_BUFFER的值。如果发现命中率低于90%, 则应该调整应用, 考虑是否增大数据缓冲区。
3.2.2 共享池
库缓冲区和数据字典缓冲区组成了系统的共享池, 可对SQL、PL/SQL程序进行语法分析、编译、执行。库缓冲主要用于存放已经解释并执行过的SQL语句和PL/SQL程序代码及其分析、执行计划等信息;数据字典缓存主要用于存放数据库对象表、索引、列定义以及用户权限等信息。必须合理设置共享池大小, 使共享池中保存较多的信息, 降低重复执行相同的SQL语句和PL/SQL程序的相同开销, 提高数据库的性能, 提高SQL或PL/SQL程序的执行效率。
共享池的大小由初始化参数shared_pool_size决定, 运行过程中使用alter system语句修改共享池的大小, 例如:SQL>alter sys-tem set shared_pool_size=20M;。
用以下方法查询共享池的大小:
可以通过共享池的空闲率、库缓存命中率以及数据字典缓存命中率来检查共享池设置是否合适。
1) 共享池内存空闲率
计算结果小于20%, 应该增大共享池的大小
2) 共享池命中率
Select sum (pinhits) /sum (pins) *100“hit radio”from v$librarycache;
如果共享池的命中率低于95%就要考虑调整应用 (通常是没应用bind var) 或者增加内存。
3) 库缓存命中率
Oracle文档对于数据库缓存命中率的定义为:
使用下列命令可以查询库缓存命中率。
库缓存命中率显示了对实际语句和PL/SQL对象的内存读操作所占的百分比, 库缓存命中率应该高于99%。
终端用户访问加速节点时, 如果该节点有缓存住了要被访问的数据时就叫做命中, 如果没有的话需要回原服务器取, 就是没有命中。取数据的过程与用户访问是同步进行的, 所以即使是重新取的新数据, 用户也不会感觉到有延时。命中率=命中数/ (命中数+没有命中数) , 缓存命中率是判断加速效果好坏的重要因素之一。
4) 数据字典缓存命中率
数据字典缓存命中率显示了对数据字典和其他对象的内存读操作所占的百分比, 其值应该高于90%, 否则需要调整共享池大小。使用下列命令查询数据字典缓存命中率。
select (1- (sum (getmisses) /sum (gets) ) ) *100"Hit Ratio"from v$rowcache;
from v$rowcache;
3.2.3 重做日志缓冲区
重做日志缓冲区用于缓存在对数据进行修改的操作过程中生成的重做记录, 当数据达到一定量时, 由日志写入进程LGWR写入重做日志文件。重做日志缓冲区的大小由log_buffer初始化参数指定, 该参数也可以在数据库运行过程中动态修改。重做日志缓冲区的大小对数据库的性能有很大影响。重做日志缓冲区过小, 会增加写盘的次数, 增加了系统的I/O负担。通常较大的重做日志缓冲区能够减少重做日志文件的I/O次数。
要查询重做日志缓冲区的大小, 可以用以下方法查询:
2) 查询数据字典v$parameter
如果日志缓冲区已满, 但还没有写入日志文件则日志写入处于等待状态即日志缓冲区写入失败。过多的日志写入失败说明日志缓冲区偏小, 影响数据库性能。
失败率的计算方法:
日志缓冲区的写入失败率应该接近于0, 如果失败率大于1%, 则说明日志缓冲区太小, 应该增加LOG-BUFFER的大小。
3.2.4 PGA程序全局区
PGA (Program Global Area程序全局区) 是一块包含有关单个服务器进程或单个后台进程的数据和控制信息的内存区域。PGA在创建进程时分配, 并在终止进程时回收, 不能共享。在专有服务器 (Dedicated Server) 模式下, Oracle会为每个会话启动一个Oracle进程;而在多线程服务 (Multi-Thread Server MTS) 模式下, 由多个会话共享通一个Oracle服务进程。PGA由chunk组成, 大小由pga_aggregate_target参数决定。用下列命令查看PGA的大小。
PGA的排序区设置是否合理对数据库性能有一定的影响。当对数据进行排序时, 数据库系统会将需要排序的数据保存到PGA程序缓存区中的一个排序区内, 然后在这个排序区内对这些数据进行排序。如数据排序与读取的操作都能够在内存中完成, 可在很大程度上提高数据库排序与访问的性能。若发现用户的很多操作都需要用到排序, 设置较大的排序区, 可以提高用户访问数据的效率。
排序区的大小占据PGA程序缓存取的大部分空间。在小型应用中, 数据库管理员可以直接采用其默认的值。在大型的应用中, 管理员需要手工调整这个排序区的大小, 以提高排序的性能。为了提高数据访问与排序的性能, 通过初始化参数SORT_AR-EA_SIZE在适当的情况下调整排序区的大小。
查询内存和磁盘排序命中率。
通常情况下, PGA内存排序率的值应该大于98%。即保证绝大多数的排序操作在内存中进行。否则, 就应该调整排序区大小, 即增加SORT-AREA-SIZE的大小。
3.3 磁盘I/O调整
磁盘I/O操作是数据库性能最重要的方面, 影响Oracle 10g数据库系统性能的主要因素中还有磁盘的I/O速度, 为了避免与I/O相关的性能瓶颈, 采用以下方法优化磁盘I/O。
1) 数据库的物理文件尽量分散到不同磁盘空间, 将数据文件放在独立磁盘上;
2) 为索引创建单独的表空间, 在不同磁盘中存储表数据和索引数据, 减少它们对磁盘存储空间的竞争;
3) 创建不同的表空间以存放不同的应用, 减少不同应用之间对磁盘的竞争;
4) 设置足够大的重做日志文件, 并且要存放在与数据文件不同的磁盘上, 减少日志文件对磁盘的竞争;
5) Oracle的文件和操作系统文件应尽可能地放在不同的磁盘上;
6) 创建专用的表空间和回滚段, 当系统操作出现失败时可以恢复数据;
7) 单独创建表空间存放用户数据, 用户数据不要与系统表空间存放在同一磁盘;
8) 为方便排序操作创建一个临时表空间, 在减少在进行存储空间分配和空间回收时产生的碎片;
9) 一般的应用不要占用系统表空间, 每个应用最好建立一个独立的表空间, 减少普通应用与数据库系统的磁盘竞争;
10) 管理表空间尽量采用本地管理方式, 而存储空间的分配可以自动管理。
3.4 碎片整理
在数据库系统的运行过程中, 数据的存取操作不断进行, 数据库将寻找自由范围最大的表空间来存放数据, 从而形成越来越多的较小的、离散的自由空间, 即生成磁盘碎片。碎片整理就成为了数据库日常维护中的重要的工作环节。一般将碎片分为三级:表空间级、表级、索引级。
表空间级碎片的出现主要是由于DROP TABLE和TRUNCATE等操作引起的。由于一个表空间中的表的EXTENT大小不同, 因此表空间使用一段时间后, 表空间的使用就出现了不连续, 在EXTENT之间会出现一些“洞”, 这种情况称为表空间碎片。设置所有的EXTENT都一样大, 不会出现表空间碎片。
表级碎片是一些零散的存储空间。当对一个表进行删除操作时, 被删除的数据释放出的存储空间不会被插入操作立即重用, 这样就形成了表级碎片。当表级碎片过多时, 导致查询响应时间变慢、产生大量行迁移、行链接导致数据存储不连续、浪费存储空间等。整理表碎片可采用如下步骤:
1) 整理表
SQL>alter table TABLE_NAME shrink space compact;
2) 重置高水位
SQL>alter table TABLE_NAME shrink space;
shrink的优势在于可以进行在线操作, 而且不需要重建索引。
3) 索引和表数据是级联关系的。当表中有建有太多索引, 进行表中数据删除操作的时候, 索引值将频繁变化, 索引条目也会被自动删除, 这样在index leafblock就会产生碎片。当索引的碎片过多时, 会影响执行查询的速度。在OLTP系统中有大量更新的表上建议不要创建大量的索引, 低基数列上也不要创建索引。为快速查找数据, 只在那些数据变化频率较低的列上创建索引。在已建索引的列上出现频繁的数据变化, 拟制索引碎片的产生最好的方法是重建索引。
3.5 CPU性能调整
服务器中一个重要的资源就是CPU。当CPU资源被某个数据库事务占用或被其它应用占用, 可能会影响数据库事务运行, 导致数据库系统响应迟缓。若CPU占用率超过90%, 则说明Oracle服务器CPU资源不足。引起CPU资源不足的原因主要有:锁冲突、低效率的SQL语句、SQL语句的重解析等。查询变慢是CPU资源不足的主要表像, 其实质是严重影响了数据库的性能。
调整CPU, 减少服务器的CPU对数据库性能的不利影响, 提高数据库系统的性能。
1) CPU的技术发展很快, 在Oracle领域要重视CPU并行技术的应用, 在执行事务处理和查询时分别使用不同的CPU处理器。最好分开数据库服务器和应用程序的CPU请求, 或在请求较多时, 实行对服务器请求的转移, 即采用多个服务器请求。
2) 进行数据查询时可使用PQO方式。PQO方式的优势很明显, 当用户需要查询的数据存放在不同的磁盘时, 可将SQL语句的请求分配到多个CPU进行处理, 对彼此独立的进程同时实现数据读取。
3) Oracle数据库与运行在同一台服务器上的其他所有软件共享CPU资源。如果CPU处理能力不足, 减少Oracle或者非Oracle程序的CPU消耗可以改善服务器上所有进程的性能。
对CPU的利用率进行调优实质上就是对每个单独的任务进行调优, 减少完成任务所需要的命令数量。通过负载均衡, SQL调优, 以及改进应用程序的设计等方式来具体完成CPU调优工作。
4 Oracle 10g常用优化工具
Oracle数据库提供了一些优化工具, 包括Oracle数据库在线数据字典、操作系统工具、SQL语言跟踪工具、OEM等。通过查询数据字典、分析动态性能视图, 获取数据库的运行信息, 有效的进行Oracle性能优化的工作。以下是几种常用的Oracle数据库性能优化工具。
1) Oracle数据库在线数据字典
Oracle在线数据字典能够反映出Oracle的动态运行情况, 有利于调整数据库性能。
2) 操作系统工具
如使用Unix操作系统的Vmstat、Iostat等命令可以查看到系统级内存和硬盘I/O的使用情况, 这些工具能够帮助管理员弄清楚系统瓶颈出现在什么地方。
3) SQL语言跟踪工具
Oracle提供了SQL-TRACE工具用于进行SQL语句的跟踪。当启用SQL-TRACE工具后, 系统将很快启动内核跟踪程序, 完整记录会话等相关信息, 同时写到相应的跟踪文件中, 并将结果输出成一个操作系统的文件。
4) TKPROF工具
TKPROF是用于分析oracle跟踪文件, 按需求生成清晰合理的输出结果的可执行工具。当系统的执行效率比较低时, 采用此工具跟踪用户的会话, 分析输出的结果, 找出问题所在, 从而确定解决问题的方法。
5) Oracle Enterprise Manager (Oracle企业管理器)
Oracle企业管理器是一个图形管理界面, 使用Oracle企业管理器可以方便地实现对数据库的管理, 简化操作, 特别适合初学者使用。许多通过命令能够完成的操作都可以使用Oracle企业管理器来完成, 如管理表、管理视图、管理表空间、管理索引等。
6) 优化SQL语句
使用这个命令可以帮助程序员写出高效的SQL语言。
7) DBMS-PROFILER (DBMS分析器)
代码的性能瓶颈在进行数据库调优时至关重要, 若要方便的发现代码的瓶颈所在之处, 使用Oracle数据库提供的DBMS_PRO-FILER包是比较好的选择。它可以对函数、触发器、存储过程及PL/SQL程序等进行测试, 发现影响程序性能的地方, 以及时进行改进。
说明:DBMS_PROFILER需要先安装再使用。
8) ADDM
ADDM是Oracle 10g新增的性能优化工具, 是植入Oracle数据库的一个自诊断引擎。ADDM通过检查和分析AWR获取的数据来判断Oracle数据库中可能的问题, 而STA则根据这些数据, 给出优化建议。ADDM能发现的问题主要有:负载导致的CPU瓶颈问题、过多的连接、过多的软解析、过多的commit和rollback事件以及由于shared pool过小、解析失败原因引起的过多硬解析问题等。
5 结束语
Oracle10g数据库系统性能调优是复杂繁琐的系统工程, 其工作贯穿于整个数据库系统开发的过程。从系统配置入手, 包括内存分配调整、磁盘I/O调整、操作系统调整以及磁盘碎片整理等, 整个过程是一个有机的整体, 缺一不可。数据库系统的性能调优应该充分利用各种能优化性能的资源, 正确使用调整工具进行反复的调整、以获得系统的最优性能。
参考文献
[1]朱亚兴.Oracle数据库系统应用开发实用教程[M].北京:高等教育出版社, 2012.
[2]文平.Oracle数据库性能优化的艺术[M].北京:机械工业出版社, 2012.
[3]姚世军.Oracle原理与应用[M].北京:中国铁道出版社, 2010.
[4]孙凤栋, 闫海珍.Oracle10g数据库系统性能优化与调整[M].计算机技术与发展2009 (2) .
[5]魏亚楠, 宋义秋.Oracle数据库应用系统的性能优化[J].制造业自动化, 2010 (8) .
[6]罗瑞明.Oracle数据库的性能优化方法研究[J].信息安全与技术, 2012 (5) .
Oracle10g 篇4
关键词:Debian,Oracle10g,ESXi4,安装
0 引言
Oracle数据库管理系统是一个以关系型和面向对象为中心管理数据的数据库管理软件系统,功能强大,能够处理大批量的数据,在管理信息系统、企业数据处理、因特网及电子商务等领域应用的非常多。Debian是最符合开源精神的Linux发行版,该系统以其高效、稳定、免费、开源等一系列特点,吸引着很多的计算机用户安装并使用。
通过Oracle官方认证的系统,只有Asianux 2、Asianux 3、Oracle Linux 4/Oracle VM、Oracle Linux 5/Oracle VM、Red Hat Enterprise Linux 5/Oracle VM、SUSE Linux Enterprise Server 10、SUSE Linux Enterprise Server 11等商业化的Linux发行版[1]。尽管商业化的发行版在性能以及功能多样性上有长处,但它价格昂贵,系统源码封闭,需要较长时间来学习掌握。而且商业化的发行版,产品升级以及系统补丁的发布都有相应的周期,当遇到一些核心问题时,只能等待商业产品的升级,对系统的改进几乎是不可能的。因此许多用户转而采用免费和开放源码的系统。本文就如何在开源发行版Debian(squeeze for amd64)上成功安装Oracle10g进行尝试,以便于能够在Debian系统下顺利使用Oracle进行研究。
1 系统的安装与优化
用VMware vSphere Client连接到ESXi的管理界面,创建一个虚拟机。在创建新的虚拟机时,选择典型配置,指定虚拟机名称和位置,选择要存储虚拟机文件的数据存储,指定要与虚拟机一起使用的客户机操作系统为Linux,选择版本为Debian GNU/Linux5(64位),指定虚拟磁盘大小为20GB,最后完成开始创建新虚拟机的任务。虚拟机的资源分配如下:CPU为4,内存为8G,硬盘两块分别为磁盘1[20G](安装系统),磁盘2[100G](Oracle数据库使用)。
1.1 系统分区
1.1.1 安装基本系统
使用磁盘1进行系统的安装。
/boot:ext2(256M) 主分区
swap:4G 主分区
/:剩余空间 主分区
基本安装方法参考Debian的官方安装说明[2]。
在VMware vSphere Client中对Linux的虚拟机管理并不方便,大部分操作都是通过ssh远程连接到虚拟机中来进行的,因此,只需要安装一个基本系统和ssh服务器。选择网络安装的方式来安装基本的系统,网络安装盘(netinst.iso)可以从Debian的官方镜像服务器下载[3],把这个ISO文件挂载为虚拟机的光盘,打开虚拟机的电源,就可以从光盘启动并进行网络安装Debian操作系统了。
基本系统安装完成后,就可以关闭VMware vSphere Client,通过ssh客户端远程登录到刚安装好的Debian系统中进行各项操作,本文的所有操作都是通过ssh远程连接到Debian虚拟机中进行的。
1.1.2 更新系统
修改/etc/apt/source.lst,配置较快的镜像服务器来安装软件包。本文选择中科大的Debian镜像服务器:
deb http://debian.ustc.edu.cn/debian/ testing main non-free contrib
deb-src http://debian.ustc.edu.cn/debian/ testing main non-free contrib
deb http://debian.ustc.edu.cn/debian-security/ testing/updates main contrib non-free
deb-src http://debian.ustc.edu.cn/debian-security/ testing/updates main contrib non-free
设置好安装源后,就可以执行如下命令来进行系统更新了:
aptitude update && aptitude full-upgrade
1.1.3 安装内核头文件
在安装vmware-tool过程中,需要编译相应的内核模块,需要安装内核头文件,因此,需要执行以下命令来安装相应的内核头文件:
aptitude install linux-headers-$(uname -r)
Esxi提供的工具在新的内核下(linux-2.6.39)无法正常编译,因此,需要到open-vm-tools官方网站上下载最新的源文件来进行编译。为了能够正常编译vmware-tools,还需要安装pkg-config、libglib2.0-dev等软件包,可通过如下命令实现:
aptitude install pkg-config libglib2.0-dev
准备工作完成后,就可以从官方网站(http://sourceforge.net/projects/open-vm-tools)下载并编译open-vm-tools了,编译并安装命令如下:
tar xf open-vm-tools-2011.07.19-450511.tar.gz
cd open-vm-tools-2011.07.19-450511
./configure--disable-multimon--disable-unity--disable-docs--disable-dependency-tracking--without-x--without-procps--without-dnet--without-icu--disable-tests-without-pam
make && make install
1.2 创建数据区
使用磁盘2创建数据区。数据库分区使用reiserfs文件系统,因此,还需要安装必要的工具以便创建reiserfs文件系统,可通过以下命令来安装相应的工具:
aptitude install reiserfsprogs
创建lvm(vg-data)并添加逻辑卷 data 。这一步创建lvm的目的是以备空间不够的时候可以再添加虚拟磁盘以扩展使用空间,采用以下命令完成:
pvcreate /dev/sdb
vgcreate vg-data /dev/sdb
lvcreate -l 100%FREE -n data vg-data
mkfs.reiserfs /dev/mapper/vg--data-data
echo/dev/mapper/vg—data-data/data reiserfs defaults 0 2>>/etc/fstab
按照以上步骤创建lvm(vg-data)并添加逻辑卷 data后,再开机后就可以自动挂载该文件系统。
2 安装Oracle数据库
2.1 获取安装文件
安装Oracle数据库可以从Oracle官方网站[4]下载安装文件:
0201_database_linux_x86_64.cpio.gz
gunzip 10201_database_linux_x86_64.cpio.gz
cpio -id < 10201_database_linux_x86_64.cpio
2.2 创建必要的用户和用户组
/usr/sbin/groupadd oinstall
/usr/sbin/groupadd dba
/usr/sbin/useradd -m -g oinstall -G dba -s /bin/bash oracle
2.3 设置内核参数
/etc/sysctl.d/oracle 文件中添加内核参数
kernel.shmall = 2097152
kernel.shmmax = 4294967296
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 262144
net.core.rmem_max = 262144
net.core.wmem_default = 262144
net.core.wmem_max = 262144
2.4 配置shell参数
/etc/security/limits.conf 中增加oracle用户的系统资源使用限制参数:
确认 /etc/pam.d/login 文件中有这么一行参数:
session required pam_limits.so
当配置这个参数后,直接用oracle用户登录的时候,这些资源限制参数就可以生效了。
当以root身份登录到系统中,并su到oracle用户的时候,会发现,无法设置一些limit参数,因此,还需要对pam的某些参数进行配置,确认 /etc/pam.d/su 文件中有这么一行参数:
session required pam_limits.so
这时,当从另外一个用户身份su到oracle用户身份的时候,就可以使这些资源限制参数生效了。
在新的内核中,已经编译了hugetlbpages的支持,因此,就不需要重新编译内核或者禁用oralce使用hugetlbpages了,只需要把oracle所在的用户组添加到/proc/sys/vm/hugetlb_shm_group中就可以了。可以通过如下命令来达到这个目的:
echo$(awk-F:/dba/{print$3}/etc/group)>/proc/sys/vm/hugetlb_shm_group
也可以先到/etc/group中查找dba这个用户组的组ID,然后
echo 组ID > /proc/sys/vm/hugetlb_shm_group
也可以达到同样的目的。
这种设置方式只能在当前运行环境下生效,当重新启动计算机后,该配置信息就会丢失,因此,还需要进行一些额外的步骤,让系统重启后,也能生效,因此,需要把echo $(awk -F:$3}/etc/group)>/proc/sys/vm/hugetlb_shm_group这个命令添加到/etc/rc.local中,这样重启计算机后,oracle用户仍然可以使用hugetlbpages。
2.5 安装前准备工作
在安装Oracle数据库之前需要完成一些准备工作,包括系统软件的安装、安装目录的创建和环境变量的设置等,按如下命令进行:
mkdir /data/ORACLE (该目录名称是可以随便设定的)
chown oracle.oinstall /data/ORACLE
Oracle的安装程序中把一些系统工具的路径写死了,但在Debian系统中,这些工具所在路径并不相同,因此,需要做一些符号链接:
ln -s /usr/bin/basename /bin/basename
ln -s /usr/bin/awk /bin/awk
Oracle的正常运行需要某些运行库的支持,因此,必须安装必要的运行库,可以通过如下命令实现:
aptitude install ia32-libs libc6-dev libc6-dev-i386 zip unzip libaio-dev libstdc++5 g++-multilib
ln -s /lib/x86_64-linux-gnu/libgcc_s.so.1 /lib/
Oralce的安装程序需要寻找一些环境变量来设定安装目录,因此,需要预先设置好 ORACLE_BASE和ORACLE_HOME这两个环境变量:
export ORACLE_BASE=/data/ORACLE
export ORACLE_HOME=/data/ORACLE/oracle/product/10.2.0/db_1
2.6 安装Oracle
因为Oracle的安装程序中的jre的配置问题,当使用中文界面的时候,会出现汉字显示方块的情况,因此,通过设置如下环境参数来强制使用英文界面来进行安装:
export LANG=en_US.UTF-8
因为Debian并不是Oralce官方支持的Linux发行版,因此,需要以ignoreSysPrereqs这个参数来进行安装,强制让安装程序不进行系统检查:
./runInstaller -ignoreSysPrereqs
在安装过程中不创建数据库,等数据库程序文件安装完成后,再使用dbca这个工具来创建数据库。
在Oracle数据库安装结束后,安装程序要求以root身份运行两个脚本(也就是在系统目录下创建一些文件),因为Debian中没有nobody组,只有nogroup组,因此,需要对root.sh文件进行一些修改,把其中的 $CHGRP nobody $ORACLE_HOME/bin/extjob 换成 $CHGRP nogroup $ORACLE_HOME/bin/extjob
2.7 其他工作
由于运行Oracle配置工具的时候,汉字不能正常显示,被显示成方框,为了解决这个问题,需要做以下工作。
2.7.1 安装汉字字库
aptitude install ttf-arphic-uming
2.7.2 修改配置文件
cd $ORACLE_HOME/jdk/jre/lib
cp font.properties font.properties.orig
cp font.properties.zh_CN_UTF8.Sun font.properties
修改最后几行:
filename.-misc-fzsongti-medium-r-nor-mal--*-%d-*-*-p-*-iso10646-1=/usr/share/fonts/truetype/arphic/uming.ttc
appendedfontpath=/usr/share/fonts/truetype
这样修改后,执行Oracle的维护工具的时候,就可以正常显示汉字了。
2.7.3 创建数据库
用dbca来创建数据库。以下以一实例来说明如何创建数据库。
实例名为ora1;数据库类型为一般用途;统一密码为123;存储机制为文件系统。
数据库字符集为UTF8;国家字符集为UTF8;默认语言为简体中文;默认日期格式为中国
连接模式为共享服务器模式;共享服务器数为1
2.7.4 配置监听程序和本地NET服务
需要使用netca进行监听程序和本地NET服务的配置,否则,Oralce的网络监听程序无法正常启动,远程客户端无法连接到数据库。同样的,通过netca配置本地NET服务,这样,可以通过sqlplus命令运行程序连接数据库并执行相应的SQL语句,以进行数据库的管理和维护。
2.8 数据库的管理和维护
2.8.1 准备工作
在以后的管理过程中,都是以oracle用户来进行的,因此,需要设置一下oracle用户登录后的环境变量,在oracle的家目录的.bashrc中添加如下信息:
export ORACLE_BASE=/data/ORACLE
export ORACLE_HOME=/data/ORACLE/app/10.2.0/db_1
export PATH=$PATH:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export NLS_LANG=SIMPLIFIED CHINESE_CHINA.UTF8
2.8.2 数据库的启动
可以使用dbstart命令来启动相应的数据库,不过,在运行这个命令之前,需要在/etc/oratab中进行配置,以让dbstart命令知道需要自动启动哪些数据库,/etc/oratab中配置信息的格式如下:
ORACLE_SID:ORACLE_HOME:
ORACLE_SID是第2.7.4节中创建的本地NET服务名,ORACLE_HOME是oralce的安装目录,N表示不自动启动,Y表示自动启动,按照第2.7.3节中创建的数据库参数,此处就应该配置为
ora1:/data/ORACLE/app/10.2.0/db_1:Y
因为dbstart这个脚本中的配置信息有些问题,不能直接启动监听程序,因此,需要对这个文件做一些修改:
# Set this to bring up Oracle Net Listener
ORACLE_HOME_LISTNER=$ORACLE_HOME
配置完这些信息后,就可以以oracle用户身份运行dbstart,命令执行成功后,可以通过 lsnrctl 来查看状态
lsnrctl status 命令会输出类似如下信息:
LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 16-9月 -2011 22:33:00
Copyright (c) 1991, 2005, Oracle. All rights reserved.
正在连接到(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=database2.bhu.edu.cn)(PORT=1521)))
LISTENER 的 STATUS
别名 LISTENER
版本 TNSLSNR for Linux: Version 10.2.0.1.0-Production
启动日期 15-9月 -2011 07:44:17
正常运行时间 1 天 14 小时 48 分 43 秒
跟踪级别 off
安全性 ON: Local OS Authentication
SNMP OFF
监听程序参数文件
/data/ORACLE/app/10.2.0/db_1/network/admin/listener.ora
监听程序日志文件
/data/ORACLE/app/10.2.0/db_1/network/log/listener.log
监听端点概要
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=database2.bhu.edu.cn)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC0)))
服务摘要..
服务 "PLSExtProc" 包含 1 个例程。
例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "ora1" 包含 1 个例程。
例程 "ora1", 状态 READY, 包含此服务的 2 个处理程序...
服务 "ora1_XPT" 包含 1 个例程。
例程 "ora1", 状态 READY, 包含此服务的 2 个处理程序...
命令执行成功
2.8.3 数据库的管理和维护
Oracle提供了一个Web界面来进行数据库的管理和维护,通过执行如下命令来启动Web管理界面:
export ORACLE_SID=SID (其中SID是第2.7.4节步骤中配置的本地NET服务名)。
这个命令是必须的,因为Web管理界面必须与某个NET服务对应,否则无法启动Web管理界面。
设置好本地NET服务名后,就可以通过如下命令来启动Web管理界面了:
emctl start dbconsole
启动成功后,就可以通过浏览器来管理oralce数据库了:
http://数据库服务器IP或数据库服务器域名:1158/em/console/aboutApplication
用户名为sys,密码为123(在步骤第2.7.3节中创建数据库时设置),身份选择sysdba,即数据库管理员,登录后就可以对数据库进行管理和维护了。
2.8.4 sqlplus命令行工具的使用
除了使用Web管理界面进行管理外,还可以通过sqlplus命令行工具进行管理和维护。
在使用sqlplus之前,需要设置一个重要的环境变量:
export NLS_LANG=SIMPLIFIED CHINESE_CHINA.UTF8
NSL_LANG决定了客户端使用什么样的字符集和语言与数据库通讯
SIMPLIFIED CHINESE 表示语言是简体中文
CHINA 表示区域国家标志为中国
UTF8 表示客户端的字符集为UTF8
另外一个重要的环境参数就是ORACLE_SID,设置这个参数后,就指定了缺省连接的服务名:
export ORACLE_SID=ora1
设置完这个必要的环境参数后,就可以使用sqlplus连接数据库了:
sqlplus /nolog
connect / as sysdba
如此,就以数据库管理员的身份登录到数据库了,在这个命令行下面可以做任何数据库的管理和维护工作,具体可以参考Oracle的官方手册:http://www.oracle.com/pls/db102/homepage。
3 结束语
本文主要介绍了如何在开源发行版Debian(squeeze for amd64)上成功安装Oracle10g,对Oracle10g安装过程中的系统安装优化、Oracle数据库的管理和维护等进行了实验,为在Debian系统下顺利使用Oracle数据库提供参考。
参考文献
[1]Linux Certification[EB/OL].(2012-07).http://download.ora-cle.com/docs/cd/B19306_01/relnotes.102/b15666/toc.htm.
[2] Debian GNU/Linux 6.0 Installation Guide[EB/OL].(2012-07). http://www.debian.org/releases/stable/amd64/.
[3] [EB/OL].(2012-07).http://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-6.0.5-amd64-netinst.iso.
Oracle10g 篇5
1 故障一
Oracle10g数据库中的OEM (oracle enterprise manager)是一个位于数据库服务器上的HTTP服务器(称为DB控制台)[1],它为数据库管理员提供了一个高效的图形管理界面,足够完成大多数DBA任务。我们在进行数据库移机时常常会发生控制台无法打开的故障。有时数据库刚安装好的时候控制台可以打开,但在之后对数据库、控制台的修改操作中也会造成控制台不正常的问题。
1.1 故障现象
我单位数据库为Oracle 10.1,为方便调试程序,冷备份了主服务器上的数据库数据,拷贝至备份服务器,备份服务器和主服务器软硬件的配置完全一致,拷贝数据库到备份服务器,重新启动数据库后,数据库能正常启动,客户端也能正常连接,但登录EM后,无法正常显示EM的界面,导致无法对数据库进行各项管理。
1.2 故障分析与排除
经过仔细分析,可排除如下常见原因:(1)网络连接是否正常;(2)计算机环境是否变化,如计算机名、IP地址、备份机数据库用户属性等。
经反复试验,我们采用如下2种方法修复了EM管理器。
1.2.1 方法一
数据库不改变,只修改用户和配置文件:
第一步,停止dbconsole服务,修改sysman用户和dbsnmp用户的密码并解锁用户。
第二步,修改与sysman用户和dbsnmp用户相关的dbconsole的参数文件中的连接密码。
找到sysman用户对应的(host)_(sid)/sysman/config/emoms.properties文件,修改其中Oracle.sysman.eml.mntr.emdRepPwd=Oracle2011,修改Oracle.sysman.eml.mntr.emdRepPwdEncrypted=FALSE。
找到dbsnmp用户对应的(host)_(sid)/sysman/emd/targets.xml文件,修改其中的Value和ENCRYPTED的内容:
第三步,重启dbconsole。
此时可以正常访问EM控制台。以上第二步中的2个文件内的sysman和dbsnmp用户对应的密码已被系统自动重新加密。
1.2.2 方法二
使用Oracle10g的高速导入/导出工具———data pump数据泵功能做整个数据库的迁移,不会导致控制台故障[2]。
重新从主服务器上打开的数据库中用数据泵导出(expdp)一份数据,再导入(impdp)到目标机器中。此功能可以跨系统平台且速度非常快,使用数据泵程序启动一个导出或导入任务后,任务就在数据库服务器后台运行。运行过程如下:
第一步,在数据源服务器上,通过Oracle的目录对象,指定临时存放转储文件的位置,并授权给用户,此目录可以在以后的导出任务中继续使用。
第二步,使用导出命令导出整个数据库:
第三步,在目标服务器上(目录创建同第一步),使用导入命令导入整个数据库的数据:
在一台普通工作站机器上约1 h后,22 GB的数据全部导入,数据库可以打开使用,导出导入性能比在直接模式下(exp/imp)提高了5倍以上[3],重要的是EM控制台完全正常,相比冷备份转移数据,此方式更具有如下优势:源数据库不用关闭,可以跨多个平台,不会因环境变化而造成控制台无法使用的问题,耗时差距也不算太大。
2 故障二
2.1 故障现象
我单位数据库从Oracle 8.1升级为Oracle 10.1后,由于数据库有表空间的本地管理功能,大大减少了管理员的工作量。正常使用1 a后,有一天做热备份时突然提示:剩余磁盘空间不足。查看数据库已经比4 d前增大了21 GB,仔细观察,发现临时表空间数据文件TEMP DBF突然增大到22 GB。此状况虽不影响正常应用,但会影响备份时间或数据库响应速度等。
2.2 故障分析与排除
试用过shrink, deallocate unused (keep 0)等,都不能释放表空间。因为是临时表空间,最简单的办法应该是替换法。由于系统表空间为本地管理,不能用作缺省临时存储表空间,但实际要求必须至少有1个缺省临时表空间[2],所以应该新建临时表空间。实现步骤如下:
(1)建立另外一个临时表空间;
(2)将新建表空间设为默认的临时表空间;
(3)删除旧的临时表空间及其数据文件。
具体语句如下:
据此结果,我们挑选晚上应用比较少的时间段,在联机服务器上数据库正常打开的情况下执行以上步骤,一切顺利,很快完成。
上面修改了默认表空间,联动所有普通用户的默认表空间一起做出修改,可以使用下面语句查询,用户的默认临时表空间都已自动变更为新的临时表空间:
(1)先查询临时表空间的空间号;
(2)再查询用户对应的临时表空间号,type#=1的为用户,type#=2的为角色。
参考文献
[1]任树华.Oracle 10g应用指导与案例精讲[M].北京:机械工业出版社, 2006.
[2]刘志敏.“军字一号”数据库临时表空间的管理与维护[J].中国数字医学, 2010 (3) :70-72.
Oracle10g 篇6
1、系统平台的选择
为充分发挥服务器的性能, 保证升级的良好效果, 我们选择了64位Windows Server 2003 Enterprise X64Edition, 数据库为Oracle Database 10g Enterprise X64。
2、升级前的准备
2.1 硬件准备
由于较早购买的服务器一般不支持EMT64, 因而不能运行Windows Server 2003 X64版本。特别是为了应对升级过程中的意外事件, 保证升级的可逆性, 购置一台新的服务器是很有必要的。
2.2 系统测试
首先为了升级的安全性, 系统的压力测试和拷机必不可少。然后就是HIS在新平台上各软件子系统的功能是否正常。这需要有专门的测试人员运行不同的软件模块, 根据我院的运行结果, HIS的软件模块在Oracle 10g上运行没问题, 但不排除别的医院系统会有不同, 如果还有PB4开发的软件必须升级到PB5以上版本再重新编译调试。
2.3 客户端升级
服务器数据库升级到Oracle 10g后, 可支持Oracle8和Oracle8以上版本的客户端, 但不支持Oracle8以下版本的客户端。因此若是Oracle8以下版本的客户端都需要升级。我院早期已将所有客户端数据库升级至Oracle8, 所以这部分工作可以省略。
2.4 升级模拟演练
由于医院HIS系统在医院的重要意义, 为了保证升级成功, 尽量缩短系统停机时间, 必须多次进行升级演练。针对每次演练中出现的问题, 不断修正升级方案, 直至演练完全达到预期效果。
3、升级切换步骤
在升级前的准备工作都完成后, 可选择适当的时间点进行系统。在系统切换前, 为了减少当天的工作量, 应把新服务器的Windows server 2003操作系统及Oracle 10g数据库都安装好, 并将老服务器的Oracle8数据库做好冷备份。同时为了减少系统停机时间, 原数据库主服务器应做一次数据转储。以下为系统切换操作步骤:
3.1 建立表空间
建立HIS系统的TSP_COMM等35个表空间。建立表空间之前, 先从老数据库中提取自动生成建立非系统的表空间的SQL语句, 然后将此语句在新数据库中执行, 建立新表空间。从老数据库中提取表空间的语句样式如下:
3.2 建立系统用户和普通用户
在目标数据库中创建各个系统用户和普通用户 (我院为1032个) , 并赋以迁移时所需的权限。我们继续从系统中提取自动生成建表的SQL语句。语句样式如下:
3.3 建立用户角色
用户创建好了, 必须给予每个用户相应的角色。提取建立角色的SQL语句样式如下:
3.4 建立用户权限
3.5 建立系统权限
3.6 将角色/权限授予所有用户
3.7 数据迁移
为了加快数据迁移速度, 同时为了保证系统切换的可控性, 我们将之前冷备份的数据库和配置文件拷贝至新服务器上。该方法有效、快速并有极大保障。
3.8 建立各类数据库对象
为在写入数据时避免数据之间的相互关联导致写入速度降低, 选择在数据写入完成后再建立VIEWS、SYNONYM、SEQUENCE、PROCEDURE、PACKAGE、FUNCTION、PACKAGE BODY、TRIGGER、TYPE、TYPE BODY等各类数据库对象。类似语句样式如下:
3.9 调整服务器参数
以上工作完成后, 数据库迁移工作已经基本完成, 然后需要将参数修改回运行环境所需的配置, 保证系统运行的效率。最后将数据库更改回归档模式, 将目标服务器IP地址改为原数据库主服务器IP地址后, 数据库关闭再重新打开, 重新启动TNS LISTENER服务。测试数据库连接成功后, 通知各业务部门可以正常使用系统, 至此数据库迁移顺利完成。
4、讨论
4.1 数据导入可有不同的途径
从理论上EXP/IMP完全可以实现系统数据包括各种对象的导入, 但其主要问题是用户基本上无法参与和干预其导入过程。传统上我院HIS数据库的升级都采用EXP/IMP工具进行导入, 而且该方法在Oracle7到Oracle8的升级中, 很多医院都有成功的案例, 但O-racle8到Oracle10g的升级, 而且是32位系统到64位系统的升级, 很少有采用EXP/IMP的报道。在本案例中采用直接将冷备的数据拷贝覆盖进行迁移的方法, 是建立在多次模拟的基础上, 此方法有效可靠。
4.2 系统切换的应急措施准备
由于医院业务系统具有7*24h无法中断的特点, 数据库系统升级切换的风险就非常高, 所以做好各种情况发生时的应急预案十分必要。信息科提出建议应急方案, 由院机关组织各部门参与, 做好各种情况发生时的应对准备措施。在时间点的选择上建议周五半夜开始切换, 这样周六凌晨急诊和各护士站就可展开使用, 有问题可以马上解决。周六上午一般各业务部门子系统都会展开使用, 但门诊患者不会太多, 在有问题发生时处理起来也不至于过于慌乱, 周日又可以再对系统进行完善加固。
4.3 系统切换后的安全备份策略
在Oracle8系统中的安全备份策略到Oracle10g中不一定能用, 而且Oracle10g还有很多新的功能。系统升级完成后, 我院采用了利用RMAN的安全备份策略功能, 实现每天凌晨0点定时在线全备。
Oracle10g 篇7
(1)客户端的增多对后台数据库的性能提出了更高的要求,需要对内存参数进行恰当的调整;
(2)用户一旦对数据进行了误操作,如误删除某条记录等,需要立即进行恢复;
(3)新上线的社会医疗保险系统采用ZHS16GBK中文字符集,而“军卫一号”数据库系统采用US7ASCII英文字符集,虽然通过编程的方法可以进行字符集转换,但程序使用过程中仍经常会出现乱码的情况,为了长远的需要,最好将“军卫一号”数据库的字符集修改为简体中文字符集。
我院“军卫一号”数据库系统为Oracle8.1.7.4,操作系统为Windows Server 2000,对于上述问题不是不能解决,但需要对Oracle8i的知识有深入的了解。目前,Oralce10g的推出已有一段时间,业界有关Oracle10g的应用已日益成熟,且Oralce10g提供了许多新的特性,如自动化实例调整、自动化内存调整、闪回(Flashback)以及修改字符集的内部指令等,这些新特性完全可以应对我院“军卫一号”数据库管理所面临的新挑战。因此,有必要对我院“军卫一号”数据库系统进行升级。
1 升级方法概述
将Oracle8i升级为Oracle10g的方法很多,利用Oracle的Exp/Imp以及Toad工具实现数据迁移[1];采用建立数据库链接的方法实现数据迁移[2]。这两种方法虽然最终都能够实现数据库的升级,但由于“军卫一号”系统数据量很大,数据迁移耗费的时间很长,从而造成系统切换的时间很长。
除上述方法以外,Oracle也提供了其它升级途径,比如采用Database Upgrade Assistant升级工具,以及利用升级脚本进行手工升级等。采用手工升级可以明确的察觉升级过程中出现的错误,以采取应对措施,便于对升级过程进行有效的控制,而且升级速度较前面介绍的数据迁移的方法要快。因此,本文就手工升级方法进行详细的介绍。
需要注意的是,对“军卫一号”数据库系统进行升级是一个复杂的过程,它关系着整个医院信息系统的正常运行。因此,有必要在备用服务器中对升级过程进行反复实验,待实验成功后,才可对生产数据库进行升级。
2 升级的具体步骤
目标数据库版本为Oralce 10.2.0.1,以下简称为Oracle10g,现有数据库版本为Oracle 8.1.7.4,以下简称为Oracle8i。
(1)如果待升级数据库版本为Oracle 8.1.7.4,则略去此步,否则,安装待升级数据库对应的Patch,将待升级数据库先升级到Oralce 8.1.7.4,有关安装Patch的方法,请参考有关说明,此处不再赘述。
(2)在Windows Server 2000操作系统中创建一个新目录,在该目录下全新安装Oracle10g数据库,并且不安装任何启动数据库。
(3)将Oracle10g目录ORACLE_HOME/rdbms/admin下的utlu102i.sql文件拷贝出至另一目录,并切换至该目录,用数据库管理员身份登录Oracle8i数据库的SQL*Plus,执行该脚本(该脚本又称为升级前信息工具)并查看脚本的执行结果。
(4)备份原Oracle8i数据库。
(5)将原Oracle8i数据库中的参数文件、口令文件拷贝至Oracle10g数据库的相应目录下。拷贝参数文件后,将该参数文件重命名为initsid.ora。(在Oracle8i数据库中,参数文件名为init.ora,在Oracle10g数据库中,参数文件名为initsid.ora)。
(6)调整Oracle10g数据库中的参数文件initsid.ora,对照(3)步中升级前信息工具的执行结果,在initsid.ora文件中将该结果中标记为“Obsolete”的参数删除,将标记为“Deprecated”的参数的参数值进行调整,调整范围参考该结果中提供的参考值,并增加该结果中提示需增加的参数。同时参照该结果调整其它需要调整的方面,比如使某些小的回滚段离线,并创建一个更大的回滚段以便于升级过程中使用该回滚段等。
(7)在cmd(控制台命令行)下,关闭Oracle8i数据库,删除该数据库实例,并创建新的Oracle10g数据库实例。设“军卫一号”数据库系统的实例名为“orcl”,执行:
使用Oracle10g目录下的参数文件创建新的实例:
(8)在cmd下切换至Oracle10g的ORACLE_HOME/rdbms/admin目录,启动Oracle10g的SQL*Plus,以数据库管理员(sysdba)身份连接至数据库,执行:
执行:
(9)执行SQL>@catupgrd.sql进行数据库系统升级。
(10)执行SQL>@utlu102s.sql检验升级结果。
(12)执行SQL>@olstrig.sql以重新创建触发器。
(13)执行SQL>@utlrp.sql以重新编译过程函数等。
(14)退出SQL*Plus,升级结束。
3 升级后的步骤
(1)安装Oracle10g中Web版的OEM(Oracle企业管理器),在cmd下执行:
安装成功后通过http://localhost:1158/em/访问OEM。
(2)启动iSQL*Plus服务,在cmd下执行:
C:isqlplusctl start以启动服务,然后可由http://localhost:5560/isqlplus/访问iSQL*Plus。
(3)将原“军卫一号”数据库采用的英文字符集AMERICAN_AMERICA.US7ASCII修改为简体中文字符集SIMPLIFIED CHINESE_CHINA.ZHS16GBK,启动Oracle10g的SQL*Plus,执行:
(4)修改每个Oracle客户端字符集为简体中文字符集,避免产生乱码。
(5)重新编译因升级而失效的存储过程。
4 小结
本文介绍了将Oracle8i版本的“军卫一号”数据库手工升级为Oracle10g的方法。该方法的最大优点是升级速度快,缩短了新旧系统切换的时间。经过严密测试,最终数据库由Oracle 8.1.7.4成功升级为Oracle 10.2.0.1,并且将“军卫一号”数据库的字符集成功修改为简体中文字符集。系统升级后,运行平稳。
参考文献
[1]徐正雄,王玲,乔静,等.用Exp/Imp实现“军卫一号”从Oracle8i到Orade10g的升级[J].医疗卫生装备,2009,30(1):55-56.
[2]夏洪斌,陈金雄,陈薇薇.“军卫一号”数据库从Oracle8.17到Oracle10g的升级实现[J].医疗卫生装备,2008,29(4):40-41.
[3]刘志敏,等.利用数据库分布技术改善HIS的应用性能[J].中国医疗设备,2008(6):25-26.
[4]Kathy Rich,Viv Schupmann.Oracle Database Upgrade Guide10g Release2(10.2)[DB/OL].(2008-01-01)[2009-06-01].http://download.oracle.com/docs/cd/B19306_01/server.102/b14238/toc.htm.
Oracle10g 篇8
Oracle数据库是中国联通核心业务支撑系统中最主要的关系型数据库管理系统。在联通BSS业务支撑系统的体系结构中, 绝大多数的子系统都是典型的在线事务处理系统 (OLTP系统) , 对业务处理的实时性和性能要求非常高。
基于以上情况, 对Oralce数据库及BSS应用系统进行不断地性能调整和优化, 就成为联通业务支撑工作中一个必不可少的关键性工作。
Oracle 10G中很多性能优化工作可以借助自动化的工具方便快捷地进行, 使性能优化工作的效率和效果得以大幅提升。
1Oracle 9i环境下性能优化的典型方法和问题
1.1Oracle 9i环境下典型的性能优化步骤
通常情况下Oracle 9i环境下的性能优化工作的步骤如下:①用户或应用维护人员反馈:“某个应用场景下, 系统反应很慢”;②数据库管理员 (DBA) 人工观测该应用是否确实比较慢, 或者根据以往记录的性能测试数据来比较, 确认该性能问题是否确实存在;③使用统计信息收集工具包-StatsPack包 (以下简称SP包) , 在可能会发生性能问题的时间段, 进行性能统计信息搜集 (即进行 “snapshot快照”) ;④使用SP包, 生成SP分析报告;⑤DBA阅读SP分析报告, 结合自己的经验, 手工在浩如烟海的信息中找到可能存在的性能瓶颈;⑥对于性能瓶颈, DBA结合自己的经验, 手工设计优化方案;⑦DBA或应用系统开发人员, 进行数据库配置、数据库对象或应用程序的调整;⑧调整完成后, 再次进行性能表现的观测, 如果问题没有得到解决, 则再次从步骤三开始进行新一轮的过程, 直至问题得以解决。
Oracle 9i时期典型的性能优化步骤的示意图如图1所示:
1.2Oracle 9i环境下性能优化方法存在的问题
从上述步骤中可以明显看出, 9i环境下的性能优化, 均是DBA人工处理, 所有的判断和决策都依靠人来开展, 不仅非常耗时耗力, 而且对进行优化工作的人员素质要求较高, 对DBA的“经验”要求极高, 旺旺只有对业务较熟悉的DBA才能进行一些有效的优化工作。
2Oracle 10G的自动化特性介绍
2.1Oracle 10G的自动化特性概述
Oracle 10G在降低DBA工作强度和提高工作效率和质量方面做了很多改进:丰富了大量的ADVICE功能;新增了很多有用的自动化功能, 如自动化数据库诊断监控 (ADDM) 、SharedPool内存自动管理 (ASMM) 、自动段管理 (ASM) 、优化器统计信息自动收集 (AOSC) 等。
2.2Oracle 10G部分实用的自动化特性介绍
2.2.1 自动数据库诊断监控ADDM
自动数据库诊断监控 (Automatic Database Diagnostic Monitor, 后文简称ADDM) 是10G自动化体系中最重要的一个部分。
简单的说, ADDM是对以前版本中SP包的增强, 它在以前的SP包的基础上新增了如下特性:①自动后台执行快照:自动快照的最大好处是可以在出现性能问题后, 不用担心已经错过了性能问题突发的时刻, 可以不再等待问题重现;②更多的统计信息种类:ADDM快照所收集的信息比9i的SP包快照收集的信息种类多了很多, 很显然, 收集的统计信息的种类增多, 对快速准确分析和解决性能问题极有好处;③增强分析报告的可读性:分析报告可读性的增强是ADDM技术中最吸引人眼球的一个进步:9i中SP报告的内容完全是一些统计数据, 没有任何“该怎么做”的建议。而在10G中, ADDM的报告的内容已经是Oracle分析完成的“汇报材料”, 里面包含了各类有益的、具备可操作性的建议。
2.2.2 自动共享内存管理ASMM
自动共享内存管理Automatic Shared Memory Management (后文简称ASMM) 是对Oracle最重要的内存结构-SGA进行自动化管理的先进技术。
SGA包括DB CACHE、SHARED POOL、LARGE POOL、JAVA POOL等核心内存组件, 而对各组件大小的调整一直是Oracle数据库性能调优的重要手段。在之前版本中, 需要DBA根据经验来决定每个组件的的大小。这种手工模式存在很大的弊端, 一是非常非常麻烦, 二是很难适应多变的应用场景。
在10G中, ASMM技术的引入, 可以很好地解决以前的问题, DBA不需要再操心各组件之间的平衡, 只需设置一个较大的SGA_TARGET参数即可, 该参数指定了SGA的目标容量, Oracle的MMAN进程会自动在SGA总容量范围内进行各组件的尺寸调整。
下面这个应用场景的例子可以很好地说明ASMM作用:
大多数应用系统, 都或多或少存在这样一种情况:白天营业期间, 系统是典型的OLTP应用系统, 需要很大的buffer cache, 而到了夜晚, 系统的特性又变得更像DSS应用系统, 批量后台任务大大增加 (如统计报表) , 这时需要更大的large pool。
ASMM可以很好地满足应用的需要:在SGA_TARGET总量范围内, 白天自动增加buffer cache、减少large pool, 晚上则反过来, 这样既很好地满足了白天需要大buffer cache以保证高性能I/O性能, 又确保了晚上有足够的large pool用于支持大量的并行查询、大量排序。
2.2.3 自动段管理建议ASA
自动段管理建议Automatic Segment Advisor (后文简称ASA) 也是10G新增的一个很有特色的自动化特性。
对段空间的管理Oracle一直使用高水位线方式管理 (后文称HWM) , 这种管理机制的最大弊端之一是易产生碎片问题, 导致空间利用率差和访问性能低。
在以往版本中, 核查碎片问题需要DBA手工编写和执行一些脚本, 并和熟悉应用的人员一起讨论以确认需发现碎片多的对象。
在10G中, ASA会每天自动运行一次, 并对热对象 (HOT OBJECT, 即访问频率高的对象) 段空间碎片情况予以检查, 检查的结果会明确报告哪些段的碎片问题严重, 并给出压缩的建议和脚本。
2.2.4 SQL调优助手SQL Tuning Advisor
在性能调优工作中, 很多时候, 最终的调整对象往往是某条具体的SQL语句, 即通过对某些有性能问题的SQL语句调整来达到性能优化的目的。
在以往版本中, 大多数情况下, 需要由DBA或开发人员人工进行分析、调整、测试。
在10G中, 对于SQL语句优化可以借助SQL Tunning Advisor进行, 自动对疑似有性能问题的SQL语句进行分析, 并获得优化的建议。
3Oracle 10G环境下性能优化的典型方法
由于以ADDM为代表的多种自动化特性的存在, 在10G中对系统性能进行优化的步骤就相对地简化了许多, 如图2所示。步骤如下:①用户或应用维护人员反馈:“某个应用场景下, 系统反应很慢”;② DBA确认该性能问题是否确实存在;③使用ADDM工具, 直接对发生性能问题时间段内的快照进行分析;④阅读ADDM分析报告, 报告中已经明确描述了哪里存在重要的性能瓶颈;⑤利用ADDM报告中建议的解决方案, 再结合Segment advisor和SQL tunning advisor等工具, 实施优化;⑥调整完成后, 再次进行性能表现的观测, 如果问题没有得到解决, 则再次从步骤3开始进行新一轮的过程, 直至问题得以解决。
4联通新一代BSS系统性能优化案例介绍
下面是Oracle 10G自动化特性在新疆联通BSS系统上的一次性能优化的实际应用案例。
4.1接到性能问题投诉
某日, 应用系统管理员接到客服投诉, 反映系统某新增功能操作非常慢, 点击完“查询”按钮后, 长时间系统没有响应。
4.2用ADDM核查性能问题
DBA和应用系统管理员对该功能进行测试, 发现性能问题确实存在。
恰好发生性能问题的数据库版本是10.2.0.4.0, DBA随即使用ADDM特性, 针对最近2小时之内的统计快照, 使用$Oracle_HOME/rdbms/admin/addmrpt脚本生成ADDM报告 (下文简称《报告》) 。
《报告》中, 很明确报出了3类可能影响性能问题的重要因素:①部分segment可能存在不合理性, 导致IO wait;②部分sql语句消耗了过多的时间和I/O wait;③SGA尺寸不合适, 导致附加的I/O 或 hard parses。
4.3根据ADDM的建议实施优化
对于以上3类问题, 《报告》也分别明确给出了建议的解决方案。
对于 “segment不合理性问题“, ADDM建议用segment advisor进一步核查。
对于 “部分SQL语句不够优化的问题”, ADDM建议用SQL Tuning Advisor进一步核查。
对于 “SGA尺寸不合适的问题”, ADDM建议调整SGA_TARGET的大小。
4.3.1 用segment advisor核查段不合理性问题
以《报告》中反馈的JBPM_VARIABLEINSTANCE表为例, 概述segment advisor的用法:
首先, 依次执行dbms_advisor包的create_task、create_object、set_task_parameter和execute_task四个过程, 用来运行一次segment advisor。
然后查看DBA_ADVISOR_RECOMMENDATIONS、DBA_ADVISOR_FINDINGS和DBA_ADVISOR_ACTIONS三个数据字典视图, 即可看到相应的问题细节和解决方案细节。本次核查的结果, 确认TASKBILL_INCALL_INFO表需要进行空间回收并需要打开row movement属性, 同时给出了具体的执行脚本。
4.3.2 SQL Tuning Advisor核查SQL语句性能问题
下面以《报告》中反馈的这条问题的sql语句为例, 介绍SQL Tuning Advisor的用法:
select variablein0_.TASKINSTANCE_ as TASKINS16_1_, variablein0_.CLASS_ as CLASS2_119_0_ from JBPM_VARIABLEINSTANCE variablein0_ where variablein0_.TASKINSTANCE_=:bnd;
首先, 通过运行DBMS_SQLTUNE包的CREATE_TUNING_TASK和EXECUTE_TUNING_TASK过程创建和执行一个 SQL Tuning 任务。
查看DBA_ADVISOR_TASKS系统视图, 待任务执行“Complete”后, 通过DBMS_SQLTUNE.REPORT_TUNING_TASK过程或DBA_ADVISOR_FINDINGS系统视图查看SQL Tuning任务发现的具体问题及给出的建议, 本次的建议是为表JBPM_VARIABLEINSTANCE增加索引
4.3.3 调整SGA_TARGET大小
《报告》明确提出, 当前的sga_target参数为4752 M, 由于这个设置太小, 而导致了额外的IO操作和硬解析的代价, 从而影响系统的整体性能。《报告》建议把sga_target参数 至少调整到7128 M。
4.4优化结果
根据《报告》的建议, DBA利用系统一次停机巡检的机会, 执行了以上几项优化操作。
操作完成后, 经过一段时间的观察, 发现当初的性能问题已经不复存在, 多次测试的结果:点击“查询”按钮后, 系统均在“秒”级时间内即完成了响应。性能优化的效果完全可以满足。
5结束语
Oracle 10G中新增 (增强) 的多项自动化特性, 可以有效地帮助DBA快速地定位和解决性能问题, 改变以往纯手工优化的模式, 极大地提高了性能优化的效率和质量, 满足BSS系统性能优化工作的需要。
参考文献
[1]Oracle.Oracle Database Online Documentation 10g Release 2 (10.2) [R].2009.
[2][美]Thomas kyte.深入数据库体系结构[M].苏金国, 王小振, 译.北京:人民邮电出版社, 2006.
【Oracle10g】推荐阅读:
10G网络06-20
10G优化08-13
施工测量方案-建筑施工组织设计大全10G10-04
Oracle06-18
ORACLE问题08-07
Oracle数据08-20
Oracle恢复10-03
优化Oracle01-07
Oracle表分区07-10
Oracle数据仓库09-28