精华内容
下载资源
问答
  • Oracle数据库底层

    千次阅读 2017-08-08 06:51:40
    Oracle底层的架构对编写出高性能的SQL语句非常重要 实例系统全局内存局部区域(SGA)和一系列的后台进程组成(PGA) SGA的两个领域:共享池和数据库数据缓冲 SGA共享池: 地位: 关键部分之一; 作用:Oracle...

    Oracle底层的架构对编写出高性能的SQL语句非常重要

    实例系统全局内存局部区域(SGA)和一系列的后台进程组成(PGA)
    SGA的两个领域:共享池和数据库数据缓冲

    SGA共享池: 地位: 关键部分之一;
    作用:Oracle缓存程序数据的地方;
    库高速缓存: 存储SQL语句的地方,保存已经解析的语句的区域,解析暴走验证语句的语法、检验提及的对象,以及确认该对象
    的用户权限。
    软解析: 取回以前的解析信息重用;
    硬解析:执行所有工作为当前语句生成执行计划

    高速字典缓存:存放系统参数;
    最少使用算法
    语句需要被共享, 如何写出高共享的SQL语
    编写代码较少使用锁存器

    如何查看库高速缓存中包含此数据?
    查询表v$sql ;
    Oracle在执行语句时,Oracle会首先将字符串转换为散列值,大小写、注释与否

    锁存器:Oracle为了读取存放在库高速缓存或其他内存结构中的信息时必须获得的一种锁。
    保存库高速缓存避免被两个同时运行的会话修改。
    检查锁存器是否空闲


    缓冲区缓存:

    最大的部分之一;
    数据库块从物理盘读取或写入硬盘之前,它用来存储数据块,数据块是Ora
    cle操作的最小单位;

    块中包含表数据行或索引条目,可能还包含用来排序的临时数据:

    关键点:ORACLE必须读取块来获得SQL语句需要的数据行,大小为4kb\8kb\16kb,大小因素取决于使用的操作系统;
    块有结构,一部分可能是用来管理块本身的信息,其余部分用来存储实际的数据或者空白空间;

    块的管理:使用最少使用算法和维护一个接触计算器两种方法进行维护;
    使用锁存器概念管理访问
    访问尽可能少的数据块;
    逻辑读取:从缓冲区缓存中读取数据块
    物理读取:必须从磁盘读取;

    执行计划开发,查询转换,发生在查询语法和权限检查之后;
    查询一系列块查询块的转换阶段;查询块是通过SELECT关键字来定义的;
    查询转换的目的:确定如果改变了查询的语法会不会提供提供更好的的查询计划;

    展开全文
  • public class OracDBUtils { static Properties p = new Properties();... InputStream is =(OracDBUtils.class.getResourceAsStream("oraclejdbc.properties")); try { p.load(is); } catch (Excep
    public class OracDBUtils {
    	static Properties p = new Properties();
    	static{
    		InputStream is =(OracDBUtils.class.getResourceAsStream("oraclejdbc.properties"));
    		try {
    			p.load(is);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    
    	public static Connection getConnection() throws Exception {
    		String url = p.getProperty("url");
    		String driverClass = p.getProperty("driverClass");
    		String username = p.getProperty("username");
    		String password = p.getProperty("password");
    		Class.forName(driverClass);
    		Connection conn = DriverManager.getConnection(url, username, password);
    //		System.out.println(conn);
    		return conn;
    	}
    	public static List<Map> query(String sql) throws Exception{
    		
    		Connection conn =getConnection();
    		PreparedStatement pst = conn.prepareStatement(sql);
    		ResultSet rs = pst.executeQuery();
    		ResultSetMetaData rsmd = rs.getMetaData();
    		List list = new ArrayList();
    		
    		//鑾峰彇鍒楃殑涓暟
    		int columCount = rsmd.getColumnCount();
    		while(rs.next()){
    			Map map = new HashMap();
    			for(int i =1;i<=columCount;i++){
    				String colName = rsmd.getColumnName(i);
    				String colValue = rs.getString(i);
    				map.put(colName, colValue);
    			}
    			list.add(map);
    		}
    		rs.close();
    		pst.close();
    		conn.close();
    		return list;
    	}
    	public static int execute(String sql) throws Exception{
    		Connection conn =getConnection();
    		PreparedStatement pst = conn.prepareStatement(sql);
    		int i = pst.executeUpdate();
    		pst.close();
    		conn.close();
    		return i;
    	}
    	


    展开全文
  • SAP下的Oracle数据库应用底层架构的详细介绍哦,内部权威文档,介绍详尽,仅供分享个人学习参考讨论之用,请勿用于商业活动。
  • 故障检测 误操作导致数据库所在分区被格式化,oracle数据库文件丢失。 修复结果 使用极佳oracle数据库碎片恢复工具,从磁盘分区提取260GB碎片,分离出各个表空间文件,提取客户需要 的用户数据完成恢复. 经过验证数据...

    2019-10-17 19:20:02
    客户名称 保密

    数据类型 oracle 11G

    数据大小 260 GB

    故障检测 误操作导致数据库所在分区被格式化,oracle数据库文件丢失。

    修复结果 使用极佳oracle数据库碎片恢复工具,从磁盘分区提取260GB碎片,分离出各个表空间文件,提取客户需要

    的用户数据完成恢复. 经过验证数据恢复率100%.客户非常满意。

    深圳极佳数据救援中心友情提醒:重要数据一定要勤备份,遇到数据丢失数据损坏等问题,

    要第一时间联系专业人士。

    对于各类主流数据库,我们可以做最底层的数据恢复及数据修复,对于数据库的某些特定故障

    我们保证数据库100%原模原样恢复,无论多大的数据库都立等可取。在这里插入图片描述

    展开全文
  •   Oracle数据库 底层原理解析  全部课程学习网址:https://edu.csdn.net/course/detail/35647
  • Oracle数据库索引底层实现原理笔记

    千次阅读 2020-08-19 16:49:20
    为什么要给表加上主键? 为什么加索引后会使查询变快? 为什么加索引后会使写入、修改、删除变慢?...我们平时建表的时候都会为表加上主键, 在某些关系数据库中, 如果建表时不指定主键,数据库会..
    • 为什么要给表加上主键?

    • 为什么加索引后会使查询变快?

    • 为什么加索引后会使写入、修改、删除变慢?

    • 什么情况下要同时在两个字段上建索引?
      想要理解索引原理必须清楚一种数据结构「平衡树」(非二叉),也就是b tree或者 b+ tree,重要的事情说三遍:“平衡树,平衡树,平衡树”。当然, 有的数据库也使用哈希桶作用索引的数据结构 , 然而, 主流的RDBMS都是把平衡树当做数据表默认的索引数据结构的。

    我们平时建表的时候都会为表加上主键, 在某些关系数据库中, 如果建表时不指定主键,数据库会拒绝建表的语句执行。 事实上, 一个加了主键的表,并不能被称之为「表」。一个没加主键的表,它的数据无序的放置在磁盘存储器上,一行一行的排列的很整齐, 跟我认知中的「表」很接近。如果给表上了主键,那么表在磁盘上的存储结构就由整齐排列的结构转变成了树状结构,也就是上面说的「平衡树」结构,换句话说,就是整个表就变成了一个索引。没错, 再说一遍, 整个表变成了一个索引,也就是所谓的「聚集索引」。 这就是为什么一个表只能有一个主键, 一个表只能有一个「聚集索引」,因为主键的作用就是把「表」的数据格式转换成「索引(平衡树)」的格式放置。

    在这里插入图片描述

    上图就是带有主键的表(聚集索引)的结构图。图画的不是很好, 将就着看。其中树的所有结点(底部除外)的数据都是由主键字段中的数据构成,也就是通常我们指定主键的id字段。最下面部分是真正表中的数据。 假如我们执行一个SQL语句:

    select * from table where id = 1256;

    首先根据索引定位到1256这个值所在的叶结点,然后再通过叶结点取到id等于1256的数据行。 这里不讲解平衡树的运行细节, 但是从上图能看出,树一共有三层, 从根节点至叶节点只需要经过三次查找就能得到结果。如下图

    在这里插入图片描述

    假如一张表有一亿条数据 ,需要查找其中某一条数据,按照常规逻辑, 一条一条的去匹配的话, 最坏的情况下需要匹配一亿次才能得到结果,用大O标记法就是O(n)最坏时间复杂度,这是无法接受的,而且这一亿条数据显然不能一次性读入内存供程序使用, 因此, 这一亿次匹配在不经缓存优化的情况下就是一亿次IO开销,以现在磁盘的IO能力和CPU的运算能力, 有可能需要几个月才能得出结果 。如果把这张表转换成平衡树结构(一棵非常茂盛和节点非常多的树),假设这棵树有10层,那么只需要10次IO开销就能查找到所需要的数据, 速度以指数级别提升,用大O标记法就是O(log n),n是记录总树,底数是树的分叉数,结果就是树的层次数。换言之,查找次数是以树的分叉数为底,记录总数的对数,用公式来表示就是

    在这里插入图片描述

    用程序来表示就是Math.Log(100000000,10),100000000是记录数,10是树的分叉数(真实环境下分叉数远不止10), 结果就是查找次数,这里的结果从亿降到了个位数。因此,利用索引会使数据库查询有惊人的性能提升。

    然而, 事物都是有两面的, 索引能让数据库查询数据的速度上升, 而使写入数据的速度下降,原因很简单的, 因为平衡树这个结构必须一直维持在一个正确的状态, 增删改数据都会改变平衡树各节点中的索引数据内容,破坏树结构, 因此,在每次数据改变时, DBMS必须去重新梳理树(索引)的结构以确保它的正确,这会带来不小的性能开销,也就是为什么索引会给查询以外的操作带来副作用的原因。

    讲完聚集索引 , 接下来聊一下非聚集索引, 也就是我们平时经常提起和使用的常规索引。

    非聚集索引和聚集索引一样, 同样是采用平衡树作为索引的数据结构。索引树结构中各节点的值来自于表中的索引字段, 假如给user表的name字段加上索引 , 那么索引就是由name字段中的值构成,在数据改变时, DBMS需要一直维护索引结构的正确性。如果给表中多个字段加上索引 , 那么就会出现多个独立的索引结构,每个索引(非聚集索引)互相之间不存在关联。 如下图

    在这里插入图片描述

    每次给字段建一个新索引, 字段中的数据就会被复制一份出来, 用于生成索引。 因此, 给表添加索引,会增加表的体积, 占用磁盘存储空间。

    非聚集索引和聚集索引的区别在于, 通过聚集索引可以查到需要查找的数据, 而通过非聚集索引可以查到记录对应的主键值 , 再使用主键的值通过聚集索引查找到需要的数据,如下图

    在这里插入图片描述

    不管以任何方式查询表, 最终都会利用主键通过聚集索引来定位到数据, 聚集索引(主键)是通往真实数据所在的唯一路径。

    然而, 有一种例外可以不使用聚集索引就能查询出所需要的数据, 这种非主流的方法 称之为「覆盖索引」查询, 也就是平时所说的复合索引或者多字段索引查询。 文章上面的内容已经指出, 当为字段建立索引以后, 字段中的内容会被同步到索引之中, 如果为一个索引指定两个字段, 那么这个两个字段的内容都会被同步至索引之中。

    先看下面这个SQL语句

    //建立索引

    create index index_birthday on user_info(birthday);

    //查询生日在1991年11月1日出生用户的用户名

    select user_name from user_info where birthday = ‘1991-11-1’

    这句SQL语句的执行过程如下

    首先,通过非聚集索引index_birthday查找birthday等于1991-11-1的所有记录的主键ID值

    然后,通过得到的主键ID值执行聚集索引查找,找到主键ID值对就的真实数据(数据行)存储的位置

    最后, 从得到的真实数据中取得user_name字段的值返回, 也就是取得最终的结果

    我们把birthday字段上的索引改成双字段的覆盖索引

    create index index_birthday_and_user_name on user_info(birthday, user_name);

    这句SQL语句的执行过程就会变为

    通过非聚集索引index_birthday_and_user_name查找birthday等于1991-11-1的叶节点的内容,然而, 叶节点中除了有user_name表主键ID的值以外, user_name字段的值也在里面, 因此不需要通过主键ID值的查找数据行的真实所在, 直接取得叶节点中user_name的值返回即可。 通过这种覆盖索引直接查找的方式, 可以省略不使用覆盖索引查找的后面两个步骤, 大大的提高了查询性能,如下图

    在这里插入图片描述

    数据库索引的大致工作原理就是像文中所述, 然而细节方面可能会略有偏差,这但并不会对概念阐述的结果产生影响 。

    展开全文
  • 数据分析之OracleOracle数据库特性入门语句Oracle数据库的安装Oracle版本选择问题Oracle用户分类卸载 Oracle 数据库基础查询基础查询练习单行函数字符函数数值函数日期函数转换函数通用函数单行函数练习 Oracle...
  • 数据库是大量持久数据的集合 采用多级存储器用的最多的辅存是磁盘;1. 高速缓存 高速缓a冲存储器是最快最昂贵的存储介质高速缓冲存储器一般很小它的使用由操作系统来管理在数据库系统中我们将不考虑高速缓冲存储器的...
  • Oracle 数据库的表空间和 Oracle 数据库数据文件 关于 Oracle 数据库的表空间。 很多 Oracle 初学者弄不明白表空间的概念和意义,他们只知道给数据库建表的时候需要到表空间这个东东。他们也不大明白执行 create ...
  • 数据库底层操作组件,同时支持MSSQL\ORACLE 数据库 操作,根据配置文件自适应数据库,统一接口,无需改变代码,同时集成了众多优秀函数,例如 批量插入,可以把datagrid\datagridview\datatable 等数据一次性插入到...
  • TNS是Oracle Net的一部分,专门用来管理和配置Oracle数据库和客户端连接的一个工具,在大多数情况下客户端和数据库要通讯,必须配置TNS,当然在少数情况下,不用配置TNS也可以连接Oracle数据库,比如通过JDBC。...
  • Oracle数据库访问类

    2009-01-14 18:02:56
    基于.NET平台的Oracle数据库访问类,实现底层数据库访问操作的方法
  • OCCI(Oracle C++ Call Interface):C++程序与Oracle数据库实现交互的应用程序接口,它以动态连接库的形式提供给用户。OCCI对OCI实行了对象级的封装,其底层仍是OCI  OCCI连接Linux下的Oracle数据库:  1 安装...
  • VC6访问Oracle数据库

    2014-03-17 11:14:28
    VC6.0访问Oracle数据库,通过调用最底层的API,具有最高的运行效率
  • Oracle数据库

    千次阅读 2010-01-27 15:05:00
    删除数据库: 1、停止数据库服务 2、删除实例 oradim –delete –sid liluf 3、删除数据库文件 新增数据库: 1、 建立数据库、配置监听、建立用户 2、 用命令启动数据库 注:注册表regedit HKEY_LOCAL_...
  • oracle数据库集群安装心得

    千次阅读 热门讨论 2017-05-19 20:18:17
    说道Oracle数据库,大家肯定不是很陌生了,因为我们在学习drp分销系统的时候已经有所接触了,也正是因为这样看到了很多同志写的关于如何安装Oracle数据库的博客,也看到了oracle数据库在安装的时候是有多么不容易,...
  • MYSQL数据库迁移到ORACLE数据库

    万次阅读 2013-04-17 13:24:12
    一、环境和需求 1、环境  Mysql数据库服务器: ...OS version:linux 5.3 for 64 bit ...Oracle数据库服务器: OS version:linux 5.3 for 64 bit Oracle version:oracle 11g r2 2、需求
  • 由于DB2数据库使用的人太少,公司有没有专业的DBA,决定把数据库从DB2数据库切换为oracle数据库,本以为很简单,可当真的切换时,却发现,有很多东西出乎意料。 由于系统底层使用的是ORM映射工具,由于没有使用存储...
  • 阿里云中镜像部署Oracle数据库是很轻松的事情,本教程分别介绍如何在Windows和Linux实例上使用镜像部署Oracle数据库。云计算的出现让我们有了更多时间和精力去研究业务本身,把复杂的底层操作交给云计算去实现。 ...
  • SAP连接外部ORACLE数据库

    千次阅读 2018-10-22 20:04:33
    1.先在SAP底层ORACLE数据库编辑TNS文件,一般由BASIS配置完成.配置完成后我们可以用事务码:AL11查看配置是否正确,路径:DIR_ORAHOME-&gt;network-&gt;admin-&gt;tnsnames.ora查看对应的TNS是否配置正确,如...
  • oracle数据库TNS

    2015-04-28 15:59:00
    TNS是Oracle Net的一部分,专门用来管理和配置Oracle数据库和客户端连接的一个工具,在大多数情况下客户端和数据库要通讯,必须配置TNS,下面看一如何配置它吧: TNS简要介绍与应用 :Oracle中TNS的完整定义:...
  • 使用C#连接ORACLE数据库

    万次阅读 2014-03-03 14:14:42
    一、使用OracleClient组件连接Oracle  .Net框架的System.Data.OracleClient.dll组件... 基于业务逻辑与数据库实体的分层需要,一般要求在不同于Oracle数据库主机的客户端机器连接和使用Oracle数据库。这种情况要
  • 使用hibernate作为底层,jquery实现级联操作(附带oracle数据库) 源代码下载地址:http://www.zuidaima.com/share/1564685226675200.htm
  • Oracle数据库:1小时速成大法

    千次阅读 多人点赞 2020-01-08 13:22:24
    Oracle数据库概述 数据库基本概念 数据库相关概念 1.数据(Data)是数据库的基本对象,是描述事物的符号记 2.数据库(Database)就是存放数据的仓库。 3.关系型数据库(Relational Database,简称RDB)就是指...
  • 一、Oracle数据库系统介绍: ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。比如SilverStream就是...
  • 由于DB2数据库使用的人太少,公司有没有专业的DBA,决定把数据库从DB2数据库切换为oracle数据库,本以为很简单,可当真的切换时,却发现,有很多东西出乎意料。由于系统底层使用的是ORM映射工具,由于没有使用存储...
  • Oracle数据库入门笔记(上)

    千次阅读 2021-02-05 00:02:49
    Oracle数据库入门 1.创建表空间 create tablespace bloghut datafile 'C:\bloghut.dbf' size 100m autoextend on next 10m; bloghut 为表空间名称 datafile 指定表空间对应的数据文件 size 后定义的...
  • Oracle数据库开发人员技能

    千次阅读 2015-06-10 22:22:02
    个人认为:初级阶段主要是语法,基本工具使用,中级熟悉某一门数据库开发、体系结构、基本的操作系统命令,高级对数据库底层实现有一定的要求,同时还要熟悉数据库外的一些如开发语言、其他数据库等。图片是以...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 73,942
精华内容 29,576
关键字:

oracle数据库底层