oracle数据库

Oracle 指数 一个简短的引论

假装没事ソ 提交于 2020-03-02 08:02:48
1 索引创建语法: CREATE UNIUQE | BITMAP INDEX <schema>.<index_name> ON <schema>.<table_name> (<column_name> | <expression> ASC | DESC, <column_name> | <expression> ASC | DESC,...) TABLESPACE <tablespace_name> STORAGE <storage_settings> LOGGING | NOLOGGING COMPUTE STATISTICS NOCOMPRESS | COMPRESS<nn> NOSORT | REVERSE PARTITION | GLOBAL PARTITION<partition_setting> 相关说明 1)UNIQUE | BITMAP:指定UNIQUE为唯一值索引。BITMAP为位图索引,省略为B-Tree索引。 2)<column_name> | <expression> ASC | DESC:能够对多列进行联合索引,当为expression时即“基于函数的索引” 3)TABLESPACE:指定存放索引的表空间(索引和原表不在一个表空间时效率更高) 4)STORAGE:可进一步设置表空间的存储參数 5)LOGGING | NOLOGGING

Oracle索引原理

无人久伴 提交于 2020-03-02 08:01:03
Oracle提供了大量索引选项。知道在给定条件下使用哪个选项对于一个应用程序的性能来说非常重要。一个错误的选择可能会引发死锁,并导致数据库性能急剧下降或进程终止。而如果做出正确的选择,则可以合理使用资源,使那些已经运行了几个小时甚至几天的进程在几分钟得以完成,这样会使您立刻成为一位英雄。这篇文章就将简单的讨论每个索引选项。主要有以下内容: [1] 基本的索引概念 查询DBA_INDEXES视图可得到表中所有索引的列表,注意只能通过USER_INDEXES的方法来检索模式(schema)的索引。访问USER_IND_COLUMNS视图可得到一个给定表中被索引的特定列。 [2] 组合索引 当某个索引包含有多个已索引的列时,称这个索引为组合(concatented)索引。在 Oracle9i引入跳跃式扫描的索引访问方法之前,查询只能在有限条件下使用该索引。比如:表emp有一个组合索引键,该索引包含了empno、 ename和deptno。在Oracle9i之前除非在where之句中对第一列(empno)指定一个值,否则就不能使用这个索引键进行一次范围扫描。 特别注意:在Oracle9i之前,只有在使用到索引的前导索引时才可以使用组合索引! [3] ORACLE ROWID 通过每个行的ROWID,索引Oracle提供了访问单行数据的能力。ROWID其实就是直接指向单独行的线路图

Oracle索引(Index)介绍使用

时光怂恿深爱的人放手 提交于 2020-03-02 07:56:53
1.什么是引                                               索引是建立在表的一列或多个列上的辅助对象,目的是加快访问表中的数据;Oracle存储索引的数据结构是B*树,位图索引也是如此,只不过是叶子节点不同B*数索引;索引由根节点、分支节点和叶子节点组成,上级索引块包含下级索引块的索引数据,叶节点包含索引数据和确定行实际位置的rowid。 2.使用索引的目的                                             当查询返回的记录数排序表<40%非排序表 <7%且 表的碎片较多(频繁增加、删除)时可以 加快查询速度减少I/O操作消除磁盘排序 3.索引的分类及结构                                             从物理上说,索引通常可以分为:分区和非分区索引、常规B树索引、位图(bitmap)索引、翻转(reverse)索引等。其中,B树索引属于最常见的索引,由于我们的这篇文章主要就是对B树索引所做的探讨,因此下面只要说到索引,都是指B树索引。 B树索引是一个典型的树结构,其包含的组件主要是: 1) 叶子节点(Leaf node):包含条目直接指向表里的数据行。 2) 分支节点(Branch node):包含的条目指向索引里其他的分支节点或者是叶子节点。 3) 根节点

oracle 的索引

被刻印的时光 ゝ 提交于 2020-03-02 07:52:29
一、索引分类 按逻辑分: 单列索引(Single column): 单列索引是基于单列所创建的索引 复合(多列)索引(Concatenated ): 复合索引是基于两列或者多列所创建的索引 唯一索引(Unique ): 唯一索引是索引列值不能重复的索引。 非唯一索引(NonUnique ): 非唯一索引是索引列可以重复的索引。 函数索引(Function-based): Oracle中不仅能够直接对表中的列创建索引,还可以对包含列的函数或表达式创 建索引,这种索引称为“位图索引”。 域索引(Domain): 域索引实际为用户自定义索引,域索引主要对存储在数据库中的媒体,图像数据进行索引,这些数据在oracle中基本上 以BLOB类型存储,不同的应用存储格式也不同, oracle不可能提供某一种现成的算法对这些数据进行索引,为了能够对 这些类型数据快速访问,oracle提供了现成的接口函数,用户可以针对自己的数据格式实现这些接口函数,以达到对这些 数据的快速访问。 按物理分: 分区索引(Partitioned): 表分区后其上建立的索引与普通表建立的索引不同,其索引是分区索引。 分区表上的索引分为 2 类,即 局部索引 和 全局索引 局部索引local index 局部索引一定是分区索引 ,分区键等同于表的分区键,分区数等同于表的分区数,一句话,局部索引的分区机制和表的分区机制一样。

解决OracleDBConsoleorcl不能启动

有些话、适合烂在心里 提交于 2020-03-02 04:45:01
手动执行一下emctl.bat,于是启动控制台,执行emctl.bat istart dbconsole,报错,ORACLE_SID没有定义,打开emctl.bat看看,这里是定义环境变量的地方,其中已经设置了这些:   if not defined REMOTE_EMDROOT (set ORACLE_HOME=Ec:oracleproduct10.2.0db_1)   if not defined REMOTE_EMDROOT (set EMDROOT=%ORACLE_HOME%)   if defined REMOTE_EMDROOT (set ORACLE_HOME=%REMOTE_EMDROOT%)   if defined REMOTE_EMDROOT (set EMDROOT=%ORACLE_HOME%)   if defined REMOTE_EMDROOT (set LOCAL_EMDROOT=c:oracleproduct10.2.0db_1)   ……   后边还有一条设置:   if not defined DBCONSOLE_SERVICE_NAME (set DBCONSOLE_SERVICE_NAME=OracleDBConsole%ORACLE_SID%),用到了ORACLE_SID,但没有看到前面设置,只能手动设置ORACLE_SID试试

OracleDBConsoleorcl 启动不了 服务特定错误2【解决办法】

夙愿已清 提交于 2020-03-02 03:50:22
问题描述: 我的oracle不知道为什么OracleDBConsoleorcl 启动不了 出现“服务特定错误2”现在我也不知道原因 估计是因为我电脑的IP经常变动,有时在公司用,有时在家里用! 我的oracle版本:oracle10g 问题解决: 上网搜索,发现很多人遇到过这问题,不过导致这问题的原因也很多,我是试了几个方法都不行,后来进行如下: 第一步:先删除原来的配置: D:\Documents and Settings\guanhao>emca -repos drop EMCA 开始于 2007-11-19 14:45:06 EM Configuration Assistant 10.2.0.1.0 正式版 版权所有 (c) 2003, 2005, Oracle。保留所有权利。 输入以下信息: 数据库 SID: tuosi 监听程序端口号: 1521 SYS 用户的口令: SYSMAN 用户的口令: SYSMAN 用户的口令: 是否继续? [yes(Y)/no(N)]: y 2007-11-19 14:45:20 oracle.sysman.emcp.EMConfig perform 信息: 正在将此操作记录到 E:\oracle\product\10.2.0\db_1\cfgtoollogs\emca\tuosi\em ca_2007-11-19_02-45-06-下午

Java连接Oracle数据库

拟墨画扇 提交于 2020-03-02 03:31:54
1 package com.db; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.PreparedStatement; 6 import java.sql.ResultSet; 7 8 public class DBConnection { 9 // 连接Oracle数据库 10 public void OracleConnection() { 11 Connection con = null; 12 PreparedStatement pre = null; 13 ResultSet rs = null; 14 15 try { 16 // 1. 加载Oracle驱动程序 17 Class.forName("oracle.jdbc.driver.OracleDriver"); 18 19 // 2. 设置Oracle数据库基本信息 20 String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl"; 21 String user = "scott"; 22 String password = "goodluck"; 23 24 // 2. 获取连接 25 con = DriverManager

VS2010 VS2012无法引用System.Data.OracleClient 解决方案

北城余情 提交于 2020-03-01 17:32:34
在需要引用的程序集引用文件夹上右击,选择添加引用 选择浏览选项 找到目录 C:\Windows\Microsoft.NET\Framework\v2.0.50727 找到 System.Data.OracleClient.dll 文件 点击确定。OK,引用完成。 番外: 微软决定撤销System.Data.OracleClient 内容如下: 对于那些开发.Net应用程序而数据库又是Oracle的人来说,这则新闻显得特别有意义,微软正打算将Oracle数据提供程序从ADO.NET路线图中移除。   微软决定撤销System.Data.OracleClient是因为有相当数量的MVP都倾向于选择第三方Oracle数据提供程序,负责 ADO.NET OracleClient的产品经理Himanshu Vasishth在ADO.NET团队博客文章中宣布了这一决定。   但在.Net框架4.0中微软将会继续支持System.Data.OracleClient,但会被标记为“不宜使用”,根据Vasishth的说法,这对现有的应用程序没有任何影响,它们将会按预期运转得很好。   他在文章中提到“使用OracleClient开发新的应用程序仍然是可行的,但在.Net 4.0中编译时会弹出一个警告对话框,编译好后,运行时不会再弹出警告对话框,我们强烈建议用户使用我们合作伙伴的 ADO.NET

Oracle数据库的基本操作(三)

随声附和 提交于 2020-03-01 16:18:52
一、查询 1.查询CS系的所有学生的信息 –第一种 select * from Student where Sdept = 'CS'; –第二种 select * from Student where lower(Sdept) = 'cs'; –第一种与第二种的区别在于“CS”的大小写,第一种是正常大写,第二种为小写,此时应将Sdept改为lower(Sdept) 2.查询姓名是张三或杨三的学生 select * from Student where regexp_like(Sname,'[张杨]三'); 注:在SQL Server中的语句为 select * from Student where Sname like '[张杨]三'; 3.左外连接left outer join 3.1查询每个学生的信息及该生的选课信息,即使没有选课也要列出该生的信息 –SQL Server和Oracle中 select Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade from Student left outer join SC on Student.Sno = Sc.Sno; –Oracle中 select Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade from Student,SC where Student

Oracle(触发器)

江枫思渺然 提交于 2020-03-01 16:04:50
1、触发器的概念 每当一个特定的数据库操作语句(Insert、Update、delete)在指定的表上发出时,Oracle自动执行触发器中定义的语句序列。 2、触发器的类型 (1)语句级的触发器 触发的对象为表,在指定的操作语句操作之前或之后执行一次,不管这条语句影响了多少行。 (2)行级触发器(for each row) 触发器作用的对象为每一条记录,在行级触发器中使用:old和:new伪记录变量识别值的状态。 3、定义一个触发器: 4、触发器的应用 (1)安全性检查: create or replace trigger securityemp before insert on emp begin if to_char(sysdate,'day') in ('星期六','星期日') or to_number(to_char(sysdate,'hh24')) not between 9 and 17 then raise_application_error(-20001,'禁止在非工作时间插入新员工'); end if; end securityemp; (2)数据的确认: create or replace trigger checksalary before update on emp for each row begin if :new.sal<:old.sal then