大型数据库(Oracle)
实验指导
指导老师:彭虎
适用班级:信B0932
20##年8月25日 制定
实验一 Oracle安装与维护
一、实验目的
1.了解并掌握Oracle 10的安装方法
2.了解并掌握测试安装好的Oracle 10g的方法
二、实验内容及步骤
1.软件下载
Oracle公司针对个人学习之用提供免费的学习版本,可直接到Oracle公司的官方网站www.oracle.com上免费下载。
2.安装步骤
(1) 运行setup.exe,出现“Oracle Database 10g安装”画面。
(2) “下一步”进入“Oracle Universal Installer:指定文件位置”, 设置源“路径”、“名称”和目的“路径”。
(3) “下一步” 进入“Oracle Universal Installer:选择安装类型”,选择安装类型。
(4) 保持默认值,下一步,进入“Oracle Universal Installer:选择数据库配置”,选择数据库配置。
(5) 保持默认值,下一步,进入“Oracle Universal Installer:指定数据库配置选项”,指定“全局数据库名”和“SID”,对这两个参数的指定一般相同,例如:oract。也可以将“全局数据库名”设置为域名。例如:oract.abc.com如果选择“创建带样本方案的数据库,OUI会在数据库中创建HR、OE、SH等范例方案(sample schema)
(6) 下一步,进入“Oracle Universal Installer:选择数据库管理选项”。
(7) 保持默认值,下一步,进入“Oracle Universal Installer:指定数据库文件存储选项”。
(8) 保持默认值,下一步,进入“Oracle Universal Installer:指定备份和恢复选项”。
(9) 保持默认值,单击“下一步”,进入“Oracle Universal Installer:指定数据库方案的口令”,对不同的帐户设置不同的口令。
(10) 单击“下一步”,继续安装,进入“Oracle Universal Installer:概要”。
(11) 单击“安装”,开始安装过程,大约半小时。
(12) 数据库创建完成时,显示“Database Configuration Assistant”窗口。
(13) 单击“口令管理”,进入“口令管理”窗口。
(14) 解锁用户HR、OE和SCOTT,输入HR和OE的口令,SCOTT的默认口令为tiger。
(15) 单击“确定”返回“Database Configuration Assistant”窗口。
(16) 在图15所示窗口单击“确定”,进入“Oracle Universal Installer:安装 结束”窗口。
(17) 检查,单击“退出”,完成安装。
(18) 在自动打开的浏览器中以sys账户sysdba身份登录10g的企业管理器。第一次要接受license,单击I agree,以后就不用了。
3.测试安装好的Oracle 10g
在安装过程中,OUI会在 <ORACLE_HOME>\install下创建两个文件:
readme.txt:记录各种Oracle应用程序的URL与端口。
Portlist.ini:记录Oracle应用程序所使用的端口。
(1) 登录Enterprise Manager 10g Database Control
与以前的版本不同,Oracle企业管理器只有B/S模式。在浏览器中输入下列URL:http://<Oracle服务器名称>:1158/em
例如:http://localhost:1158/em
进入Enterprise Manager 10g登录窗口。以SYSDBA身份登录Oracle数据库。
(2) 使用iSQL*Pls登录Oracle数据库
iSQL*Plus是B/S模式的客户端工具。在Mydb浏览器中输入下列URL:
http://<Oracle服务器名称>:5560/isqlplus
例如:http://localhost:5560/isqlplus
进入iSQL*Plus登录窗口。用system帐户登录Oracle数据库。
(3) 使用SQL*Pls登录Oracle数据库
SQL*Plus是C/S模式的客户端工具程序。
单击“开始” > “所有程序” > “Oracle – Oracle10g_home” > “Application Development” > “SQL*Plus”
在登录窗口中输入system帐号与口令
(4) 使用命令行SQL*Pls登录Oracle数据库
传统的SQL*Plus是一个命令行客户端程序。在命令窗口中输入命令进行测试。
思考与练习:
在Windows操作系统下安装Oracle 10g数据库以后,计算机的运行速度明显降低,可以采取哪些措施应对。
实验二 创建数据库和表
一、实验目的
1. 掌握使用DBCA创建数据库
2. 掌握手工创建Oracle数据库的方法
3. 掌握创建数据表的方法
二、实验内容及步骤
1. 使用DBCA创建数据库
(1) 打开DBCA组件,创建数据库sale.
(2) 安装完后进入E:\oracle\product\10.2.0\db_1\install目录,打开readme文件,查看打开OEM的URL。
(3) 登陆OEM,管理sale数据库。
2. 手工创建Oracle数据库
数据库名:mydb
安装路径:d:\oracle\product\10.2.0\
(1)、手工创建相关目录
D:\oracle\product\10.2.0\admin\mydb
D:\oracle\product\10.2.0\admin\mydb\adump D:\oracle\product\10.2.0\admin\mydb\bdump
D:\oracle\product\10.2.0\admin\mydb\udump
D:\oracle\product\10.2.0\admin\mydb\cdump
D:\oracle\product\10.2.0\admin\mydb\ddump
D:\oracle\product\10.2.0\admin\mydb\pfile
D:\oracle\product\10.2.0\oradata\mydb
(2)、手工创建初始化参数文件D:\oracle\product\10.2.0\admin\mydb\pfile\ init.ora,内容可以copy别的实例init.ora文件后修改。
(3)、在命令提示符下,使用orapwd.exe命令,创建口令文件pwdmydb.ora,命令格式如下:
orapwd file=D:\oracle\product\10.2.0\db_1\database\pwdmydb.ora password=123 entries=5
(4)、通过oradim.exe命令,在服务里生成一个新的实例管理服务,启动方式为手工
set ORACLE_SID=mydb
oradim -new -sid MYDB -pfile D:\oracle\product\10.2.0\db_1\database\initmydb.ora
(5)、在命令提示符下打开sqlplus编辑器,创建服务器参数配置文件spfile.
sqlplus /nolog
SQL>connect / as SYSDBA
SQL>create spfile=’D:\oracle\product\10.2.0\db_1\database\spfilemydb.ora’ FROM pfile=’D:\oracle\product\10.2.0\admin\mydb\pfile\init.ora’;
SQL>startup nomount pfile="D:\oracle\product\10.2.0\admin\mydb\pfile\init.ora";
(6)、创建数据库,执行createdb.sql脚本命令,
SQL>@Createdb.sql
Createdb.sql脚本内容如下:
create database mydb
maxinstances 8
maxloghistory 1
maxlogfiles 16
maxlogmembers 3
maxdatafiles 100
logfile group 1 'd:\oracle\product\10.2.0\oradata\mydb\redo01.log' size 10m,
group 2 'd:\oracle\product\10.2.0\oradata\mydb\redo02.log' size 10m
datafile 'd:\oracle\product\10.2.0\oradata\mydb\system01.dbf' size 100m
autoextend on next 10m extent management local
sysaux datafile 'd:\oracle\product\10.2.0\oradata\mydb\sysaux01.dbf' size 30m
autoextend on next 10m
default temporary tablespace temp
tempfile 'd:\oracle\product\10.2.0\temp.dbf' size 10m autoextend on next 10m
undo tablespace undotbs1 datafile 'd:\oracle\product\10.2.0\oradata\mydb\undotbs1.dbf' size 20m
character set zhs16gbk
national character set al16utf16
user sys identified by mydb
user system identified by manager
/
(7)、创建数据库数据文件,执行脚本createfiles.sql
SQL>@createfiles.sql
Createfiles.sql脚本内容如下:
CREATE TABLESPACE "INDX" LOGGING DATAFILE 'd:\oracle\product\10.2.0\oradata\mydb\indx01.dbf' SIZE 25M REUSE AUTOEXTEND ON NEXT 1280K MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL;
CREATE TABLESPACE "TOOLS" LOGGING DATAFILE 'd:\oracle\product\10.2.0\oradata\mydb\tools01.dbf' SIZE 10M REUSE AUTOEXTEND ON NEXT 320K MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL;
CREATE TABLESPACE "USERS" LOGGING DATAFILE 'd:\oracle\product\10.2.0\oradata\mydb\users01.dbf' SIZE 25M REUSE AUTOEXTEND ON NEXT 1280K MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL;
CREATE UNDO TABLESPACE "UNDOTBS" DATAFILE 'd:\oracle\product\10.2.0\oradata\mydb\undotbs01.dbf' SIZE 200M REUSE AUTOEXTEND ON NEXT 5120K;
/
8、创建数据字典,运行createdbcatalog.sql脚本命令
SQL>@createdbcatalog.sql
Createdbcatalog.sql脚本内容如下:
@d:\oracle\product\10.2.0\db_1\rdbms\admin\catalog.sql;
@d:\oracle\product\10.2.0\db_1\rdbms\admin\catexp7.sql;
@d:\oracle\product\10.2.0\db_1\rdbms\admin\catblock.sql;
@d:\oracle\product\10.2.0\db_1\rdbms\admin\catproc.sql;
@d:\oracle\product\10.2.0\db_1\rdbms\admin\catoctk.sql;
@d:\oracle\product\10.2.0\db_1\rdbms\admin\catobtk.sql;
@d:\oracle\product\10.2.0\db_1\rdbms\admin\caths.sql;
@d:\oracle\product\10.2.0\db_1\rdbms\admin\owminst.plb;
connect SYSTEM/manager
@d:\oracle\product\10.2.0\db_1\sqlplus\admin\pupbld.sql;
connect SYSTEM/manager
/
3. 在ORCL数据库中创建表Employees、表Departments和表Salary,表结构如表1,2,3所示。
(1)在OEM中分别创建表
在OEM目录中,选择表单击鼠标左键,在出现的界面上单击“创建”按钮,进入“表创建”界面,在各个选项卡上输入表Employees各字段信息、约束条件等,单击“确定”按钮,创建表Employees即可完成,依次完成其它表的创建。
(2)使用SQL语句分别创建表
表1 employees表结构
表2 departments表结构
表3 salary表结构
实验三 表数据的插入、修改和删除
一、实验目的
1. 掌握修改、删除表的的方法。
2.掌握主键约束、外键约束、唯一约束和检查约束的建立及维护方法。
3.掌握外部表、临时表的使用方法。
4.掌握使用SQL语句对数据库表进行插入、修改和删除数据操作。
二、实验内容及步骤
分别使用OEM和PL/SQL语句,在实验2建立的表Employees、Departments和Salary中插入多行数据记录,然后修改和删除一些记录
1. 使用PL/SQL语句分别向表Employees、Departments和Salary中插入如下表所示数据记录。
表1 employees表数据
表2 departments表数据 表3 salary表数据
注意:在OEM中分别打开表Employees、Departments和Salary,观察数据变化。
2.使用PL/SQL命令修改各表中的某个记录的字段值。
(1)将表salary中编号为110001的职工收入改为2890;
(2)将表Departments表中生产部的名称修改为生产计划部;
(3)给每个职工增加收入100元。
修改完后使用select语句观察数据的变化。
3.删除所有性别为男的职工的记录。
4. 创建约束
(1)在employees表中创建主键约束,主码为employeeID,约束名为pk_employees_employeeID.
(2)创建外键约束,子表employees的departmentID字段参照主表
departments中的departmentID字段,约束名为fk_emp_dep_departtmentID.
(3)创建检查约束,employees表中的sex字段只能输入字符"男"或"女",约束名为ck_sex.
(4)在departments表的departmentName字段上创建唯一约束un_departmentName.
5. 修改及删除表
(1)将employees表中的zip字段删除,然后再增加一个字段,字段名为QQ,15位的变长字符型.
(2)将departments表删除.
6.将departments表中的数据以纯文本的形式保存到记事本中,并以逗号分隔,保存文件名为dp.txt,内容如下所示:
1,办公室
2,人力资源部
3,销售部
在oracle中创建dp.txt的外部表,然后用select语句进行简单查询.
7.创建事务临时表ttable保存employees表的临时数据,创建会话临时表保存departments表的临时数据.比较两个表的差别.
注:方法及命令格式请参照教材第10章,要求保存所有的SQL语句到文本文件形式的脚本中,以备检查。
实验四 数据库的查询
一、实验目的
1. 掌握SELECT语句的基本语法;
2. 掌握子查询的表示;
3. 掌握连接查询的表示;
4.掌握数据汇总的方法;
5.掌握层次查询的方法;
6.掌握分析查询的方法。
二、实验内容及步骤
1-4实验数据基于实验二给出的数据库表结构,及实验三给出的表数据。
1.SELECT语句的基本使用
(1)查询每个雇员的所有数据;
(2)查询每个雇员的地址和电话;
(3)查询EmployeeID为010001的雇员的基本信息;
(4)查询Employees表中女雇员的地址和电话,使用AS子句将结果中各列的标题分别指定为地址和电话;
(5)计算每个雇员的实际收入;
(6)找出所有姓王的雇员的部门号;
(7)找出所有收入在20##-3000之间的雇员号码。
2.子查询的使用
(1)查找在财务部工作的雇员的情况;
(2)查找财务部年龄不低于销售部雇员年龄的雇员的姓名。
3.连接查询的使用
(1)查询每个雇员的情况及其薪水情况;
(2)查找财务部收入在2200元以上的雇员姓名及其薪水详情。
4.数据汇总
(1)求各部门的雇员数;
(2)将各雇员的情况按收入由低到高排列;
(3)求财务部雇员的平均收入;
(4)求财务部雇员的平均实际收入;
(5)求财务部雇员的总人数。
5.基于d:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\scott.sql中的实验数据完成教材P159页第15题。
6. 层次查询
基于自行车结构的数据进行层次查询实验,脚本如下:
create table bicycle
( part_id number(5) constraint pk_bicycle_part_id primary key,
parent_id number(5) constraint fk_bicycle_pid references bicycle(part_id),
part_name varchar2(30) not null,
mp_cost number(9, 2),
describe varchar2(30)
);
insert into bicycle values(1, null, '自行车', 379.28, '装配');
insert into bicycle values(2, 1, '导向系统', 101.11, '制造');
insert into bicycle values(3, 1, '驱动系统', 159.56, '制造');
insert into bicycle values(4, 1, '其他部分', 118.61, '制造和采购');
insert into bicycle values(5, 2, '车把', 37.28, '制造');
insert into bicycle values(6, 2, '前叉', 24.35, '制造');
insert into bicycle values(7, 2, '前轴', 19.67, '制造');
insert into bicycle values(8, 2, '前轮', 19.81, '制造');
insert into bicycle values(9, 7, '前轴棍', 8.16, '制造');
insert into bicycle values(10, 7, '前轴身', 4.82, '制造');
insert into bicycle values(11, 7, '前轴碗', 6.69, '制造');
insert into bicycle values(12, 10, '前轴管', 1.61, '制造');
insert into bicycle values(13, 10, '前花盘', 3.21, '制造');
insert into bicycle values(14, 3, '脚蹬', 18.99, '制造');
insert into bicycle values(15, 3, '中轴', 25.27, '制造');
insert into bicycle values(16, 3, '链条', 21.65, '制造');
insert into bicycle values(17, 3, '飞轮', 29.12, '制造');
insert into bicycle values(18, 3, '后轴', 31.72, '制造');
insert into bicycle values(19, 3, '后轮', 32.81, '制造');
insert into bicycle values(20, 17, '外套', 9.35, '制造');
insert into bicycle values(21, 17, '平档', 5.82, '制造');
insert into bicycle values(22, 17, '芯子', 5.11, '制造');
insert into bicycle values(23, 17, '千斤', 6.56, '制造');
insert into bicycle values(24, 17, '钢珠', 2.28, '采购');
insert into bicycle values(25, 4, '车架', 81.78, '制造');
insert into bicycle values(26, 4, '车闸', 15.26, '制造');
insert into bicycle values(27, 4, '链罩', 7.10, '采购');
insert into bicycle values(28, 4, '车铃', 4.33, '采购');
insert into bicycle values(29, 4, '车锁', 5.02, '采购');
insert into bicycle values(30, 4, '支架', 5.12, '制造');
(1)按自行车结构层次的先后顺序,查询自行车树状结构数据;
(2)查询自行车导向系统分支的树状结构数据;
(3)在自行车树状结构数据中显示成本小于100元的零部件信息;
(4)对自行车的成本进行加密,然后显示出来,加密密钥可任意给定。
7. 分析查询
基于某书店20##年的图书销售的数据进行分析查询实验,脚本如下:
create table sales_fact_2006
( sale_year number(4) not null,
sale_quarter number(1) not null,
sale_month number(2) not null,
sale_book_id varchar2(20) not null,
sale_region varchar2(10) not null,
sale_person varchar2(10) not null,
sale_amount number(10, 2) null,
constraint pk_sales_f2006 primary key(
sale_year, sale_quarter, sale_month, sale_book_id, sale_region, sale_person)
);
insert into sales_fact_2006 values(2006, 1, 1, 'ISBN 7-X', '北京', '赵亦', 13526.12);
insert into sales_fact_2006 values(2006, 1, 2, 'ISBN 7-X', '北京', '钱尔', 8213.91);
insert into sales_fact_2006 values(2006, 1, 3, 'ISBN 7-X', '北京', '孙三', 33871.52);
insert into sales_fact_2006 values(2006, 2, 4, 'ISBN 7-X', '北京', '李斯', 22343.80);
insert into sales_fact_2006 values(2006, 2, 5, 'ISBN 7-X', '上海', '周武', 3455.93);
insert into sales_fact_2006 values(2006, 2, 6, 'ISBN 7-X', '上海', '孙三', 23427.72);
insert into sales_fact_2006 values(2006, 3, 7, 'ISBN 7-X', '香港', '杨琪', 897.15);
insert into sales_fact_2006 values(2006, 3, 8, 'ISBN 7-X', '香港', '钱尔', 12345);
insert into sales_fact_2006 values(2006, 3, 9, 'ISBN 7-X', '澳门', '冯久', 37817.12);
insert into sales_fact_2006 values(2006, 4, 10, 'ISBN 7-X', '澳门', '冯久', 6524.10);
insert into sales_fact_2006 values(2006, 4, 11, 'ISBN 7-X', '台北', '李斯', 93415.83);
insert into sales_fact_2006 values(2006, 4, 12, 'ISBN 7-X', '台北', '孙三', 23232.82);
(1)查询每个销售员的销售额,并使用sum()分析函数对每个窗口执行累加运算的分析,窗口范围为当前行及其后两行;
(2)制作一个总计表,表中包括每一个销售人员在每一个销售区域的销售额以及该销售额占该销售区域销售总额的比率;
(3)查询每个销售区域的销售额,并使用rank()函数计算每一行的相对位置。
实验五 PL/SQL编程
一、实验目的
1. 掌握PL/SQL程序块的结构;
2.掌握时间戳的使用;
3.掌握记录、PL/SQL表的使用;
4.掌握显示游标的使用;
5.掌握异常处理的方法。
二、实验内容及步骤
1.PL/SQL程序块
编写一个程序块,完成10以内偶数的累积。
2.时间戳
(1)显示一个时间戳,精确到纳秒。
(2)创建一个只包含一个数值型字段的表,往表中插入10000条记录,利用时间戳计算所用时间。
3.记录、PL/SQL表
(1)创建一个记录类型保存学生数据,类型名为STUDENT,包含XM,XB,BJ三个变量,然后定义一个该类型的变量STUDENT1,输入学生本个的信息,并输出。
(2)创建一个基类型为字符型的PL/SQL表类型,保存学生的姓名,然后定义一个该类型的变量STUDENT2,输入5名同学的姓名,并输出。
4.显示游标
编写一个程序块,定义一个游标,用于处理EMP表中工资大于1500的员工信息,如果员工的工资在1500到2000之间,则加上200,如果大于2000,则加上100,修改结果保存到EMP表中,并显示输出。
定义处理数据的变量要求用到%type。
注:关于显示游标,由于教材没有作详细说明,请查阅相关资料或教学课件。
5.异常处理
定义一个自定义异常too_many,当EMP表中的记录条数超过10条时,抛出异常,并输出“员工数量过多!”的信息。
6.练习教材第9章所示范例
实验六 用户、角色
一、实验目的
1. 掌握使用用户实现数据库安全性;
2. 掌握使用角色实现数据库安全性。
二、实验内容及步骤
1.创建用户
(1)创建一个用户ph,密码为oracle;
(2)授予连接数据库权限、创建表权限,并允许其将权限转授予其它用户;
(3)设置其默认表空间为USERS,并分配20M的配额;
(4)连接到ph账户下,将创建表权限授予SCOTT;
(5)在ph账户下创建表xs,字段为xm,cj;
(6)将xs表的插入数据权限授予SCOTT;
(7)连接到SCOTT账户下,插入一条数据(lucy,80)。
2.创建角色
(1)连接到system账户下,授予ph创建角色的权限;
(2)创建一个以你的姓名的拼音首字母为名字的用户;
(3)连接到ph账户下,创建一个角色student,密码为student;
(4)授予student角色查询xs表的权限;
(5)将student角色赋予你自己的名字的用户。
3.练习教材第8章所示范例
实验七 存储过程的使用
一、实验目的
1. 掌握存储过程的创建方法;
2. 掌握存储过程的调用方法;
二、实验内容及步骤
1.创建添加职员记录的存储过程EmpAdd,通过参数接收职员信息,然后将数据插入到EMP表中。
2.调用EmpAdd,往EMP表中插入一条数据,具体数据由自己组织,然后用SQL语句查询EMP表,检查存储过程是不是正确执行。
3.区分in、out和inout三类参数
(1)编写一个计算EMP表中指定部门职员人数的存储过程count_num1,定义一个in类型的参数bm用于输入部门信息,定义一个out类型的参数person_num用于输出部门人数。
(2)编写一个与(1)相同的存储过程count_num2,但参数类型都定义为inout类型。
(3)分别调用这两个过程,比较两者在参数使用上的不同之处。
4.练习教材第13章关于存储过程所示范例
实验八 VB连接Oracle数据库
一、实验目的
1. 掌握可视控件连接数据库的方法;
2. 掌握ADODB.CONNECTION连接数据库的方法;
3.掌握ODBC连接数据库的方法;
二、实验内容及步骤