oracle实验指导书之全本

更新时间:2024-05-26 07:22: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、当重做日志文件组被清除后,该组还可以继续使用吗?为什么?

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