1、,介绍要点,ORACLE公司及其数据库产品 数据库体系结构技术综述 数据库管理 数据库性能调整 9i产品新特性 常见问题Q&A,Oracle公司及其产品,Oracle公司,Oracle是全球领先的信息管理软件供应商和全球第二大独立软件公司。 年收入达110亿美元,在全世界145个国家为客户提供数据库系统、工具、应用产品以及相关的咨询、培训和支持服务,拥有42,700名员工。 Oracle是第一家可开发和交付100%的基于互联网的数据库、企业业务应用、应用开发和决策支持工具等企业级软件的软件公司;,Oracle中国公司,1989年 正式进入中国市场 是第一家进入中国的世界软件巨头 1991年 在
2、北京建立独资公司 目前在上海、广州、成都设有办事处 在电信、金融保险、政府、部队等行业拥有广泛的用户群,Oracle主要数据库产品,数据服务器产品(RDBMS) 应用服务器产品(iAS) 开发工具产品 Designer/Develop/programer/Jdeveloper 决策支持产品(Express/Discover) 应用软件(人事、财务、制造业等) 其他产品(Video/Mail/Message/OEM),Oracle Internet Platform,Tools,Enterprise Manager,Applications,Oracle8i,Oracle Internet Ap
3、plication Server,RDBMS产品,可选件 Standard Management Pack Jserver InterMedia,内含选项 Options 64 Bit VLM Basic Replication Distributed Option Star Queries Net8 Object ODBC Driver Enterprise Manager NLS Support External Procedures PL/SQL Stored Procedures,Oracle标准版数据库-中小企业的最佳选择 数据库服务器产品 - Oracle8i,8,Oracle8i
4、 企业版的功能特性,数据库的可选件 Partition Option Parallel Server Option Advanced Security Spatial Visual Information Retrieval WebDB,个人用户开发人员的最佳选择 Oracle8i Personal Edition,定位于个人用户及开发人员 运行于 Desktop 平台 Windows95/98/NT等 可伸缩性 与Oracle8i完全兼容 与Oracle8i进行数据复制 应用可平滑移植 支持远程连接 便于安装、管理,Oracle Lite DBMS: Internet 计算的移动数据库,50
5、-750 Kbyte DBMS支持PDA (WinCE ,Palm,etc)DBA-free, 自我性能调整,轻量,全面 面向对象数据库支持全面 Java 支持Web-enabled,强大,双向同步复制 支持无线 应用全面方案的组成,Enterprise- ready,Partitioning Option,表和索引都可分区适用于大型OLTP和数据仓库系统分区对应用透明,Parallel Server Option,提高系统的可用性和伸缩性,ORACLE其他产品,Oracle9iAS (iAS 1.0.2),Oracle,数据 管理服务,CORBA,Oracle Data Cache,Java
6、 Stored Procedures,EJBs,BC4J,Portal,Web 加速访问 服务,non-Oracle DB,建立 Web 应用,开发采用 Java, PERL, PL/SQL, Oracle Forms IBM 和 BEA只侧重点在Java, MSNT 只有 VB Oracle提供最好的Java集成,Forms,Internet 外部用户,Intranet 内部用户,PL/SQL,XML / XSL,Perl Scripting,Servlet / JSP,CORBA,EJB / BC4J,与企业后端系统的有效连接,9iAS 可以连接任何的企业后端系统 任何企业应用, 任何主机
7、平台, 任何非Oracle数据库 IBM 只连接他的 DB/2数据库和自己的主机 Microsoft 只连接 SQL-Server和 Oracle,加速访问能力 - 应用缓存Web Caching,Oracle9i AS,Oracle9i AS,Oracle9i AS,每个公司都希望自己的每一个站点运行都很快 Web Cache提供的应用页面缓存技术比传统方式的访问至少快了3倍 支持更多的用户,更快的访问,并使用更少的web服务器 缓存静态和动态页面 具有峰值保护和负载均衡能力,保证高可靠性,Web Cache (pre-cached pages),Oracle 应用开发工具 - 灵活多样的选
8、择,模 型 驱 动 开 发高 级 语 言 编 程 Java 编 程Portal 开 发,Oracle应用系统软件业务,FY2000 E-Business Suite(EB/SCM/ERP/CRM)许可证营业额达33 亿美元 是北美制造业第一大 ERP公司 全球 8000+ 位客戶,其中中国有200+位 支持 99个国家,29 种語言 1997年通过中国财政部门评审 世界专业媒体评选 Managing Automation - ERP Product of the Year Intelligent Enterprise - Readers Choice InformationWeek - nig
9、ht Ridder #1 IT Company,Oracle关系数据库 体 系 构 架,Database,Oracle构架,Instance,SGA,Redo log buffer,Data buffer cache,PMON,DBW0,SMON,LGWR,CKPT,Others,User process,Server process,PGA,Control files,Data files,Redo log files,Archived log files,Parameter file,Password file,Oracle数据库文件,Password file,Parameter fil
10、e,Archived log files,Control files,Data files,Redo log files,Database,其他关键物理结构,Database,Password file,Parameter file,Archived log files,Oracle实例,后台进程,Oracle实例: 是访问Oracle数据库的途径 通常是一个数据库对应一个实例,内存结构,Instance,SGA,PMON,DBW0,SMON,LGWR,CKPT,Others,执行SQL语句,连接到一个实例的方法: 通过用户进程直接连接 通过应用服务器进程连接 Oracle服务进程类型和数量与
11、要执行的SQL语句有关 执行结果返回的行数 DML语句日志的变化大小 是否保证事务是可恢复的 一些Oracle服务进程不会参与SQL语句的处理,连接Oracle实例,Oracle server,Server,User,Server,Application server,Browser,执行查询,分析: 搜寻同样的SQL语句 检查语法是否正确、对象名称是否存在以及是否有权限访问 锁住在分析阶段使用的对象 生成和存储执行计划 执行:确定选择的行 提取:把数据行返回给用户进程,共享池,库缓存区(library cache)存储SQL语句、分析代码和执行计划 字典缓存区(data dictionary
12、 cache)存储表、列和其他对象的定义和权限 大小由SHARED_POOL_SIZE参数确定,Shared pool,Data dictionary cache,Library cache,数据块缓存区,存储最近被使用到的数据块 每个缓存区大小由DB_BLOCK_SIZE参数确定 缓存区数量由DB_BLOCK_BUFFERS参数确定,Data buffer cache,程序全局区,不共享 只有服务进程可以写入 包含: 排序区 会话信息 游标状态 堆栈空间,重做日志缓存区,大小由LOG_BUFFER参数确定 记录实例对数据进行的修改 用于前滚操作 循环使用,Redo log buffer,回滚
13、段,DML语句,旧的数 据镜像,新的数 据镜像,回滚段,数据表,Database,Instance,提交(COMMIT),1,2,3,4,User process,Server process,Control files,Data files,Redo log files,日志写入进程(LGWR),LGWR写发生在: Commit命令 当有1/3重做缓存区写满日志时 当有1M的重做内容 在DBW0写入数据文件前,Database,Instance,LGWR,Control files,Data files,Redo log files,其他实例进程:,其他必要的进程: 数据库写入进程(DBW0
14、) 进程监控进程(PMON) 系统监控进程(SMON) 检查点进程(CKPT) 归档进程(ARC0)在成品数据库中经常出现,Database,Control files,Data files,Redo log files,数据库写入进程 (DBW0),DBW0写发生在: 有太多的修改数据缓存 空的数据缓存太少 检测点出现,Instance,DBW0,SMON:系统监控进程,自动进行实例恢复 前滚记录在重做日志的数据修改 打开数据库供用户使用 回滚未提交的事务 合并自由空间 回收临时段,PMON:进程监控进程,清除失败的用户进程: 回滚事务 释放锁资源 释放其他资源,归档,数据库归档模式 当发生
15、磁盘失效时不需要做恢复操作的数据库使用非归档模式 成品数据库使用归档模式 ARC0进程 自动归档联机重做日志 保存所有对数据库做的修改,Database,Logical,Physical,Tablespace,Data file,OS block,Oracle block,Segment,Extent,Oracle存储结构,各种类型的段(一),表,表分区,索引,索引组织表,回滚段,各种类型的段(二),LOB索引,LOB段,Bootstrap segment,嵌套表段,索引分区,临时段,存储子句优先级,Oracle default,Tablespace,Segment,盘区的分配与释放,当段在如
16、下情况时分配盘区: 创建 扩展 修改 当段在如下情况时释放盘区: 删除 修改 截断 自动分配大小(只有回滚段),使用和空闲的盘区,数据文件,空闲盘区,已使用的盘区,文件头,数据库块,I/O的最小单元 有一块或多块OS块组成 由DB_BLOCK_SIZE参数设定 在数据库创建时设定,数据库块组成,Header,Free space,Data,块空间利用情况参数,INITRANSMAXTRANS,PCTFREEPCTUSED,块空间的使用,Inserts,Inserts,Inserts,Inserts,1,2,3,4,PCTFREE=20 PCTUSED=40,80%,80%,40%,数据字典视图
17、,Tablespaces DBA_TABLESPACES,Segments DBA_SEGMENTS,Data files DBA_DATA_FILES,Free extents DBA_FREE_SPACE,Used extents DBA_EXTENTS,查询DBA_SEGMENTS,常用信息 OWNER SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME 大小 EXTENTS BLOCKS BYTES,存储字句设定 INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS PCT_INCREASE 其他信息 Lo
18、cation Tuning,查询DBA_EXTENTS,鉴别 OWNER SEGMENT_NAME EXTENT_ID 大小 BLOCKS BYTES,位置 TABLESPACE_NAME RELATIVE_FNO FILE_ID BLOCK_ID,查询DBA_FREE_SPACE,位置 TABLESPACE_NAME RELATIVE_FNO FILE_ID BLOCK_ID 大小 BYTES BLOCKS,各种表空间的碎片,Tablespace SYSTEM TOOLS DATAn INDEXn RBSn TEMPn,Fragmentation Zero Very low Low Low
19、High Very high*,Usage Data dictionary Applications Data segments Index segments Rollback segments Temporary segments,* 是永久(PERMANENT)表空间,数据库管理,OPEN,MOUNT,NOMOUNT,SHUTDOWN,打开在控制文件中描叙的所有文件,打开控制文件,启动实例,启动和关闭数据库,启动数据库,关闭数据库,启动数据库命令,STARTUP nomount PFILE=/DISK1/initU15.ora;,启动数据库,把数据库从nomount状态改变到mount状态
20、,ALTER DATABASE database MOUNT;,把数据库打开到只读状态,ALTER DATABASE database OPEN READ ONLY;,以只读方式打开数据库,任何数据库都可以以只读方式打开 以只读方式打开的数据库可以: 执行查询 使用本地管理表空间进行磁盘排序操作 可以使表空间的数据文件online或offline 可以对offline的数据文件和表空间进行恢复操作,A x x x x,T x x o o,I x x x o,Shutdown Mode Allow new connections Wait until current sessions end W
21、ait until current transactions end Force a checkpoint and close files,N x o o o,Shutdown mode: A Abort I Immediate T Transactional N Normal,关闭数据库选项,YES,NO,x o,不同关闭数据库的方式,Transfer of Funds,Remove funds from old account,Commit,Log out,Check account balances,Insert new funds,Shutdown Normal,Shutdown Im
22、mediate,Shutdown Transactional,Database down,Database down,Database down,动态性能视图,SGA,V$PARAMETER V$SGA V$OPTION V$PROCESS V$SESSION V$VERSION V$INSTANCE,Control file,V$THREAD V$CONTROLFILE V$DATABASE V$DATAFILE V$DATAFILE_HEADER V$LOGFILE,动态改变参数,ALTER SESSION SET SQL_TRACE=true;,ALTER SYSTEM SET TIME
23、D_STATISTICS=true;,ALTER SYSTEM SET SORT_AREA_SIZE=131072 DEFERRED;,一些初始化参数可以在数据库运行阶段动态修改,终止用户会话,SELECT sid, serial# FROM v$session WHERE username=SCOTT;,ALTER SYSTEM KILL SESSION 7,15;,通过V$SESSION动态性能试图可以确定要终止的用户会话:,通过执行ALTER SYSTEM命令终止会话:,使用Database Configuration Assistant创建数据库,选择创建数据库方式,预定义的数据库类型
24、,完成数据库创建,使用Export工具,$exp scott/tiger tables=(dept,emp) file=emp.dmp log=exp.log compress=n direct=y,DEPT and EMP tables,emp.dmp,Export,使用Import工具,Import,emp.dmp,$imp scott/tiger tables=(dept,emp) file=emp.dmp log=imp.log ignore=y,imp.log,Database,OEM控制台实例管理,OEM控制台会话管理,OEM控制台表空间管理,OEM控制台数据文件管理,OEM控制台
25、用户管理,OEM控制台角色管理,OEM控制台表管理,OEM控制台视图管理,数据库性能调整,性能调整,谁来调整? 应用程序的设计者 应用程序的开发者 数据库管理员 系统管理员 为什么要调整 怎样调整,调整目标, 数据库的响应时间 数据库的高可用性 数据库的命中率 内存利用率 访问最少的数据块 内存中cache的数据块 共享的程序代码 尽可能快的读写数据 保证用户不需等待资源,调整步骤,1. 对设计进行调整 2. 对应用进行调整 3. 对内存进行调整 4. 对磁盘I/O进行调整 5. 调整减少资源冲突 6. 对操作系统进行调整,诊断信息,Trace文件: 警告日志文件 后台进程的trace文件 用
26、户的trace文件,警告日志文件, 警告日志文件由一系列按时间排列的信息和错误组成 检查警告日志文件可以: 发现oracle内部错误 (ORA-600) 和数据库块错误 观察数据库操作 查看非缺省的初始化参数 定期清除警告日志文件,警告日志文件,User process,Server process,BACKGROUND_DUMP_DEST= $ORACLE_HOME/rdbms/log,Alert log file,Instance,SGA,Shared pool,用户跟踪文件,启动或停止会话级或实例级服务器跟踪进程: ALTER SESSION命令 SET_SQL_TRACE_IN_SES
27、SION过程 初始化参数SQL_TRACE 用户跟踪文件包含被跟踪的会话的SQL语句的统计信息 在做数据库调整时用户的跟踪文件是很有用的,用户跟踪文件,User process,Server process,存放在参数USER_DUMP_DEST指定的目录下,Instance,SGA,Shared pool,视图、包和工具, 动态故障诊断、 性能和数据字典视图 V$ xxx动态故障诊断和 性能视图 DBA_ xxx 数据字典视图 UTLBSTAT.SQL 和UTLESTAT.SQL 脚本 Oracle等待事件 企业管理事件服务 Oracle诊断和调整工具,数据字典和专用视图,在运行ANALYZ
28、E命令 后数据字典和专用试图存储了有用的统计信息: DBA_TABLES, DBA_TAB_COLUMNS DBA_CLUSTERS DBA_INDEXES, INDEX_STATS INDEX_HISTOGRAM, DBA_HISTOGRAMS 这些统计信息是静态的,在再次运行ANALYZE命令之前是不会改变的,动态故障诊断和性能视图, V$视图 是基于X$表的视图 使用V$FIXED_TABLE查看 X$表 通常不会直接查询 动态和连续地变化 命名含义不明确 在数据库启动时被生成,在数据库关闭时被清除,故障诊断和调整,Instance/Database V$DATABASE T V$INS
29、TANCE T V$OPTION TV$PARAMETER T/P V$BACKUP T V$PX_PROCESS_SYSSTAT T/P V$PROCESS T V$WAITSTAT T/P V$SYSTEM_EVENT T/P,Memory V$BUFFER_POOL_STATISTICS T/P V$DB_OBJECT_CACHE T V$LIBRARYCACHE P V$ROWCACHE P V$SYSSTAT T/P V$SGASTAT P,Disk V$DATAFILE T/P V$FILESTAT T/P V$LOG T V$LOG_HISTORY T V$DBFILE T/P
30、V$TEMPFILE P V$TEMPSTAT P,User/Session V$LOCK P V$OPEN_CURSOR T V$PROCESS T V$SORT_USAGE T/P V$SESSION T/P V$SESSTAT T/P V$TRANSACTION T V$SESSION_EVENT T/P V$SESSION_WAIT T/P V$PX_SESSTAT P V$PX_SESSION P V$SESSION_OBJECT_CACHE P,Contention V$LOCK T/P V$ROLLNAME T/P V$ROLLSTAT T/P V$WAITSTAT T/P V$
31、LATCH T/P,系统级统计信息,会话级统计信息,T 故障诊断 T/P故障诊断/性能调整,收集系统的统计信息,V$STATNAMEstatistic#name class,V$SYSSTATstatistic#name class value,V$SGASTATpoolnamebytes,V$EVENT_NAMEevent#nameparameter1parameter2 parameter3,V$SYSTEM_EVENTeventtotal_waitstotal_timeoutstime_waitedaverage_wait,收集会话的统计信息,V$STATNAMEstatistic#na
32、me class,V$SESSTATsidstatistic#value,V$SESSION_WAITsidseq#eventp1/2/3textwait_timeseconds_in_waitstate,V$SESSIONsidserial#usernameosuser,V$SESSION_EVENTsideventtotal_waitstotal_timeoutstime_waitedaverage_waitmax_wait,V$EVENT_NAMEevent#nameparameter1parameter2 parameter3,使用UTLBSTAT和UTLESTAT, 收集数据库性能数
33、据 产生报表 用SYSDBA角色在SQL*Plus运行 设置TIMED_STATISTICS参数为TRUE,收集统计信息,utlbstat.sql,Examines the instance,Stores statistics in BEGIN tables,utlestat.sql,Examines the tables,Produces a report,report.txt,Stores statistics in END tables,统计信息报告, Library cache统计信息 系统统计信息 等待事件统计信息 Latch统计信息 回滚段竞争统计信息 Buffer等待信息 数据字
34、典命中统计信息 每个数据文件和表空间I/O统计信息,Library Cache 统计信息,SQL Rem Select Library cache statistics.The pinhitrate should be high. SQL select namespace library, gets, 3 round(decode(gethits,0,1,gethits)/decode(gets,0,1,gets),3) 4 gethitratio, pins, 6 round(decode(pinhits,0,1,pinhits)/decode(pins,0,1,pins),3) 7 pin
35、hitratio, reloads, invalidations9 from stats$lib; LIBRARY GETS GETHITRATI PINS PINHITRATI RELOADS INVALIDAT - - - - - - - BODY 105 1 105 1 0 0 CLUSTER 10 1 9 1 0 0 INDEX 0 1 0 1 0 0 OBJE 0 1 0 1 0 0 PIPE 0 1 0 1 0 0 SQL AREA 2036 .987 12822 .982 95 0 TABLE/PROCED 553 .98 3714 .969 81 0 TRIGGER 917 1
36、 917 .997 3 0 8 rows selected.,I/O统计信息,SQL Rem Select Library cache statistics.The pinhitrate should be high. SQL select namespace library, gets, 3 round(decode(gethits,0,1,gethits)/decode(gets,0,1,gets),3) 4 gethitratio, pins, 6 round(decode(pinhits,0,1,pinhits)/decode(pins,0,1,pins),3) 7 pinhitrat
37、io, reloads, invalidations9 from stats$lib; LIBRARY GETS GETHITRATI PINS PINHITRATI RELOADS INVALIDAT - - - - - - - BODY 105 1 105 1 0 0 CLUSTER 10 1 9 1 0 0 INDEX 0 1 0 1 0 0 OBJE 0 1 0 1 0 0 PIPE 0 1 0 1 0 0 SQL AREA 2036 .987 12822 .982 95 0 TABLE/PROCED 553 .98 3714 .969 81 0 TRIGGER 917 1 917 .
38、997 3 0 8 rows selected.,Oracle等待事件,V$EVENT_NAME视图包含所有事件,包括字段 EVENT#、NAME、PARAMETER1、PARAMETER2 和 PARAMETER3,事件统计视图, V$SYSTEM_EVENT: 所有会话的等待事件 V$SESSION_EVENT:每个会话的等待事件 V$SESSION_WAIT:当前活动会话等待的事件,V$SYSTEM_EVENT视图,V$SESSION_EVENT视图,SID EVENT TOTAL_WAITS AVERAGE_WAIT - - - -10 buffer busy waits 12 510
39、 db file sequential read 129 0 10 file open 1 0 10 SQL*Net message to client 77 0 10 SQL*Net more data to client 2 0 10 SQL*Net message from client 76 0,SQL select sid, event, total_waits,average_wait2 from v$session_event where sid=10;,V$SESSION_WAIT视图,SID SEQ# EVENT WAIT STATETIME - - - - - - -1 1
40、284 pmon timer 0 WAITING2 1697 rdbms ipc message 0 WAITING3 183 rdbms ipc message 0 WAITING4 4688 rdbms ipc message 0 WAITING5 114 smon timer 0 WAITING6 14 SQL*Net message from client -1 WAITEDSHORTTIME,SQL SELECT sid, seq#, event, wait_time, state2 FROM v$session_wait;,调整字典缓存区的工具,V$LIBRARYCACHE,Sha
41、red pool,Library cache Shared SQL and PL/SQL,V$SQLAREA,V$SQLTEXT,V$DB_OBJECT_CACHE,report.txt,V$SGASTAT,SHARED_POOL_SIZE OPEN_CURSORS SESSION_CACHED_CURSORS CURSOR_SPACE_FOR_TIME,Data dictionary cache,UGA,设置字典缓存区大小,设置存储包、视图以及表等对象必须的全局内存空间 设置存储常用SQL语句的内存空间 为了避免内存空间碎片应预留大内存 保存经常使用的对象 把大的匿名块转换成小的调用包函数的
42、匿名块,调整目标和技巧,调整目标: 服务进程在内存中能找到数据 对于OLTP系统有90%命中率 调整技巧: 增加数据块缓存区大小 使用多个缓存区把经常访问的小表缓存到内存 另外设置排序和并行读缓存区,SQL UPDATE emp2 SET sal=sal*1.13 WHERE empno=7369;,LGWR,ARCH,Archived log files,SQL DELETE FROM s_emp2 WHERE empno=7400;,Server process,Server process,重做日志缓存区,减少重做操作,更少的重做操作产生更少的重做日志内容,也就需要更小的重做日志缓存区
43、减少重做操作的方法: 不使用归档模式的直接装载数据 在归档模式下使用NOLOGGING模式直接装载数据 使用NOLOGGING模式直接装载插入数据 在使用SQL语句是使用NOLOGGING模式,调整排序操作,尽可能的避免排序操作 进可能保证排序操作在内存中完成,减少交换和换页操作 分配适当的临时空间,减少空间申请操作 如何避免排序操作 在创建索引时使用NOSORT参数 使用UNION ALL操作代替UNION操作 在做表联接的时候使用索引 为在ORDER BY子句中引用的列创建索引 为列做分析 在为大对象做分析时使用ESTIMATE参数而不是 COMPUTE参数,调整回滚段,事务在访问回滚段的
44、时候不需要等待 在正常的运行阶段回滚段不需要扩展 用户和包应该尽量少使用回滚段 应该没有事务出现回滚段不够错误 数据读取者应该总是能够查询到读一致镜像数据,9i产品新特性,高可用性,零数据丢失灾难保护 在线数据演化 精确的数据库修复 自助的错误更正,实现连续的数据可用性,Oracle9i 提供持续的数据可用性 -存储数据最安全的地方,计划外宕机,系统故障,数据故障 和灾难,系统维护,数据库维护,人为错误,Data Guard 完全没有数据丢失的解决方案,Flashback Query / Log Miner 访问过去数据的时间机器,Dynamic Reconfiguration 调整系统性能而
45、无须中断,Online Redefinition 在线对表进行重组和定义,Real Application Clusters 30秒内完成切换,计划宕机,Oracle9i 数据卫士Data Guard,日志接收,日志应用,Broker 管理接口,备用系统,可选延迟,Standby Logs,日志发送,主系统,日志,Oracle9i Data Guard 数据卫士 -灾难保护,零数据丢失保护 Zero Loss Mode 通过同步/非同步的日志传送 减低人为错误 通过 延迟传送方式 Delayed Mode Graceful Switch Over 主系统和备用系统可交替使用 Data Guard ManagerOEM 图形工具设置,监控及管理,