1、18.2 Oracle 10g的体系结构 8.3 Oracle 10g的安全管理 8.4 Oracle 10g的空间管理 8.5 Oracle 10g PL/SQL编程8.1 Oracle数据库概述 退 出本 章 要 点8.6 Oracle数据查询8.7 Oracle系统管理 28.1 Oracle数据库概述 R一、概述 ORACLE 数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。 3二 、 Oracle 10g的特点 1 首个为网格计算设计的数据库 2 借助网格计算,提
2、高可用性和可伸缩性3 优异的安全特性4 借助自我管理数据库降低成本 R8.1 Oracle数据库概述 4R8.1 Oracle数据库概述 三 、 数据库的基本管理 1 启动数据库 启动数据库的命令是Startup,基本命令语法如下: STARTUP (MOUNT|OPEND) ; EXCLUSIVE|PARALLEL| NOMOUNT 说明: EXCLUSIVE和PARALLEL表示以独占或共享方式打 开。NOMOUNT表示以例程方式打开或关闭数据库。5R8.1 Oracle数据库概述 【例8.1】打开数据库Waremanage SQLstartup opend Waremanage 说明:
3、“SQL”为SQL Plus提示符。 2 关闭数据库 语句格式: SHUTDOWN NORMAL|IMMEDIATE|ABORT|TRANSACTIONAL 6说明:(1) Shutdown normal,正常关闭数据库。 (2) Shutdown immediate,立即关闭数据。 (3) Shutdown abort,直接关闭数据库和例程。 (4) Shutdown transactional,等待所有有事务连 接的用户完成事务后再关闭数据库。R8.1 Oracle数据库概述 7 3 设置数据库 选择Oracle-ORacDB10g-homelConfiguration and Migra
4、tion ToolsDatabase Configuration Assistant 进行配置。 4 创建数据库 在一个Oracle 10g系统上可以建立多个数据库。创建数据库的步骤 可参照书上内容。 R8.1 Oracle数据库概述 8R8.1 Oracle数据库概述 5 删除数据库 当数据库不再需要或已经测试完毕时,为了增加系统和数据库的执行效率,可以删除不需要的数据库。具体步骤可参照书中内容。 9 8.2.1 概述Oracle系统的体系结构是指Oracle数据库服务器的主要组成以及这些组成部分间的联系和操作方式。从宏观上看,Oracle数据库服务器主要由两部分组成:数据库和实例。 u数据
5、库用于保存数据的一系列物理结构和逻辑结构 ,数据库是静态的 。u实例是由服务器在运行过程中内存结构和一系列进程组成的,实例是动态的。RR8.2 Oracle 10g的体系结构10R8.2 Oracle 10g的体系结构 8.2.2 物理存储结构Oracle数据库的物理存储结构 操作系统下数据库的文件组织和实际的数据存储。按其作用不同Oracle数据库的物理存储结构可以分为三类:u数据文件u日志文件u控制文件11R8.2 Oracle 10g的体系结构 数据文件每一个Oracle数据库有一个或多个物理的数据文件(data file)。一个数据库的这些数据文件包含全部数据库数据。 数据文件有下列特
6、征:u一个数据文件仅与一个数据库联系。u一旦建立,数据文件不能改变大小u一个表空间(数据库存储的逻辑单位)由一个或多个数据文件组成。 12R8.2 Oracle 10g的体系结构 日志文件每一个数据库有两个或多个日志文件(redo log file)的组 。日志的主要功能是记录对数据所作的修改 。日志文件主要是保护数据库以防止故障。日志文件中的信息仅在系统故障或介质故障后恢复数据库时使用。13R 控制文件每一个Oracle数据库有一个控制文件(control file),它记录数据库的物理结构,包含下列信息类型:u数据库名;u数据库数据文件和日志文件的名字和位置。u数据库建立日期。 u每一次O
7、racle数据库的实例启动时,它的控制文件用于标识数据库和日志文件 。8.2 Oracle 10g的体系结构14 8.2.3 逻辑、存储结构Oracle数据库逻辑、存储结构是按层次管理的,内存中数据结构分为段、区和块.s块是内存与硬盘之间交换的最小单位;s区由多块组成,段由多个区组成 ;从逻辑结构看分为数据库、表空间、逻辑对象。 s一个数据库有一到多个表空间;s一个表空间可以有多个逻辑对象;s1个逻辑对象只属于1个表空间。R8.2 Oracle 10g的体系结构15 图 8.12 数据库、表空间、数据文件、逻辑对象间关系 16R块(block)是oracle数据库进行逻辑管理的最基本单元。 数
8、据库进行读写以块为单位进行。大小由db_block_size参数决定。区(extent)是Oracle数据库的最小存储单元 。s由一系列连续的块组成的空间 。s每一次系统分配和回收空间都以区间为单位进行。8.2 Oracle 10g的体系结构17段(segment)是表空间中指定类型的逻辑结构。由一个或多个区组成。一个单独的表可以是一个段。段有以下几种常见类型:数据段、索引段、回滚段和临时段。数据对象(Logic Object)或模式对象,是由用户创建的逻辑结构 。 如表、视图、索引、簇。 8.2 Oracle 10g的体系结构18R表空间(tablespace)是拥有存放表、索引和视图等对象
9、的磁盘逻辑空间 。由一个或多个物理文件表示,是数据库中最顶层的逻辑存储结构,是数据库的逻辑划分。在Oracle10g中,表空间有以下几种:l系统(SYSTEM)表空间,SYSAUX表空间;l 回滚(UNDO)表空间,用户(USERS)表空间 8.2 Oracle 10g的体系结构19R8.2 Oracle 10g的体系结构 8.2.4 内存结构ORACLE的内存区域主要存储下列信息:s执行的程序代码;s连接的会话信息;s程序执行期间所需数据及共享的信息和存储在外存储上的缓冲信息。在一个实例中,一般有三个主要内存区域:s系统全局区(System Global Area,SGA);s程序全局区(P
10、rogram Global Area,PGA);s用户全局区(User Global Area,UGA)。20R8.2 Oracle 10g的体系结构系统全局区(SGA):如果多个用户同时连接到同一实例时,在实例的SGA中数据可为多个用户所共享,所以又称为共享全局区。在SGA中存储信息将内存划分成几个区:s数据库缓冲存储区;s日志缓冲区、共享池;s请求和响应队列;s数据字典存储区和其它各种信息。21R 软件代码区,用于存储正在执行的或可以执行的程序代码。s软件区默认的设置为只读形式,可安装成共享或非共享 。sORACLE系统程序是可共享的, 用户程序可以共享也可以不共享 。8.2 Oracle
11、 10g的体系结构22R8.2 Oracle 10g的体系结构 8.2.5 数据字典数据字典提供有关该数据库的信息 。s可以用SQL存取数据字典,允许查询。数据库数据字典是由基本表和用户可存取的视图组成 。s基本表:数据字典的基础是一组基本表,存储相关的数据库的信息 ;s用户可存取视图:视图将基本表中信息解码成可用信息。 23数据字典驻留在SYSTEM表空间中。每一视图集有三种视图包含有类似信息,彼此以前缀相区别,前缀为USER、ALL和DBA。 s前缀为USER的视图,为用户视图,是在用户的模式内。s前缀为ALL的视图,为扩展的用户视图(为用户可存取的视图)。 s 前缀为DBA的视图为DBA
12、的视图。 8.2 Oracle 10g的体系结构R24 8.3.1 用户管理和权限管理用户是允许访问数据库系统的有效账户,是可以对数据库资源进行访问的实体。 用户使用在数据库中创建的用户账户连接到数据库。 用户管理的内容包括:s创建用户。s修改用户。s删除用户。8.3 Oracle 10g的安全管理25 创建新用户 创建用户。语句格式:sCREATE USER 设置口令。语句格式:sIDENTIFIED BY 用系统管理员身份登录。使用conn语句。给用户授予权限或安排角色,语句格式: sGRANT ON TO |PUBLIC WITH GRANT OPTION.8.3 Oracle 10g的
13、安全管理26【例8.6】创建用户zqh,口令为“zqh,12345”,默认表空间为users,大小为80MB,临时表空间为temp。 1 SQL create user zqh -创建用户 2 identified by zqh,123456 -设置口令 3 default tablespace users -确定用户的表空间和表空间的大小 4 temporary tablespace temp -分配默认的表空间 5 quota 80m on users -分配临时表空间 6 password expire -在用户第一次登录时提示修改口令8.3 Oracle 10g的安全管理27 修改用户
14、 修改密码、帐户锁定或解锁。【例8.7】修改用户密码。SQL alter user zqh identified by z123; 【例8.8】解除帐户锁定SQL alter user zqh account lock;【例8.9】锁定用户密码SQL alter user zqh account unlock;8.3 Oracle 10g的安全管理28R8.3 Oracle 10g的安全管理 删除用户删除用户,语句格式:sDrop User ; 回收权限,语句格式:sREVOKE ON FROM | CASCADE CONSTRAINTS。s说明:CASCADE CONSTRAINTS表示同时
15、删除具有参照完整性限制条件的对象,即References权限。29R8.3 Oracle 10g的安全管理 8.3.2 角色管理 对相同对象有相同权限的用户归类管理,称为角色。l一种角色包括多个用户,具有相同权限。角色是权限的集合 。 管理角色 l可以使用角色将权限与其他角色组合起来,以便于为用户授予多个权限和角色。 30R8.3 Oracle 10g的安全管理 创建角色 。l语句格式:CREATE ROLE IDENTIFIED BY 。 授予角色权限 l用Grant语句对角色进行授权。 修改角色 l用Alter role语句修改角色来改变用户的权限,使用revoke语句来回收权限。 删除角
16、色l语句格式:DROP ROLE 。31R8.3 Oracle 10g的安全管理 在系统中,数据字典ROLE_SYS_PRIVS保存了所有角色拥有的权限情况。 字典USER_TAB_PRIVS_MADE保存了所有授权者、被授权者、对象与权限情况。 32R8.4 Oracle 10g的空间管理 8.4.1 表空间 表空间是一个逻辑概念,所有的数据实际上放在一个或多个物理文件中,一个物理文件对应一个表空间。 在创建数据库时就必须创建表空间,并指定数据文件。 创建与删除表空间都可以利用Oracle管理工具实现,也可以使用命令完成。 33R 创建表空间语句格式: CREATE TABLESPACE D
17、ATAFILE SIZE K|M REUSE REUSE表示可以重用已有的数据文件。DEFAULT STORAGE (INITIAL K|MNEXT K|MMINEXTENTS MAXEXTENTS |UNLIMITEDPCTINCREASE ) 指定分配给表空间新对象的默认存储参数。 ONLINE|OFFLINE 指定表空间的状态是联机或脱机。 PERMANENT|TEMPORARY 指定表空间的类型是永久还是临时。 MANAGEMENT LOCAL|DICTIONARY。 指定表空间的区管理存储方式是本地管理还是在字典中管理。8.4 Oracle 10g的空间管理34R8.4 Oracle
18、 10g的空间管理 修改表空间,语句格式:ALTER TABLESOACE RENAME DATAFILE TO 对表空间中的数据文件重新命名。 ADD DATAFILE 向表空间添加数据文件。 DEFAULT STORAGE ONLINE|OFFLINEPERMANENT|TEMPORARYBEGIN BACKUP|END BACKUP 对表空间中的数据文件执行在线备份。END BACKUP表示在线备份完成。35R8.4 Oracle 10g的空间管理 删除表空间语句格式: DROP TABLESOACE INCLUDING CONTENTSCASCADE CONSTRAINTS 说明: (
19、1)当删除的表空间中含有数据对象时,删除表空间的语句中 必须包括:INCLUDING CONTENTS。 (2)CASCADE CONSTRAINTS表示同时删除表空间中其他表的引用完整性约束,避免对已删除表的主码的引用。36R 查询表空间和数据字典 8.4 Oracle 10g的空间管理数据字典说明DBA_DATA_FILES实例中所有数据文件和表空间的信息V$DATAFILE实例中数据文件的统计信息V$DATAFILE_HEADER数据文件使用时的头信息DBA_TABLESPACES表空间的信息DBA_FREE_SPACE表空间的空闲空间信息DBA_EXTENTS段的扩展信息DBA_TEM
20、P_FILES临时表空间中临时文件信息V$TEMPFILE实例中临时文件的统计信息表8.1 与表空间相关的数据字典37 8.4.2 段 创建段,语句格式: CREATE SEGMENT TABLESPACEN 指定段所属表空间名。 STORAGE (INITIAL K|MNEXT K|MMINEXTENTS MAXEXTENTS |UNLIMITEDPCTINCREASE ) 指定分配给段的默认空间。 ONLINE|OFFLINE 指定表空间的状态是联机或脱机。8.4 Oracle 10g的空间管理R38R8.4 Oracle 10g的空间管理【例8.11】创建一个回滚段,所属表空间名为RBS
21、,每区大小1M。 SQLcreate rollback segment rbs1 tablesoace rbs 2 storage (initial 1M next 1M minextents 1 maxextents 10 optimal 6M) 说明: 其中OPTIMAL表示当回滚段增长超过其指定值 (6M) 时,如果没有当前活动事务,将自动收回超过 部分。398.4 Oracle 10g的空间管理 修改段,语句格式: ALTER SEGMENT DEFAULT STORAGE ONLINE|OFFLINE 删除段,语句格式: DROP SEGMENT 40R8.4 Oracle 10g的
22、空间管理 8.4.3 表 Oracle数据库中有4种类型的表。l普通表: 以无序方式存储在表段中。 l簇表: 由共享相同数据块的一组表组成,优点是节省空间,可以改善SQL的查询性能。 l索引表: 数据以B+树结构存放在主键所对应的索引段中,索引块不仅包含键列数据,也包含非键列数据。l分区表: 数据划分为更小的部分,分别存储到不同的分区段中。41R8.4 Oracle 10g的空间管理 创建表,语句格式:CREATE TABLE . ( NULL|NIT NULL ,PCTFREE INITRANS MAXTRANS TABLESPACE PCTFREE指定预留自由空间(百分比数),默认为10.
23、 DEFAULT STORAGE (INITIAL K|MNEXT K|MMINEXTENTS MAXEXTENTS |UNLIMITEDPCTINCREASE )CLUSTER () 指定表放置在所指聚簇中。 PARALLEL 并行查询进程个数。 AS 基于对已存在的表的查询建立新表。 CACHE|NOCACHELOGGING|NOLOGGING42R 修改表,语句格式: ALTER TABLE TO 改变表的名称 ALTER TABLE ADD 在表的后面增加一个字段 ALTER TABLE MODIFY 修改表中字段的定义描述 ALTER TABLE ADD CONSTRAINT PRI
24、MARY KEY () 添加主键约束ALTER TABLE CACHE 把表放在数据库的内存区 ALTER TABLE NOCACHE 把表从数据库的内存区取出8.4 Oracle 10g的空间管理43R 删除表,语句格式: TRUNCATE TABLE 只删除数据保留表结构,即清空表或截断表 DROP TABLE 数据和表结构彻底删除 序列管理 Oracle序列是一个顺序数发生器,在某些应用(例如凭证序号)中要求关键字值按升或降序自动生成。子语句格式: CREATE SEQUENCE 8.4 Oracle 10g的空间管理44R8.4 Oracle 10g的空间管理 序列生成说明有如下选项:
25、 START WITH :序列的第1个数字,默认为1。 MINVALUE :序列最小数。 CYCLE:在达到限制值后重复。 要删除序列,用DROP SEQUENCE 同义词管理:同义词指为表或列起的别名。 CREATE PUBLIC SYNONYM FOR (1)名字可以是表名,也可以是列名。 (2 2)PUBLIC表示只能由数据库管理员操作。 45R8.4 Oracle 10g的空间管理 8.4.4 索引 索引是一种树状结构,从逻辑设计方面分为: l单列索引和组合索引;l唯一性索引、非唯一性索引;l基于函数的索引 。 从物理实现的角度分为: l分区索引、非分区索引,B树索引;l正向索引、反向
26、索引;l位图索引和位图联接索引。 46R8.4 Oracle 10g的空间管理 创建索引,语句格式: CREATE UNIQUE INDEX ON UNIQUE指定创建唯一索引,默认为非唯一索引。 ( ASC|DESC) TABLESPACE PCTFREE INITRANS MAXTRANS STORAGE LOGGING|NOLOGGINGNOSORTREVERSE REVERSE指定创建反序索引 47R8.4 Oracle 10g的空间管理 修改索引,语句格式: ALTER INDEX RENAME TO 改变索引名称 ALTER INDEX REBUILD COMPUTE STATIS
27、TICS; 收集索引统计信息 删除索引,语句格式: DROP INDEX 48R8.4 Oracle 10g的空间管理 8.4.4 视图 创建视图,语句格式: CREATE OR REPLACE VIEW AS WITH CHECK OPTION CONSTRAINT CONSTRAINT_NAMEWITH READ ONLY说明:(1)OR REPLACE表示允许在重名的情况下创建视图。(2)WITH CHECK OPTION不允许对所选择的视图的行使用插入或修改命令。 删除视图:DROP VIEW49R8.5 Oracle 10g PL/SQL编程 8.5.1 PL/SQL简介 PL/SQ
28、L是Oracle在标准SQL语言基础上的扩展。 PL/SQL不仅允许嵌入SQL语句,而且允许定义变量、常量、使用条件语句和循环语句,允许使用异常处理各种错误。 PL/SQL优点:(1)有利于客户/服务器环境下的应用。(2)适合于客户环境。 50R8.5 Oracle 10g PL/SQL编程 8.5.2 PL/SQL语言基础 1 PL/SQL块结构 lPL/SQL是一种块结构的语言,组成PL/SQL程序的单元是逻辑块, lPL/SQL块语法: DECLARE-BEGIN-EXCEPTION-END51R8.5 Oracle 10g PL/SQL编程 说明: l声明部分(Declaration
29、section) :声明部分包含了变量 和 常 量 的 数 据 类 型 和 初 始 值 。 由 关 键 字DECLARE开始 l执行部分(Executable section) :执行部分是PL/SQL块中的指令部分,由关键字BEGIN开始, l异常处理部分(Exception section) :这一部分可选lPL/SQL块中的每一条语句都必须以分号结束, 。每一个PL/SQL块由BEGIN或DECLARE开始,以END结束。注释由-标示。52R8.5 Oracle 10g PL/SQL编程 2 PL/SQL数据类型l标量类型 l复合类型l引用类型lLOB类型53R8.5 Oracle 10
30、g PL/SQL编程 标量类型 ,标量(scalar)数据类型没有内部组件,它们大致可分为以下四类:lnumber;lcharacter;ldate/time ;lboolean 复合类型,PL/SQL有两种复合数据结构:记录和集合。l记录由不同的域组成,l集合由不同的元素组成。54R8.5 Oracle 10g PL/SQL编程 记录 l复合数据类型在使用前必须被定义 ;l由域(由数据元素构成的逻辑组)所组成。域可以是标量(scalar)数据类型或其他记录类型 。 集合 lINDEX_BY表,集合是稀疏的;l嵌套表;lVARRAY,不可进行数据绑定,集合是紧密的。 55R8.5 Oracle
31、 10g PL/SQL编程 PL/SQL记录定义方式l显式定义:u使用TYPE命令在声明部分定义变量类型,然后再创建该记录的变量。u 语法: TYPE IS RECORD (); 是由逗号分隔的列表。 l隐式定义: 使用%TYPE属性声明,可以动态创建。56R8.5 Oracle 10g PL/SQL编程 INDEX_BY表集合定义 : TYPE IS TABLE OF NOT NULL INDEX BY BINARY_INTERGET; (1)可以是任何合法的PL/SQL数据类型, 包括:PLS/INTEGER、SIGNTYPE、和BOOLEAN。 (2) INDEX_BY表不能存储在数据库
32、中 。 创建INDEX_BY表的变量: DECLARE TYPE IS TABLE OF VARCHAR2(5) INDEX BY BINARY_INTEGER BEGIN57R8.5 Oracle 10g PL/SQL编程 嵌套表定义: TYPE IS TABLE OF NOT NULL 只能使用标量数据类型字段以及只用于数据库的数据类型。l嵌套表不与表中的其它数据存放在同一个数据块中 。l嵌套表中集合可自动设置为NULL 。l嵌套表不保证元素的顺序。l嵌套表集合数据是离线存储 ,适合于大型集合。58R VARRAY 表定义 TYPE IS VARRAY|VARYING ARRAY () O
33、F NOT NULL 是一维元素的数据类型,如果是记录,则只能使用标量数据字段 。 lVARRAY集合是在线存储,适合于小型集合。 lVARRAY 表可以顺序保存。l与嵌套表相似,VARRAY能够自动设置为NULL 。lVARRAY与表中的其他数据存放在同一个数据块中。 8.5 Oracle 10g PL/SQL编程59R8.5 Oracle 10g PL/SQL编程 LOB(Large object)数据类型 l用于存储类似图像,声音这样的大型数据对象,可以是二进制数据也可以是字符数据;l最大长度不超过4G。l支持任意访问方式 . 大致可分为以下四类:lBFILElBLOBlCLOBlNCL
34、OB60R8.5 Oracle 10g PL/SQL编程 3 PL/SQL控制结构l控制结构控制PL/SQL程序流程的代码行lPL/SQL支持条件控制和循环控制结构。 条件控制:IF和CASE结构l IFTHEN语句 l IFTHENELSE语句 l IFTHENELSIF语句 61R8.5 Oracle 10g PL/SQL编程 循环控制lLOOP循环语句 lEXIT退出循环语句 lEXIT WHEN结束循环语句 lWHILE.LOOP语句 lFOR.LOOP语句 GOTO语句 :GOTO LABELl对于块、循环、IF语句而言,从外层跳转到内层是非法的。 62R 4 游标l游标是其内部指向
35、被处理的语句的指针或句柄。l Oracle中的游标有两种:显式游标、隐式游标。 显式游标是用CURSOR.IS命令定义的游标,可以对查询语句(SELECT)返回的多条记录进行处理。 隐式游标是在执行插入(INSERT)、删除(DELETE)、修改(UPDATE)和返回单条记录的查询(SELECT)语句时由PL/SQL自动定义的。 8.5 Oracle 10g PL/SQL编程63R8.5 Oracle 10g PL/SQL编程 显式游标操作 l打开游标l推进游标l关闭游标 声明显式游标 要在程序中使用游标,必须首先定义游标。 CURSOR IS 64R8.5 Oracle 10g PL/SQL
36、编程 打开显式游标lOPEN 提取游标数据 lFETCH INTO , l或 FETECG INTO BULK COLLECT INTO ,LIMIT rows 当打开显式游标后,就可以使用FETCH语句来移动游标。 65R8.5 Oracle 10g PL/SQL编程 关闭显式游标lCLOSE l关闭游标,释放游标所占用的资源 。 游标的属性,只能使用在过程性语句中,而不能使用在SQL语句中。 l%found l%notfoundl%isopenl%rowcount 66R8.5 Oracle 10g PL/SQL编程 显式游标的FOR循环l当FOR循环开始时,游标自动读取结果集中的各行数据
37、。l使用游标FOR循环的时候不能使用OPEN、FETCH和CLOSE语句。 隐式游标处理lPL/SQL可以隐式地打开SQL游标,并在它内部处理SQL语句 。lSQL游标用来处理INSERT、UPDATE、DELETE或返回一行的SELECT.INTO语句。l打开SQL游标之前,SQL游标的属性都为NULL。67R8.5 Oracle 10g PL/SQL编程 游标变量l游标变量是一个引用类型(REF)的变量,可在运行时与不同的查询相关联 。l使用游标变量包括定义游标变量、打开游标变量、提取游标变量数据和关闭游标变量三个阶段。 声明游标变量lTYPE IS REF CURSOR RETURN l
38、首先声明一个游标变量类型,再定义游标变量。68R8.5 Oracle 10g PL/SQL编程 打开游标变量lOPEN For 提取游标变量数据lFETCH INTO 值 关闭游标变量lCLOSE l该操作用来释放查询所占用的资源,没有释放游标变量占用的存储空间 。69R5 异常处理l捕获系统异常并在EXCEPTION中捕获及处理自定义异常名,并手工抛出。l自定义异常,并在EXCEPTION中捕获及处理。 l为没有没有命名的系统错误号声明异常,并在EXCEPTION中捕获及处理。 语法EXCEPTIONWHEN THENWHEN OTHERS THEN8.5 Oracle 10g PL/SQL
39、编程70R8.5 Oracle 10g PL/SQL编程 处理预定义异常lPL/SQL对常见的异常预定义了异常名,主要有case_not_found、cursor_already_open、dup_val_on、invalid_number、no_data_found、too_many_rows、zero_divided 处理用户定义异常l用户定义的异常必须由用户自己说明并使用RAISE语句显式地提出。异常名不能出现在赋值语句或SQL语句中。l为了处理未命名的内部异常,必须使用OTHERS处理程序或用伪指令EXCEPTION_INIT。71R8.5 Oracle 10g PL/SQL编程6 过
40、程和函数u(1)子程序与过程 Oracle提供了4种子程序:l过程、函数;l包、触发器。 l存储过程不能由SQL语句直接使用,只能通过EXECUT命令或PL/SQL程序块内部调用。 72R8.5 Oracle 10g PL/SQL编程建立过程的语句格式 CREATE PROCEDURE ( IN|OUT|IN OUT ) IS|ASBEGINEND 说明:IN与OUT说明参数传递方向;IN表示参数传入过程,OUT表示结果从过程传出。 73R8.5 Oracle 10g PL/SQL编程 (2)函数 CREATE FUNCTION ( IN|OUT|IN OUT ) RETURN ISBEGIN
41、END 74R 7 包(package)u包由两个部分组成:规范和包主体(body) l规范声明变量、常量、游标和子程序,是程序包的接口。 l包主体定义在规范中声明的子程序和游标。 8 触发器u触发器总与一个表或数据库事件相联系,是在特定事件出现的时候自动执行的代码块。u触发器的组成部分:触发器名称、触发语句、触发器限制、触发操作和触发器名称。 8.5 Oracle 10g PL/SQL编程75R8.5 Oracle 10g PL/SQL编程u触发器类型:l语句触发器、行触发器、lINSTEAD OF 触发器、l系统条件触发器和用户事件触发器。u语句触发器l在表上或者某些情况下的视图上执行的特
42、定语句或语句组上的触发器。76R8.5 Oracle 10g PL/SQL编程u行触发器l为受到影响的各个行激活的触发器 l定义语句中包含FOR EACH ROW子句。 l在BEFOREOR EACH ROW触发器中,用户可以引用受到影响的行值。 uINSTEAD OF 触发器:更新视图u系统事件触发器:数据库启动、关闭,服务器错误 u用户事件触发器:用户登陆、注销 77R8.6 Oracle 数据查询SELECT DISTINCT *| AS FROM WHERE GROUP BY HAVLNG ORDER BY ASC/DESC说明: (1) 是将结果更名为表示的列。(2) 是将更名为表。
43、 (3)除了聚集函数外还允许使用对单列处理的函数 。(4)在连接条件表达式中,用(+)表示外连接。 78R8.6 Oracle 数据查询【例8.12】从数据库Student的学生表Student与成绩表Result中查询平均分及格的学生的学号、姓名、平均分,要求显示表栏目用中文标识。 select s.Num as 学号, s.Name as 姓名,avg(r.Fraction) as 平均分 from Student.Student s,Student.Result r where s.Num=r.Num group by s.Num having avg(r.Fraction)=6079R
44、8.7 Oracle 系统管理 Oracle数据库使用四种结构对数据保护: 数据库备份 日志 回滚段 控制文件80R8.7 Oracle 系统管理 数据库备份u由构成Oracle数据库的物理文件的操作系统备份所组成。u当发生介质故障时进行数据库恢复,利用备份文件恢复毁坏的数据文件或控制文件。81R8.7 Oracle 系统管理 日志u每一个Oracle数据库实例都提供日志,它记录数据库中所作的全部修改。u一个实例的日志至少由两个日志文件组成。u当实例故障或介质故障时进行数据库部分恢复 ,利用数据库日志中的改变应用于数据文件,修改数据库数据到故障出现的时刻。 82R8.7 Oracle 系统管理
45、u数据库日志由两部分组成:在线日志和归档日志。l每一个运行的Oracle数据库实例都相应地有一个在线日志,它与Oracle后台进程LGWR一起工作,记录该实例所做的全部修改。 l归档日志是可选择的,一个Oracle数据库实例一旦被在线日志填满后,可形成在线日志的归档文件。归档的在线日志文件被唯一标识、并合成归档日志。 83R8.7 Oracle 系统管理 回滚段u用于存储正在进行的事务(未提交的事务)所修改值的原值。u该信息在数据库恢复过程中用于撤消任何非提交的修改。n控制文件 u用于存储数据库的物理结构的状态。u控制文件中某些状态信息在实例恢复和介质恢复期间用于引导Oracle。848.7
46、Oracle 系统管理 1 在线日志u一个Oracle数据库的每一实例有一个相关联的在线日志,也称联机日志。u在线日志文件填入日志项,日志项记录的数据用于记录对数据库所做的全部修改。u后台进程LGWR以循环方式写入在线日志文件。 u日志开关: Oracle的一个在线日志文件从结束写入到开始写入到另一个在线日志文件的点。 85R8.7 Oracle 系统管理u镜像在线日志文件 为了安全地将在线日志文件的实例镜像到它的在线日志文件,Oracle提供镜像功能。 uOracle后台进程DBWR(“数据库写”进程)将SGA中所有被修改的数据库缓冲区(包含提交和未提交的)写入到数据文件,将这样的事件称为“
47、出现一个检查点”。86R8.7 Oracle 系统管理 2 归档日志u填满的在线日志文件组在归档时要建立归档日志,或称离线日志。u归档机制 决定于归档设置,归档已填满的在线日志组的机制可由Oracle后台进程ARCH自动归档或由用户进程发出语句手工归档。 87R8.7 Oracle 系统管理n数据库运行在两种不同方式下uNOARCHIVELOG方式 l不能进行在线日志的归档 l该方式仅能保护数据库实例故障,利用存储在在线日志中的信息可实现实例故障恢复。l不能保护介质(磁盘)故障。88R8.7 Oracle 系统管理uARCHIVELOG方式 l可实施在线日志的归档l在实例启动时,通过设置参数L
48、OG-ARCHIVE-START可启动ARCH进程。因此,DBA可交互地启动或停止自动归档。l一旦在线日志文件组变为不活动时,ARCH进程自动对它归档。89R8.7 Oracle 系统管理 3 数据库备份 数据库备份分为物理备份和逻辑备份 u物理备份l将实际物理文件(数据库文件)从一处拷贝到另一处,通常是从磁盘到磁盘、磁带或光盘的备份。l操作系统备份、冷备份、热备份都是物理备份的例子。 90R8.7 Oracle 系统管理u逻辑备份l利用SQL从数据库中抽取数据并存入二进制文件。这些数据可以重新引入原来的数据库,或者以后引入其他数据库。lOracle提供的Import/Export可以用来进行
49、数据库的逻辑备份。91R8.7 Oracle 系统管理 Oracle在进行物理备份时,有两种选择:u冷备份。 使用shut down normal命令完全关闭数据库后执行备份数据库的操作。u热备份 在数据库打开并用的状态下,进行数据库的物理备份。由于许多系统的高需求性不允许关机,这是一种较好的备份过程。 92R8.7 Oracle 系统管理 4 数据库恢复u实例故障的恢复 l当实例意外地(如掉电、后台进程故障等)或预料地(发出SHUTDOUM ABORT语句中止时)出现实例故障,此时需要实例恢复 。l实例恢复将数据库恢复至故障之前的事务一致状态。 93R8.7 Oracle 系统管理u介质故障
50、的恢复l当一个文件、一个文件的部分或一个磁盘不能读或不能写时出现的故障。 l简单恢复 如果数据库是可运行的,以致它的在线日志仅可重用但不能归档,此时介质恢复为使用最新的完全后备的简单恢复。94R8.7 Oracle 系统管理l实际恢复 如果数据库可运行,其在线日志是被归档的,该介质故障的恢复是一个实际恢复过程,重构受损的数据库恢复到介质故障前的一个指定事务一致状态。 95R8.7 Oracle 系统管理 如果数据库是在ARCHIVELOG方式运行,有两种不同类型的介质恢复u完全介质恢复 当所有必要的日志可用时,完全介质恢复可恢复全部丢失的修改。 l关闭数据库的恢复l打开数据库的离线表空间的恢复