大型数据库管理系统Oracle应用开发整本书课件完整版电子教案最新

上传人:夏** 文档编号:568274525 上传时间:2024-07-23 格式:PPT 页数:737 大小:16.03MB
返回 下载 相关 举报
大型数据库管理系统Oracle应用开发整本书课件完整版电子教案最新_第1页
第1页 / 共737页
大型数据库管理系统Oracle应用开发整本书课件完整版电子教案最新_第2页
第2页 / 共737页
大型数据库管理系统Oracle应用开发整本书课件完整版电子教案最新_第3页
第3页 / 共737页
大型数据库管理系统Oracle应用开发整本书课件完整版电子教案最新_第4页
第4页 / 共737页
大型数据库管理系统Oracle应用开发整本书课件完整版电子教案最新_第5页
第5页 / 共737页
点击查看更多>>
资源描述

《大型数据库管理系统Oracle应用开发整本书课件完整版电子教案最新》由会员分享,可在线阅读,更多相关《大型数据库管理系统Oracle应用开发整本书课件完整版电子教案最新(737页珍藏版)》请在金锄头文库上搜索。

1、大型数据库管理系统(Oracle)应用开发1Oracle:宗宗(古希腊古希腊)神谕神谕,意为意为“智慧之源智慧之源”。Oracle中文名称:甲骨文中文名称:甲骨文引言引言Oracle - Oracle - 全球卓越的全球卓越的ITIT巨人巨人Oracle是全球第一大数据库软件公司Oracle是全球第一大企业软件供应商全球145个国家及地区设有分支机构Oracle全球超过70,000名员工超过275,000全球客户Oracle总部位于加州硅谷,亚太地区总部设于新加坡2006财政年度营业额148亿美元,研发经费超19亿美元Source:GartnerMay2006,WorldwideRDBMSTo

2、talSoftwareRevenue关系型数据库市场市场份额Oracle始终是领先者 Unix平台Oracle保持Unix市场不可动摇的领先优势Source:Gartner,May2005Linux平台Oracle在Linux市场份额遥遥领先.OracleUnbreakableLinuxSource:GartnerMay2006,WorldwideRDBMSTotalSoftwareRevenue7Oracle公司硅谷总部8Oracle公司硅谷总部 OracleOracle是是仅仅次次于于微微软软的的全全球球第第二二大大电电脑脑软软件件公公司司,总总部部位位于于硅硅谷谷的的红红木木滩滩,设设计

3、计楼楼栋栋,另另有有行行政政大大楼楼几几栋栋,最最高高1616层层、最最低低8 8层层。OracleOracle总总部部的的员员工工60006000多多人人,至至少少有有60006000多多辆辆汽汽车车,所所以以规规模模庞庞大大的的车车库库成成了了OracleOracle公公司司总总部部必必不不可可少少的的的的建建筑筑、也也是是美美国国大大公公司司的的一一道道景景观观。车车库库层层楼楼,一一栋栋连连着着一一栋栋,加加上上大大片片的的停停车车场场,实实在在令令人人叹叹为为观观止止!公公司司四四周周有有人人工工挖挖掘掘的的湖湖泊泊,喷喷水水池池和和草草坪坪花花木木,以以大大自自然然的美丽点缀着的美

4、丽点缀着OracleOracle公司的雄伟严谨气派。公司的雄伟严谨气派。910Oracle数据库应用的岗位人才需求Oracle在业界享有良好的声誉,具有强大的功能,良好的稳定性、安全性和伸展性。一种功能强大、灵活的面向对象的关系型数据库管理系统。信息领域行业的迅猛发展,市场对Oracle人才的需求也将急剧地增加。Oracle数据数据库系统库系统业界地位业界地位功能特点功能特点应用领域应用领域人才需求人才需求广泛应用在银行、电信、移动通信、航空、保险、金融、跨国公司和电子商务等。目前已经占领了60%以上的数据库市场份额。 IDC 去年下半年软件调查报告,Oracle公司在亚太区的市场份额高达53

5、%,被评为市场的领先者,在中国,Oracle在关系型数据库市场拥有65%市场份额。课程课程设置设置课程课程定位定位Oracle数据库应用开发员Oracle数据库管理员课程介绍:定位与培养目标课程介绍:定位与培养目标qOracle数据库应用是计算机软件专业的专业核心课程,旨在培养学生具有Oracle数据库应用开发的专业人才。q通过本课程的学习,掌握使用Oracle数据库管理系统进行信息系统后台数据库平台的设计、开发与应用。q数据库配置和管理,安全管理。q理解 Oracle 数据库体系结构。q熟练掌握 SQL 命令和 SQL 函数。q正确使用 Oracle 的各种数据库对象。q熟练使用 PL/SQ

6、L 编写存储过程和触发器q达到oracle数据库应用开发工程师所具有的职业素养。12如何教?如何学?如何教?如何学?由于Oracle数据库在全球高端数据库领域占有的份额大Oracle数据库认证的含金量颇高Oracle数据库本身的复杂性学习难度也较大课程课程特点特点学生学生特点特点社会能力较强,乐于动手,可塑性较强逻辑思维能力,学习方法,能力有待提高 教学内容课程结构 教学过程理实一体,课程内容综合化模拟仿真,课程实施一体化任务引领,课程结构模块化课程设计思路课程设计思路课程介绍:教材课程介绍:教材15Oracle数据库系统应用开发实用教程数据库系统应用开发实用教程高等教育出版社高等教育出版社主

7、编:朱亚兴主编:朱亚兴副主编:余爱民副主编:余爱民任淑美任淑美林萍林萍课程介绍:参考书课程介绍:参考书Oracle 10g管理及应用/王路群主编 北京:中国水利水电出版社,2007Oracle数据库开发实用教程/刘竹林主编北京:中国水利水电出版社,2008.01Oracle数据库应用与开发实例教程 /吴海波主编北京:电子工业出版社,2008Oracle基础教程/(美) 佩里(Perry,J)/ (美) 波斯特( Post,G)著 钟鸣等译北京:人民邮电出版社,2008Oracle 10g数据库管理与应用系统开发/李晓黎,刘宗尧编著 北京:人民邮电出版社,2007Oracle SQL培训教程:从

8、实践中学习Oracle SQL及Web快速应用开发/何明,何茜颖等编著 北京:清华大学出版社,2010 Oracle 10g编程基础/(美) Rajshekhar Sunderraman著 王彬, 刘宏志译 北京:清华大学出版社,2008Oracle数据库系统:SQL和PL/SQL简明教程/(美)沙著 刘伟琴译 北京:清华大学出版社,2005 Oracle Database 10g 实用培训教程/赵伯山,郭飞宇编 北京:清华大学出版社,2005Oracle Database 10g基础教程/闪四清著 北京:清华大学出版社,2005Oracle Database 10g完全参考手册/(美) 龙利

9、(Kevin Loney)著 张立浩, 尹志军译 北京:清华大学出版社,2006 Oracle10g 数据库基础教程 孙风栋 等编著 北京 电子工业出版社2009.16课程介绍:课程资源课程介绍:课程资源17课程网站:爱课程网、中国大学资源共享课网课程介绍:学习方法课程介绍:学习方法q预习、听课、思考、做笔记、做实验、再思考、再做笔记。18勤于动手勤于动手善于思考善于思考乐于钻研乐于钻研课程介绍课程介绍q前导课程q掌握关系数据库基础 、计算机应用基础基本概念q掌握数据库管理系统(SQLServer) 基本使用和配置q掌握程序设计基础基本知识1920第1章认识Oracle数据库学习Oracle数

10、据库,搭建系统的开发环境。21工作情境:工作情境:需要了解需要了解Oracle10g数据数据库管理系统,进行库管理系统,进行Oracle服务服务器安装等工作。器安装等工作。任务分析任务分解任务分解q任务1:了解Oracle的应用、发展史及特点。 q任务2:安装Oracle10g数据库服务器。 q任务3:了解Oracle用户账户。q任务4:使用SQL*Plus工具、使用iSQL*Plus工具。 q任务5:使用Oracle企业管理器。q任务6:进行网络监听配置。q任务7:了解基于Oracle数据库的应用系统结构。q任务8:搭建系统开发环境。23任务1任务1.了解Oracle的应用、发展史及特点。2

11、4Oracle系统的应用qOracle公司提供产品和服务。包括:数据库、开发工具、ERP、CRM、OLAP,电子商务应用产品(e-Business),并提供全球化的技术支持,培训和咨询顾问服务。q应用产品领域:惠普、波音和通用电气等众多大型跨国企业。在我国,Oracle的应用已经深入到了银行、证券、邮电、铁路、民航、军事、财税、教育等许多行业。qOracle应用产品包括财务、供应链、制造、项目管理、人力资源和市场与销售等七十多个模块,现已被全球近7600多家企业所采用。25Oracle发展历程-1拉里埃里森(LarryEllision)是世界上最大数据库软件公司甲骨文的老板,他的产品遍布全世界

12、。埃里森在32岁以前还一事无成。读了三个大学,没得到一个学位文凭,换了十几家公司,老婆也离他而去。开始创业时只有1200美元,却使得Oracle公司连续12年销售额每年翻一番,成为世界上第二大软件公司。26Oracle发展历程-2q1977年,Larry Ellison、Bob Miner和Ed Oates等人共同创办了一家名为软件开发实验室(SDL)的计算机公司。决定构建 RDBMS,并发布了第一个版本。这个产品命名为ORACLE。q1979年,更名为RSI首次向客户发布了产品,即第2版。q1983年,推出第3版。同年,RSI更名为Oracle公司。(C)q1984年,第4版发布。增加了读一

13、致性。q1985年,第5版发布。该版本可称作是Oracle发展史上的里程碑。第一个Client/Server模式的RDBMS。86年上市。q1988年,Oracle的第6版发布。该版本支持锁定模式、多处理器、过程化语言PL/SQL及OLTP,联机热备份。 27Oracle发展历程-3qq19921992年,年,Oracle 7Oracle 7发布。采用多线程服务器体系结构发布。采用多线程服务器体系结构MTSMTS。分布式事务处理功能、存储过程、触发过程和说明性引用完整性。qq19971997年,年,Oracle 8Oracle 8发布。发布。ORACLE8ORACLE8支持面向对象的开发及新的

14、多支持面向对象的开发及新的多媒体应用。媒体应用。同时处理大量用户和海量数据的特性。qq19981998年年 推出了推出了Oracle8i,Oracle8i, 第一个全面支持第一个全面支持InternetInternet的数据库。的数据库。qq20012001年,年,Oracle 9i release 1Oracle 9i release 1发布。发布。20022002年,年,Oracle 9i Oracle 9i release 2release 2发布。增加了集群文件系统等特性。包括数据库核心、发布。增加了集群文件系统等特性。包括数据库核心、开发组件、应用服务器及客户端开发工具组件。集成了开

15、发组件、应用服务器及客户端开发工具组件。集成了Apache Apache Web Server,Web Server,可以使用可以使用PL/SQLPL/SQL和和JavaJava开发开发WebWeb应用。应用。qq20042004年,针对网格计算的年,针对网格计算的Oracle 10gOracle 10g发布。发布。qq20072007年,推出最新数据库年,推出最新数据库Oracle 11gOracle 11g。 Oracle中国公司q1989年正式进入中国市场q是第一家进入中国的世界软件巨头q1991年在北京建立独资公司q目前在上海、广州、成都设有办事处q在电信、金融保险、政府、部队等行业拥

16、有广泛的用户群Oracle10g的特点OracleDatabase10g是世界上第一个具有网格计算能力的数据库,它以最低的总拥有成本,能够从性能、可扩展性和可用性方面得到最高的服务质量。业界第一个支持网格计算的数据库。最快的联机事务处理的数据库。OracleDatabase10g是世界上第一个在单机上超过100万个事务/分钟的数据库。世界上最快的数据仓库应用的数据库。最高的安全性。最高的可用性。自我管理。29实训1查阅相关资料:查阅有关Oracle数据库的发展历程的资料。查阅和收集关于Oracle在不同领域的应用案例。查阅几种常用的关系数据库管理系统,并说明各自的特点和适用的应用环境。查阅Or

17、acle相关的技术网站及论坛。完成了任务完成了任务1,请尝试实训请尝试实训131任务2.安装Oracle10g数据库服务器。任务232任务导入让我们看看如何安装数据库工作情景:工作情景:安装数据库系统,掌握安装数据库系统,掌握如何使用数据库系统管如何使用数据库系统管理数据库理数据库33任务2q安装前的准备工作1、了解安装工具:OUI(OracleUniversalInstaller)2、安装环境要求q安装数据库服务器步骤q检查安装后情况1、在程序菜单中检查2、检查服务器文件结构3、在“服务”中检查Oracle10g的安装安装环境要求(1)硬件环境硬件环境Pentium400MHz以上的以上的C

18、PU。推荐使用推荐使用512MB以上的内存。以上的内存。4GB以上的空闲硬盘空间。以上的空闲硬盘空间。(2)软件环境软件环境系系统统架架构构:Intel(x86)、AMD64或或IntelEM64T(ExtendedMemory64-bitTechnology,64位内存扩展技术位内存扩展技术)。 操操作作系系统统:Windows Server 2000 sp1或或更更高高版版本本;WindowsServer2003的所有版本;的所有版本;WindowsXP专业版。专业版。网络协议:网络协议:TCP/IP、带、带SSL的的TCP/IP以及命名管道协议。以及命名管道协议。34任务2q安装前的准备

19、工作1、了解安装工具:OUI(OracleUniversalInstaller2、安装环境要求q安装数据库服务器步骤P:5P:14图1-1(“安装开始”)图1-18(“安装结束”)q检查安装后情况1、在程序菜单中检查2、检查服务器文件结构3、在“服务”中检查Oracle10g的安装Windows中的Oracle服务-1qOracle10g的每个实例在Windows中都作为一项服务启动 q服务是在 Windows 注册表中注册的可执行进程,由 Windows 操作系统管理q “服务”对话框中的各项 Oracle 服务如图所示:35Windows中的Oracle服务-2OracleServiceS

20、IDq该服务启动系统标识符为SID的数据库实例,其中SID是在安装Oracle10g时输入的数据库名称36OracleHOME_NAMETNSListenerq该服务启动数据库服务器的监听器,监听器接受来自客户端应用程序的连接请求q若监听器未启动,则客户端将无法连接到数据库服务器Windows中的Oracle服务-3OracleDBConsoleqSID是Oracle安装期间输入的数据库服务名字,在运行EnterpriseManager10g时需要启动此服务。OracleiSQL*PLUSq当要使用iSQL*PLUS工具时,首先要启动该项服务37实训2数据库服务器安装:做好安装准备工作。掌握安

21、装数据库服务器方法。检查安装结果。完成了任务完成了任务2,请尝试实训请尝试实训2任务339任务3.了解Oracle用户账户Oracle默认用户q只有用合法的用户帐号才能访问Oracle数据库qOracle有几个默认的数据库用户40Oracle默默认认SYSSYSTEMSCOTT数据库中所有数据字典表和视图都存储在 SYS 模式中。SYS用户主要用来维护系统信息和管理实例。SCOTT用户是Oracle 数据库的一个示范帐户,在数据库安装时创建。SYSTEM 是默认的系统管理员,该用户拥有Oracle管理工具使用的内部表和视图。通常通过SYSTEM用户管理数据库用户、权限和存储等。任务441任务4

22、.使用SQL*Plus工具、使用iSQL*Plus工具。Oracle查询工具Oracle查询工具查询工具SQL*PlusiSQL*PlusSQLDeveloperqOracle提供的工具非常容易使用。Oracle的查询工具包括:SQL*Plus是Oracle最常用的工具之一,用于接受和执行SQL命令以及PL/SQL块。iSQL*Plus可以执行能用SQL*Plus完成的所有任务。该工具的优势在于能通过浏览器访问它。OracleSQLDeveloper是免费的图形化数据库开发工具。运行SQL语句和SQL脚本,编辑和调试PL/SQL语句。提高工作效率。42实训3,4用不同用户体验Oracle查询工

23、具的使用:掌握SQL*Plus工具的使用。掌握iSQL*Plus工具的使用。完成了前面任完成了前面任务,请尝试实务,请尝试实训训3,4任务544任务5.使用Oracle企业管理器。Oracle企业管理器qOracle10gOEM(OracleEnterpriseManager,企业管理器),是一个基于Java框架开发的集成化管理工具,采用Web应用方式实现对Oracle运行环境的安全管理。45实训5Oracle企业管理器使用:掌握利用Oracle企业管理器,查看数据库信息。完成了前面任完成了前面任务,请尝试实务,请尝试实训训547任务6.进行网络监听配置。任务648练习:创建学生信息表。任务准

24、备SQLcreatetableliweitao(stuidnumber,stunamevarchar2(30);SQLinsertintoliweitaovalues(1,liweitao);SQLcommit;学生姓名表学生姓名表学号学号number姓名姓名varchar2(30)49任务6q服务器和客户机的概念q客户端安装q从客户机访问Oracle数据库安装Oracle数据库客户端,监听网络配置qOracle产品安装完成后,服务器和客户端都需要进行网络配置才能实现网络连接。q服务器端配置监听器,客户端配置网络服务名。tnsnames.oraOracle 客户端客户端listener.ora

25、Oracle 服务器服务器50任务6Oracle监听与网络配置-1q服务器监听器文件listener.ora配置服务器端监听器配置信息包括监听协议、地址及其他相关信息。配置信息保存在名为listener.ora的文件中。在安装服务器软件时自动配置一个监听器。q客户端网络服务名tnsnames.ora文件配置 客户端的网络服务名配置信息包括服务器地址、监听端口号和数据库SID等,与服务器的监听器建立连接。配置信息保存在名为tnsnames.ora的文件中。5152Oracle监听与网络配置-2qOracle中的NetConfigurationAssistant和NetManager工具都能用来配

26、置监听器和网络服务名服务器监听器文件listener.ora配置q连接到数据库SQLconnectusernamepasswordnet_service_name实训6进行网络监听配置:掌握使用网络配置助手工具配置网络服务名的方法。理解网络服务名所包含配置信息的涵义。完成了任务完成了任务6,请尝试实训,请尝试实训6任务754任务7.了解基于Oracle数据库作为数据库平台的应用系统结构。任务755q1.单层结构(single-tierarchitecture)q2.客户机/服务器(client/server)结构q3.三层结构(three-tierarchitecture)q4.分布式数据库系

27、统结构任务756n软件开发项目的多层应用架构软件开发项目的多层应用架构任务857任务8.搭建系统开发环境:JSP+TOMCAT+ORACLE。任务858q1.安装JDKq2.Tomcat的安装及配置q3.获取Oracle10g相应的JDBC驱动程序q4.利用JDBC进行Oracle访问q5.测试任务859实训8JSP+TOMCAT+ORACLE的系统搭建:熟悉JSP+TOMCAT+ORACLE的系统搭建过程。完成了前面任完成了前面任务,请尝试实务,请尝试实训训8知识点小结qOracle数据库管理系统的应用、发展史及Oracle10g的特点。qOracle10g数据库服务器的安装及网络监听配置。

28、qOracle用户账户qOracle查询工具SQL*PLUS的使用,iSQL*PLUS的配置和使用,以及Oracle企业管理器的使用q基于Oracle数据库作为数据库平台的应用系统结构,以JSP+TOMCAT+ORACLE为例搭建系统开发环境。61谢 谢 !62n第第2章章Oracle体系结构体系结构n63开发一个信息管理系统需要存储数据,需要开发一个信息管理系统需要存储数据,需要n64n工作情景:工作情景:n创建一个新的创建一个新的OracleOracle数据库数据库 任务分析任务分解q任务任务1:认识:认识Oracle系统的体系结构。系统的体系结构。q任务任务2:了解:了解Oracle数据

29、库的物理存储结构。数据库的物理存储结构。q任务任务3:了解:了解Oracle逻辑存储结构。逻辑存储结构。q任务任务4:了解:了解Oracle数据库实例的组成。数据库实例的组成。q任务任务5:使用:使用DBCA创建数据库。创建数据库。q任务任务6:了解:了解Oracle数据库的启动过程。数据库的启动过程。q任务任务7:转换数据库的启动模式。:转换数据库的启动模式。q任务任务8:以不同方式关闭数据库。:以不同方式关闭数据库。q任务任务9:查看数据字典视图。:查看数据字典视图。n65n66任务1任务1.认识Oracle系统的体系结构n67q系统的体系结构决定了数据库如何使用内存、硬件和网络,系统的体

30、系结构决定了数据库如何使用内存、硬件和网络,以及哪个进程或程序运行在哪台机器上。以及哪个进程或程序运行在哪台机器上。qOracle数据库服务器有两个主要的组成部分:数据库和实例数据库服务器有两个主要的组成部分:数据库和实例(instance)。数据库的主要功能是保存数据,在物理结构上。数据库的主要功能是保存数据,在物理结构上相当于是存储数据的容器,是数据的集合。相当于是存储数据的容器,是数据的集合。Oracle实例是指实例是指数据库服务器的内存及相关后台进程。数据库服务器的内存及相关后台进程。任务1n68nOracle数据库是一个数据的集合,该集合被视为一个逻辑单元数据库是一个数据的集合,该集

31、合被视为一个逻辑单元nOracle服务器服务器nOracle数据库数据库nOracle实例实例n管理数据库的后台进程和内存结构的集合称为管理数据库的后台进程和内存结构的集合称为Oracle实例实例任务1nOracle体系结构组件概览体系结构组件概览n69n实实例例n内存结构内存结构n后台进程后台进程nPMONSMONDBWRLGWRCKPT其他其他nn数据库数据库n数据文数据文件件n数据文数据文件件n数据文数据文件件n控制文件控制文件n控制文件控制文件n日志文件日志文件n日志文件日志文件n参数文参数文件件n归归档档日日志志文文件件n口令文口令文件件nSGAn用户进程用户进程n服务器进服务器进程

32、程nPGAn共享池共享池n数据缓冲区数据缓冲区n日志缓冲日志缓冲区区Oracle体系结构qOracle数据库由操作系统文件组成,这些文件为数据数据库由操作系统文件组成,这些文件为数据库信息提供实际物理存储区库信息提供实际物理存储区qOracle数据库包括逻辑结构和物理结构数据库包括逻辑结构和物理结构n物理结构物理结构n逻辑结构逻辑结构n物理结构包含数据库中的一组操作系统文件。物理结构包含数据库中的一组操作系统文件。n逻辑结构指数据库创建之后形成的逻辑概念之间的关系逻辑结构指数据库创建之后形成的逻辑概念之间的关系nOracle数据库数据库n70Oracle数据库n71任务2任务2.了解Oracl

33、e数据库的物理存储结构。q物理组件就是物理组件就是Oracle数据库所使用的操作系统物理文件。数据库所使用的操作系统物理文件。物理文件可分为三类:物理文件可分为三类:n物理组件物理组件n数据文件数据文件n控制文件控制文件n日志文件日志文件n数据文件用于存储数据库数据,如表、索引数据等。数据文件用于存储数据库数据,如表、索引数据等。n控制文件是记录数据库物理结构的二进制文件。控制文件是记录数据库物理结构的二进制文件。n日志文件记录对数据库的所有修改信息,用于故障恢复日志文件记录对数据库的所有修改信息,用于故障恢复n72Oracle物理组件q数据文件数据文件: :qOracleOracle在数据文

34、件中存储全部的数据库数据。在数据文件中存储全部的数据库数据。q它们是物理操作系统文件,它们包括诸如用户数据、它们是物理操作系统文件,它们包括诸如用户数据、系统数据和系统数据和Overhead Overhead 数据等所有数据库数据数据等所有数据库数据q数据文件中的数据以块为单位数据文件中的数据以块为单位q任何数据库创建时至少包含一个数据文件任何数据库创建时至少包含一个数据文件q内容:内容:q表数据、索引数据、数据字典定义表数据、索引数据、数据字典定义q存储过程、常用来排序的临时数据存储过程、常用来排序的临时数据 n73数据文件作为作为system用户或一些其他有特权的用户登录,查询用户或一些其

35、他有特权的用户登录,查询V$DATAFILE动态性能视图:动态性能视图:n【例【例2.1】查找数据文件的存放位置、大小和状态。查找数据文件的存放位置、大小和状态。nSQLsetlinesize600nSQLselectstatus,bytes,namefromv$datafile;n74查找数据文件q日志文件用于记录数据库所做的全部变更日志文件用于记录数据库所做的全部变更,以便在系,以便在系统发生故障时,用它对数据库进行恢复。统发生故障时,用它对数据库进行恢复。q日志文件主要是保护数据库以防止故障日志文件主要是保护数据库以防止故障。为了防止日了防止日志文件本身的故障,志文件本身的故障,ORAC

36、LEORACLE允允许镜象日志象日志(mirrored (mirrored redo log)redo log),以致可在不同磁,以致可在不同磁盘上上维护两个或多个日志两个或多个日志副本。副本。 q数据库以下面两种模式运行数据库以下面两种模式运行qNOARCHIVELOG MODENOARCHIVELOG MODEqARCHIVELOG MODE ARCHIVELOG MODE n75日志文件nLGWRn日志组日志组1n日志组日志组2n成员成员1n日志组日志组3n成员成员1n成员成员2n成员成员3n成员成员2n成员成员3n成员成员1n成员成员2n成员成员3n76具有多个成员的重做日志组 作为作

37、为systemsystem用户或一些其他有特权的用户登录,执行用户或一些其他有特权的用户登录,执行selectselect语句,查询语句,查询v$logfilev$logfile视图视图 select member from v$logfile;select member from v$logfile; member member - - e:oracleoradata redo04.log e:oracleoradata redo04.log f:oracleoradata redo03.log f:oracleoradata redo03.log e:oracleoradataredo02

38、.log e:oracleoradataredo02.log f:oracleoradata redo01.log f:oracleoradata redo01.logn77查找日志文件q每每个个数数据据库库都都有有相相应应的的控控制制文文件件,它它是是一一个个较较小小的的二二进制文件,用于记录数据库的物理结构。进制文件,用于记录数据库的物理结构。q创建数据库时,就创建了控制文件创建数据库时,就创建了控制文件 q存储数据库的物理结构存储数据库的物理结构q还包括关于数据库的信息还包括关于数据库的信息q数据库的名称数据库的名称q数据文件和恢复日志文件的名称及其位置数据文件和恢复日志文件的名称及其位

39、置q时间戳:数据库建立的日期时间戳:数据库建立的日期q有关恢复数据库所需的同步信息有关恢复数据库所需的同步信息n78控制文件q1.在参数文件中:在参数文件中:initxxxx.oraq2.作为作为system用户或一些其他有特权的用户登录,执行用户或一些其他有特权的用户登录,执行select语句:语句:Selectnamefromv$controlfile;name-e:oracleoradatacontrol01.dbff:oracleoradatacontrol01.dbfn79控制文件的名字和位置qinitsid.orainitsid.ora:初始化参数文件:初始化参数文件(PFILE)

40、(PFILE)是一个是一个ASCIIASCII文本文本文件文件,记录记录OracleOracle数据库运行时的一些重要参数数据库运行时的一些重要参数,决定决定着数据库和实例的特性,如着数据库和实例的特性,如:共享池、高速缓存、重做共享池、高速缓存、重做日志缓存分配、后台进程的自动启动、控制文件的读取、日志缓存分配、后台进程的自动启动、控制文件的读取、为数据库指出归档日志的目标,自动联机回滚段等。为数据库指出归档日志的目标,自动联机回滚段等。q在在Oracle9iOracle9i之后的版本中增加了服务器端二进制参数文件之后的版本中增加了服务器端二进制参数文件(SPFILE)(SPFILE),默认

41、情况下使用服务器端参数文件启动实例,默认情况下使用服务器端参数文件启动实例,初始化参数文件不仅可以在运行时修改,还可以通过初始化参数文件不仅可以在运行时修改,还可以通过scopescope选项决定修改过的参数值是只在本次运行中有效。选项决定修改过的参数值是只在本次运行中有效。 n80初始化参数文件实训1了解和体验数据库服务器的工作过程与原理。n完成了任务完成了任务1,请尝试实,请尝试实训训1实训2给本系统创建控制文件副本。n学完了文件学完了文件物理结构,请物理结构,请尝试实训尝试实训2实训2创建联机重做日志组和联机重做日志文件。n学完了重做学完了重做日志文件日志文件,请尝试实训请尝试实训2n8

42、4任务3任务3.通过管理表空间了解Oracle逻辑存储结构q数据库的逻辑结构是从逻辑的角度分析数据库的组成。数据库的逻辑结构是从逻辑的角度分析数据库的组成。Oracle的逻辑组件包括:的逻辑组件包括:n85Oracle逻辑组件n表空间表空间n段段n数据数据块块n范围范围n段段数据库逻辑结构包含表空间、段、扩展区、数据块组成。数据库逻辑结构包含表空间、段、扩展区、数据块组成。表空间、段、扩展区和数据块将支配一个数据库的物理空间表空间、段、扩展区和数据块将支配一个数据库的物理空间如何使用。如何使用。n数数据据块块:数数据据块块是是Oracle服服务务器器所所能能分分配配、读读取取或或写写入入的的最

43、最小小存存储储单单元。元。n区区:是是数数据据库库存存储储空空间间分分配配的的一一个个逻逻辑辑单单位位,它它由由连连续续数数据据块块所所组组成成。区区为为段段分分配配空空间间,它它由由连连续续的的数数据据块组成。块组成。n段段:是是构构成成表表空空间间的的逻逻辑辑存存储储结结构构,段由一组区组成。段由一组区组成。n表表空空间间:一一个个数数据据库库划划分分为为一一个个或或多多个个逻逻辑辑单单位位,该该逻逻辑辑单单位位称称为为表表空间。空间。n数据文件数据文件nn86逻辑结构q表空间中存储在数据库空间分配中的逻辑单位称表空间中存储在数据库空间分配中的逻辑单位称为段。为段。q定义为分配给逻辑数据库

44、结构的扩展区集合。定义为分配给逻辑数据库结构的扩展区集合。q不同类型的段:不同类型的段:q数据段数据段q索引段索引段q回滚段回滚段q临时段临时段n87段q扩展区是在表空间中被段使用的大块空间扩展区是在表空间中被段使用的大块空间.q段在以下情况扩展区被分配段在以下情况扩展区被分配:q 创建创建q 扩展扩展q 修改修改q段在以下情况扩展区被释放段在以下情况扩展区被释放:q 删除删除q 修改修改q 截断截断n88扩展区q代表数据库存储的最佳粒度级别代表数据库存储的最佳粒度级别 q在数据库创建时指定在数据库创建时指定n89数据块n90数据文件和表空间之间的映射qOracle存储数据逻辑上在表空间,物理

45、上存储在存储数据逻辑上在表空间,物理上存储在数据文件中数据文件中q表空间表空间:q 只能属于一个数据库只能属于一个数据库q 能存在一个或多个数据文件能存在一个或多个数据文件q 被分成逻辑的单元被分成逻辑的单元q数据文件数据文件:q只能属于一个表空间和一个数据库只能属于一个表空间和一个数据库q表空间的类型:分为系统表空间和非系统表空间。表空间的类型:分为系统表空间和非系统表空间。非系统表空间可以分为以下三类:永久表空间、临时表空间和回滚表空间。非系统表空间可以分为以下三类:永久表空间、临时表空间和回滚表空间。qOracle10g 数据库中的典型表空间是:数据库中的典型表空间是:qSYSTEM 表

46、空间表空间 :系统创建数据库时自动创建,用于存储系统数据字典、系统创建数据库时自动创建,用于存储系统数据字典、系统管理信息、用户数据表、索引等对象系统管理信息、用户数据表、索引等对象qSYSAUX 表空间:表空间:是是10g新增的辅助新增的辅助SYSTEM的表空间,由系统内部自动的表空间,由系统内部自动维护,不存储用户数据维护,不存储用户数据qUSER 表空间:表空间:表空间一般主要存用户数据表空间一般主要存用户数据qUNDOTBS1 表空间:表空间:表空间用来存储撤销信息,只能存回退段,不能存表空间用来存储撤销信息,只能存回退段,不能存其他类型的段其他类型的段qTEMP表空间:表空间:存储执

47、行存储执行SQL语句时产生的临时数据(主要是排序或统计)语句时产生的临时数据(主要是排序或统计),一般此表空间所有用户通用。,一般此表空间所有用户通用。q状态:表空间主要有以下几种状态:联机、脱机和只读或可读写。状态:表空间主要有以下几种状态:联机、脱机和只读或可读写。n91表空间的类型和状态n92表空间的作用q 数据库的控制空间分配(例如表和索引)数据库的控制空间分配(例如表和索引)q 为数据库用户设置空间配额为数据库用户设置空间配额q 备份或恢复数据备份或恢复数据q 跨越设备分配数据存储可提高性能跨越设备分配数据存储可提高性能n93q创建表空间创建表空间q更改表空间更改表空间q设置表空间选

48、项,如最小范围,是否自动扩展等设置表空间选项,如最小范围,是否自动扩展等q删除表空间删除表空间q查看表空间信息查看表空间信息管理表空间n94q企业管理控制台创建表空间企业管理控制台创建表空间qSQL命令创建表空间命令创建表空间创建表空间CREATE TABLESPACE CREATE TABLESPACE 表空间名表空间名DATAFILE DATAFILE 文件标识符文件标识符,文件标识符文件标识符.AUTOEXTEND ONNEXT n MAXSIZE UNLIMITED|n|OFFAUTOEXTEND ONNEXT n MAXSIZE UNLIMITED|n|OFFDEFAULT STOR

49、AGE(DEFAULT STORAGE(存储配置参数存储配置参数);例例 CREATE TABLESPACE userdataCREATE TABLESPACE userdatan DATAFILE DATAFILE D:Oracle11goradataorcluserdata01.dbf SIZE 10M SIZE 10M n DEFAULT STORAGE DEFAULT STORAGE( i( initialnitial 128K 128K n nextnext 128K 128Kn minextentsminextents 1 1n maxextentsmaxextents unlim

50、ited unlimitedn pctincreasepctincrease 0 0 n ); );n95q利用企业管理控制台修改表空间利用企业管理控制台修改表空间q使用命令行方式修改表空间使用命令行方式修改表空间语法格式语法格式: :ALTER TABLESPCE ALTER TABLESPCE 表空间名表空间名(ADD DATAFILE (ADD DATAFILE 文件标识符文件标识符,文件标识符文件标识符. . -增加数据文件增加数据文件RENAME DATAFILE RENAME DATAFILE 文件名文件名,文件名文件名.TO .TO 文件名文件名,文件名文件名. - -修改表空间

51、数据文件的路径修改表空间数据文件的路径DEFAULT STORAGE(DEFAULT STORAGE(存储配置参数存储配置参数) -) -修改表空间的存储参数修改表空间的存储参数ONLINEOFFLINENORMALIMMEDIATE -ONLINEOFFLINENORMALIMMEDIATE -表空间联机表空间联机/ /脱机脱机(BEGINEND)BACKUP); -(BEGINEND)BACKUP); -修改表空间的备份状态修改表空间的备份状态例例 修改表空间,增加一修改表空间,增加一10M10M的数据文件。的数据文件。SQL SQL altertablespaceuserdataaddd

52、atafileD:Oracle11goradataorcluserdata02.dbfsize10M;修改表空间q使用企业管理控制台删除表空间使用企业管理控制台删除表空间q使用命令行方式删除表空间使用命令行方式删除表空间语法格式语法格式: :DROP TABLESPACEDROP TABLESPACE表空间名表空间名INCLUDING CONTENTS;INCLUDING CONTENTS;例例 删除表空间删除表空间( (包括对应的数据文件包括对应的数据文件) )SQLdroptablespaceusertbsincludingcontentsanddatafiles;n96删除表空间n97q

53、控制台查看有关表空间信息。控制台查看有关表空间信息。q命令行方式查看有关表空间信息借助数据字典视图或命令行方式查看有关表空间信息借助数据字典视图或动态性能视图。如动态性能视图。如:V$TABLESPACEV$TABLESPACE、DBA_TABLESPACEDBA_TABLESPACE,USER_TABLESPACE, DBA_DATA_FILESUSER_TABLESPACE, DBA_DATA_FILES等。等。例例 查看表空间的名称及大小。查看表空间的名称及大小。SQL select t.tablespace_name, SQL select t.tablespace_name, rou

54、nd(sum(bytes/(1024*1024),0) ts_size round(sum(bytes/(1024*1024),0) ts_size from dba_tablespaces t, dba_data_files d from dba_tablespaces t, dba_data_files d where t.tablespace_name = d.tablespace_name where t.tablespace_name = d.tablespace_name group by t.tablespace_name; group by t.tablespace_name;

55、 查看表空间信息实训3管理表空间。n学完了逻辑学完了逻辑存储结构存储结构,请尝试实训请尝试实训3n99任务4任务4.了解Oracle数据库实例的组成。qOracle实例是后台进程和内存结构的集合实例是后台进程和内存结构的集合nOracle实例实例n内存结构内存结构n后台进程后台进程n分配分配 n启动启动 n100Oracle实例n系统全局区系统全局区(SGA)n程序全局区程序全局区(PGA)nOracle实例启动时分配系统全局区实例启动时分配系统全局区n当服务器进程启动时分配程序全局区当服务器进程启动时分配程序全局区qOracle的内存结构包含以下两个内存区:的内存结构包含以下两个内存区:n内

56、存区内存区n101Oracle实例内存结构q数据库信息存储于数据库信息存储于SGA,由多个数据库进程共享,由多个数据库进程共享n102nSGA的内存结构的内存结构n数据高速缓冲区数据高速缓冲区n共享池共享池n重做日志缓冲区重做日志缓冲区系统全局区2-1n103n数据高速缓冲区数据高速缓冲区 q用于存储从磁盘数据文件中读入的数据,服务器进程将读入的数据保存在用于存储从磁盘数据文件中读入的数据,服务器进程将读入的数据保存在数据缓冲区中,当后续的请求需要这些数据时可以在内存中找到,不再从数据缓冲区中,当后续的请求需要这些数据时可以在内存中找到,不再从磁盘读取,提高了读取速度。磁盘读取,提高了读取速度

57、。q数据高速缓冲区中存放着数据高速缓冲区中存放着OracleOracle系统最近使用过的数据库数据块。系统最近使用过的数据库数据块。q数据缓冲区的大小对数据库的读取速度有直接的影响。数据缓冲区的大小对数据库的读取速度有直接的影响。共享池共享池 q共享池是对共享池是对SQLSQL、PL/SQLPL/SQL程序进行语法分析、编译、执行的内存区域。程序进行语法分析、编译、执行的内存区域。q共享池由库缓存和数据字典缓存组成。共享池由库缓存和数据字典缓存组成。q库缓存含有最近执行的库缓存含有最近执行的SQLSQL、PL/SQLPL/SQL语句的分析码和执行计划;语句的分析码和执行计划;q数据字典缓存含有

58、从数据字典中得到的表、索引、列定义和权限等信息。共数据字典缓存含有从数据字典中得到的表、索引、列定义和权限等信息。共享池的大小直接影响数据库的性能。享池的大小直接影响数据库的性能。 n重做日志缓冲区重做日志缓冲区 q日志记录数据库的所有修改信息,日志信息首先产生于日志缓冲区。日志记录数据库的所有修改信息,日志信息首先产生于日志缓冲区。 q日志缓冲区日志数据达到一定数量时,由后台进程将日志数据写入日志文件中日志缓冲区日志数据达到一定数量时,由后台进程将日志数据写入日志文件中。系统全局区2-1n重做日志缓冲区重做日志缓冲区 q在初始化参数文件中查询参数在初始化参数文件中查询参数log_buffer

59、 log_buffer 。 qSQL show parameter log_bufferSQL show parameter log_buffern数据高速缓冲区数据高速缓冲区 q数据缓冲区直接由初始化参数文件中的数据缓冲区直接由初始化参数文件中的db_cache_sizedb_cache_size参参数决定数决定 qdb_block_sizedb_block_size用于定义标准块的大小用于定义标准块的大小qSQL show parameter db_cache_sizeSQL show parameter db_cache_size 共享池共享池 q共享池的大小由初始化参数共享池的大小由初

60、始化参数shared_pool_sizeshared_pool_size决定,该参决定,该参数以数以KBKB或或MBMB为单位。默认的大小为为单位。默认的大小为8MB8MB。qSQL show parameter shared_pool_sizeSQL show parameter shared_pool_sizen104104系统全局区 2-2程序全局区qPGAPGA是用户进程私有的内存区域,不能共享。是用户进程私有的内存区域,不能共享。qPGAPGA包含单个服务器进程或单个后台进程的数据和控制信包含单个服务器进程或单个后台进程的数据和控制信息,有进程会话变量及内部数组等等。息,有进程会话变

61、量及内部数组等等。qPGA PGA 是用户进程连接到数据库并创建一个会话时自动分配是用户进程连接到数据库并创建一个会话时自动分配, , 进程中的不同部分可以相互通信,但与外界没有联系。当进程中的不同部分可以相互通信,但与外界没有联系。当一个用户会话结束后,一个用户会话结束后,PGAPGA释放。释放。n105Oracle实例进程结构qOracle实例有几种不同类型的进程,它们是:实例有几种不同类型的进程,它们是:n实例进程实例进程n用户进程用户进程n服务器进程服务器进程n后台进程后台进程n用户进程是一个需要与用户进程是一个需要与Oracle服务器进行交互的程序。当用户运行服务器进行交互的程序。当

62、用户运行一个应用程序准备向数据库服务器发送请求时,即创建了用户进程一个应用程序准备向数据库服务器发送请求时,即创建了用户进程n服务器进程用于处理连接到该实例的用户进程的请求。当用户连接服务器进程用于处理连接到该实例的用户进程的请求。当用户连接至至Oracle数据库实例创建会话时,即产生服务器进程数据库实例创建会话时,即产生服务器进程n后台进程是后台进程是OracleOracle数据库为了保持最佳系统性能和协调多个用户数据库为了保持最佳系统性能和协调多个用户请求而设置的。请求而设置的。 Oracle Oracle 实例启动时即创建一系列后台进程实例启动时即创建一系列后台进程n106n后台进程后台

63、进程nPMONq实例的各种后台进程是:实例的各种后台进程是:nSMONnDBWRnLGWRnCKPTnARCHn107后台进程q数据库写入进程(数据库写入进程(DBWRDBWR) 管理数据缓冲区和字典缓冲区的内容,分批将修改后的数据块写回数管理数据缓冲区和字典缓冲区的内容,分批将修改后的数据块写回数据库文件。据库文件。q日志写入进程(日志写入进程(LGWRLGWR) 用于将联机重做日志缓存区的内容写入到联机重做日志文件中,是唯用于将联机重做日志缓存区的内容写入到联机重做日志文件中,是唯一能够读写日志文件的进程。一能够读写日志文件的进程。 q系统监控进程(系统监控进程(SMONSMON) 检查数

64、据库的一致性。在数据库系统启动时执行恢复性工作的强制进检查数据库的一致性。在数据库系统启动时执行恢复性工作的强制进程,对有故障的程,对有故障的CPUCPU或实例进行恢复。或实例进行恢复。n108后台进程q进程监控进程(进程监控进程(PMONPMON) 用于恢复失败的数据库用户的强制性进程,当用户进程失败后,进程用于恢复失败的数据库用户的强制性进程,当用户进程失败后,进程监控器后台进程会进行清理工作,它回滚用户进程还没做完的事务,释监控器后台进程会进行清理工作,它回滚用户进程还没做完的事务,释放该用户占用的所有数据库资源。放该用户占用的所有数据库资源。q归档进程归档进程(ARCH)(ARCH)

65、数据库设置为归档日志模式情况下,每次日志切换时把已满的日志组数据库设置为归档日志模式情况下,每次日志切换时把已满的日志组进行备份或归档。进行备份或归档。q检查点进程检查点进程(CKPT)(CKPT) 确保缓冲区内的内容隔一定时间以后进行一次对数据文件的更新。不确保缓冲区内的内容隔一定时间以后进行一次对数据文件的更新。不然在数据库发生毁损时,就只能用很长时间从日志文件的记录中才能还然在数据库发生毁损时,就只能用很长时间从日志文件的记录中才能还原回来,造成系统的负担。原回来,造成系统的负担。n109后台进程n110任务5任务5.使用DBCA创建数据库,深入了解数据库的整个体系结构。任务5一、利用D

66、BCA创建数据库n111n案例演示案例演示任务5二、使用OEMC查看数据库信息n112q启动企业管理控制台启动企业管理控制台q连接数据库连接数据库 q查看默认用户信息查看默认用户信息 q查看默认的控制文件查看默认的控制文件 q查看默认的表空间查看默认的表空间 n113查看数据库信息实训5掌握DBCA创建数据库的步骤和方法。n学完了任务学完了任务5,请尝试实,请尝试实训:创建数据训:创建数据库库n114n115任务6任务6了解Oracle数据库启动过程。n116数据库的启动启动STARTUPFORCENOMOUNT|MOUNT|OPENqSTARTUPNOMOUNT启动实例,但不装载数据库,用于

67、建立和维护数据库。qSTARTUPMOUNT启动实例,装载数据库,但不打开数据库。MOUNT:只为DBA操作安装数据库。qSTARTUPOPEN或STARTUP启动实例,装载数据库,打开数据这库,以这种方式启动的数据库允许任何有效的用户连接到数据库。启动数据库NOMOUNTnOPENnMOUNTnNOMOUNTnSHUTDOWNnSTARTUPnSHUTDOWNn n启动实例启动实例启动实例启动实例启动数据库MOUNTnOPENnMOUNTnNOMOUNTnSHUTDOWNnSTARTUPnSHUTDOWNn n启动实例启动实例启动实例启动实例n n打开控制文打开控制文打开控制文打开控制文件件

68、件件启动数据库OPENnOPENnMOUNTnNOMOUNTnSHUTDOWNnSTARTUPnSHUTDOWNn n启动实例启动实例启动实例启动实例n n打开控制文打开控制文打开控制文打开控制文件件件件n n打开在控制文件中的所有文件打开在控制文件中的所有文件打开在控制文件中的所有文件打开在控制文件中的所有文件n120任务7任务7转换数据库的启动模式。ALTERDATABASE命令q改变数据库的启动状态由NOMOUNT到MOUNT 到OPEN qALTER DATABASE MOUNT | OPEN q启动实例 ,修改数据库的读写状态:qALTER DATABASE OPEN READ WR

69、ITE| READ ONLYqREAD WRITE: qREAD ONLY:n122任务8任务8以不同方式关闭数据库。关闭数据库用命令: SHUTDOWNNORMAL|IMMEDIATE|TRANSCATIONAL|ABORTq正常(NORMAL)关闭方式q立即(IMMEDIATE)关闭方式,立即关闭数据库q事务(TRANSACTIONAL)关闭方式q终止(ABORT)关闭方式,直接关闭数据库,系统立即将数据库实例关闭数据库的关闭n123实训6,7,8体验数据库的不同关闭方式。n学完了以不同学完了以不同方式关闭数据库方式关闭数据库,请尝试实训,请尝试实训6,7,8n125任务9任务9通过查看数

70、据字典视图获取数据库的重要信息。想了解系统的有关内容和问题想了解系统的有关内容和问题 Q&A查询数据库中当前存在的查询数据库中当前存在的OracleOracle用户:用户:select username from dba_users;select username from dba_users;查询本用户所拥有的系统权限查询本用户所拥有的系统权限: :select * from user_sys_privs;select * from user_sys_privs;查询本用户拥有其他用户对象的权限查询本用户拥有其他用户对象的权限: : select * from user_tab_privs;

71、 select * from user_tab_privs; 查询本用户拥有的对象查询本用户拥有的对象: :select * fromselect * from user_catalog;user_catalog;当前数据库的详细信息当前数据库的详细信息$DATABASE$DATABASE取得取得oracleoracle版本的详细信息版本的详细信息 V$VERSIONV$VERSION当前数据库所有日志文件的信息当前数据库所有日志文件的信息v$logfilev$logfile当前数据库所有控制文件的信息。当前数据库所有控制文件的信息。 V$CONTROLFILE V$CONTROLFILE 当

72、前数据库所有数据文件的详细信息。当前数据库所有数据文件的详细信息。 V$DATAFILEV$DATAFILEn126Oracle数据字典q静态数据字典静态数据字典 记录了系统资源信息、用户登录信息及数据库信息等几乎记录了系统资源信息、用户登录信息及数据库信息等几乎所有内容所有内容q动态性能表动态性能表 是一组虚拟表,记录当前数据库的活动情况和性能参数。是一组虚拟表,记录当前数据库的活动情况和性能参数。 n127Oracle数据字典q对数据库的重要性对数据库的重要性q描述描述Oracle系统的活动信息和所有用户对象的定系统的活动信息和所有用户对象的定义信息义信息q包含只读表和视图信息包含只读表和

73、视图信息q存放在存放在system表空间表空间q由由SYS用户拥有用户拥有q由由Oracleserver维护维护q通过通过select查询信息查询信息nControlfilesnDatafilesnRedoLogfilesnDatabasenDataDictionarytablesn128Oracle静态数据字典静态数据字典提供有关该数据库的信息静态数据字典提供有关该数据库的信息:q数据库的逻辑结构和物理结构信息数据库的逻辑结构和物理结构信息q有关数据库中对象定义、空间分布情况有关数据库中对象定义、空间分布情况q关于完整性约束的信息关于完整性约束的信息;q用户用户q角色角色q权限权限q审计审计

74、n129Oracle静态数据字典q静态数据字典中的视图分为三类静态数据字典中的视图分为三类q范围区别范围区别:qDBA:数据库中所有对象数据库中所有对象qALL:当前用户能够访问的对象当前用户能够访问的对象qUSER:当前用户所拥有的对象当前用户所拥有的对象nUSER_xxx 当前用户所拥有的对象的信息当前用户所拥有的对象的信息nALL_xxx 当前用户能够访问的对象的信息当前用户能够访问的对象的信息nDBA_xxx 数据库中所有对象的信息数据库中所有对象的信息n130静态数据字典分类q全部数据字典表的名称和解释全部数据字典表的名称和解释:dictionary全部数据字典表的名称和解释,同义词

75、全部数据字典表的名称和解释,同义词dictdict_column全部数据字典表里字段名称和解释全部数据字典表里字段名称和解释q数据库对象数据库对象: DBA_TABLES, DBA_INDEXES, DBA_TAB_COLUMNS, DBA_CONSTRAINTSq空间分配空间分配: DBA_SEGMENTS, DBA_EXTENTSq数据库结构数据库结构: DBA_TABLESPACES, DBA_DATA_FILESn131静态数据字典例q虚拟表虚拟表q记录当前数据库的活动情况记录当前数据库的活动情况q数据库运行时不断进行更新数据库运行时不断进行更新q诊断和解决系统运行所出现的问题诊断和解

76、决系统运行所出现的问题qSYS维护的表和视图维护的表和视图q建立了公用同义词(以建立了公用同义词(以V$开头)开头)n132动态性能表qV$INSTANCEV$INSTANCE用于获取当前例程的详细信息。用于获取当前例程的详细信息。qV$SGAV$SGA用于取得用于取得SGASGA更详细的信息。更详细的信息。qV$PARAMETERV$PARAMETER用于取得初始化参数的详细信息。用于取得初始化参数的详细信息。qV$VERSIONV$VERSION用于取得用于取得oracleoracle版本的详细信息。版本的详细信息。qV$SESSION V$SESSION 用于显示会话的详细信息。用于显示

77、会话的详细信息。qV$BGPROCESS V$BGPROCESS 用于显示后台进程的详细信息用于显示后台进程的详细信息qV$DATABASE V$DATABASE 用于取得当前数据库的详细信息用于取得当前数据库的详细信息qV$CONTROLFILE V$CONTROLFILE 数据库所有控制文件的信息。数据库所有控制文件的信息。qV$DATAFILE V$DATAFILE 数据库所有数据文件的详细信息数据库所有数据文件的详细信息V$LOGFILE V$LOGFILE 用于显用于显示重做日志成员的信息。示重做日志成员的信息。qV$LOG V$LOG 用于显示日志组的详细信息。用于显示日志组的详细

78、信息。qV$THREAD V$THREAD 用于取得重做线程的详细信息。用于取得重做线程的详细信息。n133动态性能表示例实训9查看数据字典和动态性能表。n学完了数据学完了数据字典字典,请尝试,请尝试实训实训9qOracleOracle数据库服务器由数据库和实例组成。数据库服务器由数据库和实例组成。q实例由内存结构和一组后台进程组成。实例由内存结构和一组后台进程组成。qOracleOracle内存由内存由SGASGA和和PGAPGA组成。组成。 qOracleOracle后台进程主要由数据写进程后台进程主要由数据写进程(DBWR)(DBWR)、日志写进程、日志写进程(LGWR)(LGWR)、系

79、统、系统监控监控(SMON)(SMON)、进程监控、进程监控(PMON)(PMON)、检查点进程、检查点进程(CKPT)(CKPT)构成。构成。qOracleOracle数据库划分有逻辑结构和物理结构。数据库划分有逻辑结构和物理结构。 q逻辑结构主要包括表空间、数据对象、段、区、数据块。逻辑结构主要包括表空间、数据对象、段、区、数据块。q物理结构主要由数据文件、控制文件和日志文件组成。物理结构主要由数据文件、控制文件和日志文件组成。qOracleOracle数据字典由一组表和视图构成数据字典由一组表和视图构成, , 可以把数据字典划分为静态数可以把数据字典划分为静态数据字典和动态性能表两大类。

80、据字典和动态性能表两大类。n135知识点小结n136学习情景总结n1.1.学会使用学会使用DBCADBCA创建创建“人事管理系统人事管理系统”数据库数据库. .了解了解数据库实例数据库实例( (即内存和进程即内存和进程) )及其数据库及其数据库( (物理结构物理结构) )。n2.2.认识控制文件的重要性认识控制文件的重要性n3.3.掌握创建重做日志文件的方法。掌握创建重做日志文件的方法。 n4.4.通过管理表空间了解通过管理表空间了解OracleOracle的逻辑结构。的逻辑结构。n5.5.通过查看数据字典视图获取数据库的重要信息通过查看数据字典视图获取数据库的重要信息谢 谢 !n137Ora

81、cle数据库系统应用开发138139第3章使用SQL*PLUSSQL*Plus概述qSQL*Plus是Oracle提供的一个重要的用于访问数据库服务器的交互式管理工具,是Oracle的核心产品。SQL*Plus不仅可以执行标准SQL语言,并且还对SQL命令进行扩展,提供了另外一些Oracle服务器能够接受和处理的命令。q开发者和DBA可以通过SQL*Plus直接灵活地存取Oracle数据库,完成相应的管理与开发任务。SQL*Plus可以完成的主要工作q数据库的管理和维护。q输入、编辑、存取和运行SQL命令。q检查表和数据库对象定义。q对查询结构进行格式化,计算、存储、打印或生成网络输出。q应用

82、程序开发、调试PL/SQL程序段。q执行sql脚本,生成新的sql脚本。q供应用程序调用,如安装程序中进行脚本的安装。本阶段任务是要求熟练使用SQL*Plus的常用命令。包括:连接命令、环境设置命令、格式化命令、编辑命令、文件操作命令、交互式命令等。142工作情景:工作情景:了解了解SQL*Plus的常用命令,的常用命令,熟练使用熟练使用SQL*Plus的常用命的常用命令。令。任务分析任务分解任务分解q任务1:使用连接或断开Oracle数据库、退出SQL*Plus环境的命令。q任务2:使用SQL*Plus环境设置及保存环境变量命令。q任务3:使用SQL*Plus的各种格式化命令为查询输出结果定

83、制格式。q任务4:使用SQL*Plus编辑器和编辑命令编辑SQL语句或PL/SQL程序块。q任务5:使用文件操作命令保存、加载和执行脚本文件。q任务6:使用替换变量、绑定变量和交互通信命令完成用户与程序的交互操作。q任务7:使用帮助命令、假脱机命令等其他命令完成更灵活的操作。学习目标学习目标q目标1:掌握连接或断开Oracle数据库、退出SQL*Plus环境的命令。q目标2:掌握SQL*Plus环境设置及保存环境变量命令的使用方法。q目标3:掌握使用SQL*Plus的各种格式化命令为查询输出结果定制格式。q目标4:掌握使用SQL*Plus编辑器和编辑命令编辑SQL语句或PL/SQL程序块。q目

84、标5:掌握使用文件操作命令保存、加载和执行脚本文件。q目标6:掌握使用替换变量、绑定变量和交互通信命令完成用户与程序的交互操作。q目标7:掌握使用帮助命令、假脱机命令等其他命令完成更灵活的操作。145任务1使用CONNECT命令连接或者切换到指定的数据库;使用DISCONNECT命令断开与数据库的连接。任务1:使用连接或断开Oracle数据库、退出SQL*Plus环境的命令。146任务11.CONNECT命令功能:先断开当前连接,然后建立新的连接。语法格式:connectusername/passwordconnect_identifier例:SQLconnscott/tigerorcl(带A

85、SSYSDBA或ASSYSOPER选项,则以特权用户身份连接)例:SQLconnsys/sys_psworclassysdba147任务12.DISCONNECT命令功能:断开与数据库的连接,但不退出SQL*Plus环境。例:SQLdisc3.EXIT或QUIT命令功能:退出SQL*Plus环境。例:SQLexit实训1实训项目:连接数据库、断开数据库;进入、退出SQL*PLUS环境。实训步骤:1.在操作系统环境下进入SQL*PLUS环境(P102)。2.使用CONNECT命令连接orcl数据库。3.使用DISCONNECT命令断后与orcl数据库的连接。4.使用EXIT或QUIT命令退出SQ

86、L*PLUS环境(P102)。149任务2利用环境参数控制SQL*Plus的输出格式。两种方式设置参数:对话框图形工具;使用SET命令。任务2:使用SQL*Plus环境设置及保存环境变量命令。150环境设置命令环境设置命令1、对话框方式、对话框方式在SQL*Plus的环境下,单击菜单栏中的“选项”“环境”,在如图所示的设置环境对话框中可以进行环境设置。151环境设置命令环境设置命令2、命令方式、命令方式使用SET命令改变SQL*Plus环境参数的值。命令格式:SET其中:是指环境参数的名称;是指参数被设置成ON或OFF,或是某个具体的值。152环境设置命令环境设置命令系统提供了几十个环境参数,

87、使用SHOW命令可以显示SQL*Plus环境参数的值。SHOW命令格式一:SQLSHOWALL功能:将显示所有参数的当前设置。SHOW命令格式二:SHOW功能:将显示指定参数的当前设置。153环境设置命令环境设置命令3、常用的主要参数、常用的主要参数(1)LINESIZE和PAGESIZESETLINESIZE指定页宽是多少;SETPAGESIZE用来设置页的长度是多少。【例3.1】设置行宽为60,设置页的长度为30。SQLSETLINESIZE60;SQLSETPAGESIZE30;154环境设置命令环境设置命令(2)AUTOCOMMIT功能:设置是否自动提交DML语句。当设置为ON时,每次

88、用户执行DML操作时都会自动提交。【例3.2】显示或设置当前系统是否自动提交DML命令。SQLshowautocommit;autocommitOFFSQLsetautocommiton;155环境设置命令环境设置命令(3)PAUSE功能:当SETPAUSE设置为ON时,以引起SQL*Plus在每页输出的开始处停止,在按回车键后继续滚动。(4)TIME功能:当SETTIME设置为ON时,表示在每个命令提示前显示当前时间。(5)NUMFORMAT功能:SETNUMFORMAT后面接着数字,以设置查询结果中显示数字的缺省格式。156环境设置命令环境设置命令4、保存系统环境变量命令、保存系统环境变量

89、命令使用STORE命令在主机操作系统文件中保存当前的系统变量。命令格式:STORESETfile_name;【例3.3】将SQL*Plus系统变量的当前值保存到新命令文件plusstore.sql中。SQLSTORESETplusstore.sql;157环境设置命令环境设置命令恢复保存的系统变量使用的命令格式:STARTfile_name;【例3.4】从命令文件中恢复系统变量。SQLSTARTplusstore.sql;将系统环境变量的值直接保存到当前目录中的login.sql文件中,可以实现登录后自动加载环境变量。login.sql存放在bin目录下,会在SQL*Plus启动时执行。实训2

90、实训项目:设置环境参数,保存、恢复变量。实训步骤:1.使用对话框方式设置环境参数。2.使用SET命令改变环境参数的值。3.使用SET命令设置页宽和页高,设置系统自动提交。4.练习使用PAUSE、TIME、NUNFORMAT命令。5.练习使用STORE、START命令。159任务3设置各式各样的报表,执行各种查询等,都要为输出结果定制格式。任务3:使用SQL*Plus的各种格式化命令为查询输出结果定制格式。160格式化命令命令1列格式列格式COLUMN命令命令功能:格式化实际的表列数据,设置列标题。语法格式:COLUMNcolumn_nameoption说明:Option:可以用在COLUMN命

91、令中的一些选项及定义。161格式化命令命令选 项定定 义CLEAR除去列格式除去列格式HEADING text为列列设置置标题。FORMAT format改改变列数据的外列数据的外观NOPRINT隐藏列藏列NULL text为空空值分配要分配要显示的文本示的文本PRINT显示列示列COLUMN命令的选项162格式化命令命令Fromat:指定该列的格式字符和宽度。FORMAT掩码的符号符号符号定定 义格格 式式输出出样本本9单个零禁止数字个零禁止数字999965780加前加前导零零0999906578$在数在数值前加美元前前加美元前缀$9999$6578,千位分隔符千位分隔符9,9996,578

92、163格式化命令命令显示或清除当前COLUMN设置的命令,如表所示。命命 令令定定 义COLUMN column显示指定列的当前列示指定列的当前列设置置COLUMN显示所有列的当前列示所有列的当前列设置置COLUMN CLEAR清除指定列的清除指定列的设置置CLEAR COLUMN清除所有列的清除所有列的设置置164格式化命令命令【例3.5】为列ename设置标题为empname。SQLCOLUMNenameHEADINGempname;(若标题empname分两行显示,在emp和name之间插入|符号)SQLCOLUMNenameHEADINGemp|name;【例3.6】为列ename设置

93、长度为6。SQLCOLUMNenameFORMATa6;165格式化命令命令【例3.7】为sal列定制格式。要求在每个值前加$符号作为前缀,并保留两个小数位。SQLCOLUMNsalJUSTIFYRIGHTFORMAT$99,999.00;【例3.8】用0替换所有空值。SQLCOLUMNcommFORMAT9999NULL0;166格式化命令命令【例3.9】显示comm的当前设置。SQLCOLUMNcomm;【例3.10】清除comm列的设置。SQLCOLUMNcommCLEAR;167格式化命令命令2分组显示命令分组显示命令BREAK日常工作中,常遇到生成报表时某字段出现重复值。为抑止重复值

94、,把行分为几个部分,可用BREAK命令。BREAK命令和ORDERBY命令一起使用效果最好。语法格式:BREAKONColumn_Name168格式化命令命令【例3.11】清除重复值。以查询scott.emp表中的数据为例。SQLselectjob,empno,ename,mgr,hiredate,sal,commfromemporderbyjob;169格式化命令命令为了避免重复值,使用BREAK命令。输出结果如图所示。SQLbreakonjob;SQLselectjob,empno,ename,mgr,hiredate,sal,commfromemporderbyjob;170格式化命令命

95、令3TTITLE、BTITLE、REPHEADER、REPFOOTER命令命令TTITLE命令用于设置报表中每页的顶部标题;BTITLE用于设置报表中每页的底部标题;REPHEADER用于设置报表的总标题;REPFOOTER用于设置报表的脚注。语法格式:TTITLEtext|OFF|ONBTITLEtext|OFF|ON171格式化命令命令TTITLE和BTITLE命令一般分别用于创建页眉和页脚。若页眉选项设置为ON,报表输出时将显示用户指定的标题、系统日期和页码等。【例3.12】给出报表的标题为REPORTHEADER,页脚为REPORTFOOTER。SQLTTITLEREPORTHEADE

96、R;SQLBTITLEREPORTFOOTER;【例3.13】关闭报表标题和页脚命令SQLTTITLEOFF;SQLBTITLEOFF;实训3实训项目:使用命令格式化查询结果。实训内容与步骤:1.使用格式化命令(P105)。COLUMN、BREAK、CLEAR2.报表输出练习(P105)。打印雇员工资单。173任务4任务4:使用SQL*Plus编辑器和编辑命令编辑SQL语句或PL/SQL程序块。174编辑命令1 1编辑器编辑器编辑器编辑器两种编辑器:缓冲区编辑器和外部编辑器。缓冲区编辑器是在SQL提示符下交互式的输入和修改SQL命令或PL/SQL程序,又称为SQL缓冲区。外部编辑器如Notep

97、ad。在Windows系统中,可以通过DEFINE_EDITOR命令定义或查看系统默认的外部编辑器。例如:SQLdefine_editor=notepadSQLdefine_editorDEFINE_EDITOR=notepad(CHAR)Oracle10g的特点使用图形方式先定义外部编辑器,然后再调用。定义方法:“编辑”“编辑程序”“定义编辑程序”-输入编辑器的名称,然后按“确定”按钮。调用方法:“编辑”“编辑程序”“调用编辑器”。175176编辑命令2 2编辑命令编辑命令编辑命令编辑命令SQL*PlusSQL*Plus中常用的编辑命令及功能如表所示。中常用的编辑命令及功能如表所示。命命 令

98、令说 明明AC/C/DEL nIL nR(UN)在在缓冲区中当前行最后添加文本冲区中当前行最后添加文本用新文本替用新文本替换旧文本旧文本用新文本替用新文本替换从旧文本开始的所有文本信息从旧文本开始的所有文本信息删除第除第n行。如果没有第行。如果没有第n行,行,则删除当前行除当前行在当前行之后插入一行在当前行之后插入一行显示第示第n行。若没有第行。若没有第n行,行,则显示整个示整个缓冲区内容冲区内容执行行缓冲区中的命令冲区中的命令实训4实训项目:使用编辑器编辑SQL语句和程序块。实训内容与步骤:1.定义编辑器(P93)。使用命令行方式在缓冲区编辑器中编辑命令。2.调用外部编辑器(P94)。178

99、任务5任务5:使用文件操作命令保存、加载和执行脚本文件。文件操作命令1生成脚本文件生成脚本文件语法格式:SAVEfilename功能:将当前缓冲区的内容存储到脚本文件filename.sql中,缺省文件扩展名为.sql。2加载脚本文件加载脚本文件语法格式:GETfilename.sql功能:把脚本文件filename.sql中的内容加载到缓冲区中3执行脚本文件执行脚本文件语法格式:STARTfilename.sql功能:装载并执行filename.sql文件中的命令。179实训5实训项目:文件操作命令的使用。实训内容与步骤:1.文件操作命令的使用(P103)。SAVE、DEL、GET、STAR

100、T181任务6任务6:使用替换变量、绑定变量和交互式通信命令完成用户与程序的交互式操作。交互式命令SQL*PLUS允许自己定义变量来替换SQL语句中的实际值。称为替换变量的变量用来替换SQL语句中的值。在查询或脚本文件中定义和使用。替换变量很容易识别,前面使用&符号,在执行SELECT语句时,系统会提示用户输入变量的值。182交互式命令1.替换变量替换变量(1)使用替换变量数值类型值的替换变量。【例3.14】用&替换变量实现交互式输入要查询的雇员号的信息。SQLselectename,job,salfromempwhereempno=&n;183交互式命令字符类型或日期类型值的替换变量。如果替

101、换变量为字符类型或日期类型列数据,则需在SQL语句中将替换变量用单引号引起来。【例3.15】字符类型的替换变量用单引号引起来。SQLselectename,job,salfromempwhereename=&name;184交互式命令列名、表达式替换变量对于列名、ORDERBY子句、表名、整个WHERE子句表达式等均可以使用替换变量。【例3.16】替换变量用于列名。SELECT&Col_NameFROMEmp;执行此代码时,用户被要求输入列名。输入的列可以是任意多个,列与列之间用逗号分隔。185交互式命令【例3.17】替换变量用于表达式。SQLSELECTenameFROMEmpWHERE&v

102、ar;186交互式命令(2)定义替换变量为了预定义替换变量的值,可以使用define命令。【例3.18】使用define命令预定义替换变量的值。SQLdefinen=7499;187交互式命令(3)查看替换变量通过DEFINE命令可以查看当前SQL*PLUS环境中保留的所有替换变量。(4)清除替换变量UNDEFINE【例3.19】使用UNDEFINE命令,可以删除替换变量n。SQLUNDEFINEn;188交互式命令2.绑定变量绑定变量绑定变量也称为主机变量,在SQL*PLUS环境中声明。匿名块不带任何参数,绑定变量可以作为参数传递给过程和参数。声明绑定变量的语法是:VARIABLEvaria

103、blenamedatatype例:SQLvariablegnonumber189交互式命令当用VARIABLE命令声明一个数字变量时,不使用精度和标度值。声明varchar2类型的变量时,不使用长度。在SQL*PLUS环境中用PRINT命令显示主机变量的值。Oracle能够重复利用执行计划的方法就是采用绑定变量。绑定变量的实质就是用于替代sql语句中的常量的替代变量。绑定变量能够使得每次提交的sql语句都完全一样。190交互式命令普通sql语句:含绑定变量的sql语句:191交互式命令3.与用户交互通信命令与用户交互通信命令(1)PROMPT功能:prompt命令用来在屏幕上显示指定的字符串。

104、命令格式:prompt字符串例:SQLpromptImaprogrammerImaprogrammer192交互式命令(2)ACCEPT功能:接收用户的键盘输入,把用户输入的数据存放到指定的变量中,一般与prompt命令配合使用。命令格式:accept变量名变量类型prompt提示信息选项例:SQLacceptxzynumberprompt请输入变量xyz的值:default0请输入变量xyz的值:100193交互式命令(3)PAUSE功能:暂停输出页的滚动。命令格式:pause文本其中文本是在暂停时向用户显示的提示信息。194交互式命令【例3.20】构造一个文本文件,演示这几条命令的用法。文

105、本文件iotest.sql的功能是统计某个部门的员工工资,部门号需要用户从键盘输入。文本文件的内容如下:195实训6实训项目:定义、使用替换变量,使用交互通信命令。实训内容与步骤:1.使用替换变量(P103)。掌握替换变量的使用。2.与用户通信掌握通信命令PROMPT、PAUSE、ACCEPT的使用。197任务7任务7:使用帮助命令、假脱机命令等其他命令完成更灵活的操作。help是获取帮助的命令;是获取帮助的命令;describe是是获获取取表表、函函数数、过过程程和和包的描述信息包的描述信息其他命令1.help命令命令【例3.21】使用help命令可以得到联机的命令帮助信息。SQLhelp;

106、显示所有命令的帮助信息。在help命令后加上具体命令名,可以快速了解一个命令的用法说明。SQLhelpspool198其他命令2假脱机假脱机语法格式:Spoolspool_file_name假脱机(spooling)是将信息写到磁盘文件的一个过程。【例3.22】将Employees表和Departments表的查询结果输出到文件d:spool_test.prn中。199其他命令3.DESCRIBE命令命令功能:列出表的结构;列出有关函数、过程以及包的信息。【例3.23】列出emp的表结构SQLdescemp;200其他命令4.REMARK命令命令功能:注释当前行的任何内容。用户可以将注释、文档

107、和说明添加到所创建的文件中。5./*/命令命令功能:注释连续几行的任何内容。字符“-”来开始一个注释,在该行结尾结束该注释。201其他命令6HOST向Oracle所运行的操作系统发送命令,即HOST命令后面可以使用主操作系统的命令。【例3.24】在运行的操作系统是Windows情况下,用操作系统命令将表空间的数据文件users01.dbf拷贝到目标路径。SQLhostcopyD:ORACLEPRODUCT10.2.0ORADATAORCLUSERS01.DBFd:;202实训7实训项目:使用帮助命令和假脱机命令。实训内容与步骤:1.使用HEPL命令(P99)。掌握替换变量的使用。2.假脱机输出

108、(P102)3.其他命令的使用。DESC、REM、/*/、HOST等。知识点小结q最常用的工具是SQL*Plus和SQL*PlusWorksheet。q使用SQL*Plus行编辑器调试SQL语句和PL/SQL程序段,一次执行一条SQL语句和一个SQL/Plus程序段。q使用SQL*PlusWorksheet全屏幕编辑器,一次可以同时执行多条命令。q使用替换变量存储运行时可修改的列名和表达式。q替换变量要在变量名前加上一个或两个&符号作为前缀。可使用DEFINE命令给变量预定义值。204知识点小结q利用环境参数控制SQL*Plus的输出格式。q使用COLUMN命令格式化实际的表列数据,设置列标题

109、。q用BREAK命令抑止重复值。qTTITLE命令用于设置报表中每页的顶部标题;qBTITLE用于设置报表中每页的底部标题;qREPHEADER用于设置报表的总标题;qREPFOOTER用于设置报表的脚注。q假脱机(spooling)是将信息写到磁盘文件的一个过程。205谢 谢 !n206Oracle数据库系统应用开发207208第4章管理表概述q表是数据库中最基本和最重要的模式对象,是数据实际存放的地方,其他许多数据库对象(索引、视图等)都以表为基础。q关系数据库中的表其存储数据的逻辑结构是一张二维表,由行和列两部分组成。表中的一行为一条记录,描述一个实体;表中的一列用于描述实体的一个属性。

110、主要工作q创建表是进行数据库中数据存储管理的基础,也是应用程序开发的第一步。q在创建表之前应根据应用的需要,做好表的规划与设计工作,包括表名、列名、列类型、约束和存储空间及位置等。q管理表还包括对表中记录的相关操作如插入、修改、删除等。经过分析用户需求,并对需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型,并将概念结构转换为Oracle所支持的数据模型,然后到数据库物理设计阶段选取其物理结构。 这一阶段需要构建最基本的数据库对象:数据表,并对表进行数据录入工作。211工作情景:工作情景:了解管理表的常用了解管理表的常用命令,熟练使用常用命令。命令,熟练使用常用命令。任务分析任务分

111、解任务分解q任务1:创建用户。q任务2:对用户授权。q任务3:利用SQL语句创建表。q任务4:利用子查询创建表。q任务5:创建使用BLOB列存储图像的表。q任务6:为表添加或修改约束。q任务7:为表录入或修改数据。q任务8:使用提交和撤销命令进行交或回滚数据,使用保存点进行小事务处理。学习目标学习目标q目标1:了解数据库用户和模式。q目标2:了解授予和回收用户权限。q目标3:掌握创建表的命令及各种Oracle数据类型。q目标4:掌握利用子查询创建表的方法及好处。q目标5:掌握使用BLOB列存储图像的方法。q目标6:掌握各种不同的约束类型及管理约束。q目标7:掌握数据操作语言,熟练进行增加、删除

112、、修改数据。q目标8:掌握事物控制语言。214任务1q创建用户使用createuser命令。每个用户都有一个默认的表空间和临时表空间。如果没有指定,Oracle10g将USERS设为默认表空间,将TEMP作为临时表空间。任务1:创建用户。215创建用户命令q语法格式:qCREATEUSERusernameidentifiedbypasswordqdefaulttablespacetablespaceqtemporarytablespacetablespaceqQUOTA正整数K|M|UNLIMITEDON表空间名q例:创建一个用户usera。qSQLconnectsystem/orcl;qSQ

113、LCREATEUSERuseraidentifiedbyuseraqdefaulttablespaceusersqtemporarytablespacetemp;实训1q实训项目:创建用户。q实训内容与步骤:q1.创建用户(P126)。q创建名为stu_user的用户。q创建名为teach_user的用户。217任务2q用户的权限分为两种:系统权限和对象权限。q授权利用GRANT语句来完成。任务任务2:对用户授权对用户授权。218授予权限命令授予权限命令q1、系统权限授权、系统权限授权q语法格式:qGRANTsystem_priv|roleTOuserqWITHADMINOPTIONq说明:q

114、system_priv:要授予的系统权限。qWITHADMINOPTIN:向其他用户授权的能力传递给被授予者。q只有拥有createsession权限的用户才能连接到数据库。219授予权限命令授予权限命令q例:对用户usera授予连接数据库的权限。qSQLGRANTcreatesessiontousera;q例:为新用户直接授予Oracle中预定义的CONNECT角色。qSQLGRANTconnecttousera;q例:授予RESOURCE角色。qSQLGRANTresourcetousera;220授予权限命令授予权限命令q2、对象权限授权、对象权限授权q语法格式:qGRANTobject

115、_privONobject_nameTOuserqWITHGRANTOPTIONq说明:qobject_priv:要授予的对象权限。qONobject_name:表示某一个具体对象,如表、视图等。qWITHGRANTOPTIN:同前。221授予权限命令授予权限命令q例:为用户usera授予scott用户的emp表的查询、更新和删除操作权限。qSQLconnectscott/tiger;qSQLGRANTSELECTONempTOusera;qSQLGRANTUPDATEONempTOusera;qSQLGRANTDELETEONempTOusera;q例:将scott用户的emp表的所有权授予

116、usera。qSQLGRANTALLONempTOusera;222收权命令收权命令q3、收回权限、收回权限q语法格式:qREVOKEsystem_priv|roleFROMuserqWITHADMINOPTIONq说明:qsystem_priv:是授予用户的系统权限。223收权命令收权命令q例:回收用户usera的SCOTT用户下emp表的SELECT和UPDATE对象权限。qSQLREVOKESELECT,UPDATEONempFROMusera;q例:回收用户usera的SCOTT用户下EMP表的所有权限。qSQLREVOKEALLonempFROMusera;224修改用户口令修改用户

117、口令q使用ALTERUSER语句对用户信息进行修改。qALTERUSER语句最常用的情况是用来修改用户口令,任何用户都可以修改自己的口令。q例:修改用户usera的口令。qSQLALTERUSERuseraidentifiedbynewpsw;225删除用户删除用户q使用DROPUSER语句删除已有的用户。q如果要删除的用户模式中包含有数据对象,则必须在DROPUSER子句中指定cascade关键字,否则Oracle将返回错误信息。q例:删除用户usera,并且同时删除他所拥有的所有表、索引等对象。qSQLDROPUSERuseracascade;226数据类型数据类型q数据类型的作用在于指明

118、存储数值时需要占据的内存空间大小。q在创建表时要为每个列指明其数据类型,可以使用Oracle内置的数据类型、也可使用用户自定义的数据类型。qOracle内置的数据类型主要有数值类型、字符类型、日期类型、LOB类型、二进制类型和行类型等。227数据类型数据类型q1、数值类型、数值类型qNUMBER(P,S),用于存储整数和实数。qP是精度,表示数值的总位数,最大38位,S是刻度范围,可在-84.127间取值。q例 : NUMBER( 5, 2) 可 以 用 来 存 储 表 示 -999.99.999.99间的数值。P、S可以在定义时省略,例如:NUMBER(6)、NUMBER等。228数据类型数

119、据类型q2、字符类型、字符类型qCHAR(nBYTE|CHAR),用于存储定长的字符串。q例:CHAR(n)。n为字符串长度,最大为2000字节。qVARCHAR2(nBYTE|CHAR),描述变长字符串。q例:VARCHAR2(n)。n为字符串长度,最大为4000字节。当列中保存的字符串长度小于n时,按实际长度分配空间。qLONG,用于存储高达2GB的的可变字符串。qNCHAR、NVARCHAR2,国家字符集,用来存储Unicode类型字符串。229数据类型数据类型q3、日期类型、日期类型qDATE:用于存储固定长度的日期和时间数据。qTIMESTAMP(n):允许存储小数形式的秒值。qIN

120、TERVALYEAR(n)TOMONTH:存储以年份和月份表示的时间段。q例:INTERVAL3-6YEARTOMONTH表示3年6个月。qINTERVALDAY(m)TOSECOND(n):存储以天数、小时数、分钟数和秒数表示的时间段。q例:INTERVAL36:20:10DAYTOSECOND表示3天6小时20分10秒。230数据类型数据类型q4、LOB类型类型qCLOB:存储大量字符数据。qNCLOB:用来存储可变长度的Unicode字符数据。qBLOB:存储较大的可变长度的二进制对象,如图形、视频剪辑和声音文件。qBFILE:存储指向二进制格式文件的定位器。231数据类型数据类型q5、

121、RAW和和LONGRAW类型类型q用来存储二进制数据。qRAW:类似于CHAR,声明方式RAW(L),L为长度,以字节为单位,作为数据库列最大2000,作为变量最大32767字节。qLONGRAW:类似于LONG,作为数据库列最大存储2G字节的数据,作为变量最大32760字节。232数据类型数据类型q6、 行类型行类型qROWID:ROWID数据类型被称为“伪列类型”,用于Oracle内部保存表中每条记录的物理地址。qOracle通过ROWID可最快地定位某行具体数据的位置。在使用ROWID字段时必须显式指定名称。qUROWID:行标识符,用于表示索引化表中行的逻辑地址。实训2q实训项目:授权

122、、收权;更改用户密码;删除用户。q实训内容与步骤:(P126)q1.更改用户密码。q更改用户stu_user密码为stu123。q2.授权。q将SCOTT用户emp表的查看更新权限授予用户stu_user。q3.回收权限。q回收用户stu_user对SCOTT用户emp表的查看更新权限。q4.删除用户stu_user。234任务3q表是数据实际存放的地方。表的逻辑结构是一张二维表,表中的一行为一条记录;表中的一列为一个属性。任务任务3:利用:利用SQL语句创建表语句创建表。235创建表命令创建表命令q语法格式:qCREATETABLEschema.table_nameq(column_name

123、datatypeDEFAULTexpressioncolumn_constraint,n)qPCTFREEintegerqPCTUSEDintegerqINITRANSintegerqMAXTRANSintegerqTABLESPACEtablespace_nameqSTORAGEstorage_clauseqCLUSTERcluster_name(cluster_column,n)qASsubquery;236创建表命令创建表命令q说明:qtable_name:表的名称。qcolumn_name:指定表的一个列的名字。qDatatype:该列的数据类型。qDEFAULTexpresssion

124、:指定由expresssion表达式定义的默认值。qcolumn_constraint:定义一个完整性约束作为列定义的一部分。237创建表命令创建表命令qcolumn_constraint子句的基本语法格式为:qCONSTRAINTconstraint_nameqNOTNULLqUNIQUEqPRIMARYKEYqREFERENCESschema.table_name(column_name)qCHECK(condition)q其中:NOTNULL定义该列是否允许为空;UNIQUE定义字段的唯一性;PRIMARYKEY定义字段为主键;REFERENCES定义外键约束;CHECK(conditi

125、on)定义该列数据必须符合的条件。238创建表命令创建表命令qPCTFREE:指定数据块中必须保留的最小空闲空间比例,默认值为10。qPCTUSED:设置数据块是否可用的界限。默认值为40。qINITRANS:指定分配给表的每一数据块中的事务条目的初始数量。默认值为1。qMAXTRANS:指定可更新分配给表的数据块的最大并发事务数。默认值为数据块大小的函数。qTABLESPACE:指定表存放在由tablespace_name指定的表空间中。如果不指定此项,则表存放在默认表空间中。qCLUSTER:指定该表是命名为cluster_name的簇的一部分。qASsubquery:表示将由子查询返回的

126、行插入到所创建的表中。239创建表命令创建表命令qSTORAGE:指定表的存储特征。此子句的基本格式为:qSTORAGEq(INITIALintegerK|integerMqNEXTintegerK|integerMqMINEXTENTSintegerqMAXEXTENTSinteger|UNLIMITEDqPCTINCREASEintegerqFREELISTSintegerqFREELISTGROUPinteger)q其中,INITIAL:指定为表分配的第一个区大小;NEXT指定第一个扩展区的大小;MINEXTENTS为创建段时已分配的总区数;MAXEXTENTS表示Oracle数据库可以

127、分配给该对象的总区数;PCTINCREASE指定每个区相对于上一个区的增长百分比;FREELISTS指定表、簇或索引的每个空闲列表组的空闲列表数量;FREELISTGROUP指定表、簇或索引的空闲列表组的数量。240创建表命令创建表命令q例:创建雇员表(Employee),包括员工号、员工名、工作职位、主管领导、雇佣日期、基本工资、补贴、部门号等员工信息。qSQLCREATETABLEEmployee-雇员信息q(EmpIdNUMBER(4)CONSTRAINTPK_EMPRIMARYKEY,qENameVARCHAR2(10)NOTNULL,qjobVARCHAR2(9),qMGRNUMBE

128、R(4),qHireDateVARCHAR2(20),qBaseSalNUMBER(7,2),qCommNUMBER(7,2),qDeptIdNUMBER(2)CONSTRAINTFK_DEPTREFERENCESDepartment(DepId)q);241创建表命令创建表命令q例:创建部门表(Department)。包括部门号、部门名称、部门描述信息。qSQLCREATETABLEDepartmentq(DepIdNUMBER(2)CONSTRAINTPK_DEPPRIMARYKEY,qDNameVARCHAR2(16)UNIQUE,qDescribesVARCHAR2(13)q);242

129、创建表命令创建表命令q例:创建工资级别表(Salgrade)。包括级别、最低工资、最高工资信息。qSQLCREATETABLESALGRADE-工资级别q(GRADENUMBER,qLOSALNUMBER,qHISALNUMBERq);实训3q实训项目:创建表。q实训内容与步骤:(P126)q1.创建雇员表。q2.创建部门表。q3.创建职位信息表。q4.创建用户信息表。244任务4q如要创建的新表和数据库中已存在的表有较多相同的字段,可在CREATETABLE中利用子查询来简化创建表的工作。任务任务4:利用子查询创建表:利用子查询创建表创建表创建表。245利用子查询创建表例:将30部门的员工名

130、、工作职位、工资保存在新表EMP_30中。SQLCREATETABLEEMP_30(ename,job,sal)asSELECTename,job,salFROMempwheredeptno=30;实训4q实训项目:用子查询创建表。q实训内容与步骤:(P132)q创建一个表,保存工资高于2500元的员工的员工号、员工名和部门号。q语句为:qSQLCREATETABLEemployee_info(empid,ename,deptid)qasqSELECTempid,ename,deptidqFROMemployeewheresal2500;247任务5q大对象(LOB)数据类型用于存储非结构化数

131、据。其中包括文本、图形图像、视频剪辑和声音剪辑。任务任务5:创建使用:创建使用BLOB列存储图像的表列存储图像的表。248使用LOB类型数据库列qLOB数据类型的数据库列用于存储定位器,而该定位器指向大对象的存储位置。这些大对象可以存储在数据库中,也可以存储在外部文件中。q当LOB值为NULL时不包含定位器。选择空的LOB列可返回一个定位器,它可以通过DBMS_LOB程序包用数据填充LOB。q在INSERT或UPDATE语句中使用特殊函数(如EMPTY_BLOB()和EMPTY_CLOB())将NULL或非NULL的LOB初始化为空。249使用LOB类型数据库列q例:创建blob列存储图像的表

132、。qCREATETABLEphoto(qphoto_nonumber,qimageblob);qDECLAREql_bfileBFILE;ql_blobBLOB;qBEGINqINSERTINTOphoto(photo_no,image)qVALUES(1,EMPTY_BLOB()qRETURNimageINTOl_blob;ql_bfile:=BFILENAME(IMAGS,g1.JPG);qDBMS_LOB.OPEN(l_bfile,DBMS_LOB.FILE_READONLY);qDBMS_LOB.LOADFROMFILE(l_blob,l_bfile,DBMS_LOB.GETLENGT

133、H(l_bfile);qDBMS_LOB.CLOSE(l_bfile);qCOMMIT;qEND;250表约束管理q在数据库中存储数据,必须保证数据的正确性、准确性、一致性和完整性。qORACLE使用完整性约束(integrityconstraints)防止不合法的数据写入数据库。q约束可以通过使用CREATETABLE语句指定,也可以创建表之后使用ALTERTABLE添加或修改。251约束的类型q约束的类型q(1)非空约束(NOTNULL)限制为某个列提供NULL值。q(2)唯一约束(UNIQUE)保证在指定的列中没有重复值。q(3)检查约束(CHECK)检查约束用来限制列值所允许的取值范围

134、。q(4)主键约束(PRIMARYKEY)唯一的标识出表的每一行,并且防止出现NULL值,一个表只能有一个主键约束。q(5)外键约束(FOREIGNKEY)通过使用公共列在表之间建立一种父子(parent-child)关系,在表上定义的外部键可以指向主键或者其他表的唯一键。252定义约束q约束定义通过查询USER_CONSTRAINTS可以获得相关信息。q语法格式:qCREATETABLEschema.tableq(columndatatypeDEFAULTexprqcolumn_constraint,-列级约束q.qtable_constraint,.);-表级约束实训5q实训项目:创建表时

135、使用LOB列存储图像。q实训内容与步骤:(P115)q在scott用户下创建具有blob列存储图像的表。qCREATETABLEphotoq(qphoto_nonumber,qimageblobq);254任务6q。任务任务6:为表添加或修改约束:为表添加或修改约束。255添加约束q语法格式:qALTERTABLEtable_nameqADDCONSTRAINTconstraint_nameqconstraint_type(column1_name,column2_name,)condition;256添加约束q例:以表Employee为例,说明定义约束和添加约束。qSQLCREATETABL

136、EEmployeeq(EmpIdNUMBER(4)CONSTRAINTP_PKPRIMARYKEY,qENameVARCHAR2(10)NOTNULL,qJobVARCHAR2(40),qMGRNUMBER(4),qHireDateVARCHAR2(20),qBaseSalNUMBER(7,2),qCommNUMBER(7,2),qDeptIdNUMBER(2)q);257添加约束q例:为BaseSal列添加检查约束。qSQLALTERTABLEEmployeeqADDCONSTRAINTP_CKCHECK(BaseSal1000);q例:为Job列添加空/非空键约束。q使用MODIFY子句代

137、替ADD子句。qSQLALTERTABLEEmployeeMODIFYJobNOTNULL;q例:为DeptId列添加外键约束。qSQLALTERTABLEEmployeeADDCONSTRAINTP_FKFOREIGNKEY(DeptId)REFERENCESDepartment(DepId);258设置约束状态q约束有激活(Enable)和禁用(Disable)两种状态。默认情况下,约束创建之后就一直起作用。q禁用约束是一种暂时的方法,在禁用约束状态下完成操作之后,还应该设为激活状态。q约束定义时使用关键字DISABLE来设置为禁用状态,使用关键字DISABLE来改变其状态。259禁用约束

138、q例:创建表时将EmpId的主键约束设置为禁用。qSQLCREATETABLEEmployeeq(EmpIdNUMBER(4)PRIMARYKEYDISABLE,);q例:修改BaseSal列的检查约束为禁用状态。qSQLALTERTABLEEmployeeqDISABLECHECK(BaseSal1000);q或者qSQLALTERTABLEEmployeeDISABLEP_CK;260激活约束q例:修改BaseSal列的检查约束为激活状态。qSQLALTERTABLEEmployeeENABLEP_CK;261检查约束信息q数据字典视图qALL_CONSTRAINTS、qUSER_CONS

139、TRAINTS、qDBA_CONSTRAINTSqALL_CONS_COLUMNS、qUSER_CONS_COLUMNS、qDBA_CONS_COLUMNS包含了约束名称、约束类型、状态等信息。包含了约束的列信息,可查询约束所对应的列。262检查约束信息q例:查询Employee表中的所有约束。qSQLSELECTqCONSTRAINT_NAME,CONSTRAINT_TYPE,STATUSqFROMUSER_CONSTRAINTSqWHERETABLE_NAME=EMPLOYEE;q例:查询Employee表中各个约束所对应的列。qSQLSELECTCONSTRAINT_NAME,COLUM

140、N_NAMEqFROMUSER_CONS_COLUMNSqWHERETABLE_NAME=EMPLOYEE;263修改表q表创建后,可以利用ALTERTABLE命令修改表,包括增加列、修改列的属性和删除列,可进行表参数的修改以及表的重命名和约束的添加、修改、删除和禁用等。q语法格式:qALTERTABLEschema.tablenameqADD(columnnamedatatypeqDEFAULTexpressioncolumn_constraint,n)qMODIFY(columnnamedatatypeqDEFAULTexpressioncolumn_constraint,n)qDROPC

141、OLUMNcolumnname264修改表q(1)添加列q使用ALTERTABLEADD语句实现表中列的添加。q例:修改雇员表(Employee)。q在列中增加一列存放性别数据。qSQLALTERTABLEEmployeeADDSexCHAR(2);265修改表q(2)修改列类型q使用ALTERTABLEMODIFY语句实现表中列的修改。q例:修改雇员表(Employee)中列的宽度、小数位、数据类型或缺省值。qSQLALTERTABLEEmployeeqMODIFYEnamevarchar2(16);q注:如果要更改数据类型,则要修改的列内容必须为空。266修改表q(3)修改列名q使用ALT

142、ERTABLERENAMECOLUMN语句修改列的名称。q例:将表(Employee)中HireDate列名修改为Hire_Date。qSQLALTERTABLEEmployeeqRENAMECOLUMNHireDatetoHire_Date;267修改表q(4)删除列名q使用ALTERTABLEDROPCOLUMN语句直接删除列。q【例4.26】从雇员表(Employee)中删除列sex。qSQLALTERTABLEEmployeeDROPCOLUMNsex;q【例4.27】从雇员表(Employee)中删除列sex,Comm。qSQLALTERTABLEEmployeeDROP(sex,C

143、omm);268修改表q(5)表名的修改q表名的修改使用ALTERTABLERENAMETO语句实现,也可以直接执行RENAMETO语句。q【例4.28】将雇员表(Employee)重命名为Empl。qSQLALTERTABLEEmployeeRENAMETOEmpl;q或者:qSQLRENAMEEmployeeTOEmpl;269修改表q(6)表注释的添加q可以使用COMMENTONIS语句为表或表中的列添加或补充注释。q例:qSQLCOMMENTONTABLEEmployeeIS雇员表;qSQLCOMMENTONCOLUMNEmployee.BasesalIS基本工资;270删除表结构q使

144、用DROPTABLE删除表。删除表时,表中存储的数据也将同时被删除。如果在删除表同时要删除其他表中的相关外键约束,使用CASCADECONSTRAINTS子句。q语法格式:qDROPTABLEtable_nameCASCADECONSTRAINTSq例:删除salgrade表。qSQLDROPTABLEsalgrade;实训6q实训项目:约束管理。q实训内容与步骤:q1.在创建表的同时进行约束管理(P126)。q2.修改表和修改约束。(P132)272任务7q数据操纵语言(DML)用来操纵表或视图的数据。INSERT命令插入数据,UPDATE命令更新数据,DELETE删除数据,SELECT命令

145、查询数据。任务任务7:为表录入或修改数据:为表录入或修改数据。273插入数据q1单行插入单行插入qINSERT语句用于在指定的表中添加数据。q语法格式:qINSERTINTOtable_namecolumn_listVALUES(values)q例:向Department表插入如下数据。qSQLINSERTINTODepartmentqVALUES(50,SUPPORTING,ZHUHAI);274插入数据q2利用子查询进行多值插入利用子查询进行多值插入q语法格式:qINSERTINTOtable_name(column1,column2,)subqueryqSubquery:表示从有一个子查

146、询来向表中插入数据。q例:利用子查询向Department表插入多条记录。qSQLINSERTINTODepartmentSELECT*FROMscott.dept;q例:向Employee表插入多条记录。qSQLINSERTINTOEmployeeSELECT*FROMscott.emp;275修改数据q1直接修改格式直接修改格式q语法格式:qUPDATEtable_nameqSETcolumn_name=valueqWHEREconditionq例:将编码为“7521”的雇员的薪水改为1500元。qSQLUPDATEEmployeeSETbasesal=1500qWHEREempid=75

147、21;q例:将部门号为“20”雇员的基本工资增加300元。qSQLUPDATEEmployeeSETbasesal=basesal+300qWHEREDEPTNO=20;276修改数据q2嵌套修改格式嵌套修改格式q语法格式:qUPDATEtablename1SET(column_name1,column_name2,)=q(SELECTcolumn_name1,column_name2,FROMtablename2WHEREcondition);q例:将Employee表中编号为“7521”雇员的职位和工资修改为与EMP表中编号为“7566”雇员的职位和工资。qSQLUPDATEEmploye

148、eqSET(job,basesal)=q(SELECTjob,salFROMEMPWHEREempno=7566)qWHEREempid=7521;277删除数据q1.使用使用DELETE命令命令qDELETE语句使用户可以删除表中的一条或多条记录。q语法格式:qDELETEFROMtable_nameWHEREconditionq例:将编码为7499的员工信息删除。qSQLDELETEFROMEmployeeqWHEREempid=7499;278删除数据q2使用使用TRUNCATETABLE命令命令q使用TRUNCATETABLE可以删除表中的全部记录。q语法格式:qTRUNCATETAB

149、LEtable_nameq例:用TRUNCATE删除Employee表。qSQLTRUNCATETABLEEmployee;实训7q实训项目:操作表。q实训内容与步骤:q1.插入数据(P132)q2.更新数据(P134)q3.联合查询数据(P134)280任务8q事务(Transaction)可以被看作一个工作逻辑单元,是一系列作为一个单元被全部提交或全部回滚的SQL语句。任务8:使用提交和撤销命令进行提交或回滚数据,使用保存点进行小事务处理。281事务q事务一般使用COMMIT(提交)或ROLLBACK(回滚)来标识。q事务语句要么全部执行要么全部不执行,如果其中有任一条SQL语句执行失败,

150、则全部语句都不会执行,这样就保证了数据的一致性和完整性。282事务控制语句q事务控制语句及用途语 句句用用 途途Commit 完完成成事事务,数数据据修修改改成成功功并并对其其他他用用户开放开放Rollback 撤撤销事事务,撤,撤销所有操作所有操作Rollback to savepoint 撤撤销在在设置的回置的回滚点以后的操作点以后的操作283事务控制语句q1COMMIT命令命令q当向数据库发出COMMIT指令时,即将在事务中由SQL语句所执行的改变永久化。q语法格式:qSQLstatement1;qSQLstatement2;qCOMMIT;q说明:qCOMMIT:保证statement

151、1和statement2所做的修改持久有效。284事务控制语句q例:将部门号为“20”雇员的基本工资增加300元同时将部门号为“10”雇员的基本工资增加200元。qSQLUPDATEEmpqSETsal=sal+300WHEREDEPTNO=20;qSQLUPDATEEmpqSETsal=sal+200WHEREDEPTNO=10;qSQLCOMMIT;q如下面还有SQL语句,则意味着下一个事务的开始。285事务控制语句q2ROLLBACK命令q利用ROLLBACK命令即可实现撤消操作的功能。q语法格式:qSQLstatement1;qSQLstatement2;qROLLBACK;q说明:q

152、ROLLBACK:撤消自上一个COMMIT语句执行以来所做的修改。286事务控制语句q例:有如下一段代码,分析其功能。qSQLDELETEFROMEmp;qSQLROLLBACK;qSQLDELETEFROMEmpWHEREempno=7499;qSQLSELECT*FROMEmpWHEREempno=7499;qSQLCOMMIT;287事务控制语句q3SAVEPOINT命令命令q将一个大的事务分成很多小事务,每一个小块作为一个保存点,这样在执行程序的时候,如果发生错误,只回滚到最近或指定的保存点,而不撤消整个事务,减少不必要的数据库开销。q语法格式:qSQLstatement1;qSAVE

153、POINTsavepoint_name;qSQLstatement2;qROLLBACKtosavepoint_name;q说明:qsavepoint_name:是SAVEPOINT的名称。288事务控制语句q例:有如下一段代码,分析其功能。qSQLSAVEPOINTSMITH;qSQLUPDATEEmpSETsal=1500WHEREempno=7369;qSQLSAVEPOINTALLEN;qSQLUPDATEEmpSETsal=2000WHEREempno=7499;q用SAVEPOINT语句创建了两个标记SMITH和ALLEN。如果想回滚到第二个DML语句前,需要使用的代码是:qSQL

154、ROLLBACKTOALLEN;q如果想要回滚到最前面,则使用语句:qSQLROLLBACKTOSMITH;实训8q实训项目:使用事务控制语句。q实训内容与步骤:q掌握事务处理命令的用法(P135)。qq谢 谢 !n290Oracle数据库系统应用开发291292第5章其他模式对象这一阶段的工作任务需要在前一段创建表的基础上建立其他的数据库对象,如视图,索引,同义词、序列等等。293工作情景:工作情景:了解数据库对象,熟练创建和了解数据库对象,熟练创建和使用数据库对象。使用数据库对象。任务分析任务分析任务分解任务分解q任务1:创建视图。q任务2:对视图进行更新。q任务3:创建标准索引。q任务4

155、:在百万行数据表上建立索引。q任务5:建立私有同义词。q任务6:建立公有同义词。q任务7:建立序列。q任务8:使用序列为表插入数据。学习目标学习目标q目标1:了解视图的作用并掌握创建视图的方法。q目标2:了解对视图进行更新的限定条件。q目标3:了解各种索引的类型并掌握创建索引的方法。q目标4:了解在大数据量情况下索引的作用。q目标5:理解同义词的作用并掌握创建私有同义词的方法。q目标6:掌握创建公有同义词的方法。q目标7:掌握序列的作用以及创建和访问序列的方法。q目标8:掌握使用序列为表插入数据的方法。296视图概述q视图是Oracle的一种数据对象,是为了确保数据表的安全性、灵活性和提高数据

156、的隐蔽性从一个或多个表中或其他视图中使用SELECT语句导出的虚表。q视图是数据库的一种逻辑结构,用户可以像查询普通表一样查询视图。视图内没有存储任何数据,对视图中数据的操纵实际上是对组成视图的基础表的操纵。q通过使用视图,基础表中的数据以各种不同的方式提供给用户,可以简化用户权限的管理,简化查询语句,分离应用程序与基础表,集中用户使用的数据,提供附加的安全层,隐藏数据的复杂性等。297任务1使用CREATEVIEW语句可创建视图。任务1:创建视图。298创建命令创建命令语法格式:CREATEORREPLACEVIEWschema.view_nameASSELECT_statementWITH

157、CHECKOPTIONCONSTRAINTconstraint_nameWITHREADONLYCONSTRAINTconstraint_name;说明:ORREPLACE:表示将覆盖视图中原来的内容,修改时使用。view_name:新建的视图名。SELECT_statement:用于创建视图的查询语句。WITHCHECKOPTION:视图上所进行的修改都要符合查询条件。WITHREADONLY:是只读视图,不能进行插入、删除、修改等操作。299创建视图创建视图1创建简单视图创建简单视图简单视图是从单个表中导出数据,不包含字符或组合之类函数。数据来源于一个基表,不包含函数、分组等,可以直接进行

158、DML操作。【例5.1】创建视图emp_view。连接system用户,将创建视图的权限授予用户。SQLGRANTCREATEVIEWtoscott;SQLconnscott/tiger;SQLCREATEVIEWemp_viewASSELECTename,job,salFROMemp;300创建视图创建视图【例5.2】创建带检查约束的视图。建立一个部门员工薪水介于1000-3000元的员工信息SAL_MID视图。SQLCREATEVIEWSAL_MIDASSELECTename,job,salFROMempWHEREsalbetween1000and3000WITHCHECKOPTION;指

159、定WITHCHECKOPTION选项后,如果在此视图上执行增加和修改操作,要求新数据必须符合指定的约束条件。301创建视图创建视图【例5.3】创建只读视图。建立一个10部门员工的只读视图DEP_10。SQLCREATEVIEWdep_10ASSELECTename,job,salFROMempWHEREdeptno=10WITHreadonly;用户在此视图上只可以执行查询操作,禁止增加、删除和更改等DML操作302创建视图创建视图2创建复杂视图创建复杂视图复杂视图是从多个表中导出数据,可包含连接、分组、字符或统计函数等。【例5.4】创建一个包含各部门的部门号、部门人数和部门平均工资的视图。S

160、QLCREATEVIEWsal_avgASSELECTdeptno,avg(sal)avgsal,count(*)totalFROMempGROUPBYdeptno;实训1实训项目:创建视图。实训内容与步骤:(P154)1.创建员工变动情况的只读视图(staffChangeInfo_view)。2.创建带检查约束的员工考勤信息视图。3.创建员工绩效考核情况视图(emp_eva_view)。304任务2利用利用INSERT、DELETE、UPDATE语句进行更新操作语句进行更新操作。任务任务2:对视图进行更新。对视图进行更新。305视图的视图的DML操作操作DML操作是指操作是指INSERT、D

161、ELETE、UPDATE语句操作。语句操作。在基于单个基表的视图中可以进行在基于单个基表的视图中可以进行DML操作。操作。在复杂视图上进行在复杂视图上进行DML操作限制如下:操作限制如下:连接视图中不能有连接视图中不能有ORDERBY排序语句。排序语句。基础表中所有的基础表中所有的NOTNULL列都必须在这个视图中。列都必须在这个视图中。需要更新的列不包含伪列或表达式。需要更新的列不包含伪列或表达式。建立视图的建立视图的SELECT语句中,不能包含集合运算符、连接语句中,不能包含集合运算符、连接运算符、子查询、分组函数、聚合函数和运算符、子查询、分组函数、聚合函数和GROUPBY子句等。子句等

162、。306视图的视图的DML操作操作【例5.5】创建一个部门员工信息视图,此视图中包含员工名、部门名、工作职位、薪水等信息。SQLCREATEVIEWemp_deptASSELECTempno,ename,dname,job,salFROMemp,deptWHEREemp.deptno=dept.deptno;SQLSELECT*FROMemp_dept;307视图的视图的DML操作操作SQLUPDATEemp_deptSETdname=SALES1WHEREempno=7499;第1行出现错误:ORA-01779:无法修改与非键值保存表对应的列更新键值保存表中的数据列,则可以正确执行。如:SQ

163、LUPDATEemp_deptSETsal=2000WHEREempno=7499;已更新1行。308管理视图管理视图1、更改视图、更改视图使用CREATEORREPLACEVIEW语句。语法格式:CREATEORREPLACEVIEWview_name;ASsubquery;【例5.6】更改视图emp_view。SQLCREATEORREPLACEVIEWemp_viewASSELECTempno,ename,job,salFROMemp;309管理视图管理视图2、重命名视图、重命名视图使用RENAME语句给视图重新命名。语法格式:RENAMETO;【例5.7】给emp_view重新命名为e

164、mp_view1。SQLRENAMEemp_viewTOemp_view1;310管理视图管理视图3、删除视图、删除视图使用DROPVIEW语句删除视图。删除视图后,该视图的定义也从数据字典中删除。语法格式:DROPVIEWview_name;【例5.8】删除视图emp_view。SQLDROPVIEWemp_view;311管理视图管理视图4、查询视图与数据字典、查询视图与数据字典与视图有关的数据字典包括DBA_VIEWS、USER_VIEWS等,分别描述有关所有视图信息和当前用户自己创建的视图信息。语法格式一:DESC;语法格式二:SELECTFROM;【例5.9】查询SCOTT用户下的视

165、图及视图定义信息。SQLCOLview_nameFORmata10SQLSELECTview_name,textFROMuser_views;实训2实训项目:更新视图、查询视图信息。实训内容与步骤:(P155)1.对视图的定义进行更改,将绩效考核情况视图改为只读。2.重命名视图,将绩效考核情况视图“emp_eva_view”重命名为“employee_evaluation_view”。3.删除绩效考核情况视图“employee_evaluation_view”。4.查询所创建的视图及视图定义信息。313索引索引数据库的索引(index)类似于图书的目录。在目录中找内容,比到正文中找内容要快得多

166、。在数据库中,索引允许数据库程序快速地找到表中的数据,而不必全部扫描整个数据表。在图书中,目录是内容和对应页号的列表;在数据库中,索引是表中数据和相应存储位置的列表。314索引概念索引概念索引是一种与表相关的可选的方案对象。是一种供服务器在表中快速查找一个行的数据库结构,使用索引能减少使用I/O的次数,加快查询速度。索引是一个存储按序排列的数据的一个单独的表,表里只包含一个键值字段和一个指向表中行的指针(而不是整个记录),它的建立和删除对表没有影响。索引可以在表的一列或多列上建立,索引一旦被创建,在表上执行插入、更新和删除操作时,Oracle将自动维护索引。315索引概念索引概念使用索引优点:

167、快速存取数据。改善数据库性能,实施数据的唯一性和参照完整性。多表检索数据的过程快。进行数据检索时,减少排序和分组的时间。使用索引缺点:索引将占用磁盘空间。创建索引需要花费时间。延长了数据修改的时间。316索引的分类索引的分类按逻辑设计:单列索引和复合索引、唯一索引与非唯一索引、基于函数的索引。按物理实现:分区索引和非分区索引、B树索引、正向索引与反向索引,位图索引。317索引的分类索引的分类1、按逻辑设计分类、按逻辑设计分类(1)唯一索引保证被索引的列中不会有两行相同的索引键值。(2)非唯一索引不对索引列的值进行唯一性限制。(3)分区索引是指索引可以分散的存在于多个不同的表空间中。可以提高数据

168、的查询效率。318索引的分类索引的分类(4)正向索引创建索引时不必指定对其排序而使用默认的顺序。(5)反向索引该索引同样保持索引列按顺序排列,但是颠倒已索引的每列的字节。适用于ORACLE实时应用集群。(6)基于函数的索引指索引中的一列或者多列是一个函数或者表达式,索引根据函数或者表达式计算索引列的值。包含一个函数预先计算的值。319索引的分类索引的分类2、按物理存储方法分类、按物理存储方法分类(1)B*树索引B*索引的存储结构类似于书的索引结构,有“分支”和“页”两种类型的存储数据块,分支块相当于书的大目录,叶块相当于索引到的具体的书页,这种方式可以保证用最短路径访问数据。这是使用最多而且是

169、默认的索引类型。常见的唯一索引、逆序索引均是属于此类。320索引的分类索引的分类(2)反向键索引反向键索引通过简单的反向被索引的列中的数据来解决问题,首先反向每个列键值的字节,然后在反向后的新数据上进行索引,而新数据在值的范围上的分布通常比原来的有序数更均匀。因此,反向键索引通常建立在一些值连续增长的列上。(3)位图索引位图索引适用于具有很少列值的列(也叫低基数列)。位图索引存储主要用于节省空间,减少ORACLE对数据块的访问,它为索引列的每个取值建立一个位图。在这个位图中,为表中每一行使用一个位元(bit,取值为1或0)来表示该行是否包含该位图的索引列的值。321任务3使用CREATEIND

170、EX命令创建索引。任务3:创建标准索引。322创建索引创建索引语法格式:CREATEUNIQUEINDEXschema.index_nameONschema.table_name(COLumn_nameASC|DESC,n)CLUSTERschema.cluster_nameTABLESPACEtablespace_namePCTFREEintegerINITRANSintegerMAXTRANSintegerSTORAGEstorage_clauseNOSORT|REVERSE;323创建索引创建索引【例5.10】从emp表上创建不同的索引。SQLCREATEINDEXemp_idxONem

171、p(ename);SQLCREATEINDEXemp_idx_jONemp(ename,job);【例5.11】创建基于函数的索引。SQLCREATEINDEXemp_fun_idxONemp(UPPER(ename);324管理索引管理索引1 1、查看索引、查看索引、查看索引、查看索引 OracleOracle数据库中,使用数据库中,使用SELECTSELECT命令和命令和DESCDESC均可查看索均可查看索引的信息。引的信息。索引信息存放在数据字典中,如索引信息存放在数据字典中,如DBA_INDEXESDBA_INDEXES、USER_INDEXESUSER_INDEXES、USER_IN

172、D_COLUMNSUSER_IND_COLUMNS等,分别描述有等,分别描述有关索引信息和创建索引的列信息。关索引信息和创建索引的列信息。325管理索引管理索引【例例5.145.14】检查索引是否已经创建。检查索引是否已经创建。SQLSELECTindex_nameFROMUSER_INDEXESSQLSELECTindex_nameFROMUSER_INDEXESWHEREtable_name=EMP1;WHEREtable_name=EMP1;SQLDESCDBA_INDEXES;SQLDESCDBA_INDEXES;【例例5.155.15】使用使用SELECTSELECT查看表查看表em

173、p1emp1的索引信息。的索引信息。SQLSELECTndex_name,table_name,uniqueness,statusSQLSELECTndex_name,table_name,uniqueness,statusFROMUSER_INDEXESWHEREtable_name=EMP1;FROMUSER_INDEXESWHEREtable_name=EMP1;326管理索引管理索引2 2、修改索引、修改索引、修改索引、修改索引语法格式:语法格式:ALTERINDEXschema.index_nameALTERINDEXschema.index_namePCTFREEintegerPC

174、TFREEintegerINITRANSintegerINITRANSintegerMAXTRANSintegerMAXTRANSintegerSTORAGEstorage_clauseSTORAGEstorage_clauseRENAMETOnew_index_name;RENAMETOnew_index_name;【例例5.165.16】修改修改idx_ididx_id索引。索引。SQLALTERINDEXidx_idRENAMESQLALTERINDEXidx_idRENAMEtoemp1_idx_id;toemp1_idx_id;327管理索引管理索引3 3、删除索引、删除索引、删除索

175、引、删除索引删除索引使用删除索引使用DROPINDEXDROPINDEX命令。命令。语法格式:语法格式: DROPINDEXschema.index_nameDROPINDEXschema.index_name【例例5.175.17】删除删除idx_sexidx_sex索引。索引。SQLDROPINDEXidx_sex;SQLDROPINDEXidx_sex;实训3实训项目:创建索引、管理索引。实训内容与步骤:(P155)1.创建唯一索引。2.创建组合索引。3.创建基于函数的索引。4.创建位图索引。5.查询索引的信息6.删除索引329任务4任务4:在百万行数据表上建立索引。330索引开销示例索

176、引开销示例【例5.1】建立一个大表,对表中数据进行查询操作,比较建立索引前后的系统开销。建立单独的表空间wb和单独的临时表空间wbtemp,创建用户wb并为其指定表空间和wb临时表空间wbtemp,用于存放大量数据。SQLconnsystem/manager1;SQLCREATEtablespacewbdatafileD:wb01.dbfsize50MautoextENDon;SQLCREATEtemporarytablespacewbtemptempfilec:wbtemp.dbfsize300M;SQLCREATEuserwbidentifiedbywbdefaulttablespacew

177、btemporarytablespacewbtemp;SQLGRANTconnect,resourcetowb;SQLconnwb/wb;331索引开销示例索引开销示例建立表emp1,并用pl/sql程序为其生成一百万行数据。SQLCREATETABLEemp1(idnumber(8,0),namevarchar2(20),sexnumber(1,0),birthdate,phonevarchar2(15);SQLDECLAREvtodaydate;vcntnumber(8,0):=1000000;BEGINSELECTsysdateintovtodayFROMdual;FORiin1.vcn

178、tLOOPINSERTINTOemp1(id,name,sex,birth,phone)VALUES(i,name|i,mod(i,2),vtoday-i,phone|i);IFmod(i,100)=0THENCOMMIT;ENDIF;ENDLOOP;END;/332索引开销示例索引开销示例通过计算表上的统计数据得到查询语句的开销。由于表中有大量的数据,为确保SQL*PLUS显示查询的开销,而不显示查询结果。进行如下设置:SQLanalyzetableemp1computestatistics;表已分析。SQLSETautotracetraceexplain333索引开销示例索引开销示例对em

179、p1表进行查询,从中获取一行数据,结果如图所示。SQLSELECTid,name,phoneFROMemp1WHEREid=849765;334索引开销示例索引开销示例在emp1表的id列上创建索引,重新执行查询,结果如图所示。SQLCREATEindexidx_idonemp1(id);335索引开销示例索引开销示例【例5.13】在低基数列上创建索引前后的分析数据比较。对emp1表进行查询,从中获取性别为“1”(“男”)的数据。结果如图所示。336索引开销示例索引开销示例在emp1表的sex列上创建索引,重新执行查询。结果如图所示。SQLCREATEindexidx_sexonemp1(se

180、x);索引已创建。337索引开销示例索引开销示例从分析结果来看,在建立了性别列的索引后,在检索时,从分析结果来看,在建立了性别列的索引后,在检索时,仍然使用了全表扫描,这是因为,系统统计发现仍然使用了全表扫描,这是因为,系统统计发现sexsex值为值为1 1的的数据占总数据量的数据占总数据量的50%50%,建立索引对提高查询效率没有起到,建立索引对提高查询效率没有起到作用,对于作用,对于OracleOracle系统来讲,并不是创建了索引就一定会使系统来讲,并不是创建了索引就一定会使用索引,当用索引,当OracleOracle自动搜集了表和索引的统计信息之后,才自动搜集了表和索引的统计信息之后,

181、才会确定是否要使用索引,只有高选择性的索引才会比全表扫会确定是否要使用索引,只有高选择性的索引才会比全表扫描更有效率。描更有效率。索引建立后会对插入、更新和删除等操作带来不利的影索引建立后会对插入、更新和删除等操作带来不利的影响,在需要的时候创建索引,不需要索引时将其删除。响,在需要的时候创建索引,不需要索引时将其删除。实训4实训项目:创建百万行数据表、创建索引。实训内容与步骤:1.建立一个大表,对表中数据进行查询操作,比较建立索引前后的系统开销。(P144)2.在低基数列上创建索引前后的分析数据比较。(P145)339同义词同义词 同同义义词词是是数数据据库库方方案案对对象象的的一一个个别别

182、名名,常常用用于于简简化化对对象象访访问问和和提提高高对对象象访访问问的的安安全全性性。 通通过过模模式式对对象象创创建建同同义义词词,可以隐藏对象的实际名称和所有者信息。可以隐藏对象的实际名称和所有者信息。 同同义义词词不不占占用用实实际际存存储储空空间间,只只有有在在数数据据字字典典中中保保存存了了 同同 义义 词词 的的 定定 义义 。 同同 义义 词词 划划 分分 为为 两两 种种 类类 型型 : 私私 有有(PRIVATEPRIVATE)同同义义词词和和公公用用(PUBLICPUBLIC)同同义义词词。私私有有同同义义词词只只能能被被创创建建它它的的用用户户所所拥拥有有;公公用用同同

183、义义词词被被PUBLICPUBLIC用用户户组所拥有,可为数据库中每一个用户所使用。组所拥有,可为数据库中每一个用户所使用。340任务5任务5:建立私有同义词。创建同义词、创建私有同义词、创建私有同义词创建私有同义词需要具有CREATESYNONYM权限。语法格式:CREATESYNONYMschema.Synonym_NameFORschema.Object_Namedblink;【例5.18】为emp表创建名为sy_emp的同义词。SQLCREATESYNONYMsy_empFORemp;SQLSELECT*FROMemployee;SQLSELECT*FROMsy_emp;341实训5实

184、训项目:创建同义词。实训内容与步骤:(P156)创建UserInfo,Permission表的私有同义词。CREATEPRIVATESYNONYMUserInfo_synFORUserInfo;CREATEPRIVATESYNONYMPermission_synFORSCOTT.Permission;343任务6任务6:建立公有同义词。创建同义词、创建公用同义词、创建公用同义词DBA或被授予CREATEPUBLICSYNONYM权限的用户可以创建公共同义词。语法格式:CREATEPUBLICSYNONYMschema.Synonym_NameFORschema.Object_Namedblin

185、k;【例5.19】为scott用户的emp表创建名为pub_emp的PUBLIC同义词。SQLCREATEPUBLICSYNONYMpub_empFORscott.emp;SQLSELECT*FROMemp;SQLSELECT*FROMpub_emp;344查看同义词查看DBA_SYNONYMS,ALL_SYNONYMS,USER_SYNONYMS视图都能看到与同义词相关的信息。使用SELECT命令和DESC均可查看同义词的信息。【例5.20】引用SCOTT方案下对象的公有同义词。SQLSELECT*FROMALL_SYNONYMSWHERETABLE_OWNER=SCOTT;SQLDESCD

186、BA_SYNONYMS;【例5.21】查看emp表的同义词信息。SQLSELECT*FROMDBA_SYNONYMSWHERETABLE_NAME=EMP;345删除同义词只有数据库管理员,或者拥有DROPPUBLICSYNONYM系统权限的用户,才可以删除PUBLIC同义词。要删除私有同义词,用户必须拥有这个同义词,或者具有DROPANYSYNONYM系统权限。语法格式:DROPPUBLICSYNONYMschema.Synonym_Name;【例5.22】删除同义词sy_emp。SQLDROPSYNONYMsy_emp;346实训6实训项目:创建公有同义词、管理同义词。实训内容与步骤:(P

187、156)1.创建Employee,Ealuation,AttENDanceInfo,Department表的公有同义词。2.查看EMPLOYEE表的公有同义词3.删除同义词348序列序列是序列是OracleOracle提供的以有序的方式生成唯一整数值的数提供的以有序的方式生成唯一整数值的数据库对象。按升序或降序生成,常用作表的主键或唯一键。据库对象。按升序或降序生成,常用作表的主键或唯一键。序列是一个数据库对象,序列建立后,或者连续增加,序列是一个数据库对象,序列建立后,或者连续增加,或者连续减少,直到达到指定的最大值或最小值为止。序列或者连续减少,直到达到指定的最大值或最小值为止。序列可以是

188、循环的。当一个序列第可以是循环的。当一个序列第1 1次被查询调用时,它将返回次被查询调用时,它将返回一个预定值,在随后的每一次查询中,序列将产生一个按其一个预定值,在随后的每一次查询中,序列将产生一个按其指定的增量增长的值。可以是正增长,也可以是负增长。序指定的增量增长的值。可以是正增长,也可以是负增长。序列产生的数字最大长度可达到列产生的数字最大长度可达到3838位十进制数。位十进制数。序列不占用实际的存储空间,在数据字典中只存储序列序列不占用实际的存储空间,在数据字典中只存储序列的定义描述。的定义描述。349任务7任务7:建立序列。创建序列语法格式:CREATESEQUENCEschema

189、.sequence_nameINCREMENTBYintegerSTARTWITHintegerMAXVALUEinteger|NOMAXVALUEMINVALUEinteger|NOMINVALUECYCLE|NOCYCLECACHE|NOCACHEORDER|NOORDER;350创建序列【例5.23】创建一个序列。SQLCREATESEQUENCEno_seqINCREMENTby1STARTWITH1MAXVALUE100NOMINVALUENOCYCLENOCACHE;【例5.24】验证序列是否已经创建。SQLSELECTSEQUENCE_NAME,MIN_VALUE,MAX_VAL

190、UE,INCREMENT_BY,LAST_NUMBERFROMSEQ;351实训7实训项目:创建序列。实训内容与步骤:(P157)1.创建一个初始值为1000,增量为10,直到该序列达到1100,然后重新从1000开始的递增序列Employees_seq。2.修改序列Employee_seq的增量为20,并且设置最大值为10000。3.删除序列。353任务8任务8:使用序列为表插入数据。使用序列使用序列是指是使用序列的下列两个属性(也叫伪列):NEXTVAL:返回序列的当前值。CURRVAL:返回序列的下一个值。在检索序列的当前值之前,必须通过检索序列的下一个值对其进行初始化,例如利用下面的语

191、句:SQLSELECTno_seq.nextvalFROMdual;NEXTVAL-1初始化之后,就可使用currval来获取当前值。SQLSELECTno_seq.currvalFROMdual;CURRVAL-1354使用序列序列可以用于以下情况:查询的选择列表;INSERT语句里的子查询;INSERT语句的VALUES子句;UPDATE语句的SET子句;序列不能用于以下情况:视图的选择列表;在SELECT语句中使用DISTINCT关键字;在SELECT语句中使用GROUPBY、HAVING或ORDERBY子句;SELECT、DELETE或UPDATE语句的子查询;CREATETABLE或

192、ALTERTABLE语句的DEFAULT表达式。355使用序列【例5.25】为主键指定序列编号。步骤方法:创建表、创建序列、创建触发器、插入数据,最后进行测试。(1)创建表SQLCREATEtableDisney(idnumberprimarykey,datavarchar2(10);(2)创建序列SQLCREATEsequenceid_seq;356使用序列(3)创建触发器SQLCREATEorreplacetriggerbifer_disney_id_pkbeFOReinsertonDisneyFOReachrowBEGINSELECTid_seq.nextvalinto:new.idFR

193、OMdual;END;/(4)插入数据SQLINSERTINTODisney(data)VALUES(Tom);SQLINSERTINTODisney(id,data)VALUES(6,Jerry);(5)测试SQLSELECT*FROMDisney;IDDATA-1Tom2Jerry357修改序列语法格式:ALTERSEQUENCEschema.sequence_nameINCREMENTBYintegerSTARTWITHintegerMAXVALUEinteger|NOMAXVALUEMINVALUEinteger|NOMINVALUECYCLE|NOCYCLECACHE|NOCACHE

194、;【例5.26】将MAXVALUE改为500。SQLALTERSEQUENCEno_SeqMAXVALUE500;358删除序列使用DROPSEQUENCE命令从数据字典里撤消序列。语法格式:DROPSEQUENCEsequence_name;【例5.27】删除序列no_Seq。SQLDROPSEQUENCEno_Seq;359实训8实训项目:使用序列插入数据。实训内容与步骤:1.说明每一个表中的唯一字段。(P156)2.使用序列。通过访问NEXTVAL和CURRVAL伪列实现.NEXTVAL伪列返回序列的下一个值,CURRVAL伪列返回序列的当前值。(P158)谢 谢 !n361大型数据库管

195、理系统Oracle应用开发362363第六章数据查询学习目标q目标1:了解SQL语言,掌握SQL语言分类、运算符与表达式q目标2:掌握各种函数的用法。q目标3:掌握SELECT基本查询。q目标4:掌握SELECT分组查询。q目标5:掌握SELECT多表连接查询。q目标6:掌握单行子查询。q目标7:掌握多行子查询。q目标8:掌握多列子查询。q目标9:掌握相关子查询。q目标10:掌握嵌套子查询。学习任务q任务1:认识SQL语言及其分类q任务2:使用函数q任务3:查询雇员基本信息q任务4:根据部门分组查询雇员信息q任务5:通过连接查询获得雇员详细信息q任务6:使用单行子查询查找雇员信息q任务7:使用

196、多行子查询查找员工信息q任务8:使用多列子查询查找雇员信息q任务9:使用相关子查询查找员工信息q任务10:使用嵌套子查询查找工资信息本章内容1 . SQL语言基础2 . SQL函数3. 数据基本查询4. 运用子查询 6.1SQL语言基础6.1.1 SQL6.1.1 SQL语言简介语言简介6.1.2 SQL6.1.2 SQL语言分类语言分类6.1.3 SQL6.1.3 SQL运算符与表达式运算符与表达式368任务1任务任务1.1.认识认识SQLSQL语言及其分类语言及其分类。3696.1.1SQL语言简介qSQL(Structured Query Language,结构化查询语言) SQL是用于

197、访问和处理数据库的标准语言。是所有RDBMS (Relational Database Management Systems)使用的公共语言。如Access、Sybase、SQL Server、Informix、DB2等。SQL正式成为数据库领域的一个主流语言。3706.1.3SQL运算符与表达式SQLSQL语言中包括的运算符与表达式主要有:算术语言中包括的运算符与表达式主要有:算术运算符、比较运算符、逻辑运算符、集合运算符运算符、比较运算符、逻辑运算符、集合运算符和连接运算符等。和连接运算符等。 1. 1. 算术运算符算术运算符 2. 比较运算符3. 3. 逻辑运算符逻辑运算符4. 4. 集

198、合运算符集合运算符5. 5. 连接运算符连接运算符算术运算符1 算术运算符主要用来进行加、减、乘、除等算术运算。SQL中常用的算术运算符有:+、-、*、/等。 371运算符描 述+加法运算符-减法运算符*乘法运算符/除法运算符()确定运算先后次序比较运算符2SQL中常用的比较操作符有:=、!=、=。如表6-2所示。372运算符描 述=、!=、=IN 、 NOT IN属于集合的任一成员、不属于集合的任一成员BETWEEN a AND b在a和b之间,包括a和bNOT BETWEEN a AND b不在a和b之间,也不包括a和bLIKE _%string_%包括在指定子串内,百分号字符(%)将匹配

199、零个或多个任意字符,下划线(_)将匹配一个任意字符逻辑运算符3SQL语言中常用的逻辑操作符有:AND、 OR 、 NOT 373ABA AND BA OR BNOT(A)00001010111001011110集合运算符4集合运算符又称为谓词运算符。常用的集合运算符374运算符描 述UNION返回两个查询的所有行,但去掉重复行UNION ALL 返回两个查询的所有行,保留所有重复行INTERSECT 返回同时出现在两个查询结果中的所有行MINUS从第一个查询返回的行中减去第二个查询返回的行综合运用1q在scott用户下,创建表emp2,该表只包含emp中20部门员工的信息。 【例6.1】验证U

200、NION。【例6.2】验证UNION ALL。createtableemp2asselect*fromempwheredeptno=20;select*fromempUNIONALLselect*fromemp2;select*fromempUNIONselect*fromemp2;综合运用2【例6.3】验证INTERSECT。【例6.4】验证MINUS。select*fromempINTERSECTselect*fromemp2;select*fromempMINUSselect*fromemp2;连接运算符5连接运算符是由两个竖起来的线条组成。如“|”。它用来将两个字符串连接起来,形成一个

201、新的字符串。【例6.5】执行下面语句,系统将完整显示今天的日期。执行结果为今天是|SYSDATE-今天是26-7月 -11377select今天是|sysdatefromdual;练习11、下列哪一个是并操作运算符?A. INTERSECT B. UNIONC. UNION ALL D. MINUS答案:BC2、下列哪一个是交集运算符?A.INTERSECT B.UNIONC.SET D.MINUS答案:A378实训1实训目的: 掌握使用脚本命令创建表的方法。 掌握使用脚本命令插入数据的方法。 掌握创建脚本保存实验数据的方法。实训内容:指导:创建3个表,即employee(雇员信息)表、dep

202、artment(部门信息)表和evaluation(绩效信息)表。提示:createtableemployee()379380任务任务2 2:使用函数:使用函数任务23816.2SQL函数6.2.16.2.1字符函数字符函数6.2.26.2.2数值函数数值函数6.2.36.2.3日期函数日期函数6.2.46.2.4转换函数转换函数6.2.5 6.2.5 空值函数空值函数6.2.66.2.6分组函数分组函数6.2.76.2.7分析函数分析函数6.2.1字符函数1字符函数用于对字符串进行处理,返回字符或数值。SQL中的字符处理函数有二十多个(P163)q【例6.6】求字符串student的长度。q

203、【例6.7】连接两个字符串。q【例6.8】以大写方式显示字符串。382selectlength(student)fromdual;selectconcat(MY,BOOK)fromdual;selectupper(daniel)fromdual;6.2.1字符函数2q【例6.9】 将字符串的首字母以大写方式显示。q【例6.10】在字符串的左侧填充指定个数的指定字符。q【例6.11】从左侧删除输入串的字符。q【例6.12】按字符翻译。383selectinitcap(marks)fromdual;selectlpad(THISISMYORACLE,20,XY)fromdual;selectlpa

204、d(30000,7,$)fromdual;selectltrim(DANIELTHOMSON,DANIEL)fromdual;selecttranslate(jack,abcd,1234)fromdual;6.2.2数学函数数值函数只接受和显示数字值。384函 数 名说 明ABS(x)返回x的绝对值,结果恒为正CEIL(x)返回大于或等于x的最小整数值FLOOR(x)返回小于或等于x的最大整数值POWER(x,y)返回x的y次幂MOD(x,y)返回x除以y的余数,若y=0,则返回xROUND(x,y)四舍五入。结果近似到y指定的小数位TRUNC(x,y)只舍不入。y0,结果为y位小数;y=0,

205、结果为整数;y=3000;6.2.7分析函数q1.ROW_NUMBER:排序行号q2.RANK (排名,跳跃式)q3. DENSE_RANK(排名,密集式)selectdeptno,ename,empno,row_number()over(partitionbydeptnoorderbyempno)asempno_rankfromempwheredeptno1000;401实训4实训目的:实训目的: 掌握分组查询的使用实训内容:实训内容:1.查询各部门受到惩罚情况的信息,按罚款金额降序排列2.查询各部门受到奖励情况的信息,按奖励金额降序排列402任务任务5 5:通过连接查询获得雇员详细信息:通

206、过连接查询获得雇员详细信息。任务54036.3.3多表连接查询1从两个或多个表中获取数据,使用连接查询。q1交叉连接(很少用)【例6.48】SQL select * from emp,dept; q2内连接q(1)相等内连接q(2)非等内连接q(3)自连接q3外连接4046.3.3多表连接查询2从两个或多个表中获取数据,使用连接查询。2内连接q(1)等连接(用“=”)q【例6.49】查询相同部门的员工信息和部门信息。q(2)非等连接(等号以外的)select*fromempe,deptdwheree.deptno=d.deptno;selectempno,sal,s.*fromempe,sal

207、gradeswheresalbetweens.losalands.hisal;4056.3.3多表连接查询3从两个或多个表中获取数据,使用连接查询。q3外连接q(1)左外连接(左侧表全部显示)q(2)右外连接(右侧表全部显示)q(3)全外连接(两个表全显示)select*fromempeleftjoindeptdone.deptno=d.deptno;406实训5实验目的:实验目的: 掌握连接查询实验内容:实验内容:1、查询雇员信息和雇员所在的部门名称。(编号 、雇员姓名 、性别 、年龄 、雇佣日期 、部门 职位 、状态 联系电话 )2、查询部门名称,部门受奖励的所有信息407任务任务6 6:

208、使用单行子查询查找雇员信息。:使用单行子查询查找雇员信息。任务64086.4运用子查询6.4.1单行子查询6.4.2多行子查询6.4.3多列子查询6.4.4相关子查询6.4.5嵌套子查询4096.4.1单行子查询在单行子查询中,只返回单行单列值【例6.55】查找与7369雇员号在同一个部门的所有职员信息。包括雇员号、雇员姓名、职位、薪金和雇佣日期。 q【例6.56】查找所有工资高于公司平均工资的人。selectdeptno,empno,ename,job,sal,hiredatefromempwheredeptno=(selectdeptnofromempwhereempno=7369);se

209、lect*fromempwheresal(selectavg(sal)fromemp);410实训6实训目的:实训目的: 掌握子查询子查询的使用实训指导:实训指导:2,3,5 (P186)练习:1、查询雇员工资大于公司平均工资的雇员名。2、查询最低工资的雇员名称。selectename,salfromempwheresal(selectavg(sal)fromemp);selectename,salfromempwheresal=(selectmin(sal)fromemp);411任务任务7 7:使用多行子查询查找员工信息。:使用多行子查询查找员工信息。任务74126.4.2多行子查询11、

210、IN表示与子查询返回值中的某一个值相等2、ANY表示与子查询返回的任何一个值比较3、ALL表示与子查询返回值的所有值比较。4136.4.2多行子查询2【例6.57】查询所有在任职职位上工资最高的员工【例6.58】查询比20部门某个员工工资高的员工信息。【例6.59】查询比20部门所有员工工资高的员工信息。selectempno,ename,job,salfromempwheresalin(selectmax(sal)fromempgroupbyjob);selectempno,ename,salfromempwheresalANY(selectsalfromempwheredeptno=20)

211、;SQLselectempno,ename,salfromempwheresalALL(selectsalfromempwheredeptno=20);414实训7实训目的:实训目的: 掌握多行子查询的使用实训内容:实训内容:实训指导:2,3,5练习:1.查询各部门的罚款信息,包括部门号,罚金总额并排序。evaluation 表2.查询各部门的奖赏信息,包括部门号,奖金总额并排序。415任务任务8 8:使用多列子查询查找雇员信息。:使用多列子查询查找雇员信息。任务84166.4.3多列子查询1q(1)单行多列子查询 指子查询返回一行数据,但是包含多列数据。多列数据进行比较时,可以同时进行匹配,

212、也可以非同时进行匹配。【例6.60】查询与7521号雇员的工资、工种都相同的雇员信息。 selectempno,ename,sal,jobfromempwhere(sal,job)=(selectsal,jobfromempwhereempno=7521);4176.4.3多列子查询2q(2)多行多列子查询指子查询返回多行数据,并且是多列数据。【例6.61】查询与10部门某个雇员的工资、工种都相同的雇员信息。selectempno,ename,sal,jobfromempwhere(sal,job)in(selectsal,jobfromempwheredeptno=10);418实训8实训目

213、的:实训目的: 掌握单行多列子查询、多行多列子查询 实训内容:实训内容:1.查询与7521号雇员的工资、工种都相同的雇员信息。2.查询与10部门某个雇员的工资、工种都相同的雇员信息。419任务任务9 9:使用相关子查询查找员工信息:使用相关子查询查找员工信息。任务94206.4.4相关子查询子查询在执行时需要引用外部父查询的信息【例6.62】查找所有工资高于自己本部门平均工资的员工。 【例6.63】显示每个部门的信息和人员数量。select*fromempewheresal(selectavg(sal)fromempwheredeptno=e.deptno);selectd.*,(select

214、count(*)fromempwheredeptno=d.deptno)totfromdeptd;421实训9实训目的:实训目的: 掌握子查询的使用。实训内容:实训内容:1.查找所有工资高于自己本部门平均工资的员工。2.显示每个部门的信息和人员数量。思路:查询获得所有的部门信息,每获得一个部门,就查询该部门的人数,保存为一个新的列。422任务任务1010:使用嵌套子查询查找工资信息。:使用嵌套子查询查找工资信息。任务104236.4.5嵌套子查询在查询内部可以嵌套查询,嵌套层次最多为255。【例6.64】查询比部门(10部门除外)最高平均工资高的部门和平均工资。 任务分解:1、2、3、sele

215、ctdeptnofromdeptwheredeptno10;selectmax(avg(sal)fromempwheredeptnoin(20,30,40)groupbydeptno;selectdeptno,avg(sal)fromempgroupbydeptnohavingavg(sal)2145.83334;424实训10分页查询员工信息:每页5条数据 ,请查询第二页应该显示的员工任务分解:1、首先选取所有的员工2、设置1的别名为b,查询需要的条数:3、设置2的别名为 t,从t表中找出需要的记录数。select*fromemporderbyempnodescselect*from(sel

216、ectb.*,rownumrfrom(select*fromemporderbyempnodesc)bwhererownum5;selectb.*,rownumrfrom(select*fromemporderbyempnodesc)bwhererownum10知识点小结q灵活使用各种函数,包括字符函数、属性函数、日期函数、转换函数、分组函数、分析函数进行运算等。q灵活掌握各种查询。很多查询可以达到到同样的结果,请灵活掌握和选择。425谢 谢 !426大型数据库管理系统Oracle应用开发427428第七章PLSQL编程基础学习目标学习目标q目标1: 了解PL/SQL语言的特点,执行过程与块组

217、成部分。q目标2: 掌握各种类型的常量和变量用法。q目标3: 掌握各种不同的PL/SQL数据类型。q目标4: 掌握条件控制语句的编写方法。q目标5: 掌握循环控制语句的编写方法。q目标6: 掌握动态SQL语句的适用情境及编写方法。q目标7: 掌握游标的分类以及显式游标的工作原理与操作过程。q目标8: 掌握带参数游标的编写方法。q目标9:掌握使用游标更新或删除当前行数据的编写方法。q目标10: 掌握循环游标的工作原理与编写方法。q目标11: 掌握调用系统预定义异常的方法。q目标12: 掌握编写及调用自定义异常的方法。学习任务学习任务q任务1: 认识和了解PL/SQL语言的特点,执行过程与块组成部

218、分。q任务2: 定义基本类型的常量、变量和定义属性类型的变量。q任务3: 应用PL/SQL支持的Oracle数据类型进行变量声明和编程。q任务4: 通过条件控制语句为不同部门的员工增加工资。q任务5: 通过循环控制语句依次输出1到5之间的立方数。q任务6: 通过动态SQL语句创建表和以雇员号作为参数查询。q任务7: 通过游标查询每个雇员的薪水。q任务8: 通过带参数的游标分别统计不同部门员工的薪水。q任务9: 通过游标为EMP表中某个部门的员工提高10%的薪水。q任务10:通过循环游标分别统计不同部门员工的薪水。q任务11:通过预定义异常程序处理系统出现的预定义异常。q任务12:通过自定义异常

219、程序解决违反业务规则等异常。7.PL/SQL编程基础编程基础q1.PL/SQL概述q2.常量和变量q3.PL/SQL数据类型q4.程序控制语句q5.动态SQL语句q6.游标q7.异常处理432任务1任务1.认识和了解PL/SQL语言的特点,执行过程与块组成部分。 7.1PL/SQL概述概述q7.1.1 PL/SQL7.1.1 PL/SQL的特点的特点q7.1.2 PL/SQL7.1.2 PL/SQL的执行过程的执行过程q7.1.3 PL/SQL7.1.3 PL/SQL块简介块简介完整的PL/SQL语句块PL/SQL程序是按照块结构进行划分q块是PL/SQL程序的基本单位DECLAREv_nam

220、evarchar2(30):=linping;-定义用户名定义用户名称称BEGIN-将用户的姓名和年龄插入到将用户的姓名和年龄插入到emp表中表中insertintoemp(empno,ename)values(100,v_name);Exception/*当出现异常时的处理当出现异常时的处理*/WhenothersthenDBMS_OUTPUT.PUT_LINE(插入数据失败插入数据失败);END;Declare用于声明变量、游标用于声明变量、游标表示程序的开始表示程序的开始Exception表示异常表示异常End表示程序结束表示程序结束7.1.1PL/SQL的特点的特点qPL/SQL是一种

221、可移植的高性能事务处理语言,它支持SQL和面向对象编程,提供了良好的性能和高效的处理能力。其特点包括以下几方面:q1支持SQLq2可移植性q3高性能q4与SQL紧密集成q5安全性强7.1.2PL/SQL的执行过程的执行过程qPL/SQL引擎用来编译和执行PL/SQL块或子程序,但PL/SQL引擎仅执行过程语句,而将SQL语句发送给Oracle服务器上的SQL语句执行器,由SQL语句执行器执行这些SQL语句。其执行过程如图7-1所示。 7.1.3PL/SQL块简介块简介q完整的 PL/SQL 程序块包含三个基本部分:声明部分、执行部分和异常处理部分 q1声明部分q2执行部分q3异常处理部分实训实

222、训1q1、简述PL/SQL引擎功能。q2、简述完整的PL/SQL程序块包含哪三个基本部分。n439任务2.定义基本类型的常量、变量和定义属性类型的变量。 任务24407.2常量和变量q7.2.1 7.2.1 变量和常量的定义变量和常量的定义q7.2.2 7.2.2 变量和常量的命名规则变量和常量的命名规则q7.2.2 7.2.2 使用使用TYPETYPE和和ROWTYPEROWTYPE定义属性变量定义属性变量7.2.1变量和常量的定义变量和常量的定义q声明q使用declare关键字q用于定义变量或者常量DECLAREvariable_nameCONSTANTtypeNOTNULL:=value

223、;声明声明变量名称变量名称是否为常量是否为常量变量的数据变量的数据类型类型是否为空是否为空变量初始化变量初始化DECLAREvariable_nameCONSTANTtypeNOTNULL:=value;声明声明变量名称变量名称是否为常量是否为常量是否为空是否为空变量初始化变量初始化q变量命名规则q变量名首字母必须是英文字母,其后可以是字母、数字或者特殊字符$、#和下划线q变量名长度不超过30个字符q变量名中不能有空格v_numflaga123_123$123anum错误的命名错误的命名符合命名规则符合命名规则7.2.2变量和常量的命名规则变量和常量的命名规则4437.2.3TYPE和和ROW

224、TYPE定义变量定义变量q属性类型有如下两种:TYPE和ROWTYPE。可以使用TYPE和ROWTYPE来声明属性变量,而不必为其指定特定的数据类型。 q %TYPE:引用变量和数据表字段的数据类型 q %ROWTYPE:表示表、视图或游标的完整一行的记录类型。 如:empcodeemp.empno%type;emp_exemp%ROWTYPE;q1.声明%TYPE类型的变量时,服务器将会做什么操作?()A.为该变量检索数据表中列的数据类型B.复制一个变量C.检索数据库中的数据D.为该变量检索列的数据类型和值答案:A实训实训2445任务3.应用PL/SQL支持的Oracle数据类型进行变量声明

225、和编程。任务34467.3PL/SQL数据类型q7.3.1标量类型标量类型q7.3.2复合类型复合类型q7.3.3引用类型引用类型q7.3.4LOB类型类型4477.3.1标量类型q(1)字符类型)字符类型数 据 类 型SQL类型PL/SQL类型CHAR1.20001.32767LONG1.2GB1.32760LONG RAW1.2GB1.32760RAW1.20001.32767VARCHAR21.40001.327674487.3.1标量类型q(2)数字类型qDECIMAL :最高精度为38位的十进制数字。qFLOAT :最高精度为126位的二进制数字的浮点数qINTEGER:最高精度为3

226、8位的十进制数字的整数。qREAL :最高精度为63位的二进制数字的浮点数。q(3)日期类型q存储日期和时间数据。常用的两种日期时间类型为DATE和TIMESTAMP。q(4)布尔类型qTRUE、 FALSE 、NULL4497.3.2复合类型1q在PL/SQL中主要有三种复合类型,即记录、表索引和数组。q(1)记录类型q定义q使用typeemp_record_typeisrecord(v_enameemp.ename%type,v_jobemp.job%type,v_salemp.sal%type);emp_recemp_record_type;selectename,job,salinto

227、emp_recfromempdbms_output.put_line(emp_rec.v_ename|:|emp_rec.v_sal);4507.3.2复合类型2(2)PL/SQL表索引定义 TYPE ename_table_type IS TABLE OF emp.ename%TYPEINDEX BY BINARY_INTEGER;Ename_table ename_table_type;q(3) 数组TYPE IS VARRAY ()OF ; ;4517.3.3引用类型q引用类型的变量包括游标变量和对象引用类型。即REF CURSOR和REF object_type。4527.3.4LOB

228、类型qLOB类型包括BLOB、CLOB、NCLOB和BFILE四种类型。用来存储大对象。453实训3q实训7.1 编写PL/SQL块(P217)q目的和要求掌握PL/SQL块语句及语法规则掌握PL/SQL数据类型q实训内容q指导:编写PL/SQL块,根据输入的部门编号统计部门内的员工总人数。q练习:编写PL/SQL块,使用SQLPlus替代变量输入部门号,删除该部门的信息,并处理可能出现的错误。(使用SCOTT用户的EMP表)454任务4.通过条件控制语句为不同部门的员工增加工资。任务44557.4程序控制语句PL/SQL与其他高级编程语句类似,PL/SQL提供NULL语句,赋值语句,条件控制

229、语句和循环控制语句。q7.4.1 NULL语句q7.4.2赋值语句q7.4.3条件控制语句q7.4.4循环控制语句4567.4程序控制语句q7.4.1 NULL语句NULL语句不做任何动作,较少使用,一般用来增加程序的可读性。其语法为:null;q7.4.2赋值语句赋值语句语法为::= ;v_job varchar2(10) :=CLERK; 4577.4.3条件控制语句条件控制用于根据条件执行一系列语句,包括IF语句和CASE语 句 。 IF语 句 有 三 种 形 式 : IF.THEN、IF.THEN.ELSE、IF.THEN.ELSIF。q1IF.THEN q2IF.THEN.ELSE

230、q3IF.THEN.ELSIF q4CASE语句(1)带选择器按值比较的CASE语句(2)不带选择器按条件比较的CASE语句7.4.3条件控制语句q条件结构qIF-THEN语句qIF-THEN-ELSE语句IFconditionTHENStatementsENDIF;IFconditionTHENStatements1ELSEStatements2ENDIF;7.4.3条件控制语句q条件结构qIF-THEN-ELSIF语句IFcondition1THENStatements1ELSIFcondition2THENStatements2ELSEStatements3ENDIF;注意是注意是ELS

231、IF而不而不是是ELSEIF4607.4.3条件控制语句【例7.6】通过IF条件控制语句为不同部门的员工增加工资。empcode emp.empno%type;IF v_deptno =10 THENUPDATE emp SET sal=v_sal+100 WHERE empno= v_empno;ELSIF v_deptno =20 THEN UPDATE emp SET sal=v_sal+200 WHERE empno= v_empno;ELSEUPDATE emp SET sal=v_sal+300 WHERE empno= v_empno;END IF;7.4.3条件控制语句qCAS

232、E语句q在Oracle9i后引入CASEvariableWHENvalue1THENstatements1;WHENvalue2THENstatements2;WHENvaluenTHENstatementsn;ELSEelse_statements;ENDCASE;依据依据variable表达式,选择相应的表达式,选择相应的when子句执行子句执行7.4.3条件控制语句DECLAREgradechar:=A;remarkvarchar2(20);BEGINCASEgradeWHENATHENremark:=isExcellent;WHENBTHENremark:=isGood;WHENCTH

233、ENremark:=isNormal;WHENDTHENremark:=isBad;ELSEremark:=bigProblem;ENDCASE;END;定义变量定义变量进行条件判断进行条件判断默认执行语句默认执行语句q根据评分结果输出评价463实训4q实训7.2 编写PL/SQL块(P217)q目的和要求q 掌握条件分支语句。q 掌握CASE 语句。实训内容q指导:编写PL/SQL 块,用以接受雇员的雇员号(empno)。如果雇员在公司工作时间满15年,则增加1000元的薪水。如果工作时间在10年到15年之间,则增加500元的薪水。如果工作时间少于10年,则增加200元的薪水。q练习:编写P

234、L/SQL 块,使用CASE 语句更新相应部门的员工补贴。部门10补贴100,部门20补贴80,部门30补贴50,40补贴30。(使用SCOTT用户的emp表,补贴字段名称为“comm”)464任务5.通过循环控制语句依次输出1到5之间的立方数。任务54657.4.4循环控制语句循环控制语句,用于重复执行一系列语句。循环控制包括LOOP和EXIT语句,使用EXIT语句表示立即退出循环,使用EXIT WHEN语句可以根据条件结束循环。循环结构共有三种类型,分别是LOOP循环、WHILE循环和FOR循环。q1LOOP循环q 2WHILE循环 q 3FOR循环7.4.4循环控制语句q循环结构qLOO

235、P循环q使用LOOP循环依次输出1到5之间的立方数。LOOPstatements;ENDLOOP;DECLAREv_countnumber:=1;BEGINLOOPDbms_output.put_line(i|的的立方为立方为|i*i*i);v_count:=v_count+1;IFv_count=5THENEXIT;ENDIF;ENDLOOP;END;定义变量定义变量循环执行循环执行+1操作操作当变量大于等于当变量大于等于5退出循环退出循环7.4.4循环控制语句q循环结构qWHILE-LOOP循环q类似于while循环qFOR-LOOP循环q类似与for循环While条件条件LOOPstat

236、ements;ENDLOOP;FORloop_countINREVERSElower_bound.height_boundLOOPstatements;ENDLOOP;循环变量循环变量循环次数最小值循环次数最小值循环次数最大值循环次数最大值468LOOP示例【例例7.8】使用使用LOOP循环依次输出循环依次输出1到到5之间的立方数。之间的立方数。DECLAREinumber:=1;BEGINLOOPDbms_output.put_line(i|的立方为的立方为|i*i*i);i:=i+1;EXITWHENi5;ENDLOOP;END;执行结果为执行结果为1的立方为的立方为12的立方为的立方为8

237、3的立方为的立方为274的立方为的立方为645的立方为的立方为125469WHILE示例【例例7.9】使用使用WHILE循环依次输出循环依次输出1到到5之间的立方数。之间的立方数。DECLAREinumber:=1;BEGINWHILEi=5LOOPDbms_output.put_line(i|的立方为的立方为|i*i*i);i:=i+1;ENDLOOP;END;/执行结果为执行结果为1的立方为的立方为12的立方为的立方为83的立方为的立方为274的立方为的立方为645的立方为的立方为125470FOR实例【例例7.10】使用使用FOR循环依次输出循环依次输出1到到5之间的立方数。之间的立方数

238、。DECLAREinumber:=1;BEGINFORiin1.5LOOPDbms_output.put_line(i|的立方为的立方为|i*i*i);ENDLOOP;END;执行结果为执行结果为1的立方为的立方为12的立方为的立方为83的立方为的立方为274的立方为的立方为645的立方为的立方为125471实训5q实训7.3 循环控制结构(P218)q目的和要求掌握基本循环语句掌握WHILE循环语句掌握FOR循环语句q指导:使用FOR循环语句,输出一个实心三角形。q练习:分别使用三种循环方式,计算6的阶乘。*472任务6.通过动态SQL语句创建表和以雇员号作为参数查询。任务6动态动态SQLq

239、什么是动态SQLq编译期间SQL语句是不确定的,并且在运行时允许发生变化q动态SQL应用场合q要执行一个DDL语句时q需要增加程序的灵活性时q使用包DBMS_SQL动态执行SQL语句时动态动态SQL的执行的执行qEXECUTEIMMEDIATE语句qdynamic_sql:表示一个SQL语句或者一个PL/SQL语句块的字符串表达式q执行DDL语句EXCEUTEIMMEDIATEdynamic_sql;BEGINEXECUTEIMMEDIATEcreatetabletemp_table|(idinteger,namevarchar2(20);END;执行建表语句执行建表语句动态动态SQL的执行的

240、执行q绑定变量q通过占位符绑定参数q参数类型可以是集合、对象等q不支持PL/SQL定义的类型DECLAREplsqlvarchar2(200);t_namevarchar2(20):=John;t_idinteger:=1002;BEGINplsql:=insertintotemp_tablevalues(:1,:2);EXECUTEIMMEDIATEplsqlusingt_id,t_name;END;占位符占位符实际值代替占位符实际值代替占位符476实训6P219 实训7.5 动态sql语句q目的和要求掌握动态SQL语句的用法。q实训内容练习:使用动态SQL语句编写一个PL/SQL程序,用户

241、通过键盘根据程序提示交互式输入“部门编号”,“部门名称”和“部门地址”字段值的信息,程序自动将其插入到SCOTT.DEPT表中。477任务7.通过游标查询每个雇员的薪水。任务74787.6游标PL/SQL中的游标分为两类:隐式游标和显式游标。对于数据操纵语句和返回单行数据的查询语句来说,Oracle会自动为它们分配隐式游标,为了处理查询语句返回多行数据的情况,必须使用显式游标。q7.6.1 隐式游标q7.6.2 显式游标q7.6.3 循环游标q7.6.4游标变量什么是游标什么是游标q游标(CURSOR)q用来处理使用select语句从数据库中检索到的多行记录的工具q游标的分类q显示游标q返回多

242、条记录时,使用显示游标逐行读取q隐式游标qPL/SQL自动为DML语句创建隐式游标,包含一条返回记录游标的属性游标的属性q游标的属性属性名称说 明%found用于检验游标是否成功,通常在FETCH语句前使用,当游标按照条件查询出一条记录时,返回true%isopen判断游标是否处于打开状态,试图打开一个已经打开或者已经关闭的游标,将会出现错误%notfound与%found的作用相反,当按照条件无法查询到记录时,返回true%rowcount循环执行游标读取数据时,返回检索出的记录数据的行数游标的使用游标的使用q游标的声明qCURSOR:用于声明一个游标qparameter:可选参数,用于指定

243、参数类型、模式等qreturn:可选,指定游标的返回类型qselectsql:需要处理的select语句,不能含INTO子句CURSORcursor_name(parameter,parameter)RETURNreturn_typeISselectsql游标的使用游标的使用q打开游标q使用OPEN语句开启一个游标q提取游标q使用FETCH语句实现对游标内容的读取qvariable_list必须与从游标提取的结果集类型相同opencursor_nameFETCHcursor_nameINTOvariable_list游标的使用游标的使用q关闭游标q使用CLOSE语句关闭一个游标q关闭游标后,所

244、有资源都将被释放,且不能再次被打开closecursor_name游标的使用游标的使用DECLAREv_enameemp.ename%TYPE;v_salemp.sal%TYPE;CURSORc_empisSELECTename,salfromemp;BEGIN-打开游标打开游标OPENc_emp;-判断游标是否返回记录判断游标是否返回记录ifc_emp%NOTFOUNDTHENdbms_output.put_line(没有找到相应的记录没有找到相应的记录);else-从游标中读取记录从游标中读取记录fetchc_empintov_ename,v_sal;dbms_output.put_lin

245、e(v_ename|:|v_sal);endif;CLOSEc_emp;END;声明游标,将查询结声明游标,将查询结果保存在该游标中果保存在该游标中开打游标开打游标判断游标中是否判断游标中是否取得数据取得数据读取游标数据读取游标数据关闭游标关闭游标485实训7P219 实训7.4 游标q目的和要求掌握游标的定义和使用。q实训内容指导:利用循环游标和记录变量,把雇员表EMP的记录提取出来,并逐行显示。(使用SCOTT用户的EMP表)486任务8.通过带参数的游标分别统计不同部门员工的薪水。任务83带参数的游标q游标的声明qCURSOR:用于声明一个游标qparameter:可选参数,用于指定参数

246、类型、模式等qreturn:可选,指定游标的返回类型qselectsql:需要处理的select语句,不能含INTO子句CURSORcursor_name(parameter,parameter)RETURNreturn_typeISselectsqlCURSORcursor_name(parameter,parameter)RETURNreturn_typeISselectsql4884使用游标更新或删除当前行数据当当程程序序从从游游标标结结果果集集中中取取出出单单行行数数据据时时,它它访访问问的的是是游游标标的的当当前前行行。如如果果处处理理过过程程中中删删除除或或更更新新数数据据库库中中

247、的的数数据据,需需要要在在游游标标定定义义中中使使用用FORUPDATE子子句句,对对要要修修改改或或删删除除的的数数据据加加行行级级锁锁。在在执执行行时时,需需要要在在UPDATE或或DELETE语语句句的的WHERE条条件件中中使使用用特特殊殊的的CURRENTOF子子句句,以以修修改改或或删删除除游游标标当当前前行行对对应应的数据库中的数据。的数据库中的数据。489任务9.通过游标为EMP表中某个部门的员工提高10%的薪水。任务94907.6.3循环游标游游标标FOR循循环环是是编编写写显显式式游游标标循循环环的的一一种种最最容容易易的的方方法法。可可以以简简化化显显式式游游标标的的处处

248、理理代代码码,循循环环开开始始时时,每每次次循循环环迭迭代代都都取取出出一一行行,置置入入记记录录中中。当当循循环环结结束束时时,游游标标自自动动关关闭闭。游游标标FOR循循环环的的所所有有动动作作都都是是自自动动完完成成的。语法如下:的。语法如下:FORrecord_nameIN(corsor_name(parameter,parameter.)|(query_definition)LOOPstatementsENDLOOP;其其中中:corsor_name是是显显式式声声明明的的游游标标名名,record_name是是循循环环中中隐隐式式声声明明的的记记录录名名,此此变变量量的的属属性性声

249、声明明为为%ROWTYPE类类型型,作作用域在用域在FOR循环之内,循环结束时它被销毁。循环之内,循环结束时它被销毁。4917.6.3循环游标循环游标的特性主要有以下几点:循环游标的特性主要有以下几点:循环开始时,游标被隐式打开。循环开始时,游标被隐式打开。在在循循环环执执行行过过程程中中,隐隐式式提提取取检检索索一一行行数数据据,并并置置于于记录中,以便于每一次循环迭代对此进行处理。记录中,以便于每一次循环迭代对此进行处理。在在从从游游标标中中提提取取了了所所有有记记录录之之后后,游游标标会会自自动动关关闭闭,循环终止。循环终止。注注意意:这这里里不不需需要要再再用用到到OPEN、FETCH

250、和和CLOSE语语句句,因因为为所所有有这这些些动动作作都都是是隐隐式式完完成成的的。记记录录中中的的列列用用record_name.columnname格式来表示。格式来表示。492任务10.通过循环游标分别统计不同部门员工的薪水。任务104937.6.3循环游标【例例7.15】用用for循环再重写循环再重写【例例7.14】的例子。的例子。4947.6.4游标变量游游标标是是活活动动集集的的工工作作区区名名。游游标标变变量量是是工工作作区区的的引引用用。游游标标基基于于一一个个专专门门的的查查询询,而而游游标标变变量量可可以以在在一一个个程程序序中中用用不不同同的的查查询询来来打打开开。隐隐

251、式式游游标标和和显显式式游游标标都都是是静静态态定定义义的的,当当用用户户使使用用它它们们的的时时候候查查询询语语句句已已经经确确定定。静静态态游游标标像像一一个个常常量量,游游标标变变量量则则像像游游标标的的指指针针。如如果果用用户户需需要要在在运运行行的的时时候候动动态态决决定定执执行行何何种种查查询询,可可以使用游标变量。以使用游标变量。创创建建游游标标变变量量需需要要两两个个步步骤骤:第第一一步步,创创建建一一个个引引用用的的游游标标类类型型;第第二二步步,必必须须声声明明一一个个具具有有引引用用游游标标类类型型的的游游标标变变量量。通通用用的的语语法如下:法如下:TYPEcursor

252、typenameISREFCURSORRETURNreturn_type;cursorvarnamecursortypename;4957.7异常处理PL/SQL中中将将错错误误称称为为异异常常。异异常常可可能能是是由由于于系系统统错错误误、用用户户错错误误或或应应用用程程序序错错误误而而导导致致的的。默默认认情情况况下下,当当发发生生异异常常时时会会终终止止PL/SQL的的执执行行。通通过过引引入入异异常常处处理理部部分分,使使程程序序发发生生异异常常的的情情况况下下也也能能够够执执行行。Oracle提提供供了了预预定定义义异异常常、非非预预定定义义异异常常和和用用户户定定义义异常三种类型。

253、异常三种类型。7.7.1预定义的异常预定义的异常7.7.2非预定义的异常非预定义的异常7.7.3用户定义的异常用户定义的异常4967.7.1预定义的异常Oracle系系统统为为用用户户提提供供了了大大量量的的、在在PL/SQL中中使使用用得得预预定定义义异异常常,它它们们都都定定义义在在Oracle的的核核心心PL/SQL库库中中,系系统统预预定定义义异异常常处处理理是是针针对对PL/SQL程程序序编编译译、执执行行过过程程中中发发生生的的系系统统预预定定义异常问题进行处理的程序。义异常问题进行处理的程序。n表表7-2.Oracle常用的系统预定义异常的说明表常用的系统预定义异常的说明表n预定

254、义异常名预定义异常名n描描 述述nACCESS_INTO_NULL n试图给一个没有初始化的对象赋值试图给一个没有初始化的对象赋值nCURSOR_ALREADY_OPEN CURSOR_ALREADY_OPEN n试图打开一个已经打开的游标试图打开一个已经打开的游标nDUP_VAL_ON_INDEXDUP_VAL_ON_INDEXn试图在一个有惟一性约束的字段中存储重复的值试图在一个有惟一性约束的字段中存储重复的值nINVALID_CURSORINVALID_CURSORn试图执行一个无效的游标试图执行一个无效的游标nLOGIN_DENIEDLOGIN_DENIEDn用一个无效的用户名或口令登

255、录用一个无效的用户名或口令登录nNO_DATA_FOUNDNO_DATA_FOUNDn查询语句没有返回数据查询语句没有返回数据nNOT_LOGGED_ONNOT_LOGGED_ONn连接数据库失败连接数据库失败nPRAGMA_ERRORPRAGMA_ERRORnPL/SQL内部问题,需要重装数据字典和内部问题,需要重装数据字典和PL/SQL系统包系统包nROWTYPE_MISMATCHROWTYPE_MISMATCHn主游标变量与主游标变量与PL/SQL游标变量的返回类型不兼容游标变量的返回类型不兼容nSTORAGE_ERRORSTORAGE_ERRORnPL/SQL程序使用完了内存,或内存遭

256、到破坏程序使用完了内存,或内存遭到破坏nSUBSCRIPT_OUTSIDE_LIMITSUBSCRIPT_OUTSIDE_LIMITn元素下标超过嵌套表或数组类型变量的最大值元素下标超过嵌套表或数组类型变量的最大值nSUBSCRIPT_BEYOND_COUNTSUBSCRIPT_BEYOND_COUNTn使用嵌套表或数组类型变量时,将下标指定为负数使用嵌套表或数组类型变量时,将下标指定为负数 nTOO_MANY_ROWSTOO_MANY_ROWSn查询语句返回多行数据查询语句返回多行数据nVALUE_ERRORVALUE_ERRORn变量转换时形成无效值变量转换时形成无效值nZERO_DIVI

257、DEZERO_DIVIDEn被零除被零除497任务11.通过预定义异常程序处理系统出现的预定义异常。任务114987.7.2非预定义的异常如如果果是是一一个个非非系系统统预预定定义义的的异异常常发发生生,当当它它被被捕捕获获并并处处理理之之前前,必必须须首首先先被被定定义义。Oracle定定义义了了几几千千个个异异常常,绝绝大大多多数数只只有有错错误误编编号号和和相相关关描描述述,仅仅命命名名了了少少数数最最常常用用的的异异常常,即即预预定定义义异异常常。其其余余的的绝绝大大多多数数异异常常都都未未命命名名,这这些些异异常常就就是是非非预预定定义义异常,需要程序员根据情况对其进行命名。例如下面

258、的操作会引发一个系统异常。异常,需要程序员根据情况对其进行命名。例如下面的操作会引发一个系统异常。declareex_dept_fkexception;pragmaexception_init(ex_dept_fk,-2292);begindeletefromdeptwheredeptno=10;exceptionwhenex_dept_fkthendbms_output.put_line(10部门还有员工部门还有员工,不能删除不能删除!);end;执行结果为执行结果为10部门还有员工部门还有员工,不能删除不能删除!499任务12.通过自定义异常程序解决违反业务规则等异常。任务125007.7

259、.3用户定义的异常前前两两种种异异常常都都是是由由Oracle系系统统判判断断的的错错误误,在在实实际际应应用用中中,程程序序开开发发人人员员可可以以根根据据具具体体的的业业务务逻逻辑辑规规则则自自定定义义异异常常。当当用用户户违违反反业业务务逻逻辑辑规规则则时时,就就引引发发自自定定义义异异常常。自自定定义义异异常常处处理理由由用用户户先先定定义义,后后触触发发,再再处处理。理。1定义异常处理定义异常处理2触发异常处理触发异常处理3处理异常处理异常5017.7.3用户定义的异常【例例7.19】增增加加某某员员工工的的薪薪水水100元元,如如果果增增加加后后薪薪水水小于小于1000元,则增加薪

260、水元,则增加薪水200元。元。declareenoemp.empno%type;e_lowsalexception;-定义异常定义异常v_salemp.sal%type;begineno:=&empno;updateempsetsal=sal+100whereempno=enoreturningsalintov_sal;ifv_sal GRANT ALL ON EMP TO HR_USER;SQL GRANT ALL ON EMP TO PUBLIC;语法:594利用SQL命令回收对象权限 q语法595级联授予对象权限 596级联回收对象权限 回收级联授予的对象权限598查询系统权限与系统权限

261、有关的表与视图599查询对象权限与对象权限有关的表与视图实训4掌握对用户授予和回收对象权限的方法。完成了任务完成了任务4,请尝试实训请尝试实训4任务5任务5.创建角色和对角色授权。601什么是角色?创建一个新角色。对角色进行授权管理。将此角色授予用户。 602角色管理q角色:介于权限和用户之间,是一组系统权限和对象权限的集合。 q引入角色优点:减少权限管理的工作量。实现动态权限管理。权限的选择具有可用性和灵活性。应用安全性。 q系统预定义角色q自定义角色 603角色管理q系统预定义角色CONNECT:连接到数据库,最终用户角色.RESOURCE:申请资源创建对象,开发人员角色.DBA:具有全部

262、系统权限,可以创建用户.IMP_FULL_DATABASE:装入全部数据库内容.EXP_FULL_DATABASE:卸出全部数据库内容.DELE_CATALOG_ROLE:能删除审计表中记录.SELECT_CATALOG_ROLE:查询数据字典.EXECUTE_CATALOG_ROLE:执行过程和函数. 604查询角色与授权【例9.24】查询当前数据库的所有预定义角色。select * from dba_roles;【例9.25】为用户HR_USER授予CONNECT和RESOURCE角色。grant connect,resource to hr_user;605在OEM中创建角色606利用S

263、QL命令创建角色和授权语法:实训5掌握创建角色和对角色授权的方法。完成了任务完成了任务5,请尝试实训请尝试实训5任务6任务6.管理角色。608如何管理角色呢?609利用OEM管理角色610利用SQL命令管理角色 语法: ALTER ROLE role_name NOT IDENTIFIED IDENTIFIED BY password 【例9.28】取消角色manager的口令。ALTER ROLE manager not identified;【例9.29】回收己经授予用户teacher的OPT_ROLE角色:REVOKE OPT_ROLE FROM teacher ;【例9.30】删除角色

264、managerDROP ROLE manager; 611角色的激活或屏蔽 语法: ALTER USER user_name DEFAULT ROLE ROLE_NAME|ALL EXCEPT ROLE_NAME|none;【例9.31】将用户某些角色设置为默认角色。 ALTER USER hr_user DEFAULT ROLE CONNECT,HR_ROLE;【例9.32】屏蔽用户的所有角色。 ALTER USER hr_user DEFAULT ROLE NONE; 或者,可以用下面的SET语句。 SET ROLE none;【例9.33】激活用户的所有角色。 ALTER USER hr

265、_user DEFAULT ROLE ALL; 或者,可以用下面的SET语句。 SET ROLE ALL;612查询角色信息DBA_ROLES视图:查看当前数据库中存在的所有角色。SESSION_ROLES视图: 用户当前启用的角色。ROLE_ROLE_PRIVS视图:查看角色与权限授予情况,以及是否有传递权限情况。DBA_ROLE_PRIVS视图:用户(或角色)与角色之间的授予关系。USER_ROLE_PRIVS视图:查看用户授予的角色。ROLE_SYS_PRIVS视图:查看系统权限授予情况。 DBA_SYS_PRIVS视图:查看每种角色拥有的权利。613查询角色信息【例9.34】查询用户H

266、R_USER 所具有的角色。 使用HR_USER用户连接数据库。CONN HR_USER/HR_USER 通过数据字典USER_ROLE_PRIVS查询所具有的角色。select USERNAME, GRANTED_ROLE,ADMIN_OPTION from user_role_privs;614查询角色信息【例9.35】查询哪些角色已经授予哪些用户。 使用sys用户连接数据库。 通过数据字典DBA_ROLE_PRIVS查询哪些角色已经授予哪些用户。select GRANTEE , GRANTED_ROLE, ADMIN_OPTION From dba_role_privs;【例9.36】查

267、询CONNECT和RESOURCE角色授予了哪些权限 使用sys用户连接数据库。conn sys/password as sysdba; 通过数据字典ROLE_SYS_PRIVS查询哪些角色已经授予哪些用户。select role, privilege from ROLE_SYS_PRIVS where role in (CONNECT,RESOURCE);实训6掌握管理角色的方法。完成了任务完成了任务6,请尝试实训请尝试实训6任务7任务7.管理概要文件。什么是概要文件?617概要文件内容q概要文件内容:是数据库和系统资源限制的集合 实例为用户分配一些系统资源,如CPU 的使用、分配SGA 的

268、空间大小、连接数据库的会话数、用户口令期限等。q概要文件作用: 限制资源使用管理用户账号口令618概要文件作用q限制资源使用每个会话或每个语句的CPU时间(以百分之一秒计)。每个会话或每个语句的逻辑磁盘I/O。每个用户的并发数据库会话。每个会话的最大连接时间和空闲时间。可供多进程服务器会话使用的最大的服务器内存。q管理账户口令策略帐户的锁定口令的过期时间口令的复杂度允许用户口令可以持续使用的时间指定用户在能够重复使用一个旧口令前必须经过的天数。619利用OEM创建和管理概要文件q在【企业管理器】中创建概要文件 q概要文件的修改q将概要文件分配给用户 q概要文件的删除 620利用SQL命令创建和

269、管理概要文件q创建概要文件CREATE PROFILE profile_name LIMITresource_parameters | password_parameters说明:profile_name将要创建的概要文件的名字resource_parameters:对一个用户指定资源限制的参数password_parameters:口令参数 q修改概要文件q将概要文件分配给用户 q删除概要文件621查询概要文件信息q与概要文件相关的表和视图: USER_PASSWORD_LIMITS USER_RESOURCE_LIMITS DBA_PROFILES实训7掌握管理概要文件的方法。完成了任务完

270、成了任务7,请尝试实训请尝试实训7小结qOracle通过使用用户管理、权限与角色、概要文件等措施来保护数据库的安全。Oracle用户管理的机制是Oracle系统安全性的一个重要方面。q权限是执行一种特殊类型的SQL语句或存取另一用户的对象的权力。Oracle将权限分为有两类:系统权限和对象权限。q角色是一组系统权限和对象权限的集合,角色使得授予权限变得简单。q一个角色可授予系统权限或对象权限,任何角色可授权给任何数据库用户。q概要文件是Oracle安全策略的重要组成部分。概要文件用来限制由用户使用的系统和数据库资源,并管理口令限制。 谢 谢 !n624625主讲人:刘先斌主讲人:刘先斌OCP专

271、家、技术总监专家、技术总监第10章:备份与恢复执行数据库系统备份与恢复的任务626工作情景:工作情景:如何对如何对OracleOracle数据库进行备份与恢数据库进行备份与恢复?复?任务分析任务分解q任务1:对数据库进行脱机备份与恢复。q任务2:改变数据库归档方式配置。 q任务3:对数据库进行联机备份 。q任务4:对数据库进行完全恢复 。q任务5:对数据库进行不完全恢复 。q任务6:调用exp导出数据库信息。q任务7:调用imp导入数据库信息。q任务8:使用数据泵技术导出数据库信息。 q任务9:使用数据泵技术导入数据库信息。627628备份和恢复概述q备份和恢复数据库备份 q物理备份是对于数据

272、库的物理结构文件,包括数据文件、日志文件和控制文件的操作系统备份。q逻辑备份是指利用export等工具通过执行SQL 语句的方式将数据库中的数据读取出来,然后再写入到一个二进制文件中。 629备份和恢复概述q备份和恢复q数据库恢复q实例恢复q介质恢复完全介质恢复不完全介质恢复630任务1任务1.对数据库进行脱机备份与恢复631脱机备份脱机备份是对于构成数据库的全部数据库文件、在线日志文件和控制文件,在数据库关闭状态下的操作系统备份。完全脱机备份既适用于归档模式,也适用于非归档模式。 q数据库脱机备份数据库脱机备份步骤(1)列出要备份的所有数据库文件(数据文件和控制文件)。(2)关闭数据库。在列

273、出要备份的文件之后,以特权用户身份关闭数据库。(3)复制所有数据库文件。(4)启动例程并打开数据库。632脱机备份步骤q数据库脱机备份数据库脱机备份步骤(1)以SYSDBA身份登录数据库。CONNSYS/PASSWORDASSYSDBA;(2)列出要备份的所有数据库文件(数据文件和控制文件和重做日志文件)。SELECTnameFROMv$datafile;SELECTnameFROMv$controlfile;SELECTmemberFROMv$logfile;(3)以SYSDBA身份关闭数据库。SHUTDOWNIMMEDIATE(4)启动例程并打开数据库。STARTUPOPEN633脱机恢复

274、步骤脱机恢复是在数据库关闭状态下进行的恢复,脱机恢复数据库是不完全恢复,它只能将数据库恢复到最近一次完全脱机备份的状态。其步骤如下:(1)以SYSDBA身份关闭数据库。SHUTDOWNIMMEDIATE(2)将备份的所有数据文件副本复制到正确的目录下。(3)重新启动数据库。STARTUPOPEN实训1脱机备份与恢复脱机备份与恢复。完成了任务完成了任务1,请尝试实训请尝试实训1635任务2任务2.改变数据库归档方式配置636联机备份q联机备份只适用于归档模式,而不适用于非归档模式。(1)确定表空间所包含的数据文件。(2)设置表空间为备份模式。(3)复制数据文件(4)设置表空间为正常模式,将数据文

275、件头块转变为正常状态。637数据库归档方式q非归档方式非归档方式q归档方式归档方式q数据库归档方式配置数据库归档方式配置(1)检查当前的日志操作模式,通过查询动态性能视图V$DATABASE可以确定当前的日志操作模式。(2)关闭数据库,然后装载数据库。改变日志操作模式只能在MOUNT状态下进行,因此必须首先关闭数据库,然后重新装载数据库。注意:在关闭数据库时不能使用SHUTDOWNABORT命令。SQLSHUTDOWNIMMEDIATESQLSTARTUPMOUNT638数据库归档方式(3)改变日志操作模式,然后打开数据库。SQLALTERDATABASEARCHIVELOG;SQLALTER

276、DATABASEOPEN;639配置自动归档q(4)配置自动归档(1)检查当前归档方式。在设置自动归档之前,以特权用户登录执行ARCHIVELOGLIST命令可以检查归档方式。(2)在oracle10g之前的版本中,需要修改初始化参数LOG_ARCHIVE_START的值。LOG_ARCHIVE_START的默认值为FALSE,为了启用自动归档,需要将该参数设置为TRUE,然后重启数据库。(3)在oracle10g版本开始起,默认是自动归档。实训2配置系统的归档方式配置系统的归档方式。学完了任务学完了任务2,请尝试实训请尝试实训2641任务3任务3.对数据库进行联机备份642联机备份联机备份时

277、数据库在归档模式下进行的数据文件、控制文件、归档日志文件等的备份。执行联机备份的步骤如下:(1)以SYSDBA身份登录数据库。(2)将数据库设置为归档方式。(3)按表空间复制数据文件。确定表空间所包含的数据文件。设置表空间为备份模式。以USERS表空间为例。ALTERTABLESPACEusersBEGINBACKUP;分别复制每个表空间的数据文件到备份磁盘上。设置表空间为正常模式,将数据文件头块转变为正常状态。(4)备份控制文件(5)备份日志文件实训3对数据库进行联机备份对数据库进行联机备份。学完了任务学完了任务3,请尝试实训请尝试实训3644任务4任务4.对数据库进行完全恢复645完全数据

278、库恢复-1q恢复在关闭状态下意外丢失的数据文件(1)装载数据库。(2)使数据文件脱机。(3)打开数据库。(4)复制数据文件副本。(5)恢复数据文件。(6)使数据文件联机。646完全数据库恢复-2q恢复在打开状态下意外丢失的数据文件(1)使数据文件脱机。(2)复制数据文件副本。(3)恢复表空间或数据文件。(4)使表空间或数据文件联机。647完全数据库恢复-3q恢复控制文件(1)复制控制文件副本。(2)装载数据库。(3)备份控制文件信息到跟踪文件。(4)编辑跟踪文件为SQL文件。(5)关闭数据库,然后运行该SQL脚本,建立控制文件。648完全数据库恢复-4q恢复重做日志q数据库处于OPEN状态时误

279、删除了当前日志组,通过清除重做日志命令重新建立日志组的成员文件。SQLALTERDATABASECLEARUNARCHIVEDLOGFILEGROUP1;q重新进行完全数据库备份,以防止出现损坏导致数据库无法完全恢复。实训4对数据库进行完全恢复对数据库进行完全恢复。学完了任务学完了任务4,请尝试实训请尝试实训4650任务5任务5.对数据库进行不完全恢复651不完全数据库恢复-1q基于撤消恢复基于撤消恢复(1)关闭数据库。(2)装载数据库。(3)复制所有数据文件副本。(4)执行不完全恢复。使用RECOVERDATABASEUNTILCANCEL命令执行不完全恢复(5)恢复过程结束后使用RESET

280、LOGS选项开数据库。(6)进行完全数据库备份。652不完全数据库恢复-2q基于时间恢复基于时间恢复(1)关闭数据库。(2)装载数据库。当执行不完全恢复时,要求数据库必须处于MOUNT状态。(3)复制所有数据文件副本。(4)执行不完全恢复命令。在复制了数据文件副本之后,接下来就可以使用RECOVERDATABASEUNTILTIME命令执行不完全恢复。(5)恢复过程结束后使用RESETLOGS选项打开数据库。(6)检查恢复结果是否已经恢复用户数据。(7)进行完全数据库备份。653不完全数据库恢复-3q基于基于SCN的恢复的恢复(1)关闭数据库。(2)复制所有数据文件副本。(3)装载数据库。(4

281、)执行不完全恢复。(5)恢复过程结束后使用RESETLOGS选项开数据库(6)进行完全数据库备份。实训5对数据库进行不完全恢复对数据库进行不完全恢复。学完了任务学完了任务5,请尝试实训请尝试实训5655任务6任务6:调用exp导出整个数据库;导出方案数据;导出指定的表。656数据库逻辑备份q逻辑备份导出程序q命令行方式语法格式:语法格式:EXPusername/passwordKEYWORD=value1,value2q导出整个数据库q按表空间导出q按用户方式导出q交互方式q图形界面工具657数据库逻辑备份【例10.1】导出整个数据库的所有对象。命令行使用FULL关键字完成。C:expsyst

282、em/managerfull=yfile=fulldb.dmpbuffer=4096注意:对导出整个数据库来讲,还可以实施增量导出方式。这种导出方式必须作为SYSTEM来导出。增量导出包括三个类型:“完全”增量导出、“增量型”增量导出、“累计型”增量导出。对应的语法KEYWORD关键字为INCTYPE,其值分别为:COMPLETE、INCREMENTAL、CUMULATIVE。658数据库逻辑备份【例10.2】按用户方式导出用户scott所拥有的对象及数据。命令行使用OWNER关键字来完成。C:expscott/tigerfile=scott_bak20110511.dmpowner=scot

283、t659数据库逻辑备份【例10.3】导出指定的表emp和dept。命令行使用TABLES关键字来完成。C:expscott/tigergrants=ytables=(emp,dept)file=scott_tables.dmp实训6数据库数据库exp逻辑导出逻辑导出。学完了任务学完了任务6,请尝试实训请尝试实训6661任务7任务7.调用imp导入整个数据库;导入用户对象及数据;导入指定的表。662数据库逻辑恢复q逻辑恢复导入程序q命令行方式语法格式:语法格式:IMPusername/passwordKEYWORD=value1,value2q交互方式q图形界面工具663数据库逻辑恢复【例10.

284、4】数据库导入模式。利用例10.1导出的完整数据库的逻辑备份恢复数据库。C:Impsystem/manager1full=yfile=fulldb.dmpbuffer=4096同样,在按数据库导入模式中可以实施增量导入。比如在星期日,数据库突然遭到意外破坏,数据库管理员可按以下步骤来进行恢复。重新创建数据库。完全增量导入C:impsystem/managerinctype=restorefull=yfile=mycomp.dmp累计增量导入C:impsystem/managerinctype=restorefull=yfile=mycumu.dmp最近增量导入C:impsystem/manag

285、erinctype=restorefull=yfile=myincr_1ast.dmp664数据库逻辑恢复【例10.5】按用户方式导入。利用例10.3将scott用户下的对象及数据导入到peter用户。C:impsystem/manager1file=scott_bak20110511.dmpfromuser=scotttouser=peter665数据库逻辑备份【例10.6】将例10.3中scott用户下导出的两张表及其数据导入到peter用户下。要将一个用户的对象导入到另一个用户中,需要在导入过程中指定对象拥有者,并指定导入这些对象的用户。命令如下:C:Impsystem/managerf

286、ile=scott_tables.dmpfromuser=scotttouser=peter实训7数据库IMP逻辑导入。学完了任务学完了任务7,请尝试实训,请尝试实训7667任务8任务8.使用数据泵技术导出表;导出方案;导出表空间;导出数据库668数据泵导出导入的作用实现逻辑备份和逻辑恢复。在数据库用户之间移动对象。在数据库之间移动对象。实现表空间搬移。669数据泵导出导入与传统导出导入的区别EXP和IMP是客户端工具程序,它们既可以在客户端使用,也可以在服务器端使用。EXPDP和IMPDP是服务端的工具程序,他们只能在ORACLE服务端使用,不能在客户端使用。IMP只适用于EXP导出文件,不

287、适用于EXPDP导出文件;IMPDP只适用于EXPDP导出文件,而不适用于EXP导出文件。670调用EXPDP使用EXPDP工具时,其转储文件只能被存放在DIRECTORY对象对应的OS目录中,而不能直接指定转储文件所在的OS目录。因此,使用EXPDP工具时,必须首先建立DIRECTORY对象。并且需要为数据库用户授予使用DIRECTORY对象权限。CREATEDIRECTORYdumpdirASD:DUMP;GRANTREAD,WIRTEONDIRECTORYdump_dirTOscott;671调用EXPDP导出表Expdpscott/tigerDIRECTORY=dump_dirDUMP

288、FILE=tab.dmpTABLES=dept,emp;导出方案Expdpscott/tigerDIRECTORY=dump_dirDUMPFILE=schema.dmpSCHEMAS=system,scott;导出表空间Expdpsystem/managerDIRECTORY=dump_dirDUMPFILE=tablespace.dmpTABLESPACES=user01,user02;导出数据库Expdpsystem/managerDIRECTORY=dump_dirDUMPFILE=full.dmpFULL=Y实训8数据库EXPDP数据泵导入。学完了任务学完了任务8,请尝试实训,请尝试

289、实训8673任务9任务9.使用数据泵技术导入表;导入方案;导入表空间;导入数据库674调用IMPDP导入方案Impdpscott/tigerDIRECTORY=dump_dirDUMPFILE=schema.dmp;SCHEMAS=scott;Impdpsystem/managerDIRECTORY=dump_dirDUMPFILE=schema.dmpSCHEMAS=scottREMAP_SCHEMA=scott:system;导入表空间Impdpsystem/managerDIRECTORY=dump_dirDUMPFILE=tablespace.dmpTABLESPACES=user01

290、;导入数据库Impdpsystem/managerDIRECTORY=dump_dirDUMPFILE=full.dmpFULL=y;675数据库逻辑备份q逻辑备份导出程序q命令行方式语法格式:语法格式:EXPusername/passwordKEYWORD=value1,value2q导出整个数据库q按表空间导出q按用户方式导出q交互方式q图形界面工具实训9数据库IMPDP数据泵导入。学完了任务学完了任务9,请尝试实训,请尝试实训9小结-1qOracle通过使用用户管理、权限与角色、概要文件等措施来保护数据库的安全。qOracle用户管理的机制是Oracle系统安全性的一个重要方面。q权限是

291、执行一种特殊类型的SQL语句或存取另一用户的对象的权力。qOracle将权限分为有两类:系统权限和对象权限。q角色是一组系统权限和对象权限的集合,角色使得授予权限变得简单。q一个角色可授予系统权限或对象权限,任何角色可授权给任何数据库用户。q概要文件是Oracle安全策略的重要组成部分。q概要文件用来限制由用户使用的系统和数据库资源,并管理口令限制。小结-2qOracle数据库的备份与恢复:物理备份与恢复、逻辑备份与恢复两种。q物理备份与恢复是对数据库物理结构的操作系统文件的备份与恢复,分为脱机备份与恢复和联机热备份与恢复两种。q逻辑备份与恢复是对数据库数据的备份与恢复。q脱机备份是是在正常关

292、闭数据库的情况下,将数据库的控制文件、日志文件、数据文件和初始化参数文件等利用操作系统的复制功能转存到其他存储设备上的备份方法,也称为操作系统冷备份。q联机备份与恢复是在不关闭数据库的前提下,同时备份与恢复数据文件、日志文件、控制文件。联机备份与恢复也称联机热备份与恢复。小结-3qexport是把数据库中的数据导出,import是把export卸出的数据导入数据库中。qExport和Import工具提供了三种导出和导入模式:表、用户、数据库,分别指定不同的参数可以按不同模式进行导出和导入工作。谢 谢 !n680681第11章:大型数据库Oracle开发教学仿真实训平台HRMS仿真实训平台的Or

293、acle知识应用剖析。682特点: 以完整项目为载体,动态再现系统的实现细节和Oracle相关知识点的应用。任务分析学习目标q深入了解和掌握以下内容 :目标1:表的相关知识及应用。目标2:索引的相关知识及应用。 目标3:同义词的相关知识及应用。目标4:序列的相关知识及应用。目标5:视图的相关知识及应用。目标6:数据操纵语言的相关知识及应用。目标7:SQL函数的相关知识及应用。目标8:子查询的相关知识及应用。目标9:大对象BLOB的相关知识及应用。683学习目标目标10:深入了解和掌握程序包的相关知识及应用。目标11:深入了解和掌握触发器的相关知识及应用。目标12:深入了解和用户管理及授权的相关

294、知识及应用。 目标13:深入了解和掌握备份和恢复的相关知识及应用。684685表 使用命令CREATE TABLE方式创建表。语法格式见4.3.1。示例如:创建部门表的SQL语句。本实例见系统“表结构查看”模块,单击“Department” 表,单击“查看源代码”按钮展示。【例11. 1】展现创建部门表的数据库源代码。686索引索引 使用CREATE INDEX语句创建索引。语法格式见5.2.3。示例如:为雇员表的雇员编号列创建唯一索引。本实例见系统“其他数据库对象”模块中“索引”部分展示。【例11. 2】展现为雇员表的雇员编号列创建唯一索引的数据库源代码。687同义词同义词使用CREATE

295、PUBLIC SYNONYM语句创建公有同义词。语法格式见5.3.2。为雇员表创建公有同义词,使每个用户都能访问该对象。本实例见系统“其他数据库对象”模块中“同义词”部分展示。【例11.3】展现为雇员表创建公有同义词的数据库源代码。688序列序列使用CREATE SEQUENCE语句创建序列。语法格式见5.4.1。创建用户ID序列,最小值为1,增量为1,开始值为1,缓存序列值为20,不循环。本实例见系统“其他数据库对象”模块中“序列”部分展示。【例11. 4】展现创建用户ID序列的数据库源代码。689使用序列使用序列见第五章实训4中使用序列练习,使用序列可以通过访问NEXTVAL和CURRVA

296、L伪列实现。NEXTVAL伪列返回序列的下一个值,CURRVAL伪列返回序列的当前值。例如,向UserInfo表 ID列内插入序列的下一个值,USERNAME值为“admin”【例11. 5】展现使用用户ID序列为用户表的用户ID列自动生成下一个值的数据库源代码。690视图视图使用CREATE VIEW语句创建视图。语法格式见5.1.2。为雇员变动记录创建只读类型视图如下。本实例见系统“其他数据库对象”模块中“视图”部分展示。【例11.6】展现为雇员变动记录创建只读类型视图的数据库源代码。691数据操纵语言数据操纵语言SQL1.使用INSERT语句插入数据 语法格式见4.7.1。为雇员表插入数

297、据。本实例见系统“雇员管理”模块中“新增”功能展示。 【例11.7】展现为雇员表插入数据的数据库源代码。2.使用DELETE语句删除数据语法格式见4.7.3。删除雇员信息。本实例见系统“雇员管理”模块中“删除”功能展示。 【例11.8】展现删除雇员表中雇员号为“26”的雇员信息的数据库源代码。692数据操纵语言数据操纵语言SQL3.使用UPDATE语句更新数据语法格式见4.7.2。更新雇员信息。本实例见系统“雇员管理”模块中“修改”功能展示。 【例11.9】更新雇员表中雇员号为“25”的雇员信息的数据库源代码。4.使用SELECT语句进行多表连接查询数据语法格式见6.3.3。查询雇员信息。本实

298、例见系统“雇员管理”模块中“选择条件查询”功能展示。 【例11.10】展现查找雇员编号为“25”的雇员详细信息的数据库源代码。693SQL函数函数使用分组函数,分组函数也称统计函数或多行函数。语法格式见6.2.6。查询工资最高的雇员信息。本实例见系统“雇员管理”模块中“统计查询”功能展示。【例11.11】查询工资最高的雇员信息。【例11.12】查询所有工资高于所任职位平均工资的雇员信息。694子查询使用单行多列子查询语法格式见6.4.3。指子查询返回一行数据,但是包含多列数据。查询与某员工职位和薪水相同的雇员信息。本实例见系统“雇员管理”模块中“统计查询”功能展示。【例11.12】查询与雇员号

299、为“25”的工作职位、薪水相同的雇员信息。695子查询使用多行子查询语法格式见6.4.2。多行子查询返回多行数据,在这种子查询中,必须使用多行运算符来判断。使用ANY操作符的多行子查询表示与子查询返回的任何一个值比较。实例见系统“雇员管理”模块中“统计查询”功能展示。【例11.13】查询比5部门某个雇员工资高的雇员信息 696大对象大对象BLOB使用LOB类型的数据库列。语法格式见4.3.3。在INSERT或UPDATE语句中使用特殊函数(如EMPTY _BLOB()和EMPTY _CLOB())将NULL或非NULL的LOB初始化为空。本系统实例见“雇员管理模块”中修改雇员信息及其相片的功能

300、展示。【例11.14】对BLOB列存储图像的表更新数据。(1)使用UPDATE语句更新非BLOB列信息。(2)对操作用户授予图片所在文件夹的读取权限(3)创建插入雇员照片的过程 (4)执行此过程697程序包程序包定义和执行程序包。语法格式见8.3。程序包的结构包括两个部分:程序包规范说明部分和程序包主体部分。本实例见系统“薪资管理”模块中“薪资比重设置”功能和“统计查询”功能中的“统计部门总人数”子功能展示。如图11-23图11-28所示。698程序包程序包【例11.15】设置薪资比重和统计部门总人数。(1)定义程序包规范说明(2)定义程序包主体 (3)根据部门号统计部门总人数,调用“pro_

301、package.count_dept_pro”存储过程(4)设置薪资比重,调用“pro_package.updateWagesPercent_pro”存储过程699触发器触发器 系统触发器是建立在数据库级别上的触发器。语法格式见8.4.5。其触发事件包括服务器的启动或关闭,用户的登录或退出,以及服务器错误等。本实例见系统“用户管理”模块中“登录日志”部分展示。【例11.16】查看自系统启动以来的用户登录信息。(1)定义用户登录事件触发器,记录用户登录日志信息(2)查看用户登录日志信息700用户管理及授权1.使用命令ALTER USER修改用户口令 使用Alter user语句可以对用户信息进行

302、修改。语法格式见4.1.3。本实例见系统“用户管理”模块中“修改密码”部分展示。【例11.17】修改用户SCOTT的密码。701用户管理及授权2.使用命令GRANT或命令REVOKE授予或回收权限对象权限是指访问其他用户模式对象的权力。语法格式见9.2.2。本实例见系统“权限管理”模块中“授权”功能部分展示。【例11.18】授予用户SCOTT查询薪资管理的权限,并回收其对职位管理的所有权限。702备份和恢复备份和恢复1.使用命令EXP进行数据备份 在命令行中输入exp命令调用export工具的同时,指定导出操作所使用的参数。语法格式见10.4.1。本实例见系统“备份与恢复”模块中“备份”功能部

303、分展示。如图11-29图11-32所示。【例11.19】备份SCOTT用户的数据。(1)调用EXP命令进行数据备份(2)将备份信息添加到备份记录中703备份和恢复备份和恢复2. 使用命令IMP进行数据恢复在命令行中输入imp命令调用import工具的同时,指定导入操作所使用的参数。语法格式见10.4.1。本实例见系统“备份与恢复”模块中“恢复到最新”功能部分展示。【例11.20】将SCOTT用户的数据恢复到最近一次备份的状态。谢 谢 !704小小租房网Hibernate+Struts2+Oracle用户表(USERS)字段名称字段名称说明说明类类 型型备备 注注ID编号number非空,主键N

304、AME用户名varchar2(50)非空PASSWORD密码varchar2(50)非空TELEPHONE电话varchar2(15)USERNAME姓名varchar2(50)ISADMIN管理员varchar2(5)非空,1为是,null为否n数数据据库库设设计计字段名称字段名称说明说明类类 型型备备 注注ID编号number非空,主键NAME地区名varchar2(50)非空n数数据据库库设设计计n地区表地区表(DISTRICT)n街道表街道表(STREET)字段名称字段名称说明说明类类 型型备备 注注ID编号number非空,主键NAME街道名varchar2(50)非空DISTRIC

305、T_ID地区NUMBER非空,外键(DISTRICT表ID)字段名称字段名称说明说明类类 型型备备 注注ID编号number非空,主键NAME户型名varchar2(50)非空n数数据据库库设设计计n户型表户型表(TYPE)字段名称字段名称说明说明类类 型型备备 注注ID编号number非空,主键USER_ID用户number非空,外键(USERS表ID)TYPE_ID户型number非空,外键(TYPE表ID)TITLE标题nvarchar2(50)非空DESCRIPTION描述nvarchar2(2000)PRICE价格number非空PUBDATE房产证日期DATE非空FLOORAGE面

306、积number非空CONTACT联系方式nvarchar2(100)STREET_ID街道number非空,外键(STREET表ID)n数数据据库库设设计计n租房表租房表(HOUSE)(HOUSE)n实实现现功功能能n多条件多条件查询: :nhttp:/localhost:8080/MyHouse/index.actionn增加增加sql语句句n过滤器器检查权限:限:nhttp:/localhost:8080/MyHouse/page/manage.actionn增加增加sql语句语句n实实现现功功能能n分分页: :nhttp:/localhost:8080/MyHouse/index.act

307、ionnhttp:/localhost:8080/MyHouse/page/manage.actionn增加增加sql语句语句n管理管理员: :增加增加sql语句语句nnhttp:/localhost:8080/MyHouse/page/manage.actionn登登录注册:注册:增加增加sql语句语句nhttp:/localhost:8080/MyHouse/login.jspnhttp:/localhost:8080/MyHouse/register.jspOA办公系统数据库设计JBOA系统业务介绍qJBOA是一个公司报销管理系统。系统包括四个角色:员工、部门经理、总经理、财务。q员工功

308、能包括:添加报销申请单,申请单将由系统转发给部门经理审核;对已经打回的申请单进行修改,查看所有报销申请单及查单个报销单。q部门经理功能:包括了员工的功能外,还包括审核报销申请单及查看待审报销单。q总经理功能:查看单个申请表,查看审核报销金额超过5000的报销申请单。q财务功能:处理审核通过的报销单。JBOA系统业务介绍流程图q跨职能的流程图OA数据库设计数据库设计qJBOA数据库设计q雇员表q部门表q职位表q报销单表和报销单明细表q审核记录表q数据字典表部门信息表(SYS_DEPARTMENT)q现在根据JBOA系统业务介绍,我们分析一下都需要哪些数据表。一个公司的组织结构是有多个不同部门构成

309、的,各个部门拥有不同的职能,所以我们还需要设计一个部门表,记录部门名称及部门经理的信息。q部门信息表(SYS_DEPARTMENT)需要:ID(编号)、MANAGER_SN(部门经理的编号)、NAME(部门名称),这三个字段。职务信息表(SYS_POSITION)q现在根据JBOA系统业务介绍,我们分析一下都需要哪些数据表。系统拥有四种角色,对应不同的职务,那是不是需要一个记录职务信息的数据表呢?显然是必须的。q职务信息表需要ID(编号)、NAME_CN(职务中文名称)、NAME_EN(职务英文名称),这三个字段员工信息表(SYS_EMPLOYEE)q现在根据JBOA系统业务介绍,我们分析一下

310、都需要哪些数据表。有了职务信息表及部门信息表,现在我们可以设计员工信息表,以记录员工的部门职务信息及基本信息了。q员工信息表包括:SN(编号)、POSITION_ID(职务id)、DEPARTMENT_ID(部门id)、PASSWORD(密码)、NAME(名字)、STATUS(状态)、报销单信息表q员工相关的信息表设计完成了,那么与报销单相关的数据表如何设计呢。首先需要设计报销单记录表,记录报销单的基本信息,包括:填报人、填报时间、报销总金额、报销事由、报销单状态及报销单审核人。q报销单信息表包括了:ID(编号)、NEXT_DEAL_SN(报销单审核人)、CREATE_SN(填报人)、CREA

311、TE_TIME(填报时间)、EVENT(报销事由)、TOTAL_ACCOUNT(报销总金额)、STATUS(报销单状态)报销单详细信息表q现在有了报销单的基本信息了,那么报销单的详细信息如何记录呢?所以还需要设计报销单详细表,记录报销单相关的报销明细。记录包括报销项目、金额、费用说明信息。q报销单详细信息表:ID(编号)、MAIN_ID(是属于哪个报销单)、ITEM(报销项目)、ACCOUNT(金额)、DES(费用说明)审核结果信息表q最后还需要一个记录审核结果的表,记录包括了报销单的单据编号,单据类型、审核日期、审核类别、审核人、审核结果、审核意见。q审核结果信息表:ID(编号)、SHEET

312、_TYPE(单据类型)、SHEET_ID(单据编号)、CHECK_TIME(审核日期)、TYPE(审核类别)、CHECKER_SN(审核人)、RESULT(审核结果)、COMM(审核意见)。表之间的关系q员工信息表里的POSITION_ID字段和DEPARTMENT_ID字段是外键,分别是用来连接职务表和部门表。q报销单明细表中的MAIN_ID字段是外键,来连接报销单表。q报销单表里面的NEXT_DEAL_SN(报销单审核人)、CREATE_SN(填报人)也是外键,是用来连接员工信息表。增加主要功能的sql语句725第11章:企业案例工作内容随处会更换工作内容随处会更换技术难题随时会遇到技术难

313、题随时会遇到灾难故障随地会降临灾难故障随地会降临726工作情景:工作情景:在企业里如何对在企业里如何对OracleOracle数据库方面数据库方面要掌握哪些实用技术呢?要掌握哪些实用技术呢?案例分析您准备好了吗?您准备好了吗?任务分解q案例1:熟悉SQL语句与函数q案例2:熟悉多表查询,善于使用视图q案例3:采用适当的触发器来简化业务q案例4:使用JOB定时完成任务q案例5:企业中使用多种数据库。q案例6:导入导出实现开发的备份 q案例7:数据泵实现大数据容量的数据转移q案例8:RMAN、数据卫士、RAC等高可用性备份与恢复q案例9:企业中个人资料的备份727728案例1q熟悉SQL语句与函数

314、q善用DECODE函数转换行列q使用connect by对树结构进行查询对树结构进行查询q使用分组函数后,组内合并q使用分析函数求工资前三名的员工案例:利用案例:利用oracleoracle提供的函数提供的函数巧妙地实现复杂查询巧妙地实现复杂查询729案例2q熟悉查询,善于使用视图q视图是什么q视图存在的意义q视图也可以增删改q物化视图与内嵌社图案例:利用视图简化查询案例:利用视图简化查询730案例3q采用适当的触发器来简化业务q行级触发器q语句级触发器q模式触发器q数据库级触发器案例:利用触发器实现请案例:利用触发器实现请假业务复核假业务复核731案例4q使用JOB定时完成任务q按指定的日程

315、q执行指定的任务案例:利用案例:利用JOBJOB定时完成各种统定时完成各种统计工作,发邮件等计工作,发邮件等732案例5q企业中使用多种数据库qSQLServer2005qOracle10gq数据库链接数据库链接q透明网关案例:利用案例:利用SQLServer2005SQLServer2005数据库链访问数据库链访问Oracle10gOracle10g733案例6q导入导出实现开发的备份q逻辑备份与恢复,HWM归位q跨版本、跨平台q可整理数据碎片,备份的数据量小q在系统开发阶段应用最广泛q优点q速度慢、会锁定数据、并占用大量资源q恢复麻烦q难以恢复到故障点之前的数据q缺点案例:利用定时导入导出

316、案例:利用定时导入导出实现某系统的备份实现某系统的备份734案例7q数据泵实现大容量数据转移q服务端程序,可调配资源,远程访问数据库q以并行方式进行操作q能连接或离开一项作业q拥有更多的数据筛选项q优点:具备导入导出的全部优点之外,还具有:q难以恢复到故障点之前的数据q恢复时间长q缺点案例:利用数据泵实现某系案例:利用数据泵实现某系统的大容量数据转移统的大容量数据转移735案例8qRMAN、数据卫士、RAC等高可用性备份与恢复qRecovery Manager备份与管理qDataGuard(数据卫士)实现双机热备qRAC高可用性、高并行数据集群736案例9q企业中个人资料的备份qU盘q提交到指定服务器q提交到领导q异地备份案例:利用个人资料的备份案例:利用个人资料的备份谢 谢 !737希望我的经历能给你将来的工作带来帮助!

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号