Oracle数据库系统实验上机内容指导书2.docx
《Oracle数据库系统实验上机内容指导书2.docx》由会员分享,可在线阅读,更多相关《Oracle数据库系统实验上机内容指导书2.docx(113页珍藏版)》请在冰豆网上搜索。
![Oracle数据库系统实验上机内容指导书2.docx](https://file1.bdocx.com/fileroot1/2023-8/4/0416489b-d02f-4b80-bdc5-00611c53a532/0416489b-d02f-4b80-bdc5-00611c53a5321.gif)
Oracle数据库系统实验上机内容指导书2
第一章Oracle基本知识与SQL*PLUS环境
一.上机目的
1.熟悉Oracle的基本知识。
2.熟悉Oracle的命令操作环境SQL*PLUS。
3.熟悉并掌握一些SQL*PLUS命令。
二.预备知识
1.Oracle数据库管理系统的简介
1979年,硅谷的一个小公司推出了Oracle,这是第一个与数据访问语言SQL结合的关系数据库。
今天,Oracle公司已是世界上数据库管理系统及相关产品的最大供应商。
发布于1985年的Oracle第5版,是第一个真正的客户/服务器数据库系统。
Oracle8以及Oracle8i是Oracle公司的最新产品。
2.Oracle8服务器
Oracle8服务器是一个精致的信息管理环境。
它是一个大量数据的储藏所,并给用户提供对这些数据的快速访问。
Oracle8服务器允许应用系统之间共享数据。
信息存放在一个地方并由许多应用系统来使用。
Oracle8服务器可运行在Sun系列以及WindowsNT上。
Oracle8服务器运行在很多不同的计算机上,支持下列配置:
●基于主机的配置用户直接连到存放数据库的同一计算机上。
●客户机/服务器结构用户通过网络从他们的个人计算机(客户机)上访问数据库,数据库驻留在一个分离的计算机(服务器)上。
●分布式处理用户访问存放在不止一台计算机上的数据库。
数据库分散在不止一台机器上,用户并不需要了解他们存放的数据的实际存放位置。
●Web计算能从基于Internet的应用程序访问数据。
3.PersonalOracle
从1995年处开始,Oracle推出了在Dos和MicrosoftWindows环境下的个人计算机产品。
运行PersonalOracle需要如下的配置:
●386以上的中央处理单元(CPU),推荐486或奔腾。
●最小60MB磁盘空间。
●处理器速度不低于40MHZ,66MHZ以上更好。
●最少16MB的扩充内存。
●MicrosoftWindows95或者NT.
本书主要以PersonalOracle为主进行说明。
4.Oracle产品
5.SQL,SQL*Plus和PL/SQL
●SQL是一种能够访问关系数据库(包括Oracle数据库)的语言。
它能够用在每一个Oracle工具中。
●SQL*Plus是一个SQL和PL/SQL都能用的Oracle产品,并且也有自己的命令语言。
●PL/SQL是为了编写应用程序和操作数据的Oracle过程化语言,包含着SQL命令的子集,它适用于每个CDE产品。
6.Oracle数据库系统的体系结构
Oracle数据库系统是具有管理Oracle数据库功能的计算机软件系统。
每一个运行的Oracle数据库与一个Oracle实例(instance)相联系。
一个Oracle实例是存取和控制一数据库的软件机制。
每一次在数据库服务器上启动一数据库时,称为系统全局区(systemglobalarea)的一内存区(简称SGA)被分配,有一个或多个Oracle进程被起动。
该SGA和Oracle进程的结合称为一个Oracle数据库实例。
一个实例的SGA和进程为管理数据库数据、为该数据库一个或多个用户服务而工作。
在Oracle系统中,首先是实例启动,然后由实例装配(mount)一个数据库。
1)进程结构
进程(process)是操作系统中的一种机制,它可执行一系列的操作步骤。
在有些操作系统中使用作业(JOB)或任务(TASK)的术语。
一个进程通常有它自己的专用存储区。
Oracle进程的体系结构设计使性能最大。
Oracle实例有两种类:
单进程实例和多进程实例。
单进程Oracle(又称单用户Oracle)是一个数据库系统,一个进程执行全部Oracle代码。
由于Oracle部分和客户应用程序不能分别以进程执行,所以Oracle的代码和用户数据库应用是单个进程执行,其结构如图1-2所示。
在单进程环境下的Oracle实例,仅允许一个用户存取。
例如在MS-DOS上运行Oracle。
多进程Oracle实例(又称多用户Oracle)使用多个进程来执行Oracle的不同部分,对于每一个连接的用户都有一个进程,如图1-3所示。
在多进程系统中,进程分为两类:
用户进程和Oracle进程。
当一用户运行一应用程序,如Pro*c程序或一个Oracle工具(如SQL*Plus),为用户运行的应用建立一个用户进程。
Oracle进程又分为两类:
服务器进程(serverprocess)和后台进程(backgroundprocess),服务器进程用于处理连接到该实例的用户进程的请求。
当应用和Oracle是在同一台机器上运行,而不再通过网络,一般将用户进程和它相应的服务器进程组合成单个进程,可降低系统开销。
然而,当应用和Oracle运行在不同的机器上时,用户进程经一个分离服务器进程Oracle通信。
它执行下列任务:
●对应用所发出的SQL语句进行语法分析和执行。
●从磁盘(数据文件中)读入必要的数据块到SGA的共享数据库缓冲区(该块不在缓冲区时)。
●将结果返回给应用程序处理。
系统为了使性能最好和协调多个用户,在多进程系统中使用一些附加进程,称为后台进程。
在许多操作系统中,后台进程是在实例启动时自动地建立。
一个Oracle实例可以有许多后台进程,但它们不是一直存在。
后台进程的名字为:
●DBWR数据库写入程序
●LGWR日志写入程序
●CKPT检查点
●SMON系统监控
●PMON进程监控
●ARCH归档
●RECO恢复
●LCKn封锁
●Dnnn调度进程
●Snnn服务器
2)内存结构
Oracle在内存存储下列信息:
●执行的程序代码。
●连接的会话信息(包括当前不活动的)。
●程序执行期间所需要数据(如查询的当前状态)。
●Oracle进程间通信和共享的信息(如封锁信息)。
●存储在外存储上的缓冲信息。
Oracle具有下列基本的内存结构:
●软件代码区
●系统全局区(SGA),包括数据库缓冲存储区、日志缓冲区和共享池
●程序全局区(PGA),包括栈区和数据区。
●排序区(sortarea)。
7.SQL*Plus命令
SQL*Plus有许多命令,表1-1只是列举了一部分常用的供读者参考。
表1-1常用SQL*Plus命令
SQL*Plus命令
缩写
意义
APPENDtext
Atext
把字符串增加到当前行的末尾
CHANGE/old/new/
C/old/new/
把当前行的旧字符串替换成新字符串
CHANGE/text/
C/text/
把当前行中字符串删除
CLEARBUFFER
CLBUFF
从SQL缓冲区中删除所有行
DEL
删除当前行
INPUT
I
插入许多行
INPUTtext
Itext
插入一个包含text字符串的行
LIST
L
显示SQL缓冲区的所有行
LISTn
Ln
显示SQL缓冲区中的一行到n行
LISTmn
Lmn
SQL缓冲区中的从第m行显示到第n行
RUN
R
显示并运行在缓冲区中的当前SQL命令
SAVEfilename
把SQL缓冲区中的内容保存到以filename为名字的文件中,默认路径为orawin\bin
GETfilename
把以filename为名字的文件内容调入SQL缓冲区中
STARTfilename
@filename
运行以前保存的命令文件
EDfilename
用默认的编辑器编辑保存的文件内容
EXIT
退出SQL*Plus
RUNFORMfilename
从SQL*Plus中运行一个OracleForms应用程序
SPOOLfilename
写所有的后面的命令或者输出到一个已经命名的文件中。
假脱机输入输出文件的后缀为.LIS
SPO[OL]OFF|OUT
OFF关闭假脱机输入输出文件;OUT改变假脱机输入输出,送文件到打印机上
DESCRIBEtablename
DESCtablename
显示任何数据库表的数据结构
HELP
击活Oracle内部的帮助部件
HOSTcommand
在SQL*Plus中击活一个操作系统命令
CONNECTuserid/password
CONNuserid/password
在当前的登录下,击活其它的Oracle用户
PROMPTtext
当运行一个命令文件时,显示文本
三.上机内容
1.SQL*Plus的启动
当读者登录到操作系统后,你有三种方法启动SQL*Plus。
1)SQLPLUS
读者将看到如下的信息:
SQL*Plus:
Version3.1.1ProductiononMonOct41993
Copyright(C)1992,OracleCorporation,California,USA.
Allrightsreserved.
EnterUsername:
输入你的用户名字并按回车。
SQL*Plus将提示:
EnterPassword:
输入你的密码并按回车。
那么,读者将看到SQL*Plus的提示符:
SQL>
例如:
SQLPLUS
SQL*Plus:
Release9.2.0.1.0-Productionon星期二10月3010:
15:
042007
Copyright(c)1982,2002,OracleCorporation.Allrightsreserved.
连接到:
Oracle9iEnterpriseEditionRelease9.2.0.1.0-Production
WiththePartitioning,OLAPandOracleDataMiningoptions
JServerRelease9.2.0.1.0-ProductionEnterUsername:
scott
EnterPassword:
tiger
SQL>
2)SQLPLUSUsername
再提示你输入密码。
例如:
SQLPLUSscott
EnterPassword:
tiger
SQL*Plus:
Version3.1.1ProductiononMonOct41993
Copyright(C)1992,OracleCorporation,California,USA.
Allrightsreserved.
SQL>
3)SQLPLUSusername/password
例如:
SQLPLUSscott/tiger
SQL*Plus:
Version3.1.1ProductiononMonOct41993
Copyright(C)1992,OracleCorporation,California,USA.
Allrightsreserved.
SQL>
4)退出SQL*Plus
SQL>EXIT
SQL*Plus显示Oracle版本之后显示操作系统提示符。
2.SQL命令
SQL命令包括数据定义语言(如Create、Alter等)和数据操作语言(SelectInsertUpdateDelete等),这些都可在SQL*Plus中使用。
如:
SQL>SELECTEMPNO,ENAME,JOB,SAL
2FROMEMPWHERESAL<2500;
3.SQL*Plus命令
1)列出缓冲区的内容:
SQL>LIST
SQL*Plus显示当前缓冲区中的命令:
1SELECTEMPNO,ENAME,JOB,SAL
2FROMEMPWHERESAL<2500;
2)编辑当前行
如果上面的例子错误的输入为:
SQL>SELECTEPNO,ENAME,JOB,SAL
2FROMEMPWHERESAL<2500;
在屏幕上显示:
SELECTEPNO,ENAME,JOB,SAL
*
ERRORatline1:
ORA-0904:
invalidcolumnname
分析错误可以发现EMPNO错为EPNO。
则用CHANGE命令修改编辑当前行。
如:
SQL>CHANE/EPNO/EMPNO
修改的行在屏幕上显示:
1*SELECTEMPNO,ENAME,JOB,SAL
再用RUN命令运行当前命令。
SQL>RUN
SQL*PLUS列出其命令然后运行它。
1SELECTEMPNO,ENAME,JOB,SAL
2FROMEMPWHERESAL<2500;
3)增加一行
在当前行之后插入一新行,使用INPUT命令。
例如对上面例子增加第3行到该SQL命令中。
形式如下:
SQL>INPUT
3
接着可进入新行,然后按ENTER键,SQL*PLUS再次提示新行:
3ORDERBYSAL
4
按ENTER键,表示不进入任何行,然后用RUN检验和重新运行查询。
4)在一行上添加一原文
用APPEND命令,将一原文加到缓冲区中当前行的末端:
SQL>LIST
3*ORDERBYSAL
SQL>APPENDDESC
3*ORDERBYSALDESC
使用RUN检验和重新运行查询。
5)删除一行
●用LIST命令列出要删除的行。
●用DEL命令删除。
SQL>LIST
3*ORDERBYSALDESC
SQL>DEL
6)用系统编辑程序编辑命令
在SQL*PLUS中运行操作系统缺省的文本编辑程序(EDIT),命令形式为:
SQL>EDIT
EDIT将缓冲区中的内容装入系统缺省的文本编辑器,然后用文本编辑器的命令编辑文本。
完成后保存编辑的文本,然后退出。
该文本保存到当前的缓冲区。
7)保存SAVE命令
SQL>SAVE文件名
例如:
SQL>LIST
1SELECTEMPNO,ENAME,JOB,SAL
2FROMEMPWHERESAL<2500;
然后用SQVE保存到EMPINFO文件中:
SQL>SAVEempinfo
Createdfileempinfo
8)运行命令文件
可用命令START文件名或者@文件名的命令格式。
如上例:
SQL>STARTEMPINFO
或SQL>@EMPINFO
9)清缓冲区
SQL>CLEARBUFFER
10)DESCRIBE列出表的结构
如:
SQL>DESCEMP
Name
Null?
Type
EMPNO
NOTNULL
NUMBER(4)
ENAME
VARCHAR2(10)
JOB
VARCHAR2(10)
MGR
NUMBER(4)
HIREDATE
DATE
SAL
NUMBER(7,2)
COMM
NUMBER(7,2)
DEPTNO
NOTNULL
NUMBER
(2)
4.PL/SQL命令
SQL>Declare
1Begin
2SELECT*FROMEMP;
3EXCEPTION
4WHENNO_DATA_FOUNDTHEN
5RASIE_APPLICATION_ERROR(-12201,’Nodatafound’)
6End;
查询结果将显示出来。
四.上机作业
1.练习SQL命令:
SELECT*FROMEMP;。
2.用LIST显示缓冲区内容。
3.用CHANGE命令修改当前行。
4.用APPEND增加一部分命令。
5.用EDIT编辑缓冲区内容。
6.用SAVE命令保存缓冲区内容到EMPFILE中。
7.用START命令运行EMPFILE文件。
8.清除缓冲区。
第二章数据表的创建
一.上机目的
1.了解并掌握Oracle中表结构的定义。
2.了解并掌握Oracle中的用Create命令定义表的方法,以及表的完整性定义。
3.了解并掌握Oracle中的用Alter命令和Drop命令对表的修改和删除。
二.预备知识
DDL是SQL命令的子集,用来创建、修改、删除Oracle数据库结构。
这些命令能立即影响数据库和数据字典字段信息。
1.表名命名规则
所用的表名必须满足下面的条件:
a)名字必须以A-Z或a-z的字母开始;
b)名字可以包括字母、数字和特殊字母(_)。
字符$和#也是合法的,但是这种用法不提倡;
c)名字大小写是一样的;例如EMP、emp和eMp是表示同一个表;
d)名字最长不超过30个字符;
e)表名不能和其它的对象重名;
f)表名不能是SQL保留字。
表2-1表名命名举例
名字
合法
EMP85
YES
85EMP
NO(开始不是字母)
FIXED_ASSETS
YES
FIXEDASSETS
NO(包含空格)
UPDATE
NO(SQL保留字)
2.字段类型
表2-2字段类型
数据类型
描述
VARCHAR2(w)
变长字符长度为w。
最长为2000个字符。
CHAR(w)
定长字符长度为w。
默认为1个字符;最长为255个字符
NUMBER
38位有效数字的浮点数
NUMBER(w)
W位精确度的整数,范围从1至38
NUMBER(w,s)
W是精度,或总的数字书,范围从1至38。
S是比例,或是小数点右边的数字位。
比例的范围从-84至127
DATE
日期值,范围从公元前14712年1月到公元314712年12月
LONG
变长字符串,其最大长度为2G(或231-1个字节)
RAW和LONGRAW
面向字节数据,可存储字符串、浮点数,二进制数据等
3.Create命令
1)、CREATETABLEtable_name(column_nametype(size),column_nametype(size),…);
例如:
CREATETABLEDEPT
(DEPTNONUMBER
(2),
DNAMEVARCHAR2(12),
LOCVARCHAR2(12));
2)、CREATETABLEtable_name[(column_name,…)]ASSELECTstatement;
例如:
CREATETABLEDEPTNO10(NAME,LOCATION)
ASSELECTDNAME,LOCFROMDEPT
WHEREDEPTNO=10;
4.完整性约束
Oracle允许用户为表和列定义完整性约束来增强一定的规则。
可分为:
表约束和字段约束
5.约束类型
1)、NOTNULL约束
NOTNULL约束保证字段值不能为NULL。
没有NOTNULL约束的字段,值可以为NULL。
2)、UNIQUE约束
指定一个字段或者字段的集合为唯一键。
在表中没有两行具有相同的值。
如果唯一键是基于单条记录的,NULL是允许的。
表约束命令格式:
,[CONSTRAINTconstraint_name]UNIQUE(Column,Column,…)
字段约束命令格式:
[CONSTRAINTconstraint_name]UNIQUE
例如:
CREATETABLEDEPT
(DEPTNONUMBER,DNAMEVARCHAR2(9),
LOCVARCHAR2(10),
CONSTRAINTUNQ_DEPT_LOCUNIQUE(DNAME,LOC));
UNQ_DEPT_LOC是一个表约束。
3)、主键约束(PrimaryKeyConstraint)
主键约束强制字段和字段集合的唯一性,并且用一个唯一索引来管理它。
每个表中只能用一个主键,这样可以通过主键来标识表中的每条记录。
NULL值不允许在主键字段出现。
表约束命令格式:
,[CONSTRAINTconstraint_name]PRIMARYKEY(Column,Column,…)
字段约束命令格式:
[CONSTRAINTconstraint_name]PRIMARYKEY
例如:
用字段约束定义DEPTNO为主键
CREATETABLEDEPT
(DEPTNONUMBER
(2)CONSTRAINTDEPT_PRIMPRIMARYKEY,
…);
4)、外键约束
外键提供表内或表间的完整性规则。
外键必须依赖于一个primary或uniquekey。
表约束命令格式:
,[CONSTRAINTconstraint_name]FOREIGNKEY(Column,Column,…)REFERENCEtable(column,column,…)
字段约束命令格式:
[CONSTRAINTconstraint_name]FOREIGNKEYtable(column)
例如:
CREATETABLEEMP
(…
CONSTRAINTFK_DEPTNOFOREIGNKEY(DEPTNO)REFERENCEDEPT(DEPTNO));
5)、Check约束
CHECK约束定义了每条记录必须满足的条件
语法:
[CONSTRAINTconstraint_name]CHECK(condition)
6.Alter命令
ALTERTABLE命令可用来修改数据表的定义。
命令格式:
ALTERTABLEtablename
[ADD或MODIFY或DROPoptions](column_spec[column_constraint])[ENABLEclause或DISABLEclause]
ADD关键字可以用来给已存在的数据表增加一个字段或约束。
如:
给EMP增加一个字段
ALTERTABLEEMP
ADD(SPOUSES_NAMECHAR(10));
Tablealtered。
MODIFY关键字可以用来修改已存在的数据表定义。
如:
把EMP中ENAME长度改为25个字符
ALTERTABLEEMP
MODIFY(ENAMCHAR(25));
Tablealtered。
DROP关键字可以用来删除已存在数据表的约束。
如:
把EMP中主键删除
ALTERTABLEEMP
DROPPRIMARYKEY;
Tablealtered。
7.Drop命令
用DROPTABLE命令删除Oracle数据表的定义。
命令格式:
DROPTABLEtable_name[CASCADECONSTRAINT]
例如:
DROPTABLEEMP;
CASCADECONSTRAINT选项说明了也把完整性约束一起删除。
注意:
●DROPTABLE也把数据表中的数据删除。
●数据表