Oracle基础培训2009-12-24北京橙红创新科技有限公司培训内容•Oracle概述•Oracle术语•Oracle基本操作•Oracle中Join用法•Oracle异常处理•OracleUpdate操作•OracleSQL优化Oracle概述1.1什么是ORACLE–ORACLE,即甲骨文股份有限公司,成立于1977年,总部位于美国加州Redwoodshore,是全球最大的信息管理软件及服务供应商,也是最早进入中国的跨国软件巨头。–甲骨文公司主要的产品目前分为以下几大类:–*服务器(服务器)及工具(主要竞争对手:国际商用机器、微软)–*数据库服务器:最新版本11G–*应用服务器:OracleApplicationServer–*开发工具:OracleJDeveloper,OracleDesigner,OracleDeveloper,等–*企业资源计划(ERP)软件。已有10年以上的历史。2005年,并购了开发企业软件的仁科软件公司(PeopleSoft)以增强在这方面的竞争力。–*客户关系管理(CRM)软件。自1998年开始研发这种软件。2005年,并购了开发客户关系管理软件的希柏软件公司(Siebel)。Oracle概述1.2Oracle数据库•Oracle数据库的逻辑体系包括服务器和客户端:•OracleServer是一个对象一关系数据库管理系统。它提供开放的、全面的、和集成的信息管理方法。每个Server由一个OracleDB和一个OracleServer实例组成。每个Oracle数据库对应唯一的一个实例名SID,Oracle数据库服务器启动后,一般至少有以下几个用户:Internal,它不是一个真实的用户名,而是具有SYSDBA优先级的Sys用户的别名,它由DBA用户使用来完成数据库的管理任务,包括启动和关闭数据库;Sys,它是一个DBA用户名,具有最大的数据库操作权限;System,它也是一个DBA用户名,权限仅次于Sys用户。•Oracle客户端即为数据库用户操作端,由应用、工具、SQL*NET组成,用户操作数据库时,必须连接到一服务器,该数据库称为本地数据库(LocalDB)。在网络环境下其它服务器上的DB称为远程数据库(RemoteDB)。用户要存取远程DB上的数据时,必须建立数据库链。•Oracle数据库的存储结构:•它由至少一个表空间和数据库模式对象组成。这里,模式是对象的集合,而模式对象是直接引用数据库数据的逻辑结构。模式对象包括这样一些结构:表、视图、序列、存储过程、同一词、索引、簇和数据库链等。逻辑存储结构包括表空间、段和范围,用于描述怎样使用数据库的物理空间。而其中的模式对象和关系形成了数据库的关系设计。•数据块(Block):是数据库进行UO操作的最小单位,它与操作系统的块不是一个概念。oracle数据库不是以操作系统的块为单位来请求数据,而是以多个Oracle数据库块为单位。•段(Segment):是表空间中一个指定类型的逻辑存储结构,它由一个或多个范围组成,段将占用并增长存储空间。•其中包括:•数据段:用来存放表数据;.•索引段:用来存放表索引;•临时段:用来存放中间结果;•回滚段:用于出现异常时,恢复事务。•范围(Extent):是数据库存储空间分配的逻辑单位,一个范围由许多连续的数据块组成,范围是由段依此分配的,分配的第一个范围称为初始范围,以后分配的范围称为增量范围。Oracle术语•2.1数据库名•数据库名就是一个数据库的标识,就像人的身份证号一样。他用参数DB_NAME表示,如果一台机器上装了多全数据库,那么每一个数据库都有一个数据库名。在数据库安装或创建完成之后,参数DB_NAME被写入参数文件之中。格式如下:•DB_NAME=myorcl•...•在创建数据库时就应考虑好数据库名,并且在创建完数据库之后,数据库名不宜修改,即使要修改也会很麻烦。因为,数据库名还被写入控制文件中,控制文件是以二进制型式存储的,用户无法修改控制文件的内容。假设用户修改了参数文件中的数据库名,即修改DB_NAME的值。但是在Oracle启动时,由于参数文件中的DB_NAME与控制文件中的数据库名不一致,导致数据库启动失败,将返回ORA-01103错误。Oracle术语•数据库实例名与Oracle_SID•一个数据库实例(Instance)是由SGA,后台进程以及数据文件组成,每个数据库有自己的SGA和独立的Oracle进程集。•ORACLE_SID是操作系统的环境变量。•两者都是oracle实例,但两者是有区别的。instance_name是oracle数据库参数,而ORACLD_SID用于与操作系统交互,也就是说,从操作系统的角度访问实例名,必须通过ORACLE_SID。数据库实例名除了与操作系统交互外,还用于网络连接的oracle服务器标识。当你配置oracle主机连接串的时候,就需要指定0实例名。在winnt平台,ORACLE_SID还需存在于注册表中。•在数据库安装之后,ORACLE_SID被用于定义数据库参数文件的名称。如:$ORACLE_BASE/admin/DB_NAME/pfile/init$ORACLE_SID.ora。Oracle术语•2.3表空间•一个Oracle数据库由一个或多个逻辑存储单元——表空间构成,表空间存储着数据库中所有的数据;•Oracle数据库中的每个表空间由一个或多个文件组成,这些文件就是数据文件,它们是Oracle所在操作系统上的物理结构。Oracle数据库中的所有数据物理的存储在数据文件中。•除了普通表空间外,Oracle还有几种特殊的表空间。系统表空间(SYSTEM表空间)、UNDO表空间(回滚表空间)、临时表空间(TEMP表空间)。•系统表空间中除了保存数据字典外还保存所有的存储过程、函数、包、触发器和对象。•UNDO表空间用于保存被DML语句影响的记录的原始状态,以便在事务失败的时候可以进行回滚。•USER表空间•TOOLS表空间•当大的排序操作发生时,排序无法在内存中完成,这时会使用临时表空间。•表空间可以设置为ONLINE和OFFLINE,OFFLINE的表空间无法进行访问。通过对单独表空间的ONLINE和OFFLINE,可以减少对系统的影响。•表空间可以设置为READONLY和READWRITE两种状态,只读的表空间不可以进行锁操作,因此甚至可以放到只读设备上如CDROM。Oracle术语•同义词•同义词用于屏蔽基表的身份,降低sql语句的复杂性,用户不必知道同义词所代表的表是哪一个表,从而用户不需要指明表的所有者的名称。•同义词有私有和公有之分。私有同义词是普通用户所创建的同义词,只有创建该同义词的用户才能使用此同义词,而公用同义词是指数据库管理员创建的,公用同义词允许所有用户使用。Oracle术语•序列•建序列号主要用来自动产生数据,如学生号自动加1,如果有很多的学生,比如10000个,那么使用序列较手工实现会提高效率。•创建语法:•createsequencename•incrementbyx//x为增长间隔•startwithx//x为初始值•maxvaluex//x为最大值•minvaluex//x为最小值•cycle//循环使用,到达最大值或者最小值时,重新建立对象•cachex//制定缓存序列值的个数•创建createsequencesincrementby10startwith1nomaxvalue;•删除dropsequences;•使用insertintoavalues(s.nextval,xxx);Oracle基本操作•创建表空间•如何创建表空间•创建表空间可以使用SQL语句,也可以通过DBAStudio。•使用SYSTEM帐户•droptablespacetestincludingcontents;//删除表空间•createtablespacetestlogging//•datafile'd:\test.dbf'•size100Mreuse•autoextendonnext10Mmaxsizeunlimited;•createtemporarytablespacetemptest•tempfile'd:temptest.dbf'•size10Mreuse;Oracle基本操作•连接ORACLE•如何配置ORACLE客户端•如果Oracle服务器在另外一台主机,你要连接到数据库服务器。那么需要做的事情就是:•在自己的机器安装ORACLE客户端。•配置ORACLE连接:演示•选择”NetworkAdministration”--”Net8ConfigurationAssistant”进行配置Oracle基本操作•常用的一些语句•1.select*fromtab;查看当前表和视图•2.selectnamefromv$database;查看数据库•3.select*fromnls_database_parameters;查看数据库参数设置•4.select*fromuser_role_privs;查看当前用户的角色•5.selectusername,default_tablespace,temporary_tablespacefromuser_users;查看用户名,默认/临时表空间•6.selectview_namefromuser_views;查看视图•7.selecttable_namefromuser_tables;查看表(和第1的区别)•8.select*fromuser_constraints;查看表的约束情况•9.select*fromuser_catalog查看表,视图,同义词和当前所有序列的简明目录Oracle中Join用法•内连接•左连接•右连接•完全连接•迪卡尔1.内连接:选出两个表中所有符合连接条件的row构成的集合。2.外连接,分为LEFT、RIGHT、FULL三种如有R与S做连接,那么LEFT是所有满足条件的row以及所有在R属性对应值在S中为NULL的集合。RIGHT是所有满足条件的row以及所有在S属性对应值在R中为NULL的集合FULL是所有满足条件的row以及任何在R或S中出现NULL的集合Oracle中Join用法•innerjoin(等值连接只返回两个表中联结字段相等的行1.select*fromTable1a,Table2bwherea.id=b.id2.Select*fromtable1AINNERJOINtable2BONA.ID=B.IDOracle中Join用法•leftjoin(左联接)返回包括左表中的所有记录和右表中联结字段相等的记录•select*fromTable1a,table2bwherea.id=b.id(+);•SELECT*FROMtable1ALEFTJOINtable2BONA.ID=B.IDOracle中Join用法•rightjoin(右联接)返回包括右表中的所有记录和左表中联结字段相等的记录•select*fromtable1a,table2bwherea.id(+)=b.id;•SELECT*FROMtable1ARIGHTJOINtable2BONA.ID=B.IDOracle中Join用法•完全连接返回包括右表中的所有记录和左表中的所有记录•select*fromtable1a,table2bwherea.id=b.id(+)unionselect*fromTable1a,table2bwherea.id(+)=b.id;•SELECT*FROMtable1AFULLOUTERJOINtable2BONA.ID=B.IDOracle中Join用法•迪卡尔返回两个表相等字段的乘积select*fromtable1,table2;Oracle异常处理1、异常的优点如果没有异常,在程序中,应当检查每个命令的成功还是失败。2、异常的分类有两种类型的异常,一种为内部异常,一种为用户自定义异常。3、异常的抛出由三种方式抛出异常