第一篇:Oracle数据库实验报告
中南林业科技大学
实验报告
课程名称:
Oracle数据库 专业班级: 姓名:
学号:
****年**月**日
实验一
安装和使用Oracle数据库
【实验目的】
1.掌握Oracle软件安装过程,选择安装组件 2.掌握建立Oracle数据库,配置网络连接 3.掌握Oracle企业管理器的基本操作 4.使用SQL*Plus,登录到实例和数据库 5.掌握命令方式的关闭和启动实例及数据库 【实验内容】
1.查看已安装的Oracle组件
2.查看服务,记录下和数据库有关的服务名,将他们设为手动方式,启动相关服务。
3.配置监听器,查看是否在服务中有LISTENER,是否能启动。4.配置本地net服务,提示:设置正确的服务器地址和端口号。5.打开SQL*Plus,用SYS和SYSTEM用户名和密码登录。6.思考题:有几种打开SQL*Plus的方法?分别是什么? 7.用命令关闭实例和数据库,记录命令
8.用命令以NOMOUNT的方式启动实例,再加载数据库,打开数据库。
【实验结论】
1.查看已安装的Oracle组件
2.查看服务,记录下和数据库有关的服务名,将他们设为手动方式,启动相关服务。
3.配置监听器,查看是否在服务中有LISTENER,是否能启动。
4.配置本地net服务,提示:设置正确的服务器地址和端口号。
5.打开SQL*Plus,用SYS和SYSTEM用户名和密码登录。
6.思考题:有几种打开SQL*Plus的方法?分别是什么?(1)直接打开 sql plus 即窗口方式(2)cmd 命令行方式
(3)WEB 页面中 iSQL*Plus 方式 7.用命令关闭实例和数据库,记录命令 SQL>shutdown immediate
8.用命令以NOMOUNT的方式启动实例,再加载数据库,打开数据库。
sql>startup nomount sql>alter database mount;sql>alter database open;sql>startup
(1).用SQLplus 命令:show parameters参数名
(2).用select [列名] from 表名
2.初始化文件有几种?默认的保存位置在哪里?
初始化文件有三种:数据文件,日志文件,控制文件; 默认的保存位置E:oracleproduct10.2.0oradataorcl
4.打开OEM,查看三类物理文件信息
三类物理文件:数据文件、控制文件、日志文件 数据文件:.DBF存储表、索引及数据结构信息
日志文件:.LOG记录对数据库的所有修改信息,用于恢复
控制文件:.CTL二进制文件,记录数据库名、文件标识、检查点
5.分别用select命令查询V$parameter动态性能视图,用show命令查看全局数据库名、实例名、是否启动自动归档、标准数据块大小这四个参数的值,记录命令和结果。用select命令查询V$parameter动态性能视图
用show命令查看全局数据库名、实例名
用show命令查看是否启动自动归档、标准数据块大小
6.如何用命令查看数据文件、控制文件的文件名、存储位置和状态信息?
(1).查看数据文件的文件名、存储位置和状态信息
(2).查看控制文件的文件名、存储位置和状态信息
0
和服务器型文件都要找到),查看各类默认位置并记录下来(包括物理文件所在目录,该数据库相关的各个目录等),登录到mydb数据库。
2.用命令方式手工创建数据库testorcl
(1)创建批处理文件,建立必需的各级目录,参考第一题MYDB数据库的默认目录。
(4)运行数据库建立脚本,更改相关服务为手动启动方式
(5)运行数据字典等创建脚本
3.在DBCA中删除MYDB数据库。
Enter valuefor 4:runner Specify log path as parameter 5: Enter valuefor 5: D:oracleproduct10.2.0db_2RDBMSlog
二、完成下面的查询,记录查询命令和结果。1.查询HR方案种有哪些表,列出表名 2.设置行宽为160,每页行数为40 3.查询employees表中所有薪水在3000到6000元之间的员工编号、姓、名、受聘日期、工作代号、薪水、经理代号、部门号,按部门号升序排列,同一部门按员工编号降序排列
4.查询每个部门的人数、平均薪水、最高薪水、最低薪水,按部门编号升序排列
5.查询first_name的第三个字母是t的员工编号,first_name,电话号码,部门编号,部门名称
6.在job_history表中查询任职时间超过1年的员工编号,任职历时月份(保留整数),工作代号,部门代号。
7.查询每个部门经理的员工编号、姓名、薪水、部门号。
【实验结论】
一、需要访问HR示例方案中的表,如果机器上没有该示例方案,则运行相关包和相应配置装入HR方案。
1.将hr.rar解压到D:oracleproduct10.2.0db_2demoschema human_resources目录下,然后在SQL*PLUS 中执行 hr_main.sql
二、完成下面的查询,记录查询命令和结果。1.查询HR方案种有哪些表,列出表名
5.查询first_name的第三个字母是t的员工编号,first_name,电话号码,部门编号,部门名称
738
实验五
PL/SQL编程
【实验目的】
1.熟悉PL/SQL的数据类型和书写规则 2.熟悉控制结构和游标的使用 3.编写和运行函数、过程和触发器 【实验内容】
编写脚本文件,调试运行脚本文件,并记录结果。
1.在SQL*Plus中编写一个PL/SQL块,功能用于打印学生信息 在DECLARE部分完成:
(2)建立学生信息记录类型stu_record_type,包括学号,姓名,性别,籍贯,学习成绩和活动成绩。均为可变长字符类型(3)编写本地子过程:学生信息打印过程PrintStuRecord,把(1)中定义的记录类型作为参数(4)定义学生信息记录变量stu_record 在BEGIN…END部分完成:
(1)为stu_record变量的各个元素赋值如下: 学号:‘2001001’ 姓名:’李新’
性别:‘m’
籍贯:‘黑龙江省哈尔滨市’ 学习成绩:‘Excellent’
0
(1)建立学生信息记录类型stu_record_type,包括学号,姓名,性别,籍贯,学习成绩和活动成绩。均为可变长字符类型
set serveroutput on declare type stu_record_type is record
(s_no varchar2(8), s_name varchar2(10), s_sex varchar2(2), s_address varchar2(20), s_studyscore varchar2(10), s_activescore varchar2(10));(2)编写本地子过程:学生信息打印过程PrintStuRecord,把中定义的记录类型作为参数
procedure PrintStuRecord as begin dbms_output.put_line('学号:'|| stu_record.s_no);dbms_output.put_line('姓名 :'|| stu_record.s_name);dbms_output.put_line('性别:'|| stu_record.s_sex);dbms_output.put_line('籍贯:'|| stu_record.s_address);dbms_output.put_line('学习成绩:'|| stu_record.s_studyscore);dbms_output.put_line('活动成绩:'|| stu_record.s_activescore);end PrintStuRecord;(3)定义学生信息记录变量stu_record stu_record stu_record_type;在BEGIN…END部分完成:
(4)为stu_record变量的各个元素赋值如下: 学号:‘2001001’ 姓名:’李新’
性别:‘m’
籍贯:‘黑龙江省哈尔滨市’
2.建立对bookinfo表的DML触发器,一旦bookinfo表发生了任何变化,立即触发,对bookinfo表的数据进行统计,结果存储在数据统计表中
(1)如果没有则建立bookinfo表,选择建立在scott用户下,表结构为(bookno varchar2(36)Primary key, bookname varchar2(40)not null, authorname varchar2(10)not null, publishtime date, bookprice float)
create table bookinfo(bookno varchar2(36)Primary key,4
Selectcount(bookno),count(distinct authorname)from bookinfo;end;/
(4)在bookinfo表中插入、删除和更新信息,再查看major_stats表中数据的变化 <1>插入
647
实验六
模式对象管理与安全管理
【实验目的】
1.了解模式对象的类型
2.掌握在OEM中操作模式对象的方法
3.掌握命令方式建立表、视图、索引等常见对象的方法 4.熟悉Oracle中权限分类和设置,理解系统提供用户的角色和权限
5.熟练使用建立用户、角色,为用户授权、授予角色的命令
【实验内容】
1.创建一个TESTUSET用户,密码为test,默认表空间为user表空间
2.创建用户后为其授予登录数据库和创建数据库对象的权限 3.用TESTUSER用户登录数据库
4.创建学生信息表(学号,姓名,性别,入学成绩),定义主键和输入数据(至少5条数据),提交添加的数据。并完成下面的题目:
(1)再继续添加2条数据,设置一个保存点savepoint,再添加1条数据,执行回退到保存点的回退命令。查看此时表中数据(2)查询入学成绩大于480的学生信息(3)建立男生信息视图
(4)在“成绩”字段上建立B-树索引
5.创建一个表簇,名为empl_dep,容纳empl表和dep表,有公
第二篇:Oracle数据库 图书管理系统实验报告
图书管理系统(Oracle)
1、创建表空间student_library
2、(1)创建表Administrator
(2)创建表library
(3)创建表student
(4)创建表lent_library
(5)创建表booktype
3、(1)创建表空间student_library
create tablespace student_library datafile 'C:oracleproduct10.2.0oradataorclstudent_library' size 100M autoextend on;
(2)创建表Administrator create table Administrator(AdministratorID number(20)primary key,AdministratorName varchar2(25),sex varchar2(5),beizhu varchar2(30),bookID varchar2(20), foreign key(bookID)references library(bookID))tablespace student_library;
向Administrator表插入数据 insert into Administrator values(100421101,'张三','男',' ',100421)insert into Administrator values(100421102,'李四','女',' ',100422)insert into Administrator values(100421103,'王五','男',' ',100423)对Administrator表删除数据
delete from Administrator where AdministratorID=100421103 ——删除Administrator表中管理员编号为‘100421103’的一行数据 对Administrator表查询数据
select * from Administrator order by AdministratorID ——按照管理员的ID号对Administrator表进行排列 向Administrator表修改数据
update Administrator set AdministratorName=‘王明’where AdministratorID=100421101 ——对Administrator表中管理员编号为‘100421101’的姓名改为“王明” update Administrator set sex=‘女’where AdministratorID=100421103 ——对Administrator表中管理员编号为‘100421103’的性别改为“女”(3)创建表library create table library(bookID number(20)primary key,bookName varchar2(20),author varchar2(10),press varchar2(20),publishDate varchar2(50),price number(20),leibienumber number(20),state varchar2(8),studentID number(20),foreign key(studentID)references student(studentID))tablespace student_library;
向library表插入数据 insert into library
values(100421,'Oracle数据库管理','马晓玉','清华大学出版社','2011-11-8',40,'013999',' ',100421203)insert into library
values(100422,'ASP.NET网站设计','唐慧','南京大学出版社','2011-5-18',32,'165923',' ',100421205)insert into library
values(100423,'JavaScript程序设计','徐元','苏州大学出版社','2011-2-12',28,'265894',' ',100421207)对library表删除数据
delete from library where bookID=100422 ——删除library表中书籍编号为‘100422’的一行数据 向library表查询数据
select bookID,bookName,author,press,publishDate,price from library order by bookID ——查询library表中的bookID,bookName,author,press,publishDate,price的数据根据书籍的编号进行排序
向library表修改数据
update library set author=‘张敏’where bookID=100422 ——对library表中书籍编号为‘100422’的作者改为“张敏”
(4)创建表student create table student(studentID number(20)primary key,studentName varchar2(50),sex varchar2(2),department varchar2(10),studentPhone number(15),borrowID number(20),password number(10))tablespace student_library;
向student表插入数据 insert into student values(100421203,'王逸','男','信电系','***','123456','521568')insert into student values(100421205,'刘娟','女','食品系','***','256302','269756')insert into student values(100421207,'张一凡','男','园林园艺系','***','687456','305621')对student表删除数据
delete from student where studentName=‘张一凡’
——删除student表中学生姓名为‘张一凡’的一行数据 向student表修改数据
update student set department=‘经贸系’where studentID=100421205 ——对student表中学生学号为‘100421205’的系部名称改为“经贸系”
(5)创建表lent_library create table lent_library(lentID number(20)primary key,bookID number(20),borrowbookID number(20),borrowDate varchar2(50),borrowState varchar2(30),foreign key(bookID)references library(bookID))tablespace student_library;
向lent_library表插入数据 insert into lent_library values(12345,'100421','1360','2012-3-15','还未归还')insert into lent_library values(21350,'100422','2035','2012-1-6','已经归还')insert into lent_library values(13056,'100423','1503','2012-3-22','还未归还')向lent_library表删除数据 delete from lent_library where bookID=‘100423’
——删除lent_library表中书籍编号为‘100423’的一行数据 向lent_library表查询数据
select lentID,bookID,borrowbookID,borrowState from lent_library where bookID=‘10042%’ ——查询lent_library表中的lentID,bookID,borrowbookID,borrowState数据根据书籍编号前五位数位‘10042’进行排序
(6)创建表booktype create table booktype(Leibienumber number(20)primary key,booktype varchar2(20))tablespace student_library;
向booktype表插入数据 insert into booktype values('4630','文学类')insert into booktype values('1623','科普类')insert into booktype values('2412','理工科类')向booktype表删除数据
delete from booktype where leibienumber=‘1623’
——删除booktype表中类别编号为‘1623’的一行数据 向booktype表修改数据
update booktype set booktype=‘计算机类’where leibienumber=‘2412’ ——对booktype表中类别编号为‘2412’的书籍类型改为“计算机类”
4、(1)创建索引
【1】create index AdministratorID _index on Administrator(AdministratorID)tablespace users;
—在Administrator表的AdministratorID列创建一个名为Aid_index的索引
【2】create bitmap index studentName_index on student(studentName)tablespace users;—在student表的学生姓名列上创建位图索引
(2)创建视图
create or replace view view_library as select bookID,bookName,author,press,publishDate,price from library;—创建视图view_library,查询library表中的bookID,bookName,author,press,publishDate,price
5、(1)创建匿名块
set serveroutput on declare out_text varchar2(50);begin out_text:='程序块示例';dbms_output.put_line(out_text);exception when others then dbms_output.put_line('捕获一个异常');end;
(2)创建存储过程
create or replace procedure InsertAdministrator as begin insert into Administrator(AdministratorID,administratorName,sex)values(100421105,'李凡','男');exception when dup_val_on_index then
dbms_output.put_line('重复的编号');when others then
dbms_output.put_line('发生其他错误!');end InsertAdministrator;—创建一个存储过程InsertAdministrator,向Administrator表的AdministratorID,administratorName和sex列分别插入数据100421105,李凡和男三个值。
(3)创建函数
create or replace function Factorial(n in number)return number as result number: =1;begin for i in 1...n loop result: =result*i;end loop;return(result);end Factorial;(4)创建触发器 create table student_log(studentID number(20),studentName varchar2(50),sex varchar2(2),department varchar2(10));—创建一个日志表,记录对student表所做的修改,日志表名为student_log create or replace trigger insertlog_trigger after insert on student begin insert into student_log values(100421230,'路奇', '女', '园林系');end;—在student表上创建一个语句级Insert触发器
6、用户权限和角色管理
(1)创建用户user_student create user user_student identified by student default tablespace student_library
(2)为用户user_student设置系统权限 grant create session to user_student;
(3)为用户user_student撤销系统权限
revoke create session from user_student;
(4)创建角色user_library
create role user_library identified by student
(5)为角色user_library授予权限
grant user_library to public;
(6)启用角色user_library
set role user_library identified by student
第三篇:Oracle实验报告
Oracle数据库实验报告
实验一:Oracle 10g安装卸载及相关工具配置
一、实验目标:
安装Oracle 10g,了解OEM,通过DBCA安装数据库,通过DBCA删除数据库,sqldeveloper连接数据库,卸载oracle 10g。
二、实验学时数 2学时
三、实验步骤和内容:
1、安装Oracle10g(默认安装数据库)双击setup.exe,选择基本安装,安装目录D:盘,标准版,默认数据库orcl,口令bhbh。进入先决条件检查界面时:网络配置需求选项不用打勾,直接下一步,是。直到安装成功。
2、登陆和了解OEM 主要是已网页的形式来对数据库进行管理。
第1页 http://主机IP:1158/em 用户名:sys 口令:bhbh 身份:sysdba 或者
用户名:system 口令:bhbh 身份:normal
3、通过DBCA删除已安装的默认数据库orcl 程序->OracleOraDb10g_home1->配置和移植工具->Database Configuration Assistant->创建数据库->……
5、sqldeveloper连接数据库 打开sqldeveloper,新建连接 连接名:system_ora 用户名:system 口令:bhbh 主机名:本机计算机名 SID:xscj 测试,显示成功,连接,保存。
第2页
6、卸载oracle 10g Windows下
1>停止所有Oracle服务,点Universal Installer卸载
2>删除注册表中的所有关于Oracle项
在HKEY_LOCAL_MACHINESOFTWARE下,删除Oracle目录
3>删除硬盘上所有Oracle文件。(1)Oracle安装文件
(2)系统目录下,在Program files文件夹中的Oracle文件
四、上机作业
根据实验步骤完成逐个实验目标中的任务。
五、心得体会
通过这次的实验,我了解了oracle数据库的情况。懂得了数据库就是把数据存储在一个类似与仓库的地方,需要用时才从数据库里调出来。通过上机实践,知道了装数据库和卸载数据库,并且学会了怎样连数据库。
实验二:Oracle 10g手工建数据库
一、实验目标:
安装Oracle 10g数据库环境,手工建立数据库;通过Net Configuration Assistant建立监听,使用sqldeveloper连接数据库测试。
二、实验学时数 2学时
三、实验步骤和内容:
先安装好Oracle 10g数据库环境(不安装默认数据库)。1.创建好相关的目录
第3页 假设oracle安装在D盘,打开命令行,运行->cmd-> md D:oracleproduct10.2.0adminmydbpfile md D:oracleproduct10.2.0adminmydbbdump md D:oracleproduct10.2.0adminmydbcdump md D:oracleproduct10.2.0adminmydbudump md D:oracleproduct10.2.0oradatamydb md D:oracleproduct10.2.0flash_recovery_areamydb 2.创建数据库实例
(1)设置环境变量SID(注:以后每打开一次CMD都要运行此句)set ORACLE_SID=mydb(2)创建口令文件
orapwd file=D:oracleproduct10.2.0oradatamydbPWDmydb.ora Password=bhbh entries=5(3)使用oradim命令创建数据库实例mydb oradim-new-sid mydb-startmode manual-pfile “D:oracleproduct10.2.adminmydbpfileinitmydb.ora” 3.用sys账户以sysdba的身份登录 输入sqlplus sys/bhbh as sysdba 4.创建实例初始化参数文件initmydb.ora,并将其放到D:oracleproduct10.2.adminmydbpfile路径下。
initmydb.ora # Copyright(c)1991, 2001, 2002 by Oracle Corporation
第4页 job_queue_processes=10 # Job Queues # Shared Server dispatchers=“(PROTOCOL=TCP)(SERVICE=mydbXDB)” # Miscellaneous compatible=10.2.0.1.0 # Security and Auditing remote_login_passwordfile=EXCLUSIVE # Sort, Hash Joins, Bitmap Indexes pga_aggregate_target=25165824 sort_area_size=65536 # Database Identification db_domain=“" db_name=mydb # File Configuration control_files=(”D:oracleproduct10.2.0oradatamydbcontrol01.ctl“, ”D:oracleproduct10.2.0oradatamydbcontrol02.ctl“,”D:oracleproduct10.2.0oradatamydbcontrol03.ctl“)db_recovery_file_dest=D:oracleproduct10.2.0flash_recovery_area db_recovery_file_dest_size=2147483648 # Pools
第5页 java_pool_size=50331648 large_pool_size=8388608 shared_pool_size=83886080 # Cursors and Library Cache open_cursors=300 # System Managed Undo and Rollback Segments undo_management=AUTO undo_tablespace=UNDOTBS1 # Diagnostics and Statistics background_dump_dest=D:oracleproduct10.2.0adminmydbbdump core_dump_dest=D:oracleproduct10.2.0adminmydbcdump user_dump_dest=D:oracleproduct10.2.0adminmydbudump # Processes and Sessions processes=150 # Cache and I/O db_block_size=8192 db_cache_size=25165824 db_file_multiblock_read_count=16
5.运行命令实例初始化 STARTUP NOMOUNT
第6页 pfile=”D:oracleproduct10.2.0adminmydbpfileinitmydb.ora“;6.运行创建数据库SQL命令 CREATE DATABASE mydb MAXINSTANCES 1 MAXLOGHISTORY 1 MAXLOGFILES 5 MAXLOGMEMBERS 5 MAXDATAFILES 100 DATAFILE 'D:oracleproduct10.2.0oradatamydbsystem01.dbf' SIZE 500M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED SYSAUX DATAFILE 'D:oracleproduct10.2.0oradatamydbsysaux01.dbf' size 20M UNDO TABLESPACE UNDOTBS1 DATAFILE 'D:oracleproduct10.2.0oradatamydbundotbs01.dbf' SIZE 150M REUSE AUTOEXTEND ON NEXT 50M MAXSIZE UNLIMITED DEFAULT TEMPORARY TABLESPACE TEMP1 TEMPFILE 'D:oracleproduct10.2.0oradatamydbtemp01.dbf' SIZE 100M REUSE CHARACTER SET ZHS16GBK NATIONAL CHARACTER SET AL16UTF16 LOGFILE 'D:oracleproduct10.2.0oradatamydbredo01.log' SIZE 50M,第7页
'D:oracleproduct10.2.0oradatamydbredo02.log' SIZE 50M,'D:oracleproduct10.2.0oradatamydbredo03.log' SIZE 50M;7.创建用户表空间USERS CREATE TABLESPACE USERS DATAFILE 'D:oracleproduct10.2.0oradatamydbusers01.dbf' SIZE 128M REUSE AUTOEXTEND ON NEXT 1280K MAXSIZE UNLIMITED;8.创建数据字典(需要几分钟,报错不要紧)
@D:oracleproduct10.2.0db_1RDBMSADMINcatalog.sql;9.创建内部包(需要几分钟,报错不要紧)
@D:oracleproduct10.2.0db_1RDBMSADMINcatproc.sql;10.创建自启动文件,以便以后不用每次打开数据库实例都要运行一次第5步。
create spfile FROM pfile='D:oracleproduct10.2.0adminmydbpfileinitmydb.ora';11.重启数据库,即关闭再打开。shutdown;connect sys/bhbh as sysdba;startup;12.授权用户system为dba,置密码为bhbh
第8页 grant dba to system identified by bhbh;13.使用system用户登录 conn system/bhbh;14.为system用户创建一张KC表 CREATE TABLE KC(KCH CHAR(3)NOT NULL, KCM CHAR(16)NOT NULL, KKXQ NUMBER(1)NOT NULL, XS NUMBER(2)NOT NULL, XF NUMBER(2), CONSTRAINT CH_KKXQ CHECK(kkxq between 1 and 8), CONSTRAINT ”PK_KCH“ PRIMARY KEY(”KCH“))TABLESPACE USERS;15.给KC表插入一条数据,并提交。
INSERT INTO KC VALUES('001','数据库',7,68,4);commit;16.测试查询 Select * from kc;17.使用Net Configuration Assistant添加监听器,并重启监听器(运行cmd->netca也一样)。
第9页 18.创建Em资料档案库(这一步可以省略,只为创建OEM,我们以后学习用不到)。
cmd->emca-config dbcontrol db-repos create 19.打开SQLDeveloper,并新建数据库连接并测试是否成功。
20.若之前手工安装数据库出现差错,可使用以下命令删除数据库实例: cmd->oradim-delete-sid mydb 然后删除第1步所建目录即可。
四、上机作业
根据实验步骤完成逐个实验目标中的任务。
五、心得体会:
通过这次的实验,明白了手动建数据库,建表空间等。还知道了运行数据库的命令,授权命令插表等等。这次学习让我对数据库的了解和运用又新的体会。
实验三:数据库修改
一、实验目标:
学习简化实验二里的实验步骤,学习修改数据库某些属性,完成数据库作业1:手工快速创建数据库实例XSCJ和数据库XSCJ。
二、实验学时数 2学时
三、实验步骤和内容:
第10页 1.安装好ORACLE 10g,(不需要安装数据库)。
2.快速安装数据库实例mydb和数据库mydb需要3个文件:init.bat,initmydb.ora,ctreatedb.sql。
(1)双击运行init.bat文件;
(2)将initmydb.ora放到正确的路径下(参考实验二);(3)在sqlplus环境下运行ctreatedb.sql
3.了解startup nomount,startup mount和startup三种状态的使用情况的区别,即打开实例不装载数据库、打开实例装载数据库但不打开数据库和打开实例装载数据库同时打开数据库。
(1)运行P45页例子2-7修改数据库(提示:startup;)ALTER DATABASE mydb DATAFILE 'D:oracleproduct10.2.0oradatamydbusers01.dbf' RESIZE 200M;(2)运行P45页例子2-9删除数据库(提示:startup mount;)取消数据库的受限制状态:
alter system enable restricted session;删除数据库: DROP DATABASE;(3)重建数据库
sys重新登录,运行ctreatedb.sql。
4.删除数据库实例mydb和数据库mydb。使用命令 oradim-delete-sid mydb 以及删除相关文件夹。
四、上机作业
第11页 适当地修改建库所用到的3个文件里的参数,手工安装数据库实例xscj和数据库xscj(快速安装),用户表空间myts。
五、心得体会
这次学习,让我明白了怎样修改数据库某些属性,手工快速创建数据库实例XSCJ和数据库XSCJ。DROP DATABASE命令可以删除数据库…
实验四:表的创建、修改和删除 以及表数据的插入、修改和删除
一、实验目标:
学习表的创建、插入、修改和删除以及表数据的插入、修改和删除。
二、实验学时数 4学时
三、实验步骤和内容: 1.手工创建好数据库XSCJ。
2.为用户system创建3个表XSB、KCB和CJB(P66-67 例子3.7-3.9,create table用法,自己照书完成)。
CREATE TABLE XSB(XH char(6)NOT NULL PRIMARY KEY, XM char(8)NOT NULL, XB char(2)DEFAULT '1' NOT NULL,第12页
CSSJ date NOT NULL, ZY char(12)NULL, ZXF number(2)NULL, BZ varchar2(200)NULL)TABLESPACE myts;CREATE TABLE KCB(KCH char(3)NOT NULL PRIMARY KEY,KCM char(16)NOT NULL, KKXQ number(1)NULL, XS number(2)NULL, XF number(1)NOT NULL)TABLESPACE myts;CREATE TABLE CJB(XH CHAR(6)NOT NULL, KCH CHAR(3)NOT NULL, CJ NUMBER(2), XF NUMBER(1), PRIMARY KEY(XH,KCH))TABLESPACE myts;3.学习修改表结构(P70 例子3.11(1)-(3)alter table用法)。(1)在表XSB中增加两列:JXJ(奖学金等级)、DJSM(奖学金等级说明)。
第13页 ALTER TABLE XSB ADD(JXJ number(1), DJSM varchar2(40)DEFAULT '奖金1000元');(2)在表XSB中修改名为DJSM的列的默认值。ALTER TABLE XSB MODIFY(DJSM DEFAULT '奖金800元');(3)在表XSB中删除名为JXJ和DJSM的列。ALTER TABLE XSB DROP COLUMN JXJ;ALTER TABLE XSB DROP COLUMN DJSM;修改好可用命令:describe table_name;查看。4.删除表(P71 drop table用法)。DROP TABLE table_name;5.向XSCJ数据库的表XSB中插入一行(P75 例子3.12 insert用法)。INSERT INTO XSB(XH, XM, XB, CSSJ, ZY, ZXF)VALUES('101101', '王林', '男',TO_DATE('19900210','YYYYMMDD'), '计算机', 50);提交数据: Commit;
插入后可用命令:select * from table_name;查看。
第14页 6.学习删除表数据(P78 DELETE和TRUNCATE的用法)。将XSCJ数据库的XSB表中总学分小于50的行删除: DELETE FROM XSB WHERE ZXF<50;使用TRUNCATE TABLE语句删除表中的所有数据,且不能恢复。TRUNCATE TABLE table_name;插入后可用命令:select * from table_name;查看。7.为3个表XSB、KCB和CJB插入数据(使用insert.sql)8.学习修改表数据(P78-79 例子3.17-3.20 UPDATE 用法)。UPDATE XSB SET BZ='三好' WHERE XH='101110';UPDATE XSB SET ZXF=ZXF+10;
UPDATE XSB SET ZY='通信工程', BZ='转专业学习', XH='101241' WHERE XM= '罗林琳';
UPDATE XS
第15页 SET ZXF=ZXF+ 4, BZ= '提前修完《数据结构》,并获得学分'
插入后可用命令:select * from table_name where(条件);查看。9.将数据恢复到刚插入时的状态(即把修改过的表清空再插入)。10.了解一下同义词,知道同义词的作用(不作重点)。
四、上机作业
手工安装数据库实例xscj和数据库xscj(快速安装),用户表空间myts后,为用户system创建3个表XSB、KCB和CJB,并插入所有数据。
五、心得体会
这次学习的表创建,删除和修改的学习使我对数据库的表的认识更进一步。通过这次的学习,学会对表的创建、修改、删除。创建表就是按格式写些代码;修改(UPDATE+表名+需修改的内容)和删除(DROP TABLE + 表名)就是使用指定的指令对表进行操作,使之完成想要的目的。
WHERE XM='李明';
实验五:数据库查询练习
一、实验目标:
学习数据库数据查询语句的基本方法以及视图的使用方法。
二、实验学时数
第16页 6学时
三、实验步骤和内容:
课本例子:4.5,4.6,4.8,4.9,4.12(2),4.14,4.15(2),4.16,4.17 4.18,4.19,4.28,4.29,4.37,4.39(1),(3),4.42,4.43,4.46
(一)学习和掌握课本查询语句的基本语法和使用方法,完成下面练习(*为必做,@为选做)。
*
1、查询所有计算机系学生的信息。Select * from xsb;*
2、查询王同学所修的学号
Select kch from xsb where xm like '王%';*
3、查询出生于85和86年的女同学的学号和姓名。Select xh,xm from xsb where cssj between to_date('19900101','yyyymmdd')and to_date('19911231','yyyymmdd')and xb='女';*
4、查询学号为101104所选修的全部课程成绩。Select cj from cjb where xh='101104';*
5、检索每个学生的姓名和年龄。
Select xm,to_char(sysdate,'yyyy')-to_char(cssj,'yyyy')as 年龄 from xsb;*
6、在XS表中检索学生的姓名和出生年份,输出的列名为姓名和生年 Select xm,to_char(cssj,'yyyy')as 出生时间 from xsb;*
7、在XS_KC表中,求选修课程206的学生的学号和得分,并将结果按分数降序排序。
第17页 Select xh,cj from cjb where kch=’206’ order by cj desc;*
8、把课程名为软件工程的成绩从学生选课数据表XS_KC中删除。Delete from kcb where kcm=(select kch from kcb where kcm=‘软件工程’);*
9、把女同学的成绩提高10%。
Update cjb set cj=cj*1.1 where xh in(select xh from xsb where xb='女')and cj<=90;*
10、如果学号为061106的学生的成绩少于90,则加上10分。Update cjb set cj=cj+10 where xh=’061106’and cj<90;*
11、查询学号为061104的学生选修的课程号和课程名。
Select xh,xm from xsb where xh in(select xh from cjb where kcb=’061104’;
*
12、检索学习课程号为206的学生学号与姓名。Select xm,xh from xsb where kch=’206’;*
13、检索‘李明’所选修的全部课程名称。
Select kcm from kch where xm=(select xm from xsb where xm=’李明’);*
14、查找每个同学的学号及选修课程的平均成绩情况。Select xh,avg as 课程号平均成绩 from cjb;*
15、求选修了各课程的学生的人数。
Select count(distinct xh)as 选修课程总人数 from cjb;Select kch as课程号 ,count(xh)as 选修人数 group by kch;
第18页 *
16、查询平均成绩都在80分以上的学生学号及平均成绩。Select xh,cj from cjb group by xh having avg(cj)>80;Select xh,cj from cjb group by xh having avg(cj)>80 order by avg(cj);Select xh,cj from cjb group by xh having avg(cj)>80 order by avg(cj)desc;*
17、查询至少有6人选修的课程号。
Select kch as 课程号 from cjb group by having count(*)>=6;*
18、检索选修课程号为101或102的学生学号,姓名和所在系
Select xh,xm,zy from kch=(select kch from kcb where kch=’101’and kch= ‘102’;
*
19、统计被学生选修的课程门数。Select cjb 每个学生情况以及选修课程情况
Select * from xsb inner join cjb on xsb.xh=cjb.xh Select xsb.*,cjb.* from xsb,cjb where xsb.xh=cjb.xh *20、查询没有选修数据库的学生学号,姓名和专业名。
@
21、取出选修‘操作系统’课程的学生姓名。
@
22、检索至少选修课程“数据结构”和“计算机基础”的学生学号。@
23、检索至少选修课程号为101和206的学生姓名。@
24、列出学生所有可能的选课情况。@
25、查询101号课程得最高分的学生的学号
@
26、‘计算机基础’课程得最高分的学生的姓名、性别、所在系。
第19页 @
27、将成绩最低的学生的成绩加上10分。@
28、所有成绩都在70分以上的学生姓名及所在系。@
29、列出选修课程超过3门的学生姓名及选修门数。@30、至少选修了两门课及以上的学生的姓名和性别 @
31、检索至少有两名男生选修的课程名。
@
32、统计每门课程的学生选修人数(超过10人的课程才统计)。@
33、计算机基础成绩比离散数学成绩好的学生
@
34、列出每个同学的学号、姓名及选修课程的平均成绩情况,没有选修的同学也列出。
@
35、列出每个同学的学号及选修课程号,没有选修的同学也列出
(二)视图
1、创建一个名为zy_view的视图,该视图可以用来查看每个系名称和学生人
Create or replace view zy_view(专业,专业人数)as select zy,count(xh)from xsb group by zy;
2、创建一名为xs_view的视图,该视图可以用来查看每个学生的姓名、选修的课程名和成绩。查看视图。
Create or replace view xs_view(姓名,课程名,成绩)as select xm kcm cj from xsb,kcb,cjb where xsb.xh=cjb.xh and cjb.kch=kcb.kch;
3、创建一个名为kc_view的视图,该视图可以用来查看每门课的课程号,课程名,选修人数和平均成绩。
Create or replace view kc_view(课程号,课程名,选修人数,平均成绩)as select kcb.kch,kcm,count(xh),avg(cj)from cjb,kcb where cjb.kch=kcb.kch group by kcb.kch,kcm;
4、利用kc_view视图,查看平均成绩最高的课程名。
Select 课程名 from kc_view where平均成绩=(select max(平均成绩)from kc_view);
5、修改xs_view视图,将视图重定义为每个学生的姓名、选课门数和平均
第20页 成绩。
Create or replace view xs_view(姓名,选课门数,平均成绩)as select xm,count(kch),avg(cj)from cjb,xsb where xsb.xh=cjb.xh group by xsb.xh,xm;
6、删除zy_view视图。Drop view zy_view;
四、上机作业
完成实验内容中的任务,并把语句记录在每道题的下面。
五、心得体会
这次学习,我知道了对表的内容的查询,修改的操作,并通过实践对这次操作命令进一步的熟悉,运用和掌握。还学会了怎么建立视图,视图是可以快速的查询多个表的不同的信息的图表,它使我们更方便。
实验六:索引和约束
一、实验目标:
(1)掌握索引的使用方法。
(2)掌握各种约束即数据完整性的实现方法。
二、实验学时数 2学时
三、实验步骤和内容: 1.关于索引
第21页 建立索引的最大好处是快速存取数据。
假设有10个学生,10门课,则成绩表会有100条记录,对于成绩表中某人某门课成绩的查找,最坏情况是逐行查找100次,即最后一行。而如果对成绩表中的学号和课程号创建索引,则最坏情况只需查找20次(先查找学号,再查找课程号)。
建立索引的原则:(1)先插数据再建索引。
(2)如果经常检索的内容仅为包含大量数据的表中少于15%的行,就需要创建索引。
(3)建立索引的先后顺序会影响查询的性能。2.创建索引表空间 CREATE TABLESPACE INDX DATAFILE 'D:oracleproduct10.2.0oradataxscjindx01.dbf' SIZE 32M REUSE AUTOEXTEND ON NEXT 1280K MINIMUM EXTENT 128K DEFAULT STORAGE(INITIAL 128K NEXT 128K MINEXTENTS 1 MAXEXTENTS 4096 PCTINCREASE 0);2.创建索引
CREATE INDEX kc_name_idx ON KCB(KCM)TABLESPACE ”INDX";3.维护索引
第22页 ALTER INDEX kc_name_idx
4.删除索引 DROP INDEX kc_idx;5.数据完整性
生活中有些数据除了数据类型和宽度,还必须要定义其他规则的,比如学生学号必须是唯一的,不能重复的;性别必须是男或女,成绩必须是0-100的范围等。因此必须使用一些方法对数据进行约束,才得以保持数据完整性。
6.约束
(1)建表同时添加约束: XSB表: 主键为学号。KCB表: 课程号为主键,开课学期默认值为1,且只能为1-8。CJB表
主键为学号和课程号,存在外键XH参照XSB表的XH,存在外键KCH参照KCB表的KCH。(2)建表后时添加约束 XSB表:
第23页 RENAME TO kc_idx;性别必须为“男”或者“女”。CJB表:
成绩必须>=0且<=100或者为空。7.插入数据验证。8.思考题
(1)建KCB表时添加约束,使课程号必须为三位0-9数字
(2)建XSB表时添加约束,使学号为101开头,后三位为0-9数字
四、上机作业
完成实验内容中的任务,并把语句记录在每道题的下面。
五、心得体会
通过这次的学习,我知道了索引的最大好处是快速存取数据。1:先插数据再建索引。2:如果经常检索的内容仅为包含大量数据的表中少于15%的行,就需要创建索引。3:建立索引的先后顺序会影响查询的性能。这3条是建立索引的原则。
我还知道了可以增加约束,就是制约范围。
实验七:PL/SQL编程
一、实验目标:
(1)掌握变量、运算符以及控制语句的使用。(2)掌握系统函数和自定义函数的使用。
二、实验学时数 4学时
三、实验步骤和内容: SYS登录,先导入数据字典:
第24页 @D:oracleproduct10.2.0db_1RDBMSADMINcatalog.sql;@D:oracleproduct10.2.0db_1RDBMSADMINcatproc.sql;(1)定义变量
例子1:定义一个长度为10的变量count,其初始值为1,是varchar2类型。
count varchar2(10):= '1';例子2:在表XSB中包含XH列,为了声明一个变量my_xh与XH列具有相同的数据类型,声明时可使用点和%TYPE属性,格式如下:
my_xh XSB.XH%TYPE;例子3:可以使用%ROWTYPE属性声明描述表的行数据的记录。
如:声明一个记录名为cj_rec,它与CJB表具有相同的名称和数据类型,格式如下:
DECLARE cj_rec CJB%ROWTYPE;对于用户定义的记录,必须声明自己的域: DECLARE TYPE TimeRec IS RECORD(HH number(2),MM number(2));(2)程序块
例子6.6:查询总学分大于50的学生人数 set serveroutput on DECLARE v_num number(3);
第25页 BEGIN SELECT COUNT(*)INTO v_num
FROM xsb
WHERE zxf>50;
IF v_num<>0 THEN dbms_output.put_line('总学分>:50的人数为:'|| TO_CHAR(v_num));END IF;END;/ 例子6.9:求10的阶乘。DECLARE n number:=1;count1 number:=2;BEGIN LOOP
n:=n*count1;
count1:=count1+1;
IF count1>10 THEN
EXIT;END IF;
第26页 END LOOP;DBMS_OUTPUT.PUT_LINE(to_char(n));END;/(3)函数
系统函数:例子6.20、6.21、6.22、6.23、6.24 自定义函数:例子6.26、6.27、6.28
如果李明同学的年龄大于20岁,则显示“李明同学年龄为X岁”,否则打印“李明同学不符合条件” set serveroutput on declare age number(2);begin select to_char(sysdate, 'yyyy')-to_char(cssj, 'yyyy')into age from xsb where xm='李明';if age>20 then dbms_output.put_line('李明同学年龄为'||to_char(age)||'岁');else dbms_output.put_line('李明同学不符合条件');end if;end;/
2.计算1+3+5+……+99的和,并显示结果。
declare s number:=0;i number:=1;begin loop
第27页 s:=s+i;i:=i+2;exit when i>99;end loop;dbms_output.put_line(to_char(s));end;/
3.编写一个函数f_age,可以在xs表中根据姓名求出某人的年龄。
create or replace function f_age(sname in char)return number as age number;begin select to_char(sysdate,'yyyy')-to_char(cssj,'yyyy')into age from xsb where xm=sname;return(age);end;/
4.改写第1题的程序块,调用函数f_age来求年龄。set serveroutput on;declare age number(2);begin age:=f_age('李明');if age>20 then dbms_output.put_line('李明同学年龄为'||to_char(age)||'岁');else dbms_output.put_line('李明同学不符合条件');end if;end;/
第28页
四、上机作业
完成实验内容中的任务,并把语句记录在每道题的下面。
五、心得体会
通过这次的学习,学会了用sql语言编写简单的程序,定义和调用简单函数。在此基础上还巩固了sql语句查询的方法。在以后的学习中要多加理解,上机练习。
实验八:游标与存储过程
一、实验目标:
(1)掌握游标的使用方法。(2)掌握存储过程的使用方法。
二、实验学时数 6学时
三、实验步骤和内容: 游标 例子:
set serveroutput on DECLARE v_xh char(6);v_zxf number(2);CURSOR XS_CUR3
第29页 IS SELECT XH,ZXF FROM XSB WHERE ZYM='计算机';BEGIN OPEN XS_CUR3;FETCH XS_CUR3 INTO v_xh,v_zxf;WHILE XS_CUR3%FOUND LOOP dbms_output.put_line(v_xh||' '||TO_CHAR(v_zxf));FETCH XS_CUR3 INTO v_xh,v_zxf;END LOOP;CLOSE XS_CUR3;END;1.使用游标,将平均分大于75分的学生的学号、姓名、平均分逐行输出。
set serveroutput on DECLARE v_xh char(12);v_xm char(12);v_cj number(38);CURSOR XS_CUR3 IS SELECT CJB.XH,XSB.XM,avg(CJ)FROM XSB,CJB WHERE xsb.xh=cjb.xh group by CJB.XH,XSB.XM having avg(cj)>75;
第30页 BEGIN OPEN XS_CUR3;FETCH XS_CUR3 INTO v_xh,v_xm,v_cj;WHILE XS_CUR3%FOUND LOOP dbms_output.put_line(v_xh||' '||TO_CHAR(v_xm)||v_cj);FETCH XS_CUR3 INTO v_xh,v_xm,v_cj;END LOOP;CLOSE XS_CUR3;END;存储过程 例子1:
CREATE OR REPLACE PROCEDURE update_info(xname in char)AS xf number;BEGIN SELECT ZXF INTO xf FROM XS WHERE XM=xname;IF XF>60 THEN UPDATE XSB SET BZ='三好学生' WHERE XM= xname;
第31页
END IF;IF XF<35 THEN UPDATE XS SET BZ='学分未修满' WHERE XM=xname;END IF;END update_info;执行:
(1)EXECUTE update_info('李明');(2)begin update_info('李明');end;例子2: CREATE OR REPLACE PROCEDURE count_grade(zym in char,person_num out number)AS BEGIN
SELECT COUNT(XH)
INTO person_num
FROM XS WHERE ZYM=zym;END count_grade;
第32页 执行:
set serveroutput on DECLARE v_num number;BEGIN count_grade('计算机',v_num);dbms_output.put_line(v_num);END;/ 1.创建一个存储过程p_delete可以删除CJB表的信息。CREATE OR REPLACE PROCEDURE p_delete AS
BEGIN delete FROM CJB;END p_delete;执行
EXECUTE p_delete;
2.创建一个存储过程p_insert,可以给学生表添加一条记录。CREATE OR REPLACE PROCEDURE p_insert(XH IN CHAR,XM IN CHAR,XB IN CHAR,CSSJ IN DATE,ZY IN CHAR,ZXF IN NUMBER,BZ IN CHAR)AS BEGIN insert into xsb values(XH,XM,XB,CSSJ,ZY,ZXF,BZ);END p_insert;执行:
execute p_insert('102222','罗','女',to_date('19860310','yyyymmdd'),'通信工程',50,'转专业学习');
第33页
3.创建一个存储过程p_count,输入参数为姓名,输出参数为选课门数,平均成绩。CREATE OR REPLACE PROCEDURE p_count(XNO IN CHAR,K_COUNT OUT NUMBER,AVG_CJ OUT NUMBER)BEGIN SELECT count(kch),avg(cj)INTO K_COUNT,AVG_CJ FROM XSB,CJB WHERE XSB.XH=CJB.XH AND XSB.XH=XNO;END p_count;
set serveroutput on DECLARE v_num1 number;v_num2 number(4,2);BEGIN p_count('101104',v_num1,v_num2);dbms_output.put_line(v_num1||' '||v_num2);END;
四、上机作业
完成实验内容中的任务,并把语句记录在每道题的下面。
五、心得体会
通过这次学习,我知道了游标和存储过程,还知道了游标和存储过程的使用方法,并且掌握了它们的使用方法,为以后打下基础。
实验九:触发器、用户角色创建和逻辑备份
第34页
一、实验目标:
(1)掌握触发器的使用。
(2)掌握用户和角色的创建和使用。(3)掌握数据表的导入导出。
二、实验学时数 2学时
三、实验步骤和内容:
(一)触发器
例子1: 假设XSCJ数据库中增加一个新表XSB_HIS,表结构和表XSB相同,用来存放从XSB表中删除的记录。创建一个触发器,当XSB表被删除一行,把删除的记录写到日志表XSB_HIS中。
CREATE OR REPLACE TRIGGER del_xs BEFORE DELETE ON XSB FOR EACH ROW BEGIN INSERT INTO XSB_HIS(XH,XM, XB,CSSJ, ZY, ZXF,BZ)VALUES(:OLD.XH,:OLD.XM, :OLD.XB, :OLD.CSSJ, :OLD.ZY, :OLD.ZXF, :OLD.BZ);END;1.创建一个触发器,当XSB表删除一个人时,把这个人的选课信息也删掉。CREATE OR REPLACE TRIGGER del_xs BEFORE DELETE ON XSB FOR EACH ROW BEGIN
第35页 DELETE FROM CJB WHERE XH=:OLD.XH;END del_xs;
(二)用户和角色
1.创建一个用户tom,密码为cat。该用户角色为dba。使用该用户建表,插入数据。
CREATE USER tom identified by cat default tablespace users;grant dba to tom;导入table.sql和insert.sql drop user tom cascade;
(三)数据库逻辑备份 exp和imp的使用
(1)将XSB,KCB和CJB表导出成为DMP文件
(2)将XSB,KCB和CJB表删除
(3)将刚导出DMP文件导入恢复3个表
(1)将用户tom导出成为DMP文件
(2)将用户tom删除再重建
(3)将刚导出DMP文件导入恢复用户tom
四、上机作业
完成实验内容中的任务。
五、心得体会
第36页 通过这次实践,我明白了什么是触发器,并掌握的它的使用方法,还掌握了用户和角色的创建和使用。还学会了数据表的导入导出,使保存数据变的很容易。
第37页
第四篇:ORACLE数据库学习心得
ORACLE数据库结课论文
一个好的程序,必然联系着一个庞大的数据库网路...今年我们学习了 oracle数据库这门课程,起初的我,对这个字眼是要多陌生有多陌生,后来上课的时候听一会老师讲课,偶尔再跟上上机课,渐渐的学会了不少东西,但我感觉,我学到的仍是一些皮毛而已,怀着疑惑和求知的心态,我在网上搜索了关于 oracle数据库的一些知识。
1.ORACLE的特点: 可移植性 ORACLE采用C语言开发而成,故产品与硬件和操作系统具有很强的独立性。从大型机到微机上都可运行ORACLE的产品。可在UNIX、DOS、Windows等操作系统上运行。可兼容性 由于采用了国际标准的数据查询语言SQL,与IBM的SQL/DS、DB2等均兼容。并提供读取其它数据库文件的间接方法。
可联结性 对于不同通信协议,不同机型及不同操作系统组成的网络也可以运行ORAˉCLE数据库产品。
2.ORACLE的总体结构
(1)ORACLE的文件结构 一个ORACLE数据库系统包括以下5类文件:ORACLE RDBMS的代码文件。
数据文件 一个数据库可有一个或多个数据文件,每个数据文件可以存有一个或多个表、视图、索引等信息。
日志文件 须有两个或两个以上,用来记录所有数据库的变化,用于数据库的恢复。控制文件 可以有备份,采用多个备份控制文件是为了防止控制文件的损坏。参数文件 含有数据库例程起时所需的配置参数。
(2)ORACLE的内存结构 一个ORACLE例程拥有一个系统全程区(SGA)和一组程序全程区(PGA)。
SGA(System Global Area)包括数据库缓冲区、日志缓冲区及共享区域。
PGA(Program Global Area)是每一个Server进程有一个。一个Server进程起动时,就为其分配一个PGA区,以存放数据及控制信息。
(3)ORACLE的进程结构ORACLE包括三类进程: ①用户进程 用来执行用户应用程序的。
②服务进程 处理与之相连的一组用户进程的请求。
③后台进程 ORACLE为每一个数据库例程创建一组后台进程,它为所有的用户进程服务,其中包括: DBWR(Database Writer)进程,负责把已修改的数据块从数据库缓冲区写到数据库中。LGWR(Log Writer)进程,负责把日志从SGA中的缓冲区中写到日志文件中。
SMON(System Moniter)进程,该进程有规律地扫描SAG进程信息,注销失败的数据库例程,回收不再使用的内存空间。PMON(Process Moniter)进程,当一用户进程异常结束时,该进程负责恢复未完成的事务,注销失败的用户进程,释放用户进程占用的资源。ARCH(ARCHIVER)进程。每当联机日志文件写满时,该进程将其拷贝到归档存储设备上。另外还包括分布式DB中事务恢复进程RECO和对服务进程与用户进程进行匹配的Dnnn进程等。
3.ORACLE的逻辑结构
构成ORACLE的数据库的逻辑结构包括:(1)表空间
(2)5种类型的段(segment)
①数据段;②索引段;③回滚(rollbock)段;④临时段;⑤自举(bootstrap)段。
段的分配单位叫范围(Extent)
表空间(Tablespace)一个数据库划分成的若干逻辑部分称为表空间。一个数据库可以有一个或多个表空间,初始的表空间命名为SYSTEM,每一个逻辑表空间对应于一个或多个物理文件。DBA使用表空间做以下工作: 控制数据库对象,如表、索引和临时段的空间分配。为数据库用户设置空间配额。
利用个别表空间的在线或离线,控制数据的可用性。后备或恢复数据。
通过分配空间,以改进性能。
在每个数据库中都存在SYSTEM表空间,它在建立数据库时自动建立。在该表空间中,包含数据库的数据字典,其中存储全部数据库对象的名字和位置。SYSTEM表空间总是在线的,像其它表空间一样,可以通过增加新的数据库文件来扩大。一个表空间可包含许多表和索引。但一个表和索引不能跨越表空间,可跨越组成表空间的文件。在DB的打开的情况下,DBA利用ALTER TABLESPACE语句,可以实施表空间的在线或离线。SYSTEM表空间必须在线。表空间离线有下列原因: 一般为了使部分数据库不能使用,而允许正常存取数据库其余部分。执行表空间离线备份。
一个离线的表空间,不能被应用用户读或编辑。
可以增加数据文件扩大已有的表空间,也可增加新的表空间使数据库容量增大,或分配空间给某个应用。使用ALFER TABLESPACE ADD FILE语句将另一个数据文件加入到已存在表空间中。使用CREATE TABLESPACE语句可建立一个新的表空间。段(segment)表空间中的全部数据存储在以段划分的数据库空间中。一个段是分配给数据库用于数据存储的范围的集合。数据可以是表、索引或RDBMS所需要的临时数据。段是表空间的下一个逻辑存储的级别。一个段不能跨越一个表空间,但可跨越表空间内的文件。一个数据库最多需要五种段类型: 数据段 一个包含一个表(或聚集)的全部数据,一个表(或聚集)总有一个单个数据段。
索引段 一个索引段包含对一个表(或聚集)建立的一个索引的全部索引数据。一个表可以有一个、多个或者没有索引段,取决于它所拥有的索引个数。一个聚集必须至少有一个索引段,即在聚集码上建立聚集索引。
回滚段 每个DB有一个或多个回滚段。一个回滚段是DB的一部分,它记录在某一情况下被撤消的动作。回滚段用于事务控制和恢复。
临时段 在处理查询时,ORACLE需要临时工作空间,用于存储语句处理的中间结果,这个区称为临时段。
自举段 自举段在SYSTEM表空间中,在数据库建立时建立。它包括数据字典定义,在数据库打开时装入。
4.用户数据库对象
由用户建立的对象驻留在表空间中,含有真正的数据。数据库对象有表、视图、聚集、索引、伪列和序号生成器。
(1)聚集(Cluster)聚集是存储数据的一种可选择的方法。聚集包括存储在一起的一组表,它们共享公共列并经常一起使用。由于内容相关并且物理地存储在一起,存取时间得到改进,存储空间可以减少。聚集是一种优化措施。
聚集对性能的改进,依赖于数据的分布和SQL操作的内容。特别是使用聚集对连接非常有利。可以明显地提高连接的速度。建立聚集命令的基本格式: SQL>CREATE CLUSTER〈聚集名〉(列定义[,…]);利用聚集建立表命令基本格式: SQL>CREATE TABLE〈新表名〉(列定义[,…]CLUSTER〈聚集名〉(聚集列);在聚集码上必须建立一个聚集索引,对于每一数据块上每个聚集码值有一索引项。这个索引必须在DML语句对聚集表操作前建立。建立索引的语句是:CREATE INDEX索引名ON CLUSTER聚集名;(2)序号生成器 序号(SEQUENCE)生成器为表中的单列或多列生成顺序号。利用序号可自动地生成唯一主码。使用SQL语句定义序号,给出一些信息(如序号名、是升序或降序、每个序号间的间隔和其它信息)。所有序号存储在数据字典表中。
所有序号定义存储在数据字典的SEQUENCE表中。用户可以通过字典视图
USER-SE-QUENCES、ALL-SEQUENCES
和DBA-SEQUENCES查询和存取。建立序号生成器的语句是: CREATE SEQUENCE序号生成器名 其它选项。
一旦序号生成器S被定义。可用S.Currval来引用S序号生成器的当前值。用S.nextval产生下一个新的序号并加以引用。
(3)伪列 伪列的行为像表的一列,但不真正存在于表中,在查询时可引用伪列,但伪列不能插入、删除或修改。
5.数据字典
数据字典ORACLE RDBMS最重要的部分之一。数据字典含有一组系统定义的表,只能读,是关于数据库的引用指南。它可提供以下信息:ORACLE用户的用户名;每个用户被授予的权限和角色;实体的名字和定义;完整性约束 为数据库实体分配的空间;通用的数据库结构;审计信息;触发子程序等的存储。数据字典是以表和视图构成的,像其它数据库数据一样,可用SQL语言查询数据字典。
数据字典在DB建立时建立。每当DB进入操作,数据字典就由ORACLE RDBMS负责修改。数据库建立时有两个默认DBA用户:SYS、SYSTEM。SYS持有基本表中的数据。数据字典包含一组基表和相关的视图,可分为以下几类: 类
描 述
DBA-××× 只有DBA可存取的视图,给出数据库中定义的任何实体的信息
USER-××× 对任何用户可用的视图,给出他们自己的实体的信息
ALL-×××
对任何用户可用的视图,给出用户可存取的所有实体的信息
其中×××代表表名或视图名
下面列出的是一些常用的表或视图的名称。(1)DTAB 描述了组或数据字典的所有表。(2)TAB 用户建的所有基本表、视图和同义词。(3)COL 用户创建基本表的所有列的信息。
(4)SYNONYMS 用户可存取的同义名词、专用名和公用名。(5)CATALOG 用户可存取的表、视图、同义词、序列。(6)CONSTRAINTS 用户可存取的约束。(7)INDEXES 用户可存取的表和聚集的序列。(8)OBJECTS 用户可存取的对象。(9)TABLES 用户可存取的表。(10)USERS 查看当前全部用户。(11)VIEWS 查看用户可存取的视图。
(12)SYSTABAUTH 用户对数据对象的使用权限。可以用SQL>SELECT*FROM〈字典表名或视图名〉WHERE〈条件〉来读取有关信息。
可以用SQL>DESCRIBE〈表名〉来查看表的结构定义。但是数据库字典的结构不可改。用DESCRIBE命令还可以查看视图及过程的定义。
6.ORACLE的SQL、PL/SQL与SQL*PLUS 作为ORACLE数据库核心的SQL语言是ANSI和ISO的标准SQL的扩充。用来存储、检索和维护数据库中的信息,并控制对数据库的存取事务。由于RDBMS执行SQL语句时,是一次只执行一条语句,它是非过程化的。这就使得单条的SQL语句使用方便,功能强大。用户只需说明操作目的,不必关心具体操作的实现方法。
但在实际数据库应用开发中,往往要依据前一步对数据库操作的结果或上一个事务提交的情况来确定下一步的操作。故ORACLE推出了一种PL/SQL工具,它扩充了SQL语句,使之具有可进行过程化编程的能力,如循环、分支功能。PL/SQL可支持变量和常量的使用。例如在SELECT查询语句的where子句中可以使用变量来书写条件表达式。SQL*PLUS是ORACLE用来存储、查询、操纵、控制和报告数据库中信息的一个交互式工具。它是一种集编辑、调试、运行于一体的开发环境。在SQL*PLUS的这种运行环境下,既可以使用SQL命令、PL/SQL语句、及SQL*PLUS自己提供的命令,又可以运行由上述三类命令(或语句)编辑而成的命令文件。SQL*PLUS提供的附加命令主要用来编辑、运行上述三类命令及命令文件和对查询结果进行格式化输出等功能。
7.数据库系统的管理
ORACLE作为一个大型的数据系统,通常包含很多用户的数据。在应用开发过程中,有许许多多的各类人员进行开发和应用。所以必须要求有人对数据库系统进行临时管理,并进行数据的备份等工作。这种人被称为数据库管理员(Data Base Administrator)。他们必须理解数据库系统管理,清楚数据库包含的数据内容、运行状况等。
一般说来,DBA不是指具体的人,而是指对数据库可以行使DBA特权的用户。DBA具有如下责任:(1)ORACLE服务器和客户工作站软件的安装和升级;(2)创建基本的数据库存储结构(表空间);(3)创建基本的数据库客体(表、视图、索引);(4)修改数据库结构;(5)给用户授权,维护系统安全;(6)控制和管理用户对数据库的访问;(7)监视和优化数据库的性能;(8)计算数据库信息的后备和恢复;(9)后备和恢复数据库;(10)构造ORACLE服务器,如创建数据库链、客体同义词等。而应用开发人员须完成:(1)应用程序设计;(2)应用的数据库结构设计和修改;(3)为DBA提供必要的信息;(4)完成应用程序的开发。
看了许多关于ORACLE的知识论坛,总算是对ORACLE有个整体的认识,不仅仅是拘泥于课堂上学习的知识而已,虽然自己对ORACLE学习并不是多么的透彻,但是总归多接触点新的东西总是好的。
这一个学期,也是临近毕业的时候了,很感谢贾老师的严格要求,让我在学习上有了很大的进步,同时也改掉了一些惰性,能积极的投入到学习中去了,不懂就大胆的问同学,请学习好的同学帮助讲解,最后,真心的祝福贾老师工作顺利,身体健康!
第五篇:Oracle数据库总结范文
创建表及命名规则?
表名和列名:
必须以字母开头 必须在1–30个字符之间
必须只能包含A–Z, a–z, 0–9, _, $, 和# 必须不能和用户定义的其他对象重名 必须不能是Oracle 的保留字 Oracle默认存储是都存为大写
增删改查语法?
增加: 例如:使用INSERT语句往customers表中插入数据,指定相关列和值 INSERT INTO customers(customer_id, first_name, last_name, dob, phone)VALUES(6, 'Fred', 'Brown', '01-1月-1970', '800-555-1215');
如果为表所有列都指定值,那么可以忽略列清单
INSERT INTO customersVALUES(6, 'Fred', 'Brown', '01-1月-1970', '800-555-1215');
可以使用NULL为某些列指定空值
INSERT INTO customersVALUES(8, 'Sophie', 'White', NULL, NULL);
查询:select * fromcustomers;或者select字段 fromcustomerswhere条件 删除:deletefromcustomerswhere条件
更改:update customersset name = 'xiaoming',age = ‘16’(更改多个字段时候用逗号隔开)where 条件
对查询结果进行排序?
语句:select * fromcustomersorderby字段 desc;
(asc(升序),desc(降序)如果不写,默认升序)
NULL值了解么?
NULL值表示未知的值。它是一个特殊的值,但并不是空字符串,NULL值表示该列是未知的。当某些查询语句在输出结果列上看不到值的时候,可能就是NULL值
NVL()和NVL2():
NULL值被查询出来的时候没有显示信息,如何告知用户这是空字符串还是NULL,这可以通过NVL()函数来进行处理
NVL(x,value)是有value显示本身,null显示为替换的value NVL2(x,value1,value2)是如果x不为NULL值,返回value1,否则返回value2 例程:
select name,nvl2(email,'已知','未知')from student;【代码含义:代表如果email字段中有值,则显示已知,null则显示未知,如果想显示本来的查询结果select name,nvl(email,'未知')from student;】 update student set name = replace(name,'小','大');【代码含义:代表将STUDENT表中NAME 字段中如果含有小字,那么就将小字替换为大字(操作的不是显示结果,而是将表中数据进行更改)】
Oracle中的简单函数?
字符串函数
concat:将x和y拼接起来,并返回新字符串
例程:
select concat(first_name,'-'||last_name)姓名 from customers; Instr字符查找,从1开始。
select instr('asdbcrdbewqrbmde','b')from dual;select instr('asdbcrdbewqrbmde','b',5,2)from dual;【代表从第5个字符开始,第二个b所在的位置】
Ltrim : LTRIM(x,[trim_string])从x字符串左侧去除所有的trim_string字符串,如果没有指定trim_string字符串,则默认为去除左侧空白字符
Rtrim RTRIM(x,[trim_string])从x字符串右侧去除所有的trim_string字符串,如果没有指定trim_string字符串,则默认为去除右侧空白字符 Trim TRIM(trim_string FROM x)从x字符串两侧去除trim_string字符串
Replace REPLACE(x, search_string, replace_string)从字符串x中搜索search_string字符串,并使用replace_string字符串替换。用select执行并不会修改数据库中原始值,但是用update执行可以修改。
Substr SUBSTR(x, start,[length])返回字符串中的指定的字符,这些字符从字符串的第start个位置开始,长度为length个字符;如果start是负数,则从x字符串的末尾开始算起;如果length省略,则将返回一直到字符串末尾的所有字符
例程:
select substr('abcd月fg',4,2)from dual;(结果:d月)select substr('abcdefg',-2)from dual;(结果:fq)
日期函数
Sysdate 例程:
Selectsysdatefromdual;
Select to_char(sysdate, 'yyyy-mm-dd-hh-mm-ss')from dual;
Add_months(d1,n1) last_day():
转换函数
To_char TO_CHAR(x,[ format])将x转化为字符串。format为转换的格式,可以为数字格式或日期格式
select to_char(sysdate,'yyyy-mm-dd')from dual;【一般在查询时候使用,使返回的值成为指定格式】
to_date TO_DATE(x,[format])将x字符串转换为日期
insert into student values(seq_stu.nextval,'小明',to_date('1992-2-18','yyyy-mm-dd'),default,'北京',null);【一般在添加使用】 返回所查询的值中最后一个日期数据。
聚合函数
Avg:平均数 Sum:求和 Max:最大值 Min:最小值 Count:返回统计的行数 Round:四舍五入
例程:
select round(avg(bid),1)from bug;分组了解么?
有时需要对表中的行进行分组,然后统计每组的信息,可以使用GROUP BY进行分组,然后再对每组进行统计。
(1)可以使用GROUP BY对多个列进行分组
例:
SELECT product_id, avg(customer_id)FROM purchases GROUP BY product_id;
(2)可以对分组后的行使用聚集函数,聚集函数会统计每组中的值,对于每组分别统计后返回一个值 例:
SELECT
product_type_id,BY
COUNT(ROWID)FROM
BY
productsGROUP product_type_id;注意:
product_type_idORDER a)如果查询中使用了聚集函数,被查询的列未使用聚集函数处理,那么这些列必须出现在GROUP BY子句后,否则,会提示ORA-00937错误
b)不能使用聚集函数作为WHERE子句的筛选条件,否则,会提示ORA-00934错误
c)可以使用HAVING子句过滤分组后的行
SELECT...FROM...WHERE GROUP BY...HAVING...ORDER BY...;(GROUP BY使用时可以不使用HAVING,但是使用HAVING时必须有GROUP BY才有意义)
(3)同时使用WHERE, GROUP BY和HAVING
a)首先,执行WHERE筛选掉不符合条件的行 b)然后,将符合条件的行使用GROUP BY进行分组 c)最后,使用HAVING对分组统计的结果进行再次筛选 例:
SELECT product_type_id, AVG(price)FROM products
WHERE price < 15
GROUP BY product_type_id HAVING AVG(price)> 13 ORDER BY product_type_id;
表的约束条件?
目的:
确保表中数据的完整性。
常用的约束类型: 主键约束(PRIMARY KEY):要求主键列数据唯一,并且不允许为空 非空约束(NOT NULL):指定的列的值不允许为空
唯一键约束(UNIQUE):要求该列唯一,允许为空,但只能出现一个空
值
检查约束(CHECK):指定表中一列或多列可以接受的数据值格式 默认约束(DEFAULT):指定某列的默认值
外键约束(FOREIGN KEY):用于建立和加强两个表数据之间连接的一
列或多列。通过将表中的主键列添加到另一个表中。可以创建两个表之间的连接。这个主键的列就称为第二个表的外键。外键约束就可以确保添加到外键表中的任何行都在主表中都存在相应的行
多表查询?
不同的数据存储在不同的表中,通常要查询多张表才能找到需要的数据
例程: SELECT products.name, product_types.name FROM products, product_types WHERE
products.product_type_id
= product_types.product_type_id AND products.product_id = 3;
products表和product_types表相关字段会用在SELECT语句及WHERE子句上,可以给表起别名,提高代码可读性、降低书写难度 例程:
SELECT p.name, pt.name FROM products p, product_types pt WHERE p.product_type_id = pt.product_type_id AND p.product_id = 3 注意:
如果查询两张表,并且没有定义连接条件,那么查询的结果集是两表相乘的结果,这样的情况称之为笛卡尔乘积。总结:多表查询WHERE时,连接次数=查询时连接表的数量-1
常见的三种连接类型:
内连接:
内连接返回的行只有满足连接条件才会返回。如果连接条件的列中有NULL值,那么该行则不会返回 外连接:
外连接返回的行满足连接条件,也包括在连接条件的列包含空值的行
自连接:
连接的表为同一张表
子查询?
子查询是嵌入到另一个SELECT语句中的一个SELECT语句。通过使用子查询,可以使用简单的语句组成强大的语句。当需要从表中选择行,而选择条件却取决于该表自身中的数据时,子查询非常有用。
单行子查询:(1)可以将另外一个查询作为WHERE子句的子查询
例:查询尾名是‘Brown’的首名和尾名
SELECT first_name, last_name FROM customers
WHERE customer_id =
(SELECT customer_id FROM customers WHERE last_name = 'Brown');(2)在单行子查询还可以使用其他比较运算符,如<>、<、>、<=和>= 例:查询价格大于平均价格的商品编号、名称及价格
WHERE子句中使用>,以及子查询中使用AVG()聚集函数
SELECT product_id, name, price FROM products WHERE price >(SELECT AVG(price)FROM products);(3)在HAVING子句中使用子查询
HAVING是在分组统计后用于过滤行,同样在HAVING子句后面可以跟子查询。单行子查询将返回结果用于HAVING子句过滤分组统计的行
例如:查询平均价格小于最大平均值的商品编号及平均值
SELECT product_type_id, AVG(price)FROM products GROUP BY product_type_id HAVING AVG(price)<(SELECT MAX(AVG(price))FROM products GROUP BY product_type_id)ORDER BY product_type_id;
分页查询?
可以通过ROWNUM来实现。
序列?
序列是一个数据库对象,用于生成一系列的整数。
索引?
索引是与表关联的可选结构。可以创建索引以加快对表执行SQL语句的速度。就像书的索引可以帮助我们更快速的查找信息一样,Oracle中的索引也提供了一种更快地访问表数据的途径。
视图?
视图是基于一张表或多张表或另外一个视图的逻辑表。视图不同于表,视图本身不包含任何数据。表是实际独立存在的实体,是用于存储数据的基本结构。而视图只是一种定义,对应一个查询语句。视图的数据都来自于某些表,这些表被称为基表。数据库中只在数据字典中存储对视图的定义。