oracle实验指导书之全本

更新时间:2023-11-16 00:39:01 阅读量: 教育文库 文档下载

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

Oracle数据库 实验指导

段华斌 编著

计算机与通信工程系

实验一

实验名称:数据库的管理 实验学时:2 实验目的:

1)了解Oracle数据库的逻辑结构和物理结构。 2)熟悉Oracle的命令操作环境SQL*PLUS。

3)了解启动和关闭数据库的不同方式及其优缺点。 4)熟悉掌握各种启动、关闭方式。 实验内容及步骤:

1、 SQL*Plus的启动与关闭

(一)SQL*Plus的启动

当登录到操作系统后,有三种方法启动SQL*Plus。 方法一:

(1) 执行―开始‖→―程序‖→―Oracle – OraDb11g_home1‖→―应用程序开发‖→―SQL Plus‖命令,打开SQL Plus窗口,显示登录界面。

(2) 在登录界面中将提示输入用户名,根据提示输入相应的用户名和口令(例如system和admin)后按Enter键,SQL*Plus将连接到默认数据库。

(3) 连接到数据库之后,显示SQL>提示符,可以输入相应的SQL命令。

方法二:

(1) 执行―开始‖→―程序‖→―附件‖→―命令提示符‖,打开命令提示符窗口。 (2) 输入命令:Sqlplus / nolog

Connect sys/口令 as sysdba

方法三:

(1) 执行―开始‖→―程序‖→―附件‖→―命令提示符‖,打开命令提示符窗口。 (2) 输入命令:sqlplus 用户名/口令 as sysdba。

(二)断开与数据库的连接 SQL>DISCONNECT

(三)退出SQL*Plus SQL>EXIT 或:

SQL>Quit

(四)启动sqlplus,可能的故障ORA-12560

造成ORA-12560: TNS: 协议适配器错误的问题的原因有三个:

(1)监听服务没有起起来。windows平台个一如下操作:开始---程序---管理工具---服务,打开服务面板,启动TNSlistener服务。

(2)database instance没有起起来。windows平台如下操作:开始---程序---管理工具---服务,打开服务面板,启动oracleserviceXXXX,XXXX就是你的database SID.

(3)进入sqlplus前,在command line下输入 set oracle_sid=XXXX,XXXX就是你的database SID。

2、 使用shutdown命令关闭数据库

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

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

SHUTDOWN NORMAL

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

SHUTDOWN IMMEDIATE

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

SHUTDOWN TRANSACTIONAL

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

3、 使用startup命令启动数据库

练习使用STARTUP命令启动数据库实例,分别按以下方式启动数据库实例。 (1)启动数据库实例时不装载数据库。执行此操作的命令如下: STARTUP NOMOUNT (2)启动数据库实例,装载数据库,但不打开数据库。通常在数据库维护时执行此操作,对应的命令如下:

STARTUP MOUNT

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

STARTUP RESTRICT

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

STARTUP FORCE

4.改变数据库的状态

(1)装载数据库实例。

在执行某些管理操作时,数据库必须启动、装载一个实例,但此时数据库处于关闭状态。 ALTER DATABASE MOUNT

(2)打开已关闭的数据库。 ALTER DATABASE OPEN

(3)以只读方式打开数据库。

ALTER DATABASE OPEN READ ONLY

思考题:

1、在数据库的nomount、mount、open三种模式下,分别打开数据库的什么文件?

2、当关闭数据库时使用shutdown命令,好久没有关闭,随即将“命令提示符”窗口关闭,之后重新“启动命令提示符”并登录SQL*PLUS,使用shutdown immediate关闭数据库出现如下问题如何解决?

ORA-24324: 未初始化服务句柄 ORA-24323: 不允许此值

ORA-01090: 正在关闭 - 不允许连接

3、如何把数据库从nomount状态改为mount状态?

实验二

实验名称:日志文件的管理 实验学时:2 实验目的:

1)了解日志文件的作用。

2)了解管理重做日志文件的准则。

3)掌握重做日志文件组及成员的添加、清除、删除等操作方法。 实验内容及步骤:

重做日志文件对于Oracle数据库来说是至关重要的,Oracle数据库的变化,都会生成相应的重做日志,这些日志被记录在重做日志文件中。 1、 重做日志文件的查看

(1)查看数据库各组联机重做日志文件的日志序列号: SQL>ARCHIVE LOG LIST;

SQL>SELECT GROUP#,SEQUENCE# FROM V$LOG; (2)查看日志文件组的状态:

SQL>SELECT GROUP#,STATUS FROM V$LOG; (3)查看重做日志组及其成员的基本信息:

SQL>SELECT GROUP#,STATUS,MEMBER FROM V$LOGFILE; 2、 添加重做日志文件组

SQL>ALTER DATABASE ADD LOGFILE

2 GROUP 4 ('E:\\REDO04_1.LOG') 3 SIZE 10M;

3、 添加重做日志文件组的成员

方法一:

SQL>ALTER DATABASE ADD LOGFILE MEMBER 2 'E:\\REDO04_2.LOG' 3 TO GROUP 4;

方法二:如果不知道组编号,可以通过下述操作向组中其他成员的名称来添加新的成员:

SQL>ALTER DATABASE ADD LOGFILE MEMBER 2 'E:\\REDO04_3.LOG' 3 TO

4 (?E:\\REDO04_1.log‘,‘ 'E:\\REDO 04_2.log‘); 查询v$log可以看到添加完成后的结果:

SQL>SELECT GROUP#,MEMBERS,STATUS,FIRST_TIME FROM V$LOG; 4、 删除重做日志文件组成员:

SQL>ALTER DATABASE DROP LOGFILE MEMBER ' E:\\REDO04_3.LOG '; 5、 删除重做日志文件组:

SQL>ALTER DATABASE DROP LOGFILE GROUP 4; 可能的错误信息:

Ora-01623:日志10 是实例orcl的当前日志。 解决方法:

SQL> alter system switch logfile;

SQL> select * from v$log; 交替日志文件组,如果多次切换后想要删除的重做日志组状态依旧是active的时候可以重启动一下数据库。

6、 清除重做日志文件组:

SQL>ALTER DATABASE CLEAR LOGFILE GROUP 3; 7、 改变数据库的归档模式:

(1) 修改初始化参数 ,指定归档位置和归档日志文件的命名方法。 SQL> ALTER SYSTEM

2 SET LOG_ARCHIVE_DEST='D:\\ORACLE\\ORADATA\\ARCHIVE'; SQL> ALTER SYSTEM

2 SET LOG_ARCHIVE_DUPLEX_DEST='E:\\ORACLE\\ARCHIVE'; SQL> ALTER SYSTEM

2 SET LOG_ARCHIVE_FORMAT='%R_%T_%S.ARC' SCOPE=SPFILE; (2) 关闭数据库实例SHUTDOWN IMMEDIATE; (3) Startup mount;

(4) Alter database archivelog; (5) Alter database open;

8、 强制进行日志切换,以检查日志文件能否正确归档。

SQL>ALTER SYSTEM SWITCH LOGFILE;

在资源管理器中查看指定归档位置下的归档日志文件。 9、 查看数据库的当前模式:

SQL>SELECT NAME,LOG_MODE FROM V$DATABASE; 10、 查看数据库的归档进程信息:

SQL>SELECT * FROM V$ARCHIVE_PROCESSES; 11、 查询数据库的归档日志文件名称、重做日志序列号以及每次归档的完成时间等。

SQL>SELECT NAME,SEQUENCE#,COMPLETION_TIME FROM V$ARCHIVED_LOG;

思考题:

1、 移动、重命名重做日志文件成员的步骤如下,请完成各步骤的命令代码。

(1)关闭数据库。

(2)将重做日志文件E:\\REDO04_3.LOG移动或复制到D盘,并重命名为REDO04_03.LOG。

(3)以MOUNT状态打开数据库。 (4)重命名数据库的重做日志文件。 (5)打开数据库。

(6)查看重做日志文件信息。

2、在实验内容中添加重做日志文件组group4时,是否可以将group4 改为group1?改为group6呢?请分别说明原因。

3、当重做日志文件组被清除后,该组还可以继续使用吗?为什么?

实验三

实验名称:角色和用户管理 实验学时:2 实验目的:

1)了解数据库用户。

2)熟悉创建、更改、删除、查看用户的方法。 3)了解数据库的不同权限。

4)掌握权限的授予和回收的方法。

5)了解权限、角色的不同点以及它们之间的关系。 6)熟练掌握对角色的管理。 实验内容及步骤:

在Oracle中,只有具有一定权限的用户才能对数据库进行操作。在安装Oracle时,数据库本身会自动创建一些用户或帐户,如SYS、SYSTEM、SYSMAN、DBSNMP等,这些预定义的用户具有特殊的权限能管理数据库。用SYS用户来实现创建、更改、删除用户等操作。

1、 创建用户

CREATE USER语句在数据库中创建新用户,语法如下: CREATE USER <用户名>

IDENTIFIED {BY <口令>|EXTERNALLY|GLOBALLY} [ PASSWORD EXPIRE ]

[ ACCOUNT LOCK | UNLOCK ]

[TEMPORARY TABLESPACE <临时表空间>]; [DEFAULT TABLESPACE <默认表空间>]

[QUOTA quota [ K | M ] | UNLIMITED ON 表空间] [ PROFILE 概要文件 ]

例1:创建管理用户USERMAN。

CREATE USER USERMAN IDENTIFIED BY USERMAN; 2、 更改用户

ALTER USER语句也可以修改用户信息。 (1) 修改密码密码。

例2:将用户USERMAN的密码修改为NewPassword: ALTER USER USERMAN IDENTIFIED BY NewPassword;

(2)PASSWORD EXPIRE关键词设置密码过期。

例3:设置用户USERMAN的密码立即过期,它在下一次登录时必须修改密码: ALTER USER USERMAN PASSWORD EXPIRE;

(3)ACCOUNT LOCK关键词锁定用户。

例4:锁定用户USERMAN,使其无法登录到数据库: ALTER USER USERMAN ACCOUNT LOCK;

(4)ACCOUNT UNLOCK关键词解锁用户。 例5:解除对用户USERMAN的锁定: ALTER USER USERMAN ACCOUNT UNLOCK;

3、 删除用户

DROP USER语句也可以删除指定的用户。 DROP USER 用户名 [CASCADE];

4、 查询用户

例5:SELECT username, profile,account_status,created FROM dba_users

WHERE username=’ty’;

不同用户可以对数据库进行不同的操作,所有对数据库可以进行操作的用户都必须具有一定的操作权限,而不同用户权限不全相同。为不同用户赋予不同权限的目的是为了保证数据库的安全,以下关于用户赋予、回收权限的操作。

5、 授予系统权限

使用GRANT语句,其语法如下:

GRANT system_privilege [ , ... ] TO

{ user_name [ , ... ] | role_name [ , ... ] | PUBLIC } [ WITH ADMIN OPTION ] ;

例6:对于用户USERMAN授予SYSDBA角色: GRANT SYSDBA TO USERMAN;

6、 授予对象权限

使用GRANT语句,其语法如下:

GRANT object_privilege [ , ... ] | ALL [ PRIVILEGES ] ON object_name TO { user_name [ , ... ] | role_name [ , ... ] | PUBLIC } [ WITH GRANT OPTION ] ;

Oracle数据库的权限太多,对权限的管理工作太复杂,使用角色可以很好的解决这个

问题。角色是权限的集合,以下关于角色的管理。

7、 创建角色

创建角色的语法如下: Create role 角色名

[not identified | identified {by 口令|externally|globally}]; 例7: 创建一个角色sr_admin,还用数据库口令认证方式。 create role sr_admin identified by admin; 8、 给角色授权

给角色授权的语法如下:

Grant {All|对象权限1 [,对象权限2?] }[列1[,列2]?] On{[模式名.]对象名|directory 目录名} to 角色 [with grant option];

例8:grant create session to sr_admin; 9、 删除角色

Drop role 删除角色 格式: Drop role 角色; 思考题:

完成如下操作的命令代码: 1、 以sys用户登陆sqlplus.

sqlplus sys/123 as sysdba 2、 创建角色role1。

Create role role1

3、为角色role1授予create session、resource权限。 grant create session to role1; grant resource to role1;

3、 创建用户,指定密码、表空间。用户名命名以本人姓名的拼音首字母缩写+‘_’+学号

最后两位。

Create user ty_06 identified by 123

default tablespace users temporary tablespace temp; 5、修改用户密码。

alter user ty06 identified by 123;

6、为用户授予系统权限UNLIMITED TABLESPACE。 grant UNLIMITED TABLESPACE to ty06; 7、为用户指定角色role1。 grant role1 to ty06;

8、收回用户的UNLIMITED TABLESPACE权限。 revoke UNLIMITED TABLESPACE from ty06; 9、锁定用户。 10、解锁用户。 12、删除用户。

13、删除角色role1。

14、忘记SYS用户的解决方法。 Sqlplus / as sysdba

Alter user sys identified by 123; Commit;

Connect sys/123 as sysdba

实验4

实验名称:表的管理 实验学时:4 实验目的:

1)了解Oracle表和视图的概念。 2)熟练掌握使用SQL语句创建表。 3)学习使用SELECT语句查询数据。 实验内容及步骤: 1、 创建表

CREATE TABLE语句的基本使用方法如下所示: CREATE TABLE [.]

( [DEFAULT expr] [CONSTRAINT constraint_name constraint_def]

[, [DEFAULT expr] [CONSTRAINT constraint_name constraint_def],?] [CONSTRAINT constraint_name constraint_def]] [TABLESPACE 表空间名] [PCTFREE n] [PCTUSED n] [INITRANS n]

[STORAGE (storage)])

例1、创建表Users,SQL语句如下: CREATE TABLE dhb.Users1

(UserId Number Primary Key, UserName Varchar2(40), UserType Number(1),

UserPwd Varchar2(40));

2、 修改表

添加列语法形式如下:

ALTER TABLE [schema.] table_name

ADD new_column data_type [dafault expr ]

[CONSTRAINT constraint_name constraint_def] [, [DEFAULT expr] [CONSTRAINT constraint_name constraint_def],…]; 例2、在表Users中添加一个列tmpcol:

SQL> ALTER TABLE Users ADD (tmpcol NUMBER(5,2));

3、 插入数据

INSERT语句的基本使用方法如下所示:

INSERT INTO <表名> (列名1, 列名2, …, 列名n) VALUES (值1, 值2, …, 值n); 例3、向表Users中插入数据

INSERT INTO Users (UserId, UserName, UserType, UserPwd) VALUES ( 1, 'Admin', 1, 'Admin'); COMMIT; 4、 修改数据

UPDATE语句的基本使用方法如下所示:

UPDATE <表名> SET 列名1 = 值1, 列名2 = 值2, …, 列名n = 值n WHERE <更新条件表达式>

例4、将用户Admin的密码修改为111111: UPDATE Users

SET UserPwd='111111'

WHERE UserName='Admin'; COMMIT WORK; 5、 删除数据

DELETE命令删除表中的数据: DELETE <表名>

WHERE <删除条件表达式>

例5、删除表Users中列UserName等于空('')的数据: DELETE FROM Users WHERE UserName = ''; COMMIT WORK; 6、 查询数据

(1)SELECT语句的基本语法结构如下: SELECT子句 [ INTO 子句 ] FROM 子句

[ WHERE 子句 ] [ GROUP BY 子句] [ HAVING 子句 ] [ ORDER BY 子句 ]

SELECT语句中各子句的说明: SELECT子句 SELECT子句 INTO 子句 FROM 子句 WHERE 子句 HAVING 子句 UNION运算符 COMPUTE子句 指定由查询返回的列 创建新表并将结果行插入新表中 指定从其中检索行的表 指定查询条件 指定组或聚合的搜索条件 将两个或更多查询的结果组合为单个结果集,该结果集包含联合查询中的所有查询的全部行 生成合计作为附加的汇总列出现在结果集的最后。当与BY一起使用时,COMPUTE子句在结果集内生成控制中断和分类汇总。可在同一查询内指定COMPUTE BY和COMPUTE FOR子句用于指定BROWSE或XML选项 描述 GROUP BY 子句 指定查询结果的分组条件 ORDER BY 子句 指定结果集的排序 FOR子句 OPTION子句 应在整个查询中使用指定的查询提示。每个查询提示只能指定一次,但允许指定多个查询提示。用该语句只可能指定一个OPTION子句。查询提示影响语句中的所有运算符。如果主查询中涉及UNION,则只有涉及UNION运算符的最后一个查询可以有OPTION子句。 例6、在SELECT语句中查询指定的列名 COL EMP_NAME FORMAT A20 COL SEX FORMAT A10 COL TITLE FORMAT A10

SELECT Emp_name, Sex, Title FROM dhb.Employees; (2)使用ROWNUM

(3)使用LIKE关键字实现模糊查询 Oracle的通配符及其含义 % _ ? # [] 包含零个或多个任意字符的字符串 任意单个字符 任意单个字符 表示0——9的数字 指定范围或集合中的任意单个字符 查询所有身份证号中包含ddd的员工记录

例7、SELECT EMP_NAME, TITLE, IDCard FROM DHB.Employees WHERE IDCard LIKE 'Yd%';

(3)在SELECT中使用DECODE函数 DECODE函数语法如下:

DECODE(<输入值>,<值1>,<结果1>,[,<值2>,<结果2>…][,<默认结果>])

如果<输入值>等于<值1>,则DECODE函数返回<结果1>;如果<输入值>等于<值2>,则DECODE函数返回<结果2>,以此类推。如果参数列表中没有与<输入值>相等的值,则DECODE函数返回<默认结果>

例8、SELECT Emp_name, DECODE(Sex, '男', '先生', '女', '女士', '未知') AS Sex FROM DHB.Employees;

(4)在SELECT中使用CASE函数

CASE函数还可以根据不同逻辑表达式是否成立来决定函数的返回值,语法如下: CASE

WHEN <逻辑表达式1> THEN <结果1> [WHEN <逻辑表达式2> THEN <结果2> …] [ELSE <默认结果>] END

例9:在Employees中,将员工工资分3个级别,工资小于等于3000的级别为低,工资大于3000且小于5000的级别为中,工资大于等于5000的级别为高。

SELECT Emp_name, Wage, CASE WHEN Wage<=3000 THEN '低' WHEN Wage>3000 AND Wage<5000 THEN '中' WHEN Wage>=5000 THEN '高' END AS GRADE FROM DHB.Employees;

(5)保存查询结果

在CREATE TABLE语句中使用SELECT子句可以将查询结果集填充到新建的表中。新表的

结构由选择列表中列的特性定义。语法如下: CREATE TABLE <新表名> AS