实验四Oracle大数据库对象.docx

上传人:b****4 文档编号:12134269 上传时间:2023-04-17 格式:DOCX 页数:16 大小:171.15KB
下载 相关 举报
实验四Oracle大数据库对象.docx_第1页
第1页 / 共16页
实验四Oracle大数据库对象.docx_第2页
第2页 / 共16页
实验四Oracle大数据库对象.docx_第3页
第3页 / 共16页
实验四Oracle大数据库对象.docx_第4页
第4页 / 共16页
实验四Oracle大数据库对象.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

实验四Oracle大数据库对象.docx

《实验四Oracle大数据库对象.docx》由会员分享,可在线阅读,更多相关《实验四Oracle大数据库对象.docx(16页珍藏版)》请在冰豆网上搜索。

实验四Oracle大数据库对象.docx

实验四Oracle大数据库对象

实验四Oracle数据库对象

一、实验目的

了解Oracle的表、视图、索引、序列、同义词的基本概念和基本用法。

二、实验内容和步骤

1、查看用户具有的对象和可访问的对象(操作结果截图填入空白处)

以SCOTT连接数据库。

(1)查看用户模式中各种类型的对象数量

selectobject_type,count(*)fromuser_objectsgroupbyobject_type

(2)确定用户模式有权访问的对象总数

selectobject_type,count(*)fromall_objectsgroupbyobject_type

(3)确定谁拥有用户能够看见的对象

selectdistinctownerfromall_objects

2、创建基本表(填入代码)

创建上图基本表KHB,要求表创建在表空间USER_DATA

3、创建临时表(填入代码)

(1)创建一个基于会话的临时表。

a)创建临时表tmp_khb_1(与KHB同结构);

b)插入一条记录khbh=’00000001’,khmc=’aaa’;

c)以SCOTT用户启动第2个SQL*PLUS会话;

d)在第2个会话中查询tmp_khb_1;(操作代码及操作结果截图)

 

观察是否可以看见第1个会话插入的数据,为什么?

不能,因为基于会话的临时表只对当前会话可见。

每个会话只能查看和修改自己的数据。

e)插入一条记录khbh=’00000002’,khmc=’bbb’;

f)在第1个会话中查看第2个会话的数据;(操作代码及操作结果截图)

观察是否可以看见第2个会话插入的数据,为什么?

不能,因为基于会话的临时表只对当前会话可见。

每个会话只能查看和修改自己的数据。

g)在第1个会话中,将表截断;

h)在第2个会话中,观察表中是否仍然存在记录;(操作代码及操作结果截图)

 

表中是否仍然存在记录?

为什么?

是,因为基于会话的临时表只对当前会话可见。

每个会话只能查看和修改自己的数据。

(2)创建一个基于事务的临时表

a)创建临时表tmp_khb_2(与KHB同结构);

b)插入一条记录khbh=’00000001’,khmc=’aaa’;

c)查询tmp_khb_2;(操作代码及操作结果截图)

d)事务提交commit;

 

e)再次查询tmp_khb_2;(操作代码及操作结果截图)

是否能查询到数据?

为什么?

不能,因为基于事务的临时表中的数据仅在事物过程中有效,当事物提交后,临时表的暂时段将被自动截断

4、创建分区表(填入代码)

(1)创建范围分区

a)创建范围分区表range_test

range_test(t_idnumberprimarykey,

item_idnumber(8)notnull,

item_descriptionvarchar2(300)

分区字段为t_id,以值<10、<20及

b)插入三条记录

insertintorange_test(t_id,item_id,item_description)values(9,100,‘aaa’);

insertintorange_test(t_id,item_id,item_description)values(19,200,‘bbb');

insertintorange_test(t_id,item_id,item_description)values(29,300,'ccc');

c)查询前2个分区的记录(操作代码及操作结果截图)

d)删除第2个分区

e)查询表全部数据(操作代码及操作结果截图)

(2)创建列表分区

a)创建list_test(结构如PPT)

b)插入几条数据

INSERTINTOlist_testvalues('01','shanghai');

INSERTINTOlist_testvalues('02','beijing');

INSERTINTOlist_testvalues('02','suzhou');

数据能否插入?

为什么?

第一和第二个可以插入,第三个不行,因为插入的分区中没有‘suzhou’这个关键字。

c)查询分区1数据(操作代码及操作结果截图)

5、启用oracle的executionplan

(1)以sysdba身份连接数据库;

conn/assysdba

(2)创建plan_table表,执行utlxplan.sql脚本;

@?

/rdbms/admin/utlxplan.sql

(3)创建同义词为多个用户共享一个plan_table,并授权给public;

createpublicsynonymplan_tableforplan_table;

grantallonplan_tabletopublic;

(注意,执行过程中,若出现同义词名称已存在,请先删除该同义词)

droppublicsynonymplan_table;

(4)创建plustrace角色

@?

/sqlplus/admin/plustrce.sql

(5)将角色权限授予public

grantplustracetopublic;

完成授权后,就可以开启执行计划模式,可以采用以下几种方式:

settimingon显示执行时间

setautotraceon查看执行计划和查询信息

setautotracetraceonly只显示执行计划,不显示查询输出

6、创建物化视图(填入代码)

(1)为scott用户授权

(2)创建基于emp,dept表的物化视图日志

(3)创建基于emp,dept两张表链接的物化视图

 

(4)查询视图(开启执行计划)(操作代码及操作结果截图)

7、创建索引(代码及截图)

(1)查看用户的索引

(2)创建位图索引

a)创建基于emp(job)的位图索引;

b)开启执行计划,查询表记录,看是执行全表查询,还是基于索引的查询

selectcount(*)fromempwherejob='SALESMAN';

(3)创建函数索引

a)创建基于emp的trunc(sal)索引

b)在开启了执行计划的状态下,分别进行如下查询,看查询扫描的范围是全表还是基于索引;

selectename,salfromempwheresal>2000

selectename,salfromempwheretrunc(sal)>2000

 

8、创建序列(填入代码)

(1)创建一个表

createtabletmp_sq(idintnull,t_namevarchar(20));

(2)创建一个序列,初始值1,增量1,无最大值,序列不循环。

(3)插入数据

insertintoTMP_SQ(id,t_name)values(SEQ_TEST.nextval,’aaa’);

insertintoTMP_SQ(id,t_name)values(SEQ_TEST.nextval,’bbb’);

(4)建立触发器,当有数据插入表TMP_SQ时,使用Oracle序列为其插入递增的主键值。

createtriggerTRG_TEST

beforeinsertonTMP_SQforeachrow

begin

selectSEQ_TEST.nextvalinto:

new.IDfromdual;

end;

(5)删除数据t_name=’bbb’

(6)插入新数据t_name=’ccc’

(7)显示当前表中数据(操作代码及操作结果截图)

9、创建同义词(填入代码)

(1)公有同义词

a)以system用户连接数据库

b)创建EMP表的公有同义词E

c)以scott连接数据库

d)访问同义词E(操作代码及操作结果截图)

 

scott用户能访问system用户创建的公共同义词E吗?

______可以_____________

(2)私有同义词

a)以system用户连接数据库

connsytem/toor

b)创建DEPT表的私有同义词D_S

createsynonymd_sforscott.dept;

c)以scott用户连接数据库

connscott/tiger

d)访问同义词D_S(操作代码及操作结果截图)

 

scott用户能访问system用户创建的私有同义词D_S吗?

__不能________

 

三、实验思考

1、两个表经常进行连接操作,为了提高连接的效率,可以对这两个表建立什么结构?

 

2、序列的作用?

序列生成了,怎么使用呢?

当你需要一个自动增长的id或别的什么主键的时候,你可以用一个序列来解决问题。

 

3、位图索引能加快检索的原因?

索引就是通过事先排好序,从而在查找时可以应用二分查找等高效率的算法。

一般的顺序查找,复杂度为O(n),而二分查找复杂度为O(log2n)。

当n很大时,二者的效率相差及其悬殊。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 教育学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1