电子科技大学数据库与软件工程实验五

news2024/12/22 20:37:41

适用于网工和物联网专业

期末考试会考

目录

一、实验目的

二、实验内容

三、实验软件

四、实验步骤及数据记录

1. 权限管理

2. 数据库备份

3. 生成 AWR 报告

五、实验结论及思考题

六、总结及心得体会

七、对本实验过程及方法、手段的改进建议


一、实验目的

1、掌握系统权限、对象权限的授予和回收;

2、掌握使用数据泵的方法来备份及还原数据库;

3、熟悉利用 Oracle AWR 报告分析数据库性能。

二、实验内容

利用 DBA 用户进行 Oracle 数据库的系统权限、对象权限管理,利用数据泵

工具进行数据库数据的备份及恢复。生成 Oracle AWR 报告,并观测报告中的各

项参数,以此来进行数据库优化。

三、实验软件

Oracle 数据库

四、实验步骤及数据记录

1. 权限管理

使用 Oracle 用户登录进入 CentOS 系统桌面,用 sys 账户进入 sqlplus。

1)创建一个用户口令认证的数据库用户 usera_exer,口令为 usera,默认表空间为 USERS,默认临时表空间为 TEMP,USERS 表的配额为 10MB,初始状态为锁定状态。

图1 usera_exer的创建

 

2)创建一个口令认证的数据库用户 userb_exer,口令为 userb,默认表空间为 USERS,默认临时表空间为 TEMP,USERS 表的配额为 10MB,初始状态为默认状态。

图2 userb_exer的创建

 

3)为 usera_exer 用户授权 CREATE SESSION 系统权限、SCOTT.EMP 的SELECT 和 UPDATE 对象权限,同时允许该用户将获得的权限授予其他用户。

图3 usera_exer相关权限授权

 

4)将用户 usera_exer 的账户解锁。

图4 用户 usera_exer 的账户解锁

 

5)用 usera_exer 账户登录数据库(conn usera_exer/usera),查询SCOTT.EMP 中的数据。

 

 

图5 SCOTT.EMP 中的数据

6)将 SCOTT.EMP 的 SELECT 权限和 UPDATE 权限授予用户 userb_exer,但禁止用户 userb_exer 将获得的权限再授予其他用户。

图6 命令和结果截图

 

7)用 sys 账户登录数据库(conn /as sysdba),禁止用户 usera_exer 将获得的 CREATE SESSION 系统权限再授予其他用户。

图7 禁止权限

 

8)禁止用户 usera_exer 将获得的 SCOTT.EMP 的 SELECT 和 UPDATE 对象权限再授予其他用户。

图8 禁止用户usera_exer的权限

 

9)创建角色 rolea(口令为 rolea)和 roleb(口令为 roleb),将 CREATE TABLE权限、SCOTT.EMP 的 INSERT 和 DELETE 权限授予 rolea;将 CONNECT 和RESOURCE 角色授予 roleb。

图 9创建角色

 

10)将角色 rolea 和 roleb 授予用户 usera_exer。

 

图10 角色授予用户

2. 数据库备份

1)将权限 CREATE SESSION、CREATE TABLE、EXP_FULL_DATABASE、 IMP_FULL_DATABASE 授予用户 userb_exer。

图11 权限授予

 

2)使用 Oracle 用户在/home/Oracle_11g 下创建一个目录 imp_dir。

[Oracle@localhost ~]$ cd /home/oracle_11g/

[Oracle@localhost Oracle_11g]$ mkdir imp_dir

3)用 sys 账户进入 sqlplus,定义刚创建的 imp_dir 目录。

[Oracle@localhost Oracle_11g]$ sqlplus /nolog

SQL> conn /as sysdba

SQL> CREATE DIRECTORY imp_test AS '/home/Oracle_11g/imp_dir';

查看 Oracle 数据库的directory,截图记录查询结果。

SQL> select * from dba_directories;

图12 查看数据库的directory

 

将 imp_dir 目录的读写权限授权给 userb_exer 用户,

SQL> grant read,write on directory imp_test to userb_exer;

4)退出 sqlplus,在 oracle 用户下,使用 userb_exer 用户用 expdp 备份 scott 用户的所有表和所有数据,备份的文件名采用“实验者姓名拼音_日期”形式。

[Oracle@localhost ~]$ expdp userb_exer/userb DIRECTORY=imp_test  SCHEMAS=scott DUMPFILE=zhangsan.scott_0831.dmp logfile= zhangsan_scott.0831.log

图13 执行结果记录

 

3. 生成 AWR 报告

用 sys 账户进入 sqlplus,运行脚本 awrrpt.sql 产生整个数据库的 AWR 报告。

SQL> @$ORACLE_HOME/rdbms/admin/awrrpt.sql

要求:

1)输出报告的文件格式为 html

2)报告的监控天数为 1 天

3)报告针对的起始快照号和终止快照号包含最多 5 个最新快照

AWR 报告生成后,退出 sqlplus,用浏览器打开生成在当前目录下的 AWR报告文件,查看并截图记录能反映当前数据库性能的报告数据。

 

图14 AWR报告

由于AWR报告太长就不所有结果都列出来,上述只附上一些关键的指标。

五、实验结论及思考题

1、创建一个以自己姓名命名的数据库账户并授予对表的操作权限,可以对该表数据进行查询、更新、删除等操作,操作完成后收回对表的操作权限,再尝试对表数据重复之前的操作。截图记录所有操作命令及其结果。

图15 创建自己名字命名的数据库和授予权限

之后进行查询:

 

 

图16 查询结果

收回权限之后进行查询。

17 进行权限的回收

 

 

图18 回收权限后查询截图

2、分析 Oracle AWR 报告(文件 awrrpt_1_51326_51330.html)中反映当前数据库性能的报告数据,判断当前数据库是否存在性能瓶颈,以及当前数据库需要优化的选项。

AWM报告老师会发

 

1ELAPSEDDB TIME

DB TIME=CPU TIME+WAIT TIME

DB TIME>ELAPSED 说明数据库比较繁忙 如DB TIME<ELAPSED 说明数据库比较空闲。

如果数据库繁忙。

CPU的负载程度可以使用下面公式:

CPU负载=DB TIME/(CPU数*ELAPSED)*100% 计算

2Load Profile (REDO SIZELOGICAL READSHARD PARSESROLLBACK)

 

 

Redo size:每秒/每事务产生的redo大小(单位字节),可标志数据库任务的繁重程序。其中Per Second表示每秒中产生的redo的字节数,Per Transaction表示每个事务产生的redo的字节数,可以通过后者可以看到事务的大小,协助判断是否commit次数太多。例如per second很大,而per transaction很小,说明commit次数太多。通常在很繁忙的系统中日志生成量可能达到上百k,甚至几百k。

Logical reads:每秒/每事务逻辑读的块数(我们可以这样认为,block在内存中,我们每一次读一块内存,就相当于一次逻辑读),单位为块。

Executes:每秒/每事务SQL执行次数,包括用户执行的sql语句与系统执行的sql语句,表示一个系统SQL的繁忙程度。

Logical reads/Executes不会超过50,一般只有10左右。

Hard parses:其中硬解析的次数,如果硬解析次数太高,说明SQL重用率不高。例如超过100,基本都是由于不使用绑定变量所导致的,导致CPU使用率的问题,极有使得性能急剧下降。

Rollbacks:表示数据库中事务的回退率,如果不是因为业务本身的原因,通常应该小于10%为好,回退是一个很消耗资源的操作。

 3、内存命中率相关指标

 

 

首先看整个实例的命中率,普通应用系统应该在90%以上。

Buffer Nowait% :表示在数据缓冲区中获取buffer时,未进行等待的比率,越高越好。

buffer hit% :表示进程从内存中找到数据块的比率,监视这个值是否发生重大变化比这个值本身更重要。对于一般系统,命中率通常在95%以上,如果此值低于80%,应该给数据库分配更多的内存,考虑加大db_cache_size。

Redo NoWai%t表示在LOG缓冲区获得BUFFER的未等待比例。如果太低(可参考90%阀值),考虑增加LOG BUFFER。

library hit%表示Oracle从Library Cache中检索到一个解析过的SQL或PL/SQL语句的比率,当应用程序调用SQL或存储过程时,Oracle检查Library Cache确定是否存在解析过的版本,如果存在,Oracle立即执行语句;如果不存在,Oracle解析此语句,并在Library Cache中为它分配共享SQL区。低的library hit ratio会导致过多的解析,增加CPU消耗,降低性能。Sql语句在库缓冲中能否找到相应的解析计划,如果library hit ratio低于90%,可能需要调大shared pool区,或检查是否有硬编码现象。

Latch Hit%:Latch是一种保护内存结构的锁,可以认为是SERVER进程获取访问内存数据结构的许可,表示内部结构维护锁命中率。要确保Latch Hit>99%,否则意味着Shared Pool latch争用,可能由于未共享的SQL,或者Library Cache太小,可使用绑定变更或调大Shared Pool解决。

Parse CPU to Parse Elapsd:表示解析实际运行时间/(解析实际运行时间+解析中等待资源时间),越高越好。在实际繁忙的系统中,该值可能因为等待资源而不会太高。

Non-Parse CPU :SQL实际运行时间/(SQL实际运行时间+SQL解析时间),太低表示解析消耗时间过多。说明解析时间所占比率过高,需要考虑提高sql语句重用性。

Execute to Parse:是语句执行与分析的比例,表示sql语句解析后被重复执行的命中率,计算公式=100*(1-Parses/Executions),如果该值偏小,说明分析(硬分析和软分析)的比例较大,快速分析较少,根据实际情况,可以考虑调整session_cached_cursors参数,有些报告中这个值是负的,看上去很奇怪,事实上这表示一个问题,sql如果被age out的话就可能出现这种情况 ,也就是sql老化,执行alter system flush shared_pool如果要SQL重用率高,则这个比例会很高。该值越高表示一次解析后被重复执行的次数越多。

Soft Parse%:

Soft Parse%:软解析的百分比(softs/softs+hards),近似当作SQL在共享区的命中率,SQL语句软解析占整个分析的命中率,如果低于95,需检查是否有硬编码现象,如果低于80,说明SQL语句基本没有重用性=soft/(soft+hard)。太低则需要调整应用使用绑定变量。

In-memory Sort:在内存中排序的比率,即有多少排序在内存中进行的,如果过低说明有大量的排序在临时表空间中进行,性能肯定不好,考虑调大PGA参数,sort_area_size。

 4、共享内存池总体情况

 

Memory Usage %:表示共享池内存使用率,对于一个已经运行一段时间的数据库来说,共享池内存使用率,应该稳定在75%-90%间,如果太小,说明Shared Pool有浪费,而如果高于90,说明共享池中有争用,内存不足。

SQL with executions>1:执行次数大于1的SQL比率,如果此值太小的话要结合Parse,看看是不是硬编码现象,说明需要在应用中更多使用绑定变量,避免过多SQL解析。

Memory for SQL w/exec>1:执行次数大于1的SQL消耗内存的占比。

5、前5/10个等待时间最长的事件

  

通常排序前几位的事件有如下几个:

db file scattered read等待事件是当SESSION等待multi-block I/O时发生的,通常是由于full table scans或 index fast full scans。如果在一般系统中,不应该有过多的全扫描操作,而应使用选择性好的索引操作。

db file sequential read等待意味着发生顺序I/O读等待(通常是单块读取到连续的内存区域中),如果这个等待非常严重,应该使用上一段的方法确定执行读操作的热点SEGMENT,然后通过对大表进行分区以减少I/O量,或者优化执行计划(通过使用存储大纲或执行数据分析)以避免单块读操作引起的sequential read等待。通过在批量应用中,DB file sequential read是很影响性能的事件,总是应当设法避免。

Log File Parallel Write事件是在等待LGWR进程将REDO记录从LOG 缓冲区写到联机日志文件时发生的。虽然写操作可能是并发的,但LGWR需要等待最后的I/O写到磁盘上才能认为并行写的完成,因此等待时间依赖于OS完成所有请求的时间。如果这个等待比较严重,可以通过将LOG文件移到更快的磁盘上或者条带化磁盘(减少争用)而降低这个等待。

Buffer Busy Waits事件是在一个SESSION需要访问BUFFER CACHE中的一个数据库块而又不能访问时发生的。缓冲区“busy”的两个原因是:1)另一个SESSION正在将数据块读进BUFFER。2)另一个SESSION正在以排它模式占用着这块被请求的BUFFER。

Log File Sync事件,当用户SESSION执行事务操作(COMMIT或ROLLBACK等)后,会通知 LGWR进程将所需要的所有REDO信息从LOG BUFFER写到LOG文件,在用户SESSION等待LGWR返回安全写入磁盘的通知时发生此等待。

Enqueue Waits是串行访问本地资源的本锁,表明正在等待一个被其它SESSION(一个或多个)以排它模式锁住的资源。减少这种等待的方法依赖于生产等待的锁类型。导致Enqueue等待的主要锁类型有三种:TX(事务锁), TM D(ML锁)和ST(空间管理锁)。

enq:TX-index contention是索引分割事件。当事务修改索引中的数据时,而相关索引块没有足够的空间的时候,就会发生索引块的分割,在分割的过程中前台进程需要等待分割完毕才能继续操作。如果这个时候其他会话也要修改这个索引块的数据,那么将会出现索引块的竞争。一般索引块的分割持有资源和释放非常短,并不会对数据库造成严重的影响。但是对表操作并发量很大的情况下可能导致严重的竞争。

buffer exterminate等待事件通常发生SGA自动管理内存组件的时候。是当buffer cache中的部分空间正进行动态回缩时,有会话试图访问buffer cache中被选择空间释放的granule中的data block时,就会发生buffer exterminate等待。当buffer被释放(比如从buffer cache hash chain,LRU chain上移除)后,等待的会话就能够重载该block到剩余的一个db cache granule中去,然后其他会话就可以通过hash查找找到新的该block的buffer address。

六、总结及心得体会

实验中遇到的问题以及解决办法:

1.在一开始进入Oracle数据库进行操作的时候,进入sqlplus之后也要先启动数据库,才能正常进行命令的输入;

2. expdp备份scott用户的所有表和所有数据时候,一开始会出现错误,如下:

图19 错误截图

 

解决方案:

图20 解决方案

 

3.在最后生成AWR报告时候,快照起始和结束要连续。

七、对本实验过程及方法、手段的改进建议

1. 在expdp 备份 scott用户的所有表和所有数据的时候,可能会出现报错,实验指导书可以指明一下。

2.对快照的ID进行一些说明,防止学生在进行到输入快照的那一步出错,不知如何解决。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/372260.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

工作九年的机器人讲师收入如何

如下都是个人情况&#xff0c;供各位朋友参考&#xff0c;仅为个人情况&#xff0c;只代表我个人。为何写这样一篇博客&#xff1a;看了最近的热点我在一所普普通通的不知名高校工作了九年。如果问及我存款……我实在是非常非常惭愧的。真实数值如下&#xff08;组合贷&#xf…

【数据库】第八章 数据库编程

第八章 数据库编程 8.1 嵌入式SQL&#xff08;C语言版&#xff09; 被嵌入的语言&#xff08;java ,C)等被称为宿主语言&#xff0c;简称主语言 当主语言 为 C 语言的时候 ​ 语法格式为 EXEC SQL <SQL语句>当主语言为java的时候 格式为 #SQL {<SQL语句>}以下讲解…

MATLAB | 如何解决实验数据散点图重叠问题(overlap)

本期部分实验效果&#xff1a; 这期讲一下如果数据重合严重该咋办(overlap)&#xff0c;事先说明&#xff0c;本文中的绘图均使用一个几行的简单小代码进行了修饰&#xff1a; function defualtAxes axgca;hold on;box on ax.XGridon; ax.YGridon; ax.XMinorTickon; ax.YMinor…

Redis 之企业级解决方案

文章目录一、缓存预热二、缓存雪崩三、缓存击穿四、缓存穿透五、性能指标监控5.1 监控指标5.2 监控方式&#x1f34c;benchmark&#x1f34c;monitor&#x1f34c;slowlog提示&#xff1a;以下是本篇文章正文内容&#xff0c;Redis系列学习将会持续更新 一、缓存预热 1.1 现象…

云服务器产生背景与历史演进

云服务器产生背景  业务量爆发和衰退周期考验后端服务器性能匹配 在传统IT架构中&#xff0c;需要提前预估业务爆发时间和业务量&#xff0c;提前部署服务器以支撑业务。但是&#xff0c;往往预估与实际结果是有差距的&#xff0c;预估量过大会造成服务器采购成本高&#x…

阿里巴巴内网 Java 面试 2000 题解析(2023 最新版)

前言 这份面试清单是今年 1 月份之后开始收集的&#xff0c;一方面是给公司招聘用&#xff0c;另一方面是想用它来挖掘在 Java 技术栈中&#xff0c;还有一些知识点是我还在探索的&#xff0c;我想找到这些技术盲点&#xff0c;然后修复它&#xff0c;以此来提高自己的技术水平…

2016年chatGPT之父Altman与马斯克的深度对话(值得一看)

2016年9月&#xff0c;现今OpenAI CEO&#xff0c;ChatGPT之父&#xff0c;时任创投公司Y Combinator的总裁Sam Altman在特斯拉加州弗里蒙特工厂采访了埃隆马斯克。马斯克阐述了创建OpenAI的初衷&#xff0c;以及就他而言&#xff0c;对于未来最为重要的五件事。这是OpenAI的两…

【概念辨析】大小端存储

一、情境 在进行内存调试窗口的查看时&#xff0c;是不是会有一种错觉&#xff0c;就是它存的数据与我们预期的都是颠倒的&#xff0c;比如&#xff1a; 这里的a就和我们预期的不是很相同。 二、大小端 大小端是计算机厂家根据自己的习惯制定的关于数据字节序的规则。 1.大端…

2023中职网络安全竞赛Web安全应用任务解析答案

Web安全应用 任务环境说明: 服务器场景:match_win03-4-1(关闭链接)服务器场景操作系统:Windows Server 2003 使用渗透机Kali Linux,访问靶机FTP服务,下载靶机网站中的部分源码并分析,将源码文件post.php中${flag1}空缺处应填写的函数作为Flag值提交。Flag:isset 使用…

程序设计语言(做题)

程序设计语言部分一、高级语言与低级语言1、低级语言&#xff08;面向机器&#xff09;2、高级语言&#xff08;面向对象&#xff09;二、编译程序与解释程序1、区别2、流程&#xff08;加粗点为不可省略过程&#xff0c;顺序不可变&#xff09;&#xff08;1&#xff09;词法分…

(指针内容)当你申请一个变量,在这期间内存会发生什么?

一. 前言C语言是比较偏底层的语言&#xff0c;为什么他比较偏底层&#xff0c;就是因为他的很多操作都是直接针对内存操作的。这篇我们就来讲解C语言的一大特点&#xff0c;也是难点&#xff0c;指针和指针操作。这篇文章我会先从基本类型的存储过程和原理讲起&#xff0c;然后…

【Docker】命令总结

目录 1.镜像命令 1.1拉取镜像 1.2查看镜像 1.3保存镜像 1.4导入镜像 2.容器命令 2.1创建并运行容器 2.2删除容器 2.3进入容器 2.4查看容器状态 2.5暂停容器 2.6恢复容器 2.7停止容器 2.8启动容器 2.8查看容器日志 3.数据卷命令 3.1创建数据卷 3.2查看所有数据…

C语言刷题(2)——“C”

各位CSDN的uu们你们好呀&#xff0c;今天小雅兰来复习一下之前所学过的内容噢&#xff0c;复习的方式&#xff0c;那当然是刷题啦&#xff0c;现在&#xff0c;就让我们进入C语言的世界吧 当然&#xff0c;题目还是来源于牛客网 完完全全零基础 编程语言初学训练营_在线编程题…

OP-TEE使用过程记录

1 项目概述 1.1项目需求 为确保用户的数据的安全&#xff0c;ARM公司提出了trustzone技术&#xff0c;个人将trustzone理解为cortex的虚拟化技术。在不增加硬件的情况下&#xff0c;使用trustzone技术达到硬件加密的效果。 1.2重点概念简要介绍 1.2.1 TrustZone机制&#x…

电子科技大学数据库与软件工程三

适用于网工和物联网专业 目录 一、实验目的 二、实验内容 三、实验软件 四、实验步骤及数据记录 1.子查询 2. 伪列 3.数据库对象 4. 块、存储过程和触发器 五、实验结论及思考题 实验结论&#xff1a; 思考题&#xff1a; 六、总结及心得体会 七、对本实验过程及方…

【华为OD机试模拟题】用 C++ 实现 - 关联子串(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 获得完美走位(2023.Q1) 文章目录 最近更新的博客使用说明关联子串题目输入输出示例一输入输出说明示例一输入输出Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华…

Spring的Bean的生命周期,Bean的装配和注入

Spring容器启动获得BeanDefinition对象中有一个scope 属性。该属性控制着bean对象的作用域。本章节介绍Bean的作用域及生命周期&#xff0c;了解bean是怎么来的又怎么没的。 一、Bean的作用域 在Bean容器启动会读取bean的xml配置文件&#xff0c;然后将xml中每个bean元素分别转…

Bean作用域和生命周期

目录 Bean作用域的例子 作用域定义 Bean的六种作用域 设置作用域 Spring的执行过程和Bean的生命周期 Spring的主要执行流程 Bean的生命周期 在上篇博客中我们使用Spring存储和获取Bean,因此Bean是Spring中最重要的资源,今天这篇博客就深入了解Bean对象 Bean作用域的例子 …

redis(8)有序集合Zset

有序集合Zset Redis 有序集合 zset 与普通集合 set 非常相似&#xff0c;是一个没有重复元素的字符串集合。 不同之处是有序集合的每个成员都关联了一个评分(score)&#xff0c;这个评分(score)被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的&#xf…

如何在Linux中实现进程间通信

致前行路上的人&#xff1a; 要努力&#xff0c;但不要着急&#xff0c;繁花锦簇&#xff0c;硕果累累都需要过程&#xff01; 目录 1.进程间通信介绍 1.1进程间通信的目的 1.2进程间通信发展 1.3进程间通信分类 1.4进程间通信的本质 2.管道 2.1什么是管道 2.2管道与进程的关系…