ORACLE系统概述(5)
数据库结构和空间管理 一个ORACLE数据库是数据的集合,被处理成一个单位。一个ORACLE数据库有一个物理结构和一个逻辑结构。 物理数据库结构(physical database structure)是由构成数据库的操作系统文件所决定。每一个ORACLE数据库是由三种类型的文件组成:数据文件、日志文件和控制文件。数据库的文件为数据库信息提供真正的物理存储。 逻辑数据库结构是用户所涉及的数据库结构。一个ORACLE数据库的逻辑结构由下列因素决定: l 一个或多个表空间 l 数据库模式对象(即表、视图、索引、聚集、序列、存储过程) 逻辑存储结构如表空间(data
ORACLE系统概述(4)
ORACLE运行1) 使用专用服务进程的ORACLE的运行在这种配置下,ORACLE运行过程如下:(1) 数据库服务器计算机当前正在运行ORACLE(后台进程)。(2) 在一客户工作站运行一个数据库应用(为用户进程),如SQL*PLUS。客户应用使用SQL*NET DRIVER建立对服务器的连接。(3) 数据库服务器计算机当前正运行合适的SQL*NET DRIVER,该机上接收器进程检出客户数据库应用的连接请求,并在该机上为用户进程建立专用服务器进程。(4) 用户发出单个SQL语句。(5) 专用服务器进程接收该语句,在此处有两种方法处理SQL语句:如果在共享池一共享SQL区中
ORACLE系统概述(3)
ORACLE的配置方案 所有连接到ORACLE的用户必须执行两个代码模块可存取一个ORACLE数据库实例: 应用或ORACLE工具:一数据库用户执行一数据库应用或一个ORACLE工具,可向ORACLE数据库发出SQL语句。 ORACLE服务器程序:负责解释和处理应用中的SQL语句。 在多进程实例中,连接用户的代码可按下列三种方案之一配置:对于每一个用户,其数据库应用程序和服务器程序组合成单个用户进程 对于每一个用户,其数据库应用是由用户进程所运行,并有一个专用服务器进程。执行ORACLE服务器的代码。这样的配置称为专用服务器体系结构; 执行数据库应用
ORACLE系统概述(2)
二、 ORACLE数据库系统的体系结构 ORACLE数据库系统为具有管理ORACLE数据库功能的计算机系统。每一个运行的ORACLE数据库与一个ORACLE实例(INSTANCE)相联系。一个ORACLE实例为存取和控制一数据库的软件机制。每一次在数据库服务器上启动一数据库时,称为系统全局区(SYSTEM GLOBAL AREA)的一内存区(简称SGA)被分配,有一个或多个ORACLE进程被启动。该SGA 和 ORACLE进程的结合称为一个ORACLE数据库实例。一个实例的SGA和进程为管理数据库数据、为该数据库一个或多个用户服务而工作。 在ORACLE系统中,首先是实例启动,然
ORACLE系统概述(1)
ORACLE公司自86年推出版本5开始,系统具有分布数据库处理功能.88年推出版本6,ORACLE RDBMS(V6.0)可带事务处理选项(TPO),提高了事务处理的速度.1992年推出了版本7,在ORACLE RDBMS中可带过程数据库选项(procedural database option)和并行服务器选项(parallel server option),称为ORACLE7数据库管理系统,它释放了开放的关系型系统的真正潜力。ORACLE7的协同开发环境提供了新一代集成的软件生命周期开发环境,可用以实现高生产率、大型事务处理及客户/服务器结构的应用系统。协同开发环境具有可移植性,支持多种数据来源、多种图形用户
oracle case
/******************************/case语句,求助高手 几个when分支执行相同操作,怎么合并到一块比如:case selectorwhen a then A;when b then A;when c then B;when d then B;when e then Cend case;/**************************************/set serverout oncreate table test (id varchar2(10));insert into test values('1');insert into test values('2');insert into test values('3');insert into test values('4');insert into test values('5');commit;declare cursor cur_test is select id from test;beginfor row_cur in cur_
用SQL解决有向图问题
一个常见的高级计算机科学问题可以在“有向图”的范畴之下描述。有向图是由一组向量和边所连接的一组有限的节点。例如,一个节点可以想象为一座“城市”,而每个向量可以想象为两座城市间的一个“航线”。有很多算法和论文讲到如何解决每种可能路线的遍历问题以及寻找最短路径或者最小代价路径的问题。这些算法中大部分都是过程化的,或者是使用递归方面来解决的。然而 SQL 的声明性语言使得解决复杂的有向图问题更加容易,而且不需要很多代码。让我们以两座城市之间的航线为例子,创建一个表保存一些假想数据:( code char(3) constra
oracle体系结构(3)
三、ORACLE逻辑结构 1、 表空间(tablespace) 表空间是数据库中的基本逻辑结构,一系列数据文件的集合。一个表空间可以包含多个数据文件,但是一个数据文件只能属于一个表空间。 2、 段(Segment) 段是对象在数据库中占用的空间,虽然段和数据库对象是一一对应的,但段是从数据库存储的角度来看的。一个段只能属于一个表空间,当然一个表空间可以有多个段。 表空间和数据文件是物理存储上的一对多的关系,表空间和段是逻辑存储上的一对多的关系,段不直接和数据文件发生关系。一个段可以属于多个数据文件,关于段
oracle体系结构(1)
在本章里你可以了解以下内容 1、 ORACLE 实例——包括内存结构与后台进程 2、 ORACLE 数据库——物理操作系统文件的集合 3、 了解内存结构的组成 4、 了解后台进程的作用 5、 了解数据库的物理文件 6、 解释各种逻辑结构 一、ORACLE实例 1、ORACLE 实例 System Global Area(SGA) 和 Background Process 称为数据库的实例。 2、ORACLE 数据库 一系列物理文件的集合(数据文件,控制文件,联机日志,参数文件等) 3、系统全局共享区System Global Area(SGA) System
oracle工作机制(2)
下面是几个关于回滚段和死锁的事例:有表:Test (id number(10)) 有记录1000000条一,大SELECT,小UPDATEA会话----Select * from test;----设scn=101----执行时间09:10:11B会话-----Update test set id=9999999 where id=1000000----设scn=102-----执行时间09:10:12 我 们会发现B会话会在A会话前完成,A会话中显示的ID=100000是从回滚段中读取的,因为A会话在读到ID=1000000所在的BLOCK时发现 BLOCK上有事务信息,因此要从回滚段中读,如果UPDATE在SELECT读到此BLOCK之前已经COMMIT,则SELECT 读到此BLOCK时发现其BLOCK上没有事务信息,
oracle工作机制(1)
我们从一个用户请求开始讲,ORACLE的完整的工作机制是怎样的,首先一个用户进程发出一个连接请求,如果使用的是主机命名或者是本地服务命中的 主机名使用的是机器名(非IP地址),那么这个请求都会通过DNS服务器或HOST文件的服务名解析然后传送到ORACLE监听进程,监听进程接收到用户 请求后会采取两种方式来处理这个用户请求,下面我们分专用服务器和共享服务器分别采用这两种方式时的情况来讲:专用服务器模式下:一种方式 是监听进程接收到用户进程请求后,产生一个新的专用服务器进程,并且将对用户进程的所有控制信息传给此服务器进程,也
oracle的with函数用法示例
with a as (select dummy from dual),b as (select dummy from dual)select a.dummy,b.dummy from a,b where a.dummy = b.dummy /********************************/Starting in Oracle9i release 2 we see an incorporation of the SQL-99 “WITH clause”, a tool for materializing subqueries to save Oracle from having to re-compute them multiple times.The SQL “WITH clause” is very similar to the use of Global temporary tables (GTT), a technique that is often used to improve query speed for complex subquer
oracle的case函数和case控制结构
create sequence STUDENT_SEQUENCE;CREATE TABLE students (id NUMBER(5) PRIMARY KEY,stu_name VARCHAR2(20),score NUMBER(10,0),grade varchar2(2));INSERT INTO students (id, stu_name, score, grade)VALUES (student_sequence.NEXTVAL, 'Scott', 98,null);INSERT INTO students (id, stu_name, score, grade)VALUES (student_sequence.NEXTVAL, 'Margaret', 88,null);INSERT INTO students (id, stu_name, score, grade)VALUES (student_sequence.NEXTVAL, 'Joanne', 75,null);INSERT INTO students (id, stu_name, score, grade)VAL
ORACLE VPD方案
ORACLE VPD方案DROP USER VPD CASCADE;DROP ROLE R_VPD;CREATE USER VPD IDENTIFIED BY VPD;CREATE ROLE R_VPD;GRANT RESOURCE TO VPD;--VPD.VPD_PKG_FILTER.ReturnFilterCol在运行时读取视图ALL_TAB_COLUMNS需要该权限GRANT SELECT ANY TABLE TO VPD;--LOCK ALL USERS EXCEPT SYS AND SYSTEM锁定除SYS和SYSTEM的用户SET SERVEROUT ONDECLARECURSOR CUR_USERS IS SELECT USERNAME FROM DBA_USERS WHERE USERNAME NOT IN ('SYSTEM','SYS');BEGINFOR R_CUR IN CUR_USERS LOOPEXECUTE IMMEDIATE 'ALTER USER '||R_CUR.USERNAME||' ACCOUNT LO
分析执行计划优化SQL<4>ORACLE的执行计划(转)
环境:oracle 817 + linux + 阵列柜swd_billdetail 表5000万条数据SUPER_USER 表2800条数据连接列上都有索引,而且super_user中的一条对应于swd_billdetail表中的很多条记录表与索引都做了分析。 实际应用的查询为:select a.CHANNEL, B.user_classfrom swd_billdetail B, SUPER_USER Awhere A.cn = B.cn; 这样在分析时导致查询出的数据过多,不方便,所以用count(a.CHANNEL||B.user_class)来代替,而且count(a.CHANNEL||B.user_class)操作本身并不占用过多的时间,所以可以接受此种替代。 利用索引查询出SWD_BILLDETAIL表中所有
分析执行计划优化SQL<3>ORACLE的执行计划(转)
背景知识: 为了更好的进行下面的内容我们必须了解一些概念性的术语: 共享sql语句 为了不重复解析相同的SQL语句(因为解析操作比较费资源,会导致性能下降),在第一次解析之后,ORACLE将SQL语句及解析后得到的执行计划存放在内存中。这块位于系统全局区域SGA(system global area)的共享池(shared buffer pool)中的内存可以被所有的数据库用户共享。因此,当你执行一个SQL语句(有时被称为一个游标)时,如果该语句和之前的执行过的某一语句完全相同,并且之前执行的该语句与其执行计划仍然在内存中存在,则ORACLE就不需要再进行分
分析执行计划优化SQL<2>ORACLE的优化器(转)
优化器有时也被称为查询优化器,这是因为查询是影响数据库性能最主要的部分,不要以为只有SELECT语句是查询。实际上,带有任何WHERE条件的DML(INSERT、UPDATE、DELETE)语句中都包含查询要求,在后面的文章中,当说到查询时,不一定只是指SELECT语句,也有可能指DML语句中的查询部分。优化器是所有关系数据库引擎中的最神秘、最富挑战性的部件之一,从性能的角度看也是最重要的部分,它性能的高低直接关系到数据库性能的好坏。我们知道,SQL语句同其它语言(如C语言)的语句不一样,它是非过程化(non-procedural)的语句,即当你要取数据时,不
分析执行计划优化SQL<1>SQL语句处理的过程(转)
第1章 SQL语句处理的过程 在调整之前我们需要了解一些背景知识,只有知道这些背景知识,我们才能更好的去调整sql语句。本节介绍了SQL语句处理的基本过程,主要包括: · 查询语句处理 · DML语句处理(insert, update, delete) · DDL 语句处理(create .. , drop .. , alter .. , ) · 事务控制(commit, rollback) SQL 语句的执行过程(SQL Statement Execution) 图3-1 概要的列出了处理和运行一个sql语句的需要各个重要阶段。在某些情况下,Oracle运行sql的过程可能与下面列出的各个阶段的顺序有所不同。如DEFIN
ORACLE锁
0:none 1:null 空2:Row-S 行共享(RS):共享表锁,sub share 3:Row-X 行独占(RX):用于行的修改,sub exclusive 4:Share 共享锁(S):阻止其他DML操作,share5:S/Row-X 共享行独占(SRX):阻止其他事务操作,share/sub exclusive 6:exclusive 独占(X):独立访问使用,exclusive数字越大锁级别越高, 影响的操作越多。1级锁有:Select,有时会在v$locked_object出现。2级锁有:Select for update,Lock For Update,Lock Row Share select for update当对话使用for update子串打开一个游标时,所有返回集中的数据行都将处于行级(Row-X)独占
初级行转列示例
表aid,name,val1,aaa,302,aaa,403,aaa,604,bbb,405,bbb,606,bbb,80得到结果name,val1,val2,val3aaa,30,40,60bbb,40,60,80Oracle中:select Name,sum(decode(tmp.rn,1,val)) val1,sum(decode(tmp.rn,2,val)) val2,sum(decode(tmp.rn,3,val)) val3 from (Select a.*,row_number() over(Partition By Name Order By val) rn From a)tmp Group By NameMSSQL中:select name,max(case rc when '1' then val end) val1,max(case rc when '2' then val end) val2,max(case rc when '3' then val end) val3 from (select id,name,(select count(0)