oracle执行计划

Oracle 课程一之Oracle体系结构

十年热恋 提交于 2020-02-28 07:16:34
课程目标 •理解ORACLE数据库体系架构—内存结构和进程 •理解SQL在数据库中的运作流程 •理解UNDO&REDO原理 •理解commit原理 1.Oracle数据库概述 •数据库:物理操作系统文件或磁盘的集合。 •实例:一组Oracle后台进程/线程以及一个共享内存区,这些内存由同一个计算机上运行的线程/进程所共享。 2. Oracle体系结构 任何硬件平台或操作系统下的ORACLE体系结构都是相同的, 包括如下四个方面: •物理结构 数据文件,日志文件,控制文件,参数文件。 •逻辑结构 表空间、段、区间、数据块。 •内存结 共享池,数据缓冲区,日志缓冲区,PGA。 •进程 用户进程、服务器进程、后台进程。 数据文件:select name from v$datafile; 控制文件:select name from v$controlfile; 日志文件:select member from v$logfile; 参数文件:$oracle_home/dbs/initSID.ora(从spfile转换,create pfile from spfile;) 归档日志文件:show parameter log_archive_dest 查看归档模式:archive log list SGA: show sga/show parameter sga/v$sgastat PGA:

oracle优化

余生长醉 提交于 2020-02-19 12:20:38
------------恢复内容开始------------ CBO(cost -based optimizer)实际上是对执行目标sql所要耗费的I/O、 CPU和网络资源的一个估算值 cardinallity 集合包含的记录数 修改密码 C:\Documents and Settings\Administrator>sqlplus / as sysdba sqlplus / as sysdba ---------以sys登陆 超级用户(sysdba) alter user 用户名 account unlock; --------- 解除锁定(必须带“;”号) alter user 用户名 identified by 密码; -------------修改密码 oracle有三个默认的用户名和密码~ 1.用户名:sys密码:change_on_install 2.用户名:system密码:manager 3.用户名:scott密码:tiger select distinct owner from all_objects ;---查看系统用户 set antotrace on ; 开启执行计划 --在pl/sql出错 cannot set sutotrace ; dbms_stats 包 收集统计信息; pl/sql F5 背后原理: explain plan for select

oracle根据特定字符拆分字符串的方法

倖福魔咒の 提交于 2020-02-17 07:49:59
清洗数据需要将某个字段内以空格分隔的字符串拆分成多行单个的字符串,百度了很多种方法大概归结起来也就这几种方法最为有效,现在把贴出来: 第一种: select regexp_substr('1 2 3','[^ ]+',1,level,'i') from dual connect by level <= length('1 2 3') -length(regexp_replace('1 2 3',' ',''))+1; 效果就是这个样子↓ 效果 这种方法的核心就是 regexp_subst r函数,通过正则来拆分字符串,函数用法为: regexp_substr(str, 进行匹配的正则表达式,position, 标志第几个匹配组,modifier) 。 该函数的一个缺点就是只能每次取一个字符串出来,这个就比较头痛了,因为现在我要取分割后所有的字符串,所以现在就要用到 connect by 命令,来限制取几个匹配组,当然我们是要全部的,所以就通过 length 来实时确定所取得匹配组数量。 通过这种方法就可以实现开题的需求,但在用的过程中发现一个问题,如果说我要给拆分后的字符串带上ID的话这种方法就貌似失灵了,会无限次取,所以问题没解决,有人知道的话麻烦可以告诉我一下。 第二种 1 create or replace function split(p_list varchar,p

ORACLE隐式类型转换

不问归期 提交于 2020-02-16 14:12:22
隐式类型转换简介 通常 ORACLE 数据库存在显式类型转换( Explicit Datatype Conversion ) 和隐式类型转换( Implicit Datatype Conversion )两种类型转换方式。如果进行比较或运算的两个值的数据类型不同时(源数据的类型与目标数据的类型),而且此时又没有转换函数时,那么 ORACLE 必须将其中一个值进行类型转换,使其能够运算。这就是所谓的隐式类型转换。其中隐式类型转换是自动进行的,当然,只有在这种转换是有意义的时候,才会自动进行。 Data Conversion Generally an expression cannot contain values of different datatypes. For example, an expression cannot multiply 5 by 10 and then add 'JAMES'. However, Oracle supports both implicit and explicit conversion of values from one datatype to another. 关于隐式类型转换,建议翻看官方文档 “ Data Type Comparison Rules ” 章节,下面是官方文档中的隐式类型转换矩阵。从下面这个表格

[置顶] Oracle数据操作和控制语言详解

故事扮演 提交于 2020-02-14 22:56:41
SQL 语言共分为四大类:数据查询语言 DQL ,数据操纵语言 DML , 数据定义语言 DDL ,数据控制语言 DCL 。其中用于定义数据的结构,比如 创建、修改或者删除数据库; DCL 用于定义数据库用户的权限;在这篇文章中我将详细讲述这两种语言在 Oracle 中的使用方法。 DML 语言 DML 是 SQL 的一个子集,主要用于修改数据,下表列出了 ORACLE 支持的 DML 语句。 语句 用途 INSERT 向表中添加行 UPDATE 更新存储在表中的数据 DELETE 删除行 SELECT FOR UPDATE 禁止其他用户访问 DML 语句正在处理的行。 LOCK TABLE 禁止其他用户在表中使用 DML 语句 插入数据 INSERT 语句常常用于向表中插入行,行中可以有特殊数据字段,或者可以用子查询从已存在的数据中建立新行。 列目录是可选的,缺省的列的目录是所有的列名,包括 comlumn_id,comlumn_id 可以在数据字典视图 ALL_TAB_COLUMNS,USER_TAB_COLUMNS, 或者 DBA_TAB_COLUMNS 中找到。 插入行的数据的数量和数据类型必须和列的数量和数据类型相匹配。不符合列定义的数据类型将对插入值实行隐式数据转换。 NULL 字符串将一个 NULL 值插入适当的列中。关键字 NULL 常常用于表示将某列定义为

Oracle学习笔记(十)分区索引失效的思考

允我心安 提交于 2020-02-14 17:11:34
此处只说索引失效的场景(只会影响全局索引): 结论:全局索引truncate 分区和交换分区都会导致索引失效果 局部索引truncate分区不会导致索引失效。 drop table part_tab_trunc purge; create table part_tab_trunc (id int,col2 int,col3 int,contents varchar2(4000)) partition by range (id) ( partition p1 values less than (10000), partition p2 values less than (20000), partition p3 values less than (maxvalue) ) ; insert into part_tab_trunc select rownum ,rownum+1,rownum+2, rpad('*',400,'*') from dual connect by rownum <=50000; commit; create index idx_part_trunc_col2 on part_tab_trunc(col2) local; create index idx_part_trunc_col3 on part_tab_trunc(col3) ; --

深入理解Oracle表(5):三大表连接方式详解之Hash Join的定义,原理,算法,成本,模式和位图...

孤街浪徒 提交于 2020-02-14 07:25:15
Hash Join只能用于相等连接,且只能在CBO优化器模式下。相对于nested loop join,hash join更适合处理大型结果集 Hash Join的执行计划第1个是hash表(build table),第2个探查表(probe table),一般不叫内外表,nested loop才有内外表 Hash表也就是所谓的内表,探查表所谓的外表 两者的执行计划形如: nested loop outer table --驱动表 inner table hash join build table (inner table) --驱动表 probe table (outer table) 先看一张图片,大致了解Hash Join的过程: 下面详细了解一下Hash Join ㈠ Hash join概念 H ash join算法的一个基本思想就是根据小的row sources(称作build input 也就是前文提到的build table,我们记较小的表为S,较大的表为B) 建立一个可以存在于hash area内存中的hash table 然后用大的row sources(称作probe input,也就是前文提到的probe table) 来探测前面所建的hash table 如果hash area内存不够大,hash table就无法完全存放在hash area内存中

oracle体系-10-undo

心不动则不痛 提交于 2020-02-11 04:02:06
UNDO: 使用 undo tablespace 存放从数据缓存区读出的数据块的前镜像 1.空间重用机制 undo 数据的4种状态 ①active ## 表示transaction 还没有 commit ,不可覆盖 , ②unexpired ## 由已经commit 或 rollback 的数据转换而来的状态 , 在保留期内,尽量不覆盖(非强制) ③expired: ##由unexpired转换而来,其中的数据是超过 undo 保留期的,随时可以再分配(覆盖)。 ④free: ##分配了但未使用过。一般是undo最初创建和扩展时出现,它不是一个常态的。 undo 的状态转换体现了 undo 空间的循环使用原理:分配 --- 》冻结 ---> 回收 --- 》再分配 2. 提供以下四种情况所需要的信息 1 ) 回滚事务: rollback 2 ) 读一致性:正在做 DML 操作的数据块,事务结束前,其他用户读 undo 里面的数据前镜像 3 ) 实例的恢复: instance recover(undo -->rollback) 4 ) 闪回技术 : flashback query 、 flashback table 等 3.Undo的参数及说明 SYS>show parameter undo NAME TYPE VALUE ------------------------------

《精通Oracle SQL(第2版)》PDF

浪子不回头ぞ 提交于 2020-02-10 09:47:00
一:下载途径 二:图书图样 三:目录 第1章 SQL核心  1.1 SQL语言  1.2 数据库的接口  1.3 SQL*Plus回顾  1.3.1 连接到数据库  1.3.2 配置SQL*Plus环境  1.3.3 执行命令  1.4 5个核心的SQL语句  1.5 SELECT语句  1.5.1 FROM子句  1.5.2 WHERE子句  1.5.3 GROUP BY子句  1.5.4 HAVING子句  1.5.5 SELECT列表  1.5.6 ORDER BY子句  1.6 INSERT语句  1.6.1 单表插入  1.6.2 多表插入  1.7 UPDATE语句  1.8 DELETE语句  1.9 MERGE语句  1.10 小结  第2章 SQL执行  2.1 Oracle架构基础  2.2 SGA共享池  2.3 库高速缓存  2.4 完全相同的语句  2.5 SGA缓冲区缓存  2.6 查询转换  2.6.1 查询块  2.6.2 视图合并  2.6.3 子查询解嵌套  2.6.4 联结消除  2.6.5 排序消除  2.6.6 谓词推进  2.6.7 使用物化视图进行查询重写  2.7 确定执行计划  2.8 执行计划并取得数据行  2.9 SQL执行——总览  2.10 小结  第3章 访问和联结方法  3.1 全扫描访问方法  3.1.1

pl/sql oracle

不打扰是莪最后的温柔 提交于 2020-02-09 18:20:10
http://uule.iteye.com/blog/2061773(出处) 批量导入脚本 : 打开一个command window > 输入@ > 它会让你选择要导入的文件 (自己要知道导入文件的先后顺序,plsql不会自动识别这个的 或者像ls的 写个脚本) 如:@D:\SVN\1.5数据库脚本\oracle\import2.sql http://blog.csdn.net/hbhgjiangkun/article/details/8208565 1、PL/SQL Developer记住登陆密码 在使用PL/SQL Developer时,为了工作方便希望PL/SQL Developer记住登录Oracle的用户名和密码; 设置方法:PL/SQL Developer7.1.2 ->tools->Preferences->Oracle->Logon History,“Store history”是默认勾选的,勾上“Store with password”即可,重新登录在输入一次密码则记住了。 2、执行单条SQL语句 在使用PL/SQL Developer的SQL Window时,按F8键,PL/SQL Developer默认是执行该窗口的所有SQL语句,需要设置为鼠标所在的那条SQL语句,即执行当前SQL语句; 设置方法:PL/SQL Developer7.1.2-->tools-