oracle实验报告一至五 张凤荔

更新时间:2024-05-24 04:27:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验 1 数据库管理

一、目的和要求

(1)了解 Oracle 数据库的逻辑结构和物理结构; (2)了解 Oracle Enterprise Manager 的使用情况; (3)学习关闭和启动数据库实例的方法; (4)学习使用 SQL 语句创建数据库的方法; (5)学习使用 SQL 语句删除数据库的方法。

二、实验准备

首先要了解 Oracle 数据库的逻辑结构,包括方案(schema)对象、数据块(data block)、区间(extent)、段(segment)和表空间(tablespace)等。数据库由若干个表空间组成,表空间由表组成,段由区间组成,区间则由数据块组成。Oracle 数据库的物理结构由构成数据库的操作系统文件所决定。每个 Oracle 数据库都由 3 种类型的文件组成:数据文件、日志文件和控制文件。这些数据库文件为数据库信息提供真正的物理存储。

Enterprise Manager 10g 是 Oracle 10g 提供的新的管理工具,简称 EM。使用它可以完成启动、关闭数据库,创建、删除数据库等功能。只有系统管理员或拥有 CREAT E DATABASE权限的用户才能创建数据库。可以在 Enterprise Manager 中通过图形界面创建数据库,也可以使用 CREATE DATABASE 语句创建数据库。 三、实验内容

(1)练习使用不同方法启动和关闭数据库实例。

(2)练习使用不同 方法创建和删除数据库,要使操作的数据库为用户管理数据库UserMan。

1.使用 SHUTDOWN 命令关闭数据库实例

练习使用 SHUTDOWN 命令关闭数据库实例,分别按以下方式启动数据库实例。

(1)正常关闭。等待当前所有已连接的用户断开与数据库的连接,然后关闭数据库。

正常关闭的语句如下: SHUTDOWN NORMAL

(2)立即关闭。回退活动事务处理并断开所有已连接的用户,然后关闭数据库。立即

关闭的语句如下:

SHUTDOWN IMMEDIATE

(3)事务处理关闭。完成事务处理后断开所有已连接的用户,然后关闭数据库。事务

处理关闭的语句如下:

SHUTDOWN TRANSACTIONAL

(4)中止关闭。中止数据库实例,立即关闭数据库。中止关闭的语句如下: SHUTDOWN ABORT

每次执行 SHUTDOWN 语句关闭数据库实例之前,请执行 STARTUP 命令启动数据库。

2.使用 STARTUP 命令启动数据库实例

练习使用 STARTUP 命令启动数据库实例,分别按以下方式启动数据库实例。 (1)启动数据库实例时不装载数据库。执行此操作的命令如下: STARTUP NOMOUNT

(2)启动数据库实例,装载数据库,但不打开数据库。通常在数据库维护时执行此操作,对应的命令如下: STARTUP MOUNT

(3)启动后限制对数据库实例的访问。执行此操作的命令如下: STARTUP RESTRICT

(4)强制实例启动。在遇到特殊异常的情况时,可以强制启动实例。强制启动实例的

语句如下:

STARTUP FORCE

每次执行 STARTUP 语句启动数据库实例之前,请执行 SHUTDOWN 命令关闭数据库。

3.使用 ORACLE Enterprise Manager 关闭数据库实例 按照下面的步骤关闭数据库实例。 (1)在数据库处于打开状态 时,使用 SYS 用户以 SYSD BA 身份登录到 EnterpriseManager。在主目录页面的“一般信息”栏目中,可以看到“关闭”按钮。 (2)单击“关闭”按钮,可以打开“主机和目标数据库身份证明”页面。用户需要拥有管理员 的权限才能关闭数据库实 例,包 括主机操作 系统的管理员和当前数据库实例的SYSDBA 用户。

(3)输入完成后,单击“确定”按钮,打开“确认关闭”页面。

(4)单击“是”按钮,开始关闭数据库。关闭操作完成后,单击“刷新”按钮,打开“启动数据库实例”页面。

4.使用 ORACLE Enterprise Manager 启动数据库实例 按照下面的步骤启动数据库实例。

(1)使用 SYS 用户以 SYSDBA 身份登录到 Enterprise Manager。

(2)单击“启动”按钮,打开“主机和目标数据库身份证明”页面。用户需要拥有管理员的权限才能启动数据库实例,包括主机操作系统的管理员和当前数据库实例的SYSD BA用户。

(3)输入完成后,单击“确定”按钮,打开“确认打开”页面。 (4)单击“是”按钮,开始打开数据库。

5.使用 SQL 语句创建数据库

按照如下条件创建数据库 UserMan。

(1)设置 SYS 用户的密码为 SYSPWD,设置 SYSTEM 用户的密码为 SYSTEMPWD。

(2)使用已有的控制文件。

(3)指定日志文件组 redo01.log,大小为 10MB;指定日志文件组 redo02.log,大小为10MB。设置最大的日志文件数量为 10。 (4)定义日志文件组中最大的日志文件数量为 5。 (5)定义最大的数据文件数量为 100。 (6)定义数据库中最大的实例数量为 1。 (7)定义存储数据的字符集为 US7ASCII。

(8)定义数据文件名称为 SYS01.dbf,初始大小为 100MB。 (9)定义默认的表空间为 tbs_1。

(10)定义临时表空间为 tempts 1。

(11)定义临时文件为 temp01.dbf,大小为 10MB。 CREATE DATABASE 语句如下:

CREATE DATABASE OracleDB

USER SYS IDENTIFIED BY SYSPWD

USER SYSTEM IDENTIFIED BY SYSTEMPWD CONTROLFILE REUSE

LOGFILE GROUP 1 (?redo01.log?) SIZE 10M ,

GROUP 2 (?redo02.log? ) SIZE 10M ,

MAXLOGFILES 10 MAXLOGMEMBERS 5 MAXDATAFILES 100 MAXINSTANCES 1

CHARACTER SET US7ASCII

DATAFILE ?sys01.dbf? SIZ E 100M REUSE EXTENT MANAGEMENT LOCAL DEFAULT TABLESPACE tbs_1

DEFAULT TEMPORARY TABLESPACE tempts1

6.使用 SQL 语句删除数据库

按照如下步骤删除数据库 UserMan。

(1)在删除数据库之前,需要用户以 SYSDBA 或 SYSOPER 身份登录,代码如下:

CONNECT SYS/SYSPWD AS SYSDBA;

其中 SYSPWD 为 SYS 用户的密码,请根据实际情况输入。 (2)关闭数据库,再以 MOUNT 模式启动数据库,代码如下: SHUTDOWN IMMEDIATE; STARTUP MOUNT;

(3)删除数据库,代码如下:

DROP DATABASE ;

实验2 角色和用户管理

一、实验内容

1. 使用SQL语句创建数据库角色

语句如下:CREATE ROLE UserManRole IDENTIFIED BY myrollpwd;

2. 使用SQL语句为数据库角色授权

语句如下:GRANT CONNECT TO UserManRole;

GTANT RESOURCE TO UserManRole;

3. 使用SQL语句创建数据库用户

语句如下:CREATE USER UserManAdmin

IDENTIFIED BY UserPwd

DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP; 设置系统权限

GRANT UNLIMITED TABLESPACE TO UserManAdmin;

4. 使用SQL语句制定用户角色

语句如下:GRANT UserManRole TO UserManAdmin;

实验3 表和视图管理

实验内容

1. 使用SQL语句创建表 语句如下:

CREATE TABLE UserManAdmin.Users (UserID Number Primary key,

UserName Varchar2(40) NOT NULL, UserType Number(1), UserPwd Varchar2(40) );

CREATE TABLE UserManAdmin.LoginInfo (UserID Number,

LoginTime CHAR(20) NOT NULL );

2. 使用SQL语句向表中插入数据 语句如下:

INSERT INTO UserManAdmin.Users VALUES(1,'Admin',1,'AdminPwd'); INSERT INTO UserManAdmin.Users VALUES(2,'User',2,'UserPwd'); INSERT INTO UserManAdmin.Users VALUES(3,'Liuli',3,'LiuliPwd');

INSERT INTO UserManAdmin.Users VALUES(4,'Wangfan',4,'WangfanPwd'); COMMIT;

INSERT INTO UserManAdmin.LoginInfo VALUES(1,'2012-03-27 10:33:02'); INSERT INTO UserManAdmin.LoginInfo VALUES(1,'2012-03-28 08:34:13'); INSERT INTO UserManAdmin.LoginInfo VALUES(1,'2012-03-29 09:13:11'); INSERT INTO UserManAdmin.LoginInfo VALUES(2,'2012-03-27 07:35:02'); INSERT INTO UserManAdmin.LoginInfo VALUES(2,'2012-03-28 08:11:54');

INSERT INTO UserManAdmin.LoginInfo VALUES(2,'2012-03-29 09:13:11'); INSERT INTO UserManAdmin.LoginInfo VALUES(3,'2012-03-27 08:33:02'); INSERT INTO UserManAdmin.LoginInfo VALUES(3,'2012-03-28 09:34:13'); INSERT INTO UserManAdmin.LoginInfo VALUES(3,'2012-03-29 10:13:11'); INSERT INTO UserManAdmin.LoginInfo VALUES(4,'2012-03-27 11:33:02'); INSERT INTO UserManAdmin.LoginInfo VALUES(4,'2012-03-28 13:34:13'); INSERT INTO UserManAdmin.LoginInfo VALUES(4,'2012-03-29 15:13:11');

COMMIT;

3. 练习使用SQL语句修改表中数据 语句如下:

UPDATE UserManAdmin.Users SET UserPwd='AdminPassword' WHERE UserName='Admin';

SELECT UserPwd FROM UserManAdmin.Users WHERE UserName='Admin';

4. 练习使用SQL语句删除表中数据 语句如下:

DELETE FROM UserManAdmin.Users WHERE UserName='Wangfan'; SELECT * FROM UserManAdmin.Users;

5. 练习使用SELETE语句查询数据 语句如下:

SELECT * FROM UserManAdmin.Users;

SELECT UserName AS X,UserPwd AS 100798 FROM UserManAdmin.Users;

SELECT * FROM UserManAdmin.Users WHERE UserType=2;

SELECT UserPwd FROM UserManAdmin.Users WHERE UserName='Admin'; SELECT * FROM UserManAdmin.Users ORDER BY UserName DESC; SELECT COUNT(*) FROM UserManAdmin.Users;

SELECT u.UserName, l.LoginTime FROM UserManAdmin.Users u INNER JOIN UserManAdmin.LoginInfo l ON

u.UserID=l.User

6.练习使用SQL语句创建视图 语句如下:

CREATE VIEW UserLogin

AS

SELECT u.UserName, l.LoginTime FROM UserManAdmin.Users u INNER JOIN UserManAdmin.LoginInfo l ON u.UserID=l.UserID;

实验4 管理索引和序列

实验内容

1. 使用SQL语句创建索引 语句如下:

CREATE TABLE Users

(UserID Number Primary key,

UserName Varchar2(40) NOT NULL, UserType Number(1), UserPwd Varchar2(40) );

CREATE INDEX index_username ON Users(UserName) TABLESPACE Users;

2. 在创建表的同时创建索引 语句如下:

CREATE TABLE Employees

(EmpId NUMBER PRIMARY KEY, EmpName VARCHAR2(50) UNIQUE, Sex CHAR(2), UserID NUMBER );

3. 使用SQL语句创建序列 语句如下:

CREATE SEQUENCE E MINVALUE 1 NOMAXVALUE START WITH 1 INCREMENT BY 1 NOCYCLE CACHE 20;

4. 在插入数据时使用序列 语句如下:

INSERT INTO Employees (EmpId, EmpName) VALUES (EMP_S.NEXTVAL, 'Employee1');

INSERT INTO Employees (EmpId, EmpName) VALUES (EMP_S.NEXTVAL, 'Employee2');

INSERT INTO Employees (EmpId, EmpName) VALUES (EMP_S.NEXTVAL, 'Employee3'); COMMIT;

SELECT * FROM Employees;

实验 5 PL/SQL 编程

实验内容:

1.使用条件语句

执行例9.4中程序,观察运行结果。 例9.4

下面演示了IF语句的使用方法,代码如下: SET ServerOutput ON; DECLARE

Num INTEGER := -11; BEGIN

IF Num < 0 THEN

dbms_output.put_line('负数'); ELSIF Num > 0 THEN

dbms_output.put_line('正数'); ELSE

dbms_output.put_line('0'); END IF; END; /

程序中声明了一个整形变量Num,使用IF语句判断Num是正数、负数或者0,程序运行结果为‘负数’。

2.使用分支语句

执行例9.5中程序,观察运行结果。 例9.5

使用CASE语句根据给定的整数输出对应的星期值,代码如下: SET ServerOutput ON; DECLARE

varDAY INTEGER := 3; Result VARCHAR2(20); BEGIN

Result := CASE varDAY

WHEN 1 THEN '星期一' WHEN 2 THEN '星期二' WHEN 3 THEN '星期三' WHEN 4 THEN '星期四' WHEN 5 THEN '星期五' WHEN 6 THEN '星期六' WHEN 7 THEN '星期七' ELSE '数据越界' END;

dbms_output.put_line(Result); END; /

程序中声明了一个整形变量varDAY和一个字符型变量Result。使用CASE语句判断varDAY变量是星期几。如果变量varDAY在1~7之间,则能显示相应的星期信息:否则返回提示信息‘数据越界’。程序运行结果为‘星期三’。

3.使用循环语句

执行例9.6和例9.9中程序,观察运行结果。 例9.6

下面是关于LOOP…EXIT…END语句的示例程序,代码如下: SET ServerOutput ON; DECLARE

v_Num INTEGER := 1; v_Sum INTEGER := 0; BEGIN LOOP

v_Sum := v_Sum + v_Num;

dbms_output.put_line(v_Num); IF v_Num = 3 THEN EXIT; END IF;

dbms_output.put_line(' + '); v_Num := v_Num + 1; END LOOP;

dbms_output.put_line(' = '); dbms_output.put_line(v_Sum); END; /

程序将计算1~3的累加结果,程序运行如下: 1+2+3=6

例9.9

例9.6的程序也可以用FOR…IN…LOOP…END LOOP语句实现,代码如下: SET ServerOutput ON; DECLARE

v_Num INTEGER; v_Sum INTEGER := 0; BEGIN

FOR v_Num IN 1..3 LOOP

v_Sum := v_Sum + v_Num;

dbms_output.put_line(v_Num); IF v_Num < 3 THEN

dbms_output.put_line(' + '); END IF; END LOOP;

dbms_output.put_line(' = '); dbms_output.put_line(v_Sum); END; /

1. 使用PL/SQL函数

执行例9.12和例9.26中的程序,观察运行结果。 例9.12

如果要计算-4的绝对值,可以执行一下命令。 SET ServerOutput ON; BEGIN

dbms_output.put_line(ABS(-4)); END; /

例9.26

执行以下语句可以统计Users中最小的用户编号: SELECT MIN(UserID) FROM UserManAdmin.Users;

本文来源:https://www.bwwdw.com/article/74o7.html

Top