oracle的比率(2)
2、数据库缓冲区(database buffer cache)命中率:SELECT 1 - (phy.value / (cur.value + con.value)) "CACHE HIT RATIO" FROM v$sysstat cur, v$sysstat con, v$sysstat phyWHERE cur.name = 'db block gets' AND con.name = 'consistent gets' AND phy.name = 'physical reads';反映在内存中获得数据块的百分比,要求大于90%,如果比率过小,考虑增加DB_BLOCK_BUFFERS/SGA_TARGET/SGA_MAX_SIZE。db block gets:对当前块的访问块数,consistent gets:对读一致性块的访问块数,physical reads:从物理文件读取得块数,db block gets+cons
去除数据中的空格
--去除数据中的空格(>=1),用逗号替换/*本例子针对http://www.itpub.net/showthread.php?s=&threadid=608001&perpage=10&pagenumber=1*/create or replace function f_replace (str in varchar2) return varchar2asspace_counter number(18,0) default 0;str_out varchar2(2000);beginfor i in 1..length(str) loopif ascii(substr(str,i,1)) != 32 thenspace_counter := 0;str_out := str_out||substr(str,i,1);elsespace_counter := space_counter + 1;if space_counter = 1 thenstr_out := str_out || ',';end if;end i
oracle10g自动分析任务
dbms_schedulerselect owner,job_name,program_name from dba_scheduler_jobs;停止启动分析:exec dbms_scheduler.disable('SYS.GATHER_STATS_JOB');exec dbms_scheduler.enable('SYS.GATHER_STATS_JOB');查询创建好的PROGRAM:SQL> SELECT PROGRAM_NAME,PROGRAM_ACTION FROM DBA_SCHEDULER_PROGRAMS2 WHERE PROGRAM_NAME='GATHER_STATS_PROG'3 ;PROGRAM_NAME PROGRAM_ACTION------------------------------ --------------------------------------------------------------------------------GATHER_STATS_PROG dbms_stats.gather_da
使用SQL_TRACE进行数据库诊断(2)
1. 在全局设置在参数文件中增加: event="10046 trace name context forever,level 12" 此设置对所有用户的所有进程生效、包括后台进程.2. 对当前session设置通过alter session的方式修改,需要alter session的系统权限: SQL> alter session set events '10046 trace name context forever';Session altered.SQL> alter session set events '10046 trace name context forever, level 8';Session altered.SQL> alter session set events '10046 trace name context off';Session altered. 3. 对其他用户session
使用SQL_TRACE进行数据库诊断(1)
SQL_TRACE是Oracle提供的用于进行SQL跟踪的手段,是强有力的辅助诊断工具.在日常的数据库问题诊断和解决中,SQL_TRACE是非常常用的方法。本文就SQL_TRACE的使用作简单探讨,并通过具体案例对sql_trace的使用进行说明.一、 基础介绍(a) SQL_TRACE说明SQL_TRACE可以作为初始化参数在全局启用,也可以通过命令行方式在具体session启用。1. 在全局启用在参数文件(pfile/spfile)中指定:sql_trace =true在全局启用SQL_TRACE会导致所有进程的活动被跟踪,包括后台进程及所有用户进程,这通常会导致比较严重的性能问题,所以在生产环境中要谨慎使
压缩数据以节省空间和提高速度
很多决策支持系统通常都涉及到存储于几个特大表中的大量数据。随着这些系统的发展,对磁盘空间的需求也在快速增长。在当今的环境下,存储着数百TB(太字节)的数据仓库已经变得越来越普遍。 为了帮助处理磁盘容量问题,在Oracle9i第2版中引入了表压缩特性,它可以极大地减少数据库表所需要的磁盘空间数量,并在某些情况下提高查询性能。 在本文中,我将向你说明表压缩是如何工作的,以及在构建和管理数据库时如何配置表空间。我还将基于一些示例测试结构讨论一些性能问题,以帮助你了解使用表压缩预计能获得多大好处。 表压缩是如何工作的
Oracle数据库关于SQL的执行计划
本文的目的: 1、说一说Oracle的Optimizer及其相关的一些知识。 2、回答一下为什么有时一个表的某个字段明明有索引,当观察一些SQL的执行计划时,发现确不走索引的问题。 3、如果你对 FIRST_ROWS、 ALL_ROWS这两种模式有疑惑时也可以看一下这篇文章。 开始吧: Oracle在执行一个SQL之前,首先要分析一下语句的执行计划,然后再按执行计划去执行。分析语句的执行计划的工作是由优化器 (Optimizer)来完成的。不同的情况,一条SQL可能有多种执行计划,但在某一时点,一定只有一种执行计划是最优的,花费时间是最
添加hints干预优化
基于代价的优化器是很聪明的,在绝大多数情况下它会选择正确的优化器,减轻了DBA的负担。但有时它也聪明反被聪明误,选择了很差的执行计划,使某 个语句的执行变得奇慢无比。此时就需要DBA进行人为的干预,告诉优化器使用我们指定的存取路径或连接类型生成执行计划,从而使语句高效的运行。例如,如 果我们认为对于一个特定的语句,执行全表扫描要比执行索引扫描更有效,则我们就可以指示优化器使用全表扫描。在ORACLE中,是通过为语句添加 hints(提示)来实现干预优化器优化的目的。hints是oracle提供的一种机制,用来告诉优化器按照我
有关oracle高可靠性的一些讨论和想法(6)
附件5:oracle9ir2 setup ( lijun )oracle 9i rac step by step by lijun at 2003-1-5 create.environment:oracle9i database 9.2.0.1.0 enterprise redhat advance server 2.1rac1 and rac2 server rac1: 211.68.29.61 1.1.1.1rac2: 211.68.29.62 1.1.1.2IFT3102 disk array 90G RAID5 + 140G RAID00. get all the soft and exact or setup it.downloaded on rac1 : rpm -ivh cpp-2.96-108.1.i386.rpm glibc-devel-2.2.4-26.i386.rpm kernel-headers-2.4.9-e.3.i386.rpm gcc-2.96-108.1.i386.rpm binutils-2.11.90.0.8-12.i386.rpm { ###
有关oracle高可靠性的一些讨论和想法(4)
附件3:oracle双机热备份方法(oracle8i standby)Standby Database一、 创建Standby Database 要求1、 Primary 与standby 数据库所在主机上的oracle server及操作系统版本必须相同,且具有相同的补丁;2、 primary 数据库必须为archive mode;Standby Database也必须为archive mode ;二、 创建standby数据库1、 首先查看Primary Database的归档模式(svrmgr>archive log list)若为无归档模式,将数据库转换为自动归档方式,方法如下:先关闭Primary Database:svrmgr>shutdown immediate再以mount方式启动Primary Database:svrmg
有关oracle高可靠性的一些讨论和想法(3)
附件2:ORACLE FailSafe与rac(ops)的区别title: ORACLE FailSafe与rac(ops)的区别 created: 2002-10-30 ------------------------------ oracle failsafe和RAC均为ORACLE公司提供的高可靠性(HA)解决方案。然而之两者之间却存在着很大区别: 1。 操作系统: failsafe系统局限于WINDOWS平台,必须配合MSCS(microsoft cluster server),而RAC最早是在UNIX平台推出的,目前已扩展至LINUX和WINDOWS平台,通过OSD(operating system dependent)与系统交互。对于高端的RAC应用,UNIX依然是首选的平台。 2。系统结构:FAILSAFE采用的是 S
有关oracle高可靠性的一些讨论和想法(2)
附件1: 论坛散言----------我曾经在yahoo messenger上问过美国Oracle里面专门讲RAC这门课的人员,他说试bug.有 时候原因很难说的,我们曾有类似的经历,当时是香港的客户,自以为自己oracle玩的很好,居然没经过我们同意(我们是他们的系统集成商,为他们提供服 务和协调),就擅自把数据库从81700升级到81740,于是,我们的应用整个连不上数据库(用proc编写的一个server),后来用一个测试程 序,里面就一个connect db语句,结果每次执行程序就死在那里,甚至CTRL+C , CTRL+ Z等等都退不出来,换句话说,就是整个session都死了,必须
有关oracle高可靠性的一些讨论和想法(1)
有关RAC的工作日志:12月16日到12月23日做RAC的试验。12月24日把服务器交给QYC做DataGuard.QYC做完DataGuard试验之后,1月4日我重新开始做RAC的试验。当初说是要做XX集团的双机热备,因为我应用oracle的时间非常短,对oracle并不熟悉,所以我这段时间就搜集了一些相关的信息和资料,以供大家参考。XX集团的应用我分析了一下,应该是不要求24*7连续工作的,只要能够及时恢复访问即可,而且数据量不是太大。而且我原来让XX方面做了NAT, 我们在这里就可以进行远端的控制,控制到XX集团内部的Intranet的个别服务器。我在网上所能搜到的信息是高
AUTONOMOUS TRANSACTION(自治事务)的介绍
在基于低版本的ORACLE做一些项目的过程中,有时会遇到一些头疼的问题.,比如想在执行当前一个由多个DML组成的transaction(事务)时,为每一步DML记录一些信息到跟踪表中,由于事务的原子性,这些跟踪信息的提交将决定于主事务的commit或rollback. 这样一来写程序的难度就增大了, 程序员不得不把这些跟踪信息记录到类似数组的结构中,然后在主事务结束后把它们存入跟踪表.哎,真是麻烦!有没有一个简单的方法解决类似问题呢?ORACLE8i的AUTONOMOUS TRANSACTION(自治事务,以下AT)是一个很好的回答。AT 是由主事务(以下MT)调用但是独立于它的事务。在
checkpoint是什么
html,body { border: 0px; }checkpoint是数据库的一个内部事件,这个事件激活以后会触发数据库写进程(DBWR)将数据缓冲(DATA BUFFER CACHE)中的脏数据块写出到数据文件中。checkpoint的作用是什么?checkpoint主要2个作用:1、保证数据库的一致性,这是指将脏数据写出到硬盘,保证内存和硬盘上的数据是一样的;2、缩短实例恢复的时间,实例恢复要把实例异常关闭前没有写出到硬盘的脏数据通过日志进行恢复。如果脏块过多,实例恢复的时间也会很长,检查点的发生可以减少脏块的数量,从而提高实例恢复的时间。checkpoint就像word的自动保存
Oracle表分区
自从oracle8i 开始可以把一个表分割为多个小的部分,这样可以对oracle的性能优化带来很大的好处~例如:改善表的查询性能,更加容易管理表数据,备份和恢复操作更方便在oracle 中分区表 分为好几种的(范围分区,散列分区,子分区,列表分区,索引分区)下面我们来慢慢介绍现在我们来建立一个[范围分区]create table RangeTable( id int primary key, name varchar(20), grade int)partition by rang(grade)( partition part1 values less then(50) tablespace Part1_tb, partition part2 values less then(MAXVALUE) tablespace Part2_tb);如果grad
oracle索引
新推出的Oracle9i内容翻新,采用了多种新颖的索引算法以显著地提高Oracle查询数据库的速度。 本文对Oracle9i的索引技术内幕进行了一番讨论,对标准的b-tree索引、位图索引、基于函数的索引以及唯索引表(IOT)等进行了说明。同时, 还会列出相应的代码程序,演示这些索引提高Oracle SQL的查询速度是如何显著。 在数据库操作中,我们该如何避免大型数据表扫 描、全数据表扫描和磁盘排序等既费时间又费力气的操作呢?Oracle9i对这一问题的回答是:采用索引技术,显然,在SQL优化器无法找到有效的方式来 完成SQL查询的情况下就要用到索引
oracle不同版本之间exp/imp规则
moving data between different releases of the Oracle database server, the following basic rules apply:The Import utility and the database to which data is being imported (the target database) must be the same version. The version of the Export utility must be equal to the lowest version of the source or target database. For example, to create an export file for an import into a higher release database, use a version of the Export utility that is equal to the source database. Conversely, to cr
ORACLE ROWID
在8i以前rowid由file#+block#+row#组成,占用6个bytes的空间,10 bit 的 file# ,22 bit 的 block# ,16 bit 的 row#。其中oracle 的dba(data block address)是32 bits的,包括10 bit 的 file# 和 22 bit 的block#。由于不存在0编号文件,oracle中的文件最大数量2^10-1=1023而datafile能达到的最大size就是2^22*db_block_size如果db_block_size为4k的datafile max size就是16G如果db_block_size为8k的datafile max size就是32G从oracle 8开始rowid变成了extend rowid,由data_object_id#+rfile#+block#+row#组成,占用10个bytes的空间,32b
start with ... connect by
start with ... connect by用法简介 sql有向图问题期待新解决方案 /*******************************************************************************通过START WITH . . . CONNECT BY . . .子句来实现SQL的层次查询.自从Oracle 9i开始,可以通过 SYS_CONNECT_BY_PATH 函数实现将父节点到当前行内容以“path”或者层次元素列表的形式显示出来。自从Oracle 10g 中,还有其他更多关于层次查询的新特性 。例如,有的时候用户更关心的是每个层次分支中等级最低的内容。那么你就可以利用伪列函数CONNECT_BY_ISLEAF来判断当前行是不是叶子。如