管理口令安全和资源(二)

DBMS_METADATA

DBMS_METADATA 是 Oracle 数据库中的一个包,它提供了用于管理数据库元数据的工具和过程。元数据是关于数据的数据,它描述了数据库的结构,包括表、视图、索引、存储过程、用户和其他数据库对象的信息。DBMS_METADATA 包允许用户获取、修改和重建数据库对象的元数据。
DBMS_METADATA 包在 Oracle 9i Release 2(9.2.0.1)中首次引入,并在后续的 Oracle 数据库版本中得到增强和更新。以下是一些 DBMS_METADATA 包的主要功能和用途:

  1. 获取元数据:可以获取数据库中各种对象的DDL(数据定义语言)语句,例如表、索引、视图、触发器等。
  2. 修改元数据:可以对获取到的DDL语句进行修改,然后重新应用到数据库中。
  3. 重建对象:可以使用修改后的DDL语句来重建数据库对象。
  4. 版本控制DBMS_METADATA 包可以处理不同版本的DDL语句,使得在不同数据库版本之间迁移对象变得更加容易。
  5. 导出和导入:可以用来导出对象的元数据,并在其他数据库中导入这些元数据。
    以下是一些使用 DBMS_METADATA 包的基本示例:
-- 获取特定表的DDL
DECLAREddl_text CLOB;
BEGINddl_text := DBMS_METADATA.GET_DDL('TABLE', 'MY_TABLE', 'MY_SCHEMA');DBMS_OUTPUT.PUT_LINE(ddl_text);
END;
/
-- 修改并重新创建对象
DECLAREddl_text CLOB;new_ddl_text CLOB;
BEGINddl_text := DBMS_METADATA.GET_DDL('TABLE', 'MY_TABLE', 'MY_SCHEMA');-- 对ddl_text进行必要的修改new_ddl_text := ddl_text; -- 假设这里已经进行了修改DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'PRETTY', TRUE);DBMS_METADATA.APPLY_TRANSFORM(new_ddl_text);-- 执行新的DDL语句来重建对象EXECUTE IMMEDIATE new_ddl_text;
END;
/

在使用 DBMS_METADATA 包时,需要注意以下几点:

  • 权限:用户需要具有相应的权限才能访问和修改数据库对象的元数据。
  • 版本兼容性:不同版本的 Oracle 数据库中,DBMS_METADATA 包的行为可能会有所不同,因此在跨版本使用时需要注意兼容性问题。
  • 性能影响:操作大量元数据可能会对数据库性能产生影响,因此应谨慎使用。

配置文件(Profile)

在 Oracle 数据库中,配置文件(Profile)是一组资源限制和密码参数,用于管理数据库用户会话使用的资源限制和密码策略。以下是如何使用 DROP PROFILE 命令来删除配置文件的说明:

  1. 删除配置文件
    要删除一个配置文件,可以使用 DROP PROFILE 命令。但是,如果配置文件正在被一个或多个用户使用,那么你必须首先确保没有用户正在使用该配置文件,或者你可以使用 CASCADE 选项来同时从所有使用该配置文件的用户中撤销它。
    DROP PROFILE developer_prof;
    
    这个命令将尝试删除名为 developer_prof 的配置文件。如果没有任何用户使用这个配置文件,那么它将被成功删除。
  2. 使用 CASCADE 选项
    如果你尝试删除一个正在被用户使用的配置文件,可以使用 CASCADE 选项。这将撤销该配置文件与所有用户的关联,并删除配置文件。
    DROP PROFILE developer_prof CASCADE;
    
    这个命令将撤销 developer_prof 配置文件与所有使用它的用户的关联,并删除该配置文件。
    注意事项:
  • 默认配置文件不能被删除:默认配置文件(通常命名为 DEFAULT)不能被删除,因为它是一个系统保留的配置文件,用于为新用户设置默认的资源限制和密码参数。
  • 权限:要删除配置文件,用户必须具有 DROP PROFILE 系统权限。
  • 检查现有用户:在删除配置文件之前,最好先检查是否有用户正在使用该配置文件。可以使用以下查询来查找使用特定配置文件的用户:
    SELECT username, profile FROM dba_users WHERE profile = 'developer_prof';
    
  • 备份数据:在执行删除操作之前,建议先备份相关的数据库对象和数据,以防万一需要恢复。
    在执行这些操作时,请确保你了解它们的影响,并在生产环境中谨慎操作。

资源管理

管理CPU时间、逻辑I/O和内存,以确保没有单个用户或会话能够独占系统资源。这些限制可以在不同级别实施,并通过配置文件定义。以下是如何使用配置文件和RESOURCE_LIMIT初始化参数来管理资源:

会话级别限制

资源限制可以在会话级别实施,这意味着限制适用于用户的整个会话。例如,您可以限制会话可以使用的CPU时间总量。

调用级别限制

资源限制也可以在调用级别实施,这意味着限制适用于单个SQL语句或数据库调用。

使用CREATE PROFILE命令定义限制

可以使用CREATE PROFILE命令来定义资源限制。以下是一个示例:

CREATE PROFILE app_user_limit LIMITSESSIONS_PER_USER 5CPU_PER_SESSION 1000CPU_PER_CALL 200CONNECT_TIME 45IDLE_TIME 5;
使用RESOURCE_LIMIT初始化参数启用资源限制

要启用资源限制,需要设置RESOURCE_LIMIT初始化参数。这可以通过ALTER SYSTEM命令完成:

ALTER SYSTEM SET RESOURCE_LIMIT = TRUE;
注意事项
  • 一旦启用了资源限制并将配置文件分配给用户,数据库将实施指定的限制。
  • 重要的是要仔细规划和测试资源限制,以避免对用户活动产生意外的限制。
  • RESOURCE_LIMIT参数默认设置为FALSE,这意味着即使您定义了带有资源限制的配置文件,它们也不会被实施,直到您将RESOURCE_LIMIT设置为TRUE。
  • 请确保您具有更改系统参数和创建配置文件的适当权限。
启用资源限制

将初始化参数 RESOURCE LIMIT 设置为 TRUE。
通过使用 ALTER SYSTEM 命令启用该参数来强制执行资源限制。
执行以下命令以启用资源限制:

ALTER SYSTEM SET RESOURCE LIMIT=TRUE;

会话级别

在这里插入图片描述

资源名称描述
CPUPERSESSION每个会话的CPU时间,以百分之一秒为单位计算
SESSIONSPERUSER每个用户名允许的并发会话数
CONNECTTIME连接时间,以分钟为单位计算
IDLETIME非活动时间周期,以分钟为单位计算
LOGICALREADSPERSESSION每个会话的数据块数(包括物理和逻辑读)
PRIVATESGASGA中的私有空间,以字节为单位计算(仅适用于共享服务器模式)
调用级别
设置名称资源描述
CPU_PER-CALL每次调用消耗的CPU时间,以百分之一秒为单位计算
LOGICAL_READS_PER_CALL每次调用可以读取的数据块数量

这个表格展示了在调用级别上可以设置的资源限制,其中CPU_PER-CALL限制了每次数据库调用可以使用的CPU时间,而LOGICAL_READS_PER_CALL限制了每次调用可以读取的数据块数量。这些设置有助于控制资源的使用,防止单个调用占用过多资源。


使用DBMS_RESOURCE_MANAGER包来创建和维护资源管理元素

资源管理元素/操作描述
资源消费者组(Resource Consumer Group)将会话分组,以便可以按组管理资源使用。
资源计划(Resource Plan)定义了如何分配资源给不同的消费者组。
资源分配方法(Resource Allocation Method)确定如何将资源(如CPU、I/O)分配给消费者组的方法。
资源计划指令(Resource Plan Directives)在资源计划中定义的具体规则,指定了哪些消费者组可以获得多少资源。
使用DBMS_RESOURCE_MANAGER用于创建和维护资源管理器元素的PL/SQL包。
管理权限(ADMINISTER_RESOURCE_MANAGER)需要ADMINISTER_RESOURCE_MANAGER系统权限来创建和管理资源管理器元素。

以下是如何使用DBMS_RESOURCE_MANAGER包来创建资源管理元素的示例:

-- 创建资源消费者组
EXEC DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP('power_users', 'Group for power users');
-- 创建资源计划
EXEC DBMS_RESOURCE_MANAGER.CREATE_PLAN('my_plan', 'Plan for managing resources');
-- 创建资源计划指令
EXEC DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE('my_plan', 'power_users', cpu_p1 => 80);
-- 启用资源计划
EXEC DBMS_RESOURCE_MANAGER.ACTIVATE_PLAN('my_plan');

资源计划(Resource Plans)

资源计划概述
  • 资源消费者组归属:资源计划定义了哪些资源消费者组(Resource Consumer Groups)属于该计划。每个资源计划可以包含一个或多个消费者组。
  • 资源分配指令:资源计划包含了如何在消费者组之间分配资源的指令。这些指令决定了每个组可以使用的资源量,例如CPU时间、并行服务器会话数、会话数等。
资源计划的内容
  • 消费者组分配:在资源计划中,您可以将不同的消费者组分配到不同的计划中,以便根据业务需求管理资源。
  • 资源分配规则:资源计划中的指令(Directives)定义了资源分配的规则。这些规则可以是优先级分配、百分比分配或者绝对数量分配。
    以下是一些资源计划中的关键点:
  • 优先级:可以设置消费者组的优先级,以便在资源紧张时,优先级较高的组可以获得更多的资源。
  • 份额:可以分配给每个消费者组一定比例的资源份额,例如,可以设置两个消费者组A和B,其中A获得60%的CPU时间,B获得40%的CPU时间。
  • 限制:可以设置每个消费者组可以使用的资源上限,例如,可以限制一个组最多只能有10个并行会话。
示例

以下是一个简单的资源计划示例,它定义了两个消费者组及其资源分配:

-- 创建资源计划
EXEC DBMS_RESOURCE_MANAGER.CREATE_PLAN('my_resource_plan', 'Plan for managing database resources');
-- 将消费者组添加到资源计划
EXEC DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP('group_high', 'High priority group');
EXEC DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP('group_low', 'Low priority group');
-- 为资源计划添加指令
EXEC DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE('my_resource_plan', 'group_high', cpu_p1 => 80);
EXEC DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE('my_resource_plan', 'group_low', cpu_p1 => 20);
-- 激活资源计划
EXEC DBMS_RESOURCE_MANAGER.ACTIVATE_PLAN('my_resource_plan');

在这个示例中,my_resource_plan 资源计划包含两个消费者组 group_highgroup_low,其中 group_high 被分配了80%的CPU资源,而 group_low 被分配了剩余的20%的CPU资源。


资源分配方法

CPU分配方法
  • CPU方法:定义了如何分配CPU资源给各个资源消费者组。可以基于百分比或份额来分配CPU时间。
会话和队列管理
  • 活动会话池和排队:允许限制特定消费者组可以同时进行的活动会话数量。如果会话数量超过限制,额外的会话将被放入队列中等待。
并行度限制
  • 并行度限制:设置查询可以使用的最大并行度(Degree of Parallelism, DOP)。这有助于控制并行操作对系统资源的使用。
消费者组自动切换
  • 自动消费者组切换:允许基于特定条件(如会话等待时间)自动将会话从一个消费者组切换到另一个消费者组。
最大估计执行时间
  • 最大估计执行时间:为消费者组中的操作设置最大允许的执行时间。如果操作超过这个时间,可能会被中断或重新排队。
Undo配额
  • Undo配额:限制消费者组可以使用的Undo空间量。这有助于防止单个用户或应用程序消耗过多的Undo空间。
    以下是如何设置这些资源计划指令的示例:
-- 设置CPU分配方法
EXEC DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE('myplan', 'mygroup', 'CPU_P1', 40);
-- 设置活动会话池和排队
EXEC DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE('myplan', 'mygroup', 'ACTIVE_SESSION_POOL', 10);
EXEC DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE('myplan', 'mygroup', 'QUEUEING_P1', TRUE);
-- 设置并行度限制
EXEC DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE('myplan', 'mygroup', 'PARALLEL_DEGREE_LIMIT_P1', 4);
-- 设置自动消费者组切换
EXEC DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE('myplan', 'mygroup', 'SWITCH_GROUP', 'targetgroup', 'SESSION_WAIT_TIME', 30);
-- 设置最大估计执行时间
EXEC DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE('myplan', 'mygroup', 'MAX_EST_EXEC_TIME', 3600);
-- 设置Undo配额
EXEC DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE('myplan', 'mygroup', 'UNDO_POOL', '10M');

在实际应用中,需要根据具体的资源管理需求和策略来调整这些指令的参数。

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

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

相关文章

安路FPGA开发工具TD:问题解决办法 及 Tips 总结

安路科技(Anlogic)是一家专注于高性能、低功耗可编程逻辑器件(FPGA)设计和生产的公司。其提供的开发工具TD(TangDynasty)是专门为安路FPGA系列产品设计的集成开发环境(IDE)。以下是对…

Java常用时间类

JDK7的时间类 1:Date类 2:SimpleDateFormat类 3:Calendar类 JDK8的时间类 1:Zoneld类 2:Instant类 3:ZoneDateTime 4:LocalDate 5:LocalTime 6:LocalDateTime …

模块化架构与微服务架构,哪种更适合桌面软件开发?

前言 在现代软件开发中,架构设计扮演着至关重要的角色。两种常见的架构设计方法是模块化架构与微服务架构。它们各自有独特的优势和适用场景,尤其在C#桌面软件开发领域,模块化架构往往更加具有实践性。本文将对这两种架构进行对比&#xff0…

算法刷题笔记——图论篇

这里写目录标题 理论基础图的基本概念图的种类度 连通性连通图强连通图连通分量强连通分量 图的构造邻接矩阵邻接表 图的遍历方式 深度优先搜索理论基础dfs 与 bfs 区别dfs 搜索过程深搜三部曲所有可达路径广度优先搜索理论基础广搜的使用场景广搜的过程 岛屿数量孤岛的总面积沉…

利用免费GIS工具箱实现高斯泼溅切片,将 PLY 格式转换为 3dtiles

在地理信息系统(GIS)和三维数据处理领域,不同数据格式有其独特应用场景与优势。PLY(Polygon File Format)格式常用于存储多边形网格数据,而 3DTiles 格式在 Web 端三维场景展示等方面表现出色。将 PLY 格式…

【数据分析】02- A/B 测试:玩转假设检验、t 检验与卡方检验

一、背景:当“审判”成为科学 1.1 虚拟场景——法庭审判 想象这样一个场景:有一天,你在王国里担任“首席审判官”。你面前站着一位嫌疑人,有人指控他说“偷了国王珍贵的金冠”。但究竟是他干的,还是他是被冤枉的&…

Spark任务提交流程

当包含在application master中的spark-driver启动后,会与资源调度平台交互获取其他执行器资源,并通过反向注册通知对应的node节点启动执行容器。此外,还会根据程序的执行规划生成两个非常重要的东西,一个是根据spark任务执行计划生…

54,【4】BUUCTF WEB GYCTF2020Ezsqli

进入靶场 吓我一跳,但凡放个彭于晏我都不说啥了 提交个1看看 1 and 11 1# 还尝试了很多,不过都被过滤了,头疼 看看别人的WP 竟然要写代码去跑!!!,不会啊,先用别人的代码吧&#xf…

从零搭建一套远程手机的桌面操控和文件传输的小工具

从零搭建一套远程手机的桌面操控和文件传输的小工具 --ADB连接专题 一、前言 前面的篇章中,我们确定了通过基于TCP连接的ADB控制远程手机的操作思路。本篇中我们将进行实际的ADB桥接的具体链路搭建工作,从原理和实际部署和操作层面上,从零…

【深度学习实战】kaggle 自动驾驶的假场景分类

本次分享我在kaggle中参与竞赛的历程,这个版本是我的第一版,使用的是vgg。欢迎大家进行建议和交流。 概述 判断自动驾驶场景是真是假,训练神经网络或使用任何算法来分类驾驶场景的图像是真实的还是虚假的。 图像采用 RGB 格式并以 JPEG 格式…

如何使用MaskerLogger防止敏感数据发生泄露

关于MaskerLogger MaskerLogger是一款功能强大的记录工具,该工具可以有效防止敏感数据泄露的发生。 MaskerLogger旨在保护目标系统的日子安全,此格式化程序可确保你的日志安全并防止敏感数据泄露。例如使用此格式化程序,打印下列数据&#x…

【网络协议】RFC3164-The BSD syslog Protocol

引言 Syslog常被称为系统日志或系统记录,是一种标准化的协议,用于网络设备、服务器和应用程序向中央Syslog服务器发送日志消息。互联网工程任务组(IETF)发布的RFC 3164,专门定义了BSD Syslog协议的规范和实现方式。通…

oracle使用case when报错ORA-12704字符集不匹配原因分析及解决方法

问题概述 使用oracle的case when函数时,报错提示ORA-12704字符集不匹配,如下图,接下来分析报错原因并提出解决方法。 样例演示 现在有一个TESTTABLE表,本表包含的字段如下图所示,COL01字段是NVARCHAR2类型&#xff0…

springboot医院信管系统

摘 要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代&a…

LabVIEW 实现线路板 PCB 可靠性测试

在电子设备制造领域,线路板 PCB(Printed Circuit Board)的可靠性直接影响产品的整体性能和使用寿命。企业在生产新型智能手机主板时,需要对 PCB 进行严格的可靠性测试,以确保产品在复杂环境下能稳定运行。传统的测试方…

【docker踩坑记录】

docker踩坑记录 踩坑记录(持续更新中.......)docker images 权限问题 踩坑记录(持续更新中…) docker images 权限问题 permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Head "http://%2Fvar%2Frun%2Fdocker.s…

【Redis 源码】压缩链表结构

压缩链表结构 文章目录 压缩链表结构1. ziplist 由来2. 组成3. ziplist对象3.1 ziplist对象创建3.2 创建一个空的ziplist3.3 创建对象3.4 字符编码指定 4. 总结 1. ziplist 由来 ​ 在说压缩链表前,我先拿数组和链表来做个引子,来更好理解为什么ziplist…

【Java数据结构】二叉树相关算法

第一题:获取二叉树中结点个数 得到二叉树结点个数,如果结点为空则返回0,然后再用递归计算左树结点个数根结点(1个)右树结点个数。 public int nodeSize(Node root){if (root null)return 0;return nodeSize1(root.l…

PCM5142集成32位384kHz PCM音频立体声114dB差分输出DAC编解码芯片

目录 PCM5142 简介PCM5142功能框图PCM5142特性 参考原理图 PCM5142 简介 PCM514x 属于单片 CMOS 集成电路系列,由立体声数模转换器 (DAC) 和采用薄型小外形尺寸 (TSSOP) 封装的附加支持电路组成。PCM514x 使用 TI 最新一代高级分段 DAC 架构产品,可实现…

debian中apt的配置与解析

引言 在系统使用过程中,我们可能会遭遇 apt update 操作出现问题,或者 apt upgrade 速度迟缓的情况。这往往是由于所使用软件源本身存在诸如服务器性能不佳、维护不及时等质量问题,同时,软件源服务器与我们所处地理位置的距离较远…