《Oracle数据管理系统培训.doc》由会员分享,可在线阅读,更多相关《Oracle数据管理系统培训.doc(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Oracle数据管理系统培训一、简要说明Oracle体系结构相当庞大,包括数据库服务器领域、应用服务器领域和应用开发领域的许多知识,因此我们在本次培训过程中不可能也没有必要面面俱到,这次培训不想讲太多的理论性知识,仅从实际应用角度出发,针对我们在实际开发过程中经常遇到的一些技术知识进行边讲解边演示。二、Oracle数据库管理系统简介Oracle是世界上最早的商品化的关系型的数据库管理系统之一,是数据库专业厂商Oracle公司的核心产品,也是当今关系型数据库产品市场上应用最为广泛、功能强大、具有面向对象特点的数据库系统。Oracle数据库的推出最早可达到上世纪70年代,从那以后,一直领导着数据库
2、发展的新潮流,融汇先进的技术并预见性地领域了全球数据库技术的发展。据统计,Oracle在全球数据库市场的占有率达33.3%,在关系型数据库市场上的拥有42.1%的市场份额,在Unix高端应用领域市场上占据66.2%的份额,现在,包括惠普、波音和通用电气等众多大型跨国企业都利用Oracle电子商务的套件来运行自己的业务。作为一个通用的数据库管理系统,Oracle具有完整的数据库管理功能,包括存储海量数据、定义和操纵数据、并发控制、安全性控制、完整性控制、故障恢复、与高级语言接口等功能。Oracle到9i版本后,支持各种分布式处理功能,特别是支持Internet处理,还支持面向对象处理的功能,支持
3、类、方法和属性、空间数据等概念,使得Oracle产品逐渐成为了一种对象 关系型数据库管理系统。Oracle发展到10g以后,采用一种叫网格计算的技术。这样用户和服务者都在网络上,对于服务提供商来说,服务变的更为可靠,负载均衡更为灵活,具有无限的扩展能力。对于用户来说,他只需要提出他的请求就可以了,无需知道是在哪个网上,哪个服务端在为他提供服务。具体来讲,Oracle 10G的网格计算包涵四个方面的内容:存储网格、数据库网格、应用程序网格和网格控件。三、Oracle体系的组成部分简介Oracle体系结构相当庞大,它是Oracle公司推出的针对电子商务应用的一整套解决方案,整体由三大体系组成。(一
4、)数据服务器体系(Oracle Database)Oracle9i和10g的数据库服务器从版本上分企业版、标准版和个人版,共有以下18个组件。1JServer Enterprise Edition企业版支持Java的Web Server2InterMedia互联网媒体服务3Object Option目标功能4Networking Kit网络包5Object for OLE目标6Advanced Replication Option高级复制功能7Distributed Option分布式功能8Parallel Query Option并行查询功能9Sql*Plus查询工具10Workflow E
5、nterprise Edition工作流企业版11Advanced backup & recovery高级备份恢复12Advanced Queuing高级队列13Connection Pool连接池1464 bit Option64位功能15ODBC DriverODBC驱动16OCI调用接口17Enterprise Manager企业管理器18Enterprise Backup Utility企业备份工具(二)应用服务器体系(Oracle Application Server)Oracle9i和10g的数据库服务器用于构建互联网应用,提供企业级的分布应用解决方案,有以下11个组件。主要产品有
6、:1Http/J2EE(Apache+)Apache HTTP服务器 2Portal接口3OEMOracle企业管理器4Web & DB CacheWeb和数据库缓冲区5Form Service表单服务6Report Service报表服务7Discoverer Plus数据挖掘8EmailEmail支持9Internet Directory互联网目录10Workflow工作流11Application InterConnet ToolKit 应用连接包(三)开发工具套件(Oracle Developer)Oracle的开发工具套件提供了以下9个套件1Designer设计器2Form Deve
7、loper表单开发工具3Report Developer报表开发工具4JDeveloper开发工具5Portal接口6Discoverer Administration Edition企业版数据挖掘器管理71 Licence Discoverer Disktop Edition1个用户的数据挖掘器8Warehouse Builder数据仓库建立器三、Oracle的安装Oracle的安装一般有数据库服务器的安装、客户端的安装。一般情况下,我们只需安装一台Oracle数据库服务器,用户端只需安装客户端连接服务器,然后就可以在统一的服务器上建立自己的表空间与用户。关于Oracle的安装在这里不详细介
8、绍了,我们在这里需要注意两上概念:全局数据库名与数据库标识符(SID)的区别。全局数据库名主要用于在分布式数据库系统中区分不同服务器上的数据库例程,比如在上海的例程可命名为Oracle.ShangHai,北京的为Oracle.BeiJing,这样即使数据库例程名相同,在分布式网络中也能区分。数据库标识符(SID)主要用于区分同一台服务器上的不同数据库例程。前者为外部区分,后者为内部区分。在网络配置管理中,服务名一般是指全局数据库名,而网络服务名一般是指SID。比如说我们公司的数据库服务器的全局数据库服务名为:Oracle10、我们在本地针对船舶管理系统的SID为ShipMis。五、Oracle
9、数据库结构介绍(一)逻辑结构Oracle数据库按逻辑结构从大到小分有:数据库、表空间、逻辑对象(包括表、索引、视图、过程等21个)、数据段、数据区间、数据块。一个数据库服务器可有多个数据库;一个数据库可有多个表空间;一个表空间可以有多个表;一个表可以有多个数据段;一个数据段可以有多个数据区间;一个数据区间可以有多个数据块。(二)一些逻辑对象的介绍1过程:也就是存储过程对象。2程序包:程序包分别二个部分,一个是程序包,另一个是程序包体。程序包相当于Java中的接口定义,它是对一组存储过程进行定义,但并不对其进行实现。而程序包体则是对程序包中定义的过程进行具体实现。程序包与程序包体一一对应。程序包
10、与过程的区别是:过程只能是一个单独的存储过程,而程序包是一组存储过程的集合。我们可以使用程序包对存储过程进行分门别类地管理。比如我们如果要对船舶管理系统进行后端开发的话,我们可以把针对PMS的所有过程放在一个PKG_PMS包下统一管理,而把备件物料的所有过程放在一个PKG_SPARE包下进行统一的管理。3簇:将一些互相关联的具有相同字段的数据表或索引集中存储的一种管理。4数据库链接:在分布式环境中链接其它节点的数据库服务器。5序列:它相当于在Oracle中建立的表的自增长字段,数据表可以利用它做为字段。6同义词:在Oracle中访问数据表的形式是“用户名.表名”,同义词可以用一个别名来代替它。
11、比如说我们定义一个同义词a指向表:T_Component_Type_Parm,那么select * from T_Component_Type_Parm语句与select * from a的执行效果是一样的。六、表空间的建立为了提高数据库服务器管理和运行效率,Oracle使用表空间这个虚似概念来管理逻辑对象,用户可以将不同的逻辑对象存放在不同的表空间下,可以理解表空间就是Oracle数据库的文件夹,用户建立的各种数据库对象应该存放在相应的表空间下,Oracle9i和10g数据库服务器安装完毕后,将自动建立以下几个默认表空间。分别是:1CWMLITEOLAP2DRSYS存放与工作空间设置相关信息
12、3EXAMPLE实例表空间,存放实例信息4INDEX索引表空间,存放索引信息5OEM_REPOSITORY6SYSTEM系统表空间,存放管理信息7TEMP临时表空间,存放临时表8TOOLS工具表空间,存放工具软件所需要的数据库对象9UNDOTBS回滚表空间,存放数据库恢复信息10USERS用户表空间,存放用户私有信息我们建立一个用户时如果不指定表空间,默认选择的表空间是USERS、临时表空间是TEMP。但一般情况最后是建立自己的表空间,以便单独进行管理。表空间的建立有如下两种方式:(一)使用企业管理器建立表空间(二)使用PLSQL命令来建立表空间(1)建立create tablespace t
13、ablespacetest datafile d:oracleoradataoracle10tablespacestest01.dbf size 10M,d:oracleoradataoracle10tablespacestest02.dbf size 10M,d:oracleoradataoracle10tablespacestest03.dbf size 10M;(2)扩大现有表空间alter database Oracle10 tablespacetest d:oracleoradataoracle10tablespacestest01.dbf resize 20M;(3)删除表空间dr
14、op tablespace tablespacetest including contents七、用户的建立Oracle中的用户就相当我们的业务数据库。我们建立数据库时需要指定用户名与口令。(一)企业管理器建立用户(二)使用PLSQL命令来建立用户(1)建立用户 create user userTest identified by usertest default tablespace tablespacetest temporary tablespace temp quota unlimited on tablespacetest;(2)删除用户drop user userTest casc
15、ade;八、Oracle中Net命令服务的配置我们在建立一个用户之后,可以针对此用户建立一个SID实例名,可使用Oracle的Net Manager工具建立。九、Oracle中的角色与权限Oracle提供了两种类型的权限:系统权限和对象权限。(一)系统权限系统权限提供了在Oracle数据库执行多种任务的能力,系统权限不能访问数据库内的表和视图。通常系统权限可以用来许可或者限制DDL语句的执行,Oracle中定义了系统权限多达120多个,常用的系统权限有:1CREATE SESSION 允许用户在数据库上注册。2CONNECT 允许注册和创建常用的数据库,CONNECT权限是一个预定义角色。3R
16、ESOURCE 传送UNLIMITED TABLESPACE,也就是这种权限自动授权给用户。4CREATE TABLE 允许用户创建表。5CREATE VIEW 允许用户创建视图。6CREATE SEQUENCE 允许用户创建序列。7CREATE PROCEDURE 允许用户创建过程,函数与包。8CREATE TRIGGER 允许用户在其所属的表创建触发器。9CREATE SYNONYM 允许用户创建专用的同义词。授予系统特权的语法:grant system_privilege to username with grant option去掉系统权限语句:revoke system_privil
17、ege from usename举例:grant create table,create view,create procedure,create trigger,create sequence,create session,select any dictionary,unlimited tablespace to userTest;(二)对象权限对象权限用来指定访问用户所属的数据类型。这个用户可以拥有多种对象如表,视图等。对象权限可以用来许可或阻止DML语句的执行。常见的有SELECT、INSERT、UPDATE、DELETE、EXECUTE(可以应用于PL/SQL过程、函数、程序包以及其他
18、可执行元素如Java类)授予对象权限的语法:grant object_privilege on object_name to usernamewith admin option取消对象权限的语句:revoke object_privilege on object_name from username(三)角色管理Oracle使用角色来限定各种用户的权力,在系统中可以有许多用户,各种用户有各种不同的角色,而角色拥有不同的权力。有时与其赋一组权限给每一个用户,不如先赋一定的权限给一个角色,然后把这个角色赋给用户,这样就可以实现动态的权限管理,当一组用户的权限必须改变时,只需改变角色的权限即可,而不
19、用每个用户都一一改变权限。Oracle中的角色有预定义角色和用户自定义角色。常见的预定义角色如:1CONNECT登录数据库2RESOURCE创建新对象(如表、视图等)3DBA执行数据库管理员的功能,如创建新用户4EXP_FULL_DATABASE输出完整的数据库5IMP_FULL_DATABASE输入完整的数据库6SELECT_CATALOG_ROLE查看数据字典视图用户自定义的角色的创建必须具有管理权限。定义:CREATE ROLE rolename;为角色授予权限语句:GRANT CREATE TABLE TO rolename;删除角色:DROP ROLE rolename十、Oracl
20、e数据库的备份Oracle中的备份方式可分两大类,一种是逻辑备份,另一种是物理备份。(一)逻辑备份逻辑备份就是我们常用的导入(Import)和导出备份(Export),这种备份方式能够针对对象进行备份,能够跨平台实施备份操作并适移数据,使用这种备份时,数据库可以不关闭。这种备份一般用于有规律的日常备份。采用这种方式我们可以进行表方式和用户方式的备份。Export备份方式:1C:exp shipmis/shipmisshipmis;2数组缓冲区大小4096:按回车;3导出文件:EXPDAT.DMPd:shipmis.dmp;4U(用户),或(3)T(表):(2)U5导出权限(yes/no):ye
21、s6导出表数据(yes/no):yes)7压缩区(yes/no):yes)Import恢复方式1C:Imp shipmis/shipmisshipmis2导入文件:EXPDAT.DMPC:shipmis.dmp3输入插入缓冲区大小(最小为819230720)4只列出导入文件的内容(yes/no):no回车(要导入内容必须选择no)5由于对象已存在,忽略创建错误(yes/no):noyes6导入权限(yes/no):yesyes7导入表数据(yes/no):yes回车8导入整个导出文件(yes/no):noyes(最好选yes)(二)物理备份冷备份冷备份实质上是在关闭数据库的一种文件式的考贝备份
22、。使数据库处于关闭状态时,把数据相关文件转移到安全的区域,当数据库遭到破坏,再从安全区域将备份的数据库相关文件拷贝回原来的位置。由于是在数据库不提供服务的关闭状态,所以称为冷备份。冷备份具有快速,方便,以及高效等特点。一次完整的冷备份步骤应该是:1关闭数据库(shutdown normal或shutdown abort);2复制数据库相关文件利用操作系统命令拷贝数据库的所有的数据文件、日志文件、控制文件、参数文件到一个安装区域。3重新启动数据库(startup)恢复的时候,相对比较简单了,我们停掉数据库,将文件拷贝回相应位置,重启数据库就可以了。(三)物理备份热备份热备份与冷备份的区域就是它是
23、在归档模式下进行的,数据库仍处于打开和使用状态。当我们需要做一个精度比较高的备份,而且我们的数据库不可能停掉时,这时我们就需要归档方式下的备份,就是热备份。热备份可以非常精确的备份表空间级和用户级的数据,由于它是根据归档日志的时间轴来备份恢复的,理论上可以恢复到前一个操作,甚至就是前一秒的操作。热备份相对比较复杂,对于硬件以及操作人员的要求都比较高。在这里不做详细介绍。十一、表、视图、程序包、序列介绍(一)表create table tb ( equipid number, equipname nvarchar2(30) NOT NULL, constraint EQUIP_PK primar
24、y key(equipid),-主键 constraint EQUIPNAME_UK unique(equipname) -唯一索引 ) 建表时把表中不同范围的数据放在不同的表空间上以加快查询速度,这种情况一般在表数据量特别大(上亿条记录)时使用。 create table tb ( id number partition by range(id),(partition p1 values less than(10) tablespace pt1, partition p2 values less than(20) tablespace pt2) )(二)视图在Oracle中有四种类型的视图:
25、关系视图、内嵌视图、对象视图和物化视图。我们最常用的视图就是关系视图。建立关系视图的语法:create or replace view view_name as query删除视图语法:drop view view_name 在查询中查询视图的语法:SELECT text FROM user_views WHERE view_name=VIEW_NAME;VIEW_NAME必须大写。(三)程序包在Oracle中有四种类型的视图:关系视图、内嵌视图、对象视图和物化视图。我们最常用的视图就是关系视图。我们前边说过,程序包是过程的一种改进,它可以对存储过程进行分门别类地进行管理。建立程序包的语法为:
26、1程序包定义create or replace package employee_pkg as procedure print_ename(p_empno in number);-第一个存储过程接口 procedure print_sal(p_empno in number);-第二个存储过程接口 end employee_pkg;2程序包体的定义create or replace package body employee_pkg as procedure print_ename(p_empno number) -第一个过程的实现 is begin dbms_output.put_line(
27、p_empno); end; procedure print_sal(p_empno number) -第二个过程的实现 is l_res number; begin l_res:=p_empno*p_empno; dbms_output.put_line(l_res); end; end employee_pkg;3调用程序包:begin employee_pkg.print_ename(100); employee_pkg.print_sal(100);end;在Oracle的SQLPLUS中还可以使用如下语法:execute employee_pkg.print_ename(100);e
28、xecute employee_pkg.print_sal(100);在应用系统中调用程序包:(1) NET中的调用如下:OleDbCommand Cmd = New OleDbCommand(PKG.Procedure, con); Cmd.CommandType = CommandType.StoredProcedure; Cmd.Parameters.Add(varCaseName, OleDbType.VarChar).Value = cboAccidentName.Text; con.Open(); Cmd.ExecuteNonQuery(); con.Close();(2) Jav
29、a中的调用如下:Connection con=DriverManager.getConnection();Statement smt=con.createStatement();CallableStatement cst=con.prepareCall(call GetDataForYYT(?,?,?,?);cst.setString(1,txtFreightBill.getText(); /设置输入参数cst.registerOutParameter(2,java.sql.Types.INTEGER); /注册输出参数的JDBC类型cst.registerOutParameter(3,jav
30、a.sql.Types.DECIMAL,2);cst.registerOutParameter(4,java.sql.Types.DECIMAL,2);cst.execute();txtSumPieces.setText(String.valueOf(cst.getInt(2); /把返回的值赋给文本框txtSumJWeight.setText(String.valueOf(cst.getFloat(3);txtLastResult.setText(String.valueOf(cst.getFloat(4);con.close();(四)序列我们在建立表时经常用自增长的方式为表指定主键,在S
31、QL Server中可以直接在建立字段时指定自增长类型。在Oracle中的实现方式略有不同,Oracle中要使用序列的方式来实现自增长。序列是Oracle中的一个对象,我们需要建立一个序列对象,然后在每个表中用触发器的方式来实现自增长功能。原则上一个序列最好只针对一个表。触发器的写法如下:begin select seq_name.nextval into :new.tbId from dual;end;也可以不建触发器,在我们的SQL语句中命名seq_name.nextval自动产生一个自增长值。十二、PL/SQL简介PL/SQL语言是标准SQL语言的一种扩展,它是Oracle公司在继承标准
32、SQL语言基础上,又进行了相应的扩展从而更加适应Oracle数据库管理的一种过程性语言。SQL是结构化的通用查询语言的缩写,它是国际化标准组织(ISO)定义的一种通用查询语言,许多数据库厂商都是在此基础上进而扩展了它们自己的语言,如Microsoft公司的Transaction-SQL,Oracle公司的PL/SQL等。(一)PL/SQL结构块declare -变量声明部分(注意,任何变量声明都必须放在这部分)begin -主体语句部分exception -异常处理部分end;在定义过程、程序包、函数和触发器时,不使用关键字DECLARE。举例如下:Declarenum1 number;num
33、2 number;num3 number;var1 varchar2(20);var2 varchar2(20);var3 varchar2(20);beginnum1:=100;num2:=10;num3:=num1/num2;dbms_output.put_line(num3); var1:=Visual; var2:= Basic; var3:=var1 | var2; dbms_output.put_line(var3);exceptionwhen others then dbms_output.put_line(错误);end;(二)运算符1算术运算符:+、-、*、/、*(求幂,如1
34、0*5=10的5次方)2关系运算符:=、!=(或者)、=、LIKE(通配符是%和_)、BETWEEN、IN、IS NULL3逻辑运算符:NOT、AND、OR (x=1 OR x=2 OR x=3或用x in(1,2,3)表达式代替,从而使用代码更容易阅读)4连接运算符:|(三)内置函数1number函数ABS(n),SIN,COS,TAN,ASIN,ACOS,ATAN,CEIL(n),FLOOR(n),LN(n),EXP(n),LOG(m,n),MOD(m,n),POWER(m,n),ROUND(m,n),SIGN(n),SQRT(n),trunc函数,载取函数,载去小数部分,如trunc(2
35、5.59)=25,trunc(25.596,2)=25.592Date函数(1)add_months(date_value,number):算出一个日期的在增加(或减少)指定月数后的日期。(2)current_date:当前日期(current_timestamp,localtimestamp),还有sysdate函数。(3)extract(date_field from date_value):返回一个日期的间隔值(年月日时分秒)date_field取值有:YEAR,MONTH,DAY,HOUR,MINUTE,SECOND3字符函数(1)initcap(value):将一个字符串第一个字母转
36、换成大写,其余的转换为小写,initcap(visual basic)返回的是Visual Basic,而不是Visual basic。(2)instr(value,search_string,start_position,occurence):在一个字符串中找出另一个字符串从指定起始位置的第occurence次出现的位置,instr(Visual Basic,Basic)=8。(3)length(value):返回一个字符串的长度。(4)lower(value)(upper(value)。4格式转换函数(1)to_char(日期转换为字符),例:to_char(sysdate,yyyy.mm
37、.dd)=2003.09.28(2)to_char(数值转换为字符),例:to_char(49000,$99,999.99)=$49,000.00(3)to_date(),将字符转换为日期型数据(注意,在此函数中,格式掩码是必须的)(4)to_number(),将字符型数据转换为数值型(四)语法(1)IF.ELSE.ENDIF条件语句的使用,如:declare l_num number:=#begin if l_num=1 then dbms_output.put_line(You selected one); elsif l_num=2 then dbms_output.put_li
38、ne(You selected two);end;(2)loopend loop循环,如: declare l_loops number:=0; begin dbms_output.put_line(Before my loop); loop if l_loops10 then exit; end if; dbms_output.put_line(Looped|l_loops|times); l_loops:=l_loops+1; end loop; dbms_output.put_line(After my loop); end;(3)for.end loop循环,如: declare begin for idx in 1.10 loop dbms_output.put_line(idx); end loop; end;(4)while循环begin loops:=1; while loops=10 loop dbms_output.put_line(loops); loops:=loops+1; end loop; end;