
深入Oracle
文章平均质量分 74
在技术深度上,我们会讨论:1.数据块的构造。2.数据恢复的机制。3.闪回的机制。4.事务的机制。
在广度上,我们会讨论以下技术,比如:1.流技术。2.data guard技术。3.RAC技术4.Oracle的安全管理的技术。
等等。
Zhu_Julian
这个作者很懒,什么都没留下…
展开
-
[Oracle] Golden Gate - 概念和机制
Golden Gate(简称OGG)提供异构环境下交易数据的实时捕捉、变换、投递。OGG支持的异构环境有:OGG的特性:对生产系统影响小:实时读取交易日志,以低资源占用实现大交易量数据实时复制以交易为单位复制,保证交易一致性:只同步已提交的数据高性能智能的交易重组和操作合并使用数据库本地接口访问并行处理体系灵活的拓扑结构:支持一对原创 2014-06-22 15:13:13 · 3976 阅读 · 0 评论 -
[Oracle] 分析函数(4)- Order By字句
分析函数中有ORDER BY的存在将添加一个默认的开窗子句!意味着从分区的第一行到当前行;分析函数中没有ORDER BY时,默认的窗口是分区内的全部 ;在Order by 子句后可以添加nulls last,如:order by comm desc nulls last 表示排序时忽略comm列为空的行. 不写between AND ,在有order BY 的情况下,就原创 2014-06-07 23:42:08 · 2505 阅读 · 0 评论 -
[Oracle] 分析函数(2)- 开窗(WINDOWING)
Oracle分析函数的开窗部分分为3个类型原创 2014-06-07 23:22:41 · 2288 阅读 · 0 评论 -
[Oracle] 分析函数(1)- 语法
语法概述下面看一个例子简单过下语法:例:sum(sal) over (partition by deptno order by ename) new_aliassum就是函数名(sal)是分析函数的参数,每个函数有0~3个参数,参数可以是表达式,例如:sum(sal+comm)over() 是开窗函数,这是开启分析函数的起点,对于既可作为聚集函数又可作为分析函原创 2014-06-07 09:05:51 · 2571 阅读 · 1 评论 -
[Oracle] enq: TX - row lock contention 优化案例
根据开发反馈,最近每天早上7:30应用会报警,应用的日志显示数据库连接池满了,新的连接被拒绝。首先,我做了ASH报告(报告区间:7:25 ~ 7:35),从ASH的等待事件发现enq: TX - row lock contention居然高达76.54%,如下所示:Top User EventsEventEvent Class% Even原创 2014-06-04 09:28:56 · 5681 阅读 · 0 评论 -
[Oracle] Merge语句
Merge的语法如下:MERGE [hint] INTO [schema .] table [t_alias] USING [schema .] { table | view | subquery } [t_alias] ON ( condition ) WHEN MATCHED THEN merge_update_clause WHEN NOT MATCHED THEN merge_i原创 2014-06-02 11:38:20 · 3088 阅读 · 0 评论 -
[Oracle] Group By 语句的扩展 - Rollup、Cube和Grouping Sets
经常写SQL语句的人应该知道Group by语句的主要用法是进行分类汇总,下面是一种它最常见的用法(根据部门、职位分别统计业绩):SELECT a.dname,b.job,SUM(b.sal) sum_salFROM dept a,emp bWHERE a.deptno = b.deptnoGROUP BY a.dname,b.job;DNAME JOB原创 2014-06-01 21:16:45 · 2636 阅读 · 0 评论 -
[Oracle] - 性能优化工具(5) - AWRSQL
在AWR中定位到问题SQL语句后想要了解该SQL statement的具体执行计划,于是就用AWR报告中得到的SQL ID去V$SQL等几个动态性能视图中查询,但发现V$SQL或V$SQL_PLAN视图都已经找不到对应SQL ID的记录,一般来说这些语句已经从shared pool共享池中被替换出去了。这个时候我们可以尝试使用DBMS_XPLAN.DISPLAY_AWR存储过程来将Oracle原创 2014-05-24 15:46:21 · 3709 阅读 · 0 评论 -
[Oracle] - 性能优化工具(4) - AWRDD
AWRDD是用于比较两个AWR快照,从而获得不同时期的性能。执行如下语句获得AWRDD:@?/rdbms/admin/awrddrpt.sql2025 23 2月 2014 07:12 12026 23 2月 2014 08:00 12027 23 2月 2014 09:00 12028 23 2月 2014 10:00 12029 23原创 2014-05-24 15:41:12 · 1803 阅读 · 0 评论 -
[Oracle] - 性能优化工具(3) - ADDM
ADDM 通过检查和分析AWR获取的数据来判断Oracle数据库中可能的问题,并给出优化建议。获取ADDM的方法如下:@?/rdbms/admin/addmrpt.sql下面可以看一个例子:--第一步:创建测试用的表drop table t cascade constraints purge;create table t AS SELECT * FROM dba_objects原创 2014-05-24 15:28:39 · 2376 阅读 · 0 评论 -
[Oracle] - 性能优化工具(2) - ASH
ASH和AWR的关系ASH以V$SESSION为基础,每秒采样一次,记录活动会话等待的事件。不活动的会话不会采样,采样工作由新引入的后台进程MMNL来完成。ASH内存记录数据始终是有限的,为了保存历史数据,引入了自动负载信息库(Automatic Workload Repository ,AWR) 由后台进程MMON完成。ASH信息同样被采集写出到AWR负载库中。由于内存是有限的,所以MM原创 2014-05-24 15:15:01 · 2289 阅读 · 0 评论 -
[Oracle] - 性能优化工具(1) - AWR
AWR快照默认情况下,Oracle每隔一小时会自动产生一个快照,保存最近8天的快照。我们可以通过如下语句获得产生快照的时间间隔和保存的天数:SYS@orcl(lx15)> select SNAP_INTERVAL,RETENTION from dba_hist_wr_control;SNAP_INTERVAL原创 2014-05-24 14:54:38 · 2193 阅读 · 0 评论 -
[Oracle] 11G自动收集统计信息
在11g中,默认自动收集统计信息的时间为晚上10点(周一到周五,4个小时),早上6点(周六,周日,20个小时),如下所示:select a.window_name, a.repeat_interval,a.duration from dba_scheduler_windows a, dba_scheduler_wingroup_members b where a.window_na原创 2014-04-28 10:58:44 · 2542 阅读 · 0 评论 -
[Oracle] 表的连接
在OLTP系统里,嵌套连接占了70%左右,哈希连接占了20%,合并排序连接占了10%。算法:嵌套连接把两个表分为驱动表和被驱动表,先访问驱动表(只访问1次),然后根据驱动表返回的行数多次访问被驱动表(被驱动表访问的次数等于驱动表返回的行数)。根据上面的算法,我们可以知道,想要让嵌套连接性能好,必须同时满足以下3个条件:1)驱动表返回的行数要足够少(减少被驱动表访问的次数);2)驱动原创 2014-04-24 10:55:47 · 1694 阅读 · 0 评论 -
[Oracle] 位图索引
位图索引的原理位图索引的优势1、快速统计条数由于位图索引只存储0和1的指,因此它的空间占用很小,向count(*)之类的操作用位图索引就很快。2、高效即席查询我们在OLAP系统中,经常会做多维度的统计,如人口普查,经常会需要做一些关于性别、年龄、出生地的多维度查询,这种就是即席查询。位图索引非常实用用于即席查询,因为对于计算机来说,就是0和1直接的与或运算,原创 2014-04-18 17:35:43 · 2202 阅读 · 0 评论 -
[Oracle] 获取执行计划的各方法总结
总的结论:一.获取执行计划的6种方法(详细步骤已经在每个例子的开头注释部分说明了):1. explain plan for获取; 2. set autotrace on ; 3. statistics_level=all;4. 通过dbms_xplan.display_cursor输入sql_id参数直接获取5. 10046 trace跟踪6. awrsqrpt.sql原创 2014-04-26 09:49:06 · 4087 阅读 · 0 评论 -
[Oracle] 谈谈主外键设计
主外键有两大特点:1)主键本身是一个唯一索引,保证主键所在列的唯一性;2)外键列指必须在主表中的主键列有相应记录。外键上一定要建索引我们知道,主键本身是一个唯一索引,外键是一个约束,默认情况下没有索引,但在实际使用中强烈建议在外键上建索引,下面看两个例子:SQL> alter database mount;Database altered.SQL> alter data原创 2014-04-16 17:50:08 · 1699 阅读 · 0 评论 -
[Oracle] opiodr aborting process unknown ospid (***) as a result of ORA-609
今天线上数据库(版本11.2.0.1)无法建立新连接,但原有的连接不受影响,alert.log报如下错误:opiodr aborting process unknown ospid (22997) as a result of ORA-609但在listener.log里却显示连接已建立03-APR-2014 16:05:44 * (CONNECT_DATA=(SERVICE_NAME原创 2014-04-03 16:13:48 · 10623 阅读 · 0 评论 -
[Oracle] 11g中 ADD COLUMN 功能增强
一. Enhanced ADD COLUMN 说明在Oracle 11gR1中,Oracle 对add column 进行了增强。 官网的说明地址:http://docs.oracle.com/cd/B28359_01/server.111/b28279/chapter1.htm#NEWFTCH1 1.1 Enhanced ADD COLUMN Functionali转载 2014-02-07 14:00:45 · 2860 阅读 · 0 评论 -
[Oracle] 性能调优实例 - read by other session
这今天每天下午3点,开发人员反应Oracle慢,第一等待事件是read by other sessionTop 5 Timed Foreground EventsEventWaitsTime(s)Avg wait (ms)% DB timeWait Classread by other sess原创 2014-01-24 15:48:55 · 4342 阅读 · 0 评论 -
[Oracle] 探讨分区(4) - 分区管理
分区交换是Oracle提供的一种用于分区表和非分区表间迁移数据的方法,它只操作数据字典,不移动数据的物理存储,因此效率非常高。它的语法如下:alter table partition_tbl exchange partition with table nonpartition_tbl;注意:分区表和非分区表之间无法直接交换,必须借助一个中间表(非分区),下面看一个例子:现在原创 2013-11-06 17:03:26 · 2592 阅读 · 0 评论 -
[Oracle] 增大在线重做日志文件大小
今天发现数据库很慢,看到大量进程在等待log file switch (checkpoint incomplete),日志文件的使用情况如下:SYS@TEST15>select group#,sequence#,bytes/1024/1024 "BYTES(M)",members,archived,status from v$log; GROUP# SEQUENCE# BY原创 2013-11-07 14:46:15 · 2628 阅读 · 0 评论 -
[Oracle] 多表关联的update和delete
由于Oracle不支持update或delete from语句,因此,Oracle的多表关联update和delete必须借助于子查询,同理,Oracle也不支持同时update或delete多张表,其典型用法如下:多表关联update首先,构造测试表和数据如下:SYS@TEST16> create table testa as select owner,table_name,st原创 2013-10-15 22:49:44 · 11042 阅读 · 1 评论 -
[Oracle] SQL*Loader 详细使用教程(5)- 典型例子
本文介绍SQL*Loader在实际使用过程中经常用到的典型例子。1. 表中的列比数据文件的列要少怎么办?假设一个csv的文件如下:a1,a2,a3,a4b1,b2,b3,b4c1,c2,c3,c4d1,d2,d3,d4总共4列,先要求只要第2、3列数据,怎么办呢?这时候,FILLER(注意:不是FILTER)参数派上用场了,控制文件如下所示:load datai原创 2013-10-15 15:56:04 · 3951 阅读 · 1 评论 -
[Oracle] Lob介绍
Lob的定义像Oracle这种关系型数据库,比较擅长处理结构化的数据,那么对于非结构化的数据,Oracle是怎么处理和存储的呢?Lob (Large Object)是Oracle专门用来处理半结构化和非结构化数据,它是一个大对象数据类型,可以存储超过4000字节的字符串、二进制数据。Lob的类型有两种Lob,非常是Internal Lob和External Lob。所谓Inte原创 2013-10-14 13:51:04 · 2625 阅读 · 0 评论 -
[Oracle] Scheduler和Job
Oracle Scheduler是用来管理和计划数据库的Job,使得很多常规的任务不需要人为干预,本质上来说,它和Linux的crontab,商业软件UC4一样,只是它们的领域不一样,Oracle Scheduler专注于Oracle数据库Job的自动化管理、维护和监控。本篇是理论篇,介绍Oracle Scheduler的基本概念,实战篇留在下篇,敬请期待。Oracle Scheduler原创 2013-10-11 22:46:33 · 3201 阅读 · 2 评论 -
[Oracle] Listener的动态注册
在有Oracle Listener的动态注册之前,采用的是静态注册,所谓静态注册是指Oracle实例在启动时,读取listener.ora里的配置,然后注册到Listener,它主要有两个缺点:1. Listener不知道Oracle实例的实时状态2. listener.ora里的配置比较麻烦,常需要手动修改。动态注册所谓动态注册是指Oracle实例启动后,会通过pmon进程实时的原创 2013-09-18 17:27:43 · 2165 阅读 · 0 评论 -
[Oracle, MySQL] Oracle通过dblink连接MySQL
业务上有这么一个需求,需要把Oracle的一些数据同步到MySQL,如果每次都是手动同步的话,实在太麻烦,因此花了点时间研究了下Oracle直连MySQL的方式。参考文档:Detailed Overview of Connecting Oracle to MySQL Using DG4ODBC Database Link (Doc ID 1320645.1)版本信息:Oracle:原创 2013-08-29 12:04:52 · 22387 阅读 · 4 评论 -
[Oracle] Data Guard 系列(5) - 创建逻辑备库
在创建逻辑备库之前,必须得先创建物理备库,关于如何创建物理备库,请参考《Data Guard 系列(4) - 在不停主库的情况下创建物理备库》。1. 在物理备库上停止日志应用服务SYS@jkka> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;Database altered.2. 重新设置主库为将来的角色转换做准备(原创 2013-08-26 13:24:01 · 3570 阅读 · 5 评论 -
[Oracle] SQL*Loader 详细使用教程(4)- 字段列表
在上一篇中我们介绍了SQL*Loader中最重要的文件——控制文件,而本篇要介绍控制文件中最重要的部分——字段列表,在字段列表里定义数据位置、数据类型、过滤条件和分隔符等。下面是字段列表的一个例子:...1 (hiredate SYSDATE,2 deptno POSITION(1:2) INTEGER EXTERNAL(2) NUL原创 2013-08-21 23:21:48 · 5789 阅读 · 0 评论 -
[Oracle] 分区探索(1) - 分区剪枝
分区剪枝分区剪枝是指对于分区表或分区索引来说,优化器可以自动从FROM和WHERE字句里根据分区键提取出需要扫描的分区,从而避免全表扫描,减少扫描的数据块,提高性能。分区剪枝分为静态和动态,静态分区剪枝发生在编译阶段,动态分区剪枝发生在执行阶段,下面我们分别来看看这两种分区剪枝执行计划的异同点。静态分区剪枝静态分区剪枝在解析阶段就知道需要扫描多少个分区,因此执行计划里的原创 2013-08-18 09:25:34 · 3281 阅读 · 0 评论 -
[Oracle] 表在线重定义 - 普通表到分区表
对于一个7*24的在线生产系统来说,修改表定义(DDL)时一件非常痛苦的时,因为如果直接使用alter语句,将会在表上安放一个排他锁,也就是说在这期间所有的DML和select都无法操作,如果是一个大表,alter的时间将很长,在这期间应用会受到很大的影响。幸好,从9i开始,Oracle提供了在线表重定义功能,在修改表定义的同时几乎不影响DML和select语句,因为排他锁只会在表上出现很短时原创 2013-08-13 10:33:23 · 4921 阅读 · 0 评论 -
[Oracle] 如何删除重复数据
查询及删除重复记录的SQL语句 1、查找表中多余的重复记录,重复记录根据单个字段(Id)来判断 select * from table where Id in (select Id from table group by Id having count(Id) > 1) 2、删除表中多余的重复记录,重复记录是根据单个字段(Id)来判断,只留有rowi转载 2013-08-12 20:05:03 · 2756 阅读 · 0 评论 -
[Oracle] SQL*Loader 详细使用教程(3)- 控制文件
控制文件是SQL*Loader里最重要的文件,它定义数据文件的位置、数据的格式、以及配置数据加载过程的行为,本节介绍控制文件的配置参数。在控制文件里配置命令行参数 (OPTIONS)可以使用OPTIONS在控制文件里配置命令行参数,如下所示:OPTIONS (BINDSIZE=100000, SILENT=(ERRORS, FEEDBACK) )配置数据文件(INFILE)原创 2013-08-11 19:32:03 · 10174 阅读 · 0 评论 -
[Oracle] SQL*Loader 详细使用教程(2)- 命令行参数
输入sqlldr,后面不接任何参数,将显示所有的命令行参数的简单描述及其默认值(当你忘记某些参数时,也可以通过这个方式快速查询):Valid Keywords: userid -- ORACLE username/password control -- control file name log -- lo原创 2013-08-11 14:48:09 · 6290 阅读 · 0 评论 -
[Oracle] 在线段收缩(Online Segment Shrink)
Oracle的在线段收缩(Online Segment Shrink)是指在线整理段空间里的碎片,它有以下几个特点:在线,即在段压缩过程中,DML几乎不受影响(只有在结束前很短的时间内,DML会被阻塞)in-place的操作,不需要额外的空间收缩完成后索引依然可用它不但能够收回高水位线以上未使用的空间,还可以收回高水位线下为使用的空间,它的主要步骤是:压缩段空间调整高水原创 2013-08-09 12:57:31 · 2509 阅读 · 0 评论 -
[Oracle] 参数修改小结
v$parameterOracle参数的修改比较复杂,有些参数是可以在session级别修改,有些则必须在system级别修改,有些参数修改后马上生效(不需要重启),有些参数则必须重启才能生效,那么我们如何知道这些信息呢?可以查询动态视图v$parameter中的两列(如下所示)得知:1. ISSES_MODIFIABLE指示参数是否可以在session级别( Alter sessio原创 2013-08-06 15:40:47 · 3452 阅读 · 0 评论 -
[Oracle] 浅谈Sequence(序列)
Oracle的Sequence是一种数据库对象,它可以生成有序数字,主要用于主键的自动生成。如果没有Sequence,主键的自动生成必须得在代码逻辑里实现,大致过程是:获取当前主键值,新主键值=当前主键值+增量。如果多个用户同时请求新主键,则会产生并发等待,影响效率,Sequence就是用来解决这个问题。创建SequenceCREATE SEQUENCE emp_sequenc原创 2013-07-31 22:48:14 · 3794 阅读 · 1 评论 -
[Oracle] Data Pump 详细使用教程(5)- 命令交互模式
当我们起了一个datapump job之后,可以通过v$session_longops查看当前进度。USERNAME - job owner OPNAME - job name TARGET_DESC - job operation SOFAR - megabytes transferred thus far during the job TOTALWORK - estimat原创 2013-07-31 16:11:37 · 3369 阅读 · 0 评论 -
[Oracle] Data Pump 详细使用教程(4)- network_link
expdp的network_link我们知道,expdp默认是导出本地数据库,network_link的作用是导出远程数据库到本地服务器上,其步骤如下:术语说明:源数据库:远程数据库目标数据库:本地数据库(即expdp客户端所在的服务器)1. 在目标数据库端添加源数据库的连接字符串至tnsnames.ora:source_db = (DESCRI原创 2013-07-31 13:09:08 · 3411 阅读 · 0 评论