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

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
DECLARE
  ddl_text CLOB;
BEGIN
  ddl_text := DBMS_METADATA.GET_DDL('TABLE', 'MY_TABLE', 'MY_SCHEMA');
  DBMS_OUTPUT.PUT_LINE(ddl_text);
END;
/
-- 修改并重新创建对象
DECLARE
  ddl_text CLOB;
  new_ddl_text CLOB;
BEGIN
  ddl_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 LIMIT
  SESSIONS_PER_USER 5
  CPU_PER_SESSION 1000
  CPU_PER_CALL 200
  CONNECT_TIME 45
  IDLE_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');

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【狂热算法篇】探秘图论之 Floyd 算法:解锁最短路径的神秘密码(通俗易懂版)

: 羑悻的小杀马特.-CSDN博客羑悻的小杀马特.擅长C/C题海汇总,AI学习,c的不归之路,等方面的知识,羑悻的小杀马特.关注算法,c,c语言,青少年编程领域.https://blog.csdn.net/2401_82648291?spm1010.2135.3001.5343 在本篇文章中,博主将带大家去学习所谓的…

Kotlin Bytedeco OpenCV 图像图像57 图像ROI

Kotlin Bytedeco OpenCV 图像图像57 图像ROI 1 添加依赖2 测试代码3 测试结果 1 添加依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns"http://maven.apache.o…

Linux手写FrameBuffer任意引脚驱动spi屏幕

一、硬件设备 开发板&#xff1a;香橙派 5Plus&#xff0c;cpu&#xff1a;RK3588&#xff0c;带有 40pin 外接引脚。 屏幕&#xff1a;SPI 协议 0.96 寸 OLED。 二、需求 主要是想给板子增加一个可视化的监视器&#xff0c;并且主页面可调。 平时跑个模型或者服务&#xff0c;…

【Linux】gdb_进程概念

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文由 JohnKi 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f4e2;未来很长&#…

【k8s面试题2025】3、练气中期

体内灵气的量和纯度在逐渐增加。 文章目录 在 Kubernetes 中自定义 Service端口报错常用控制器Kubernetes 中拉伸收缩副本失效设置节点容忍异常时间Deployment 控制器的升级和回滚日志收集资源监控监控 Docker将 Master 节点设置为可调度 在 Kubernetes 中自定义 Service端口报…

飞牛 使用docker部署Watchtower 自动更新 Docker 容器

Watchtower是一款开源的Docker容器管理工具&#xff0c;其主要功能在于自动更新运行中的Docker容器 Watchtower 支持以下功能&#xff1a; 自动拉取镜像并更新容器。 配置邮件通知。 定时执行容器更新任务。 compose搭建Watchtower 1、新建文件夹 先在任意位置创建一个 w…

使用NetLimiter限制指定应用的网速

NetLimiter是一款用于网络流量监控和控制的软件&#xff0c;适合需要管理网络带宽的用户。在项目测试中&#xff0c;它帮助我对特定应用进行限速&#xff0c;合理分配网络资源&#xff0c;避免了因单一应用过度占用带宽而引发的网络问题。通过NetLimiter&#xff0c;我可以为每…

Python根据图片生成学生excel成绩表

学习笔记&#xff1a; 上完整代码 import os import re from openpyxl import Workbook, load_workbook from openpyxl.drawing.image import Image as ExcelImage from PIL import Image as PilImage# 定义图片路径和Excel文件路径 image_dir ./resources/stupics # 图片所…

56_多级缓存实现

1.查询Tomcat 拿到商品id后,本应去缓存中查询商品信息,不过目前我们还未建立Nginx、Redis缓存。因此,这里我们先根据商品id去Tomcat查询商品信息。此时商品查询功能的架构如下图所示。 需要注意的是,我们的OpenResty是在虚拟机,Tomcat是在macOS系统(或Windows系统)上,…

【Linux系统】Ext系列磁盘文件系统二:引入文件系统(续篇)

inode 和 block 的映射 该博文中有详细解释&#xff1a;【Linux系统】inode 和 block 的映射原理 目录与文件名 这里有几个问题&#xff1a; 问题一&#xff1a; 我们访问文件&#xff0c;都是用的文件名&#xff0c;没用过 inode 号啊&#xff1f; 之前总是说可以通过一个…

2024年博客之星年度评选—创作影响力评审入围名单公布

2024年博客之星活动地址https://www.csdn.net/blogstar2024 TOP 300 榜单排名 用户昵称博客主页 身份 认证 评分 原创 博文 评分 平均 质量分评分 互动数据评分 总分排名三掌柜666三掌柜666-CSDN博客1001002001005001wkd_007wkd_007-CSDN博客1001002001005002栗筝ihttps:/…

基于高光谱数据的叶片水分估测方法研究 【Matlab Python Origin】

相关代码和结果在这里&#xff1a;基于高光谱数据的叶片水分估测方法研究 【Matlab Python Origin】文章中的代码和结果 第1章 研究内容和技术路线 1.1 研究内容 在本文研究中&#xff0c;我们致力于充分利用LOPEX’93数据集&#xff0c;并通过深入分析高光谱数据&#xff0c;…

windows下安装并使用node.js

一、下载Node.js 选择对应你系统的Node.js版本下载 Node.js官网下载地址 Node.js中文网下载地址??? 这里我选择的是Windows64位系统的Node.js20.18.0&#xff08;LTS长期支持版本&#xff09;版本的.msi安装包程序 官网下载&#xff1a; 中文网下载&#xff1a; 二、安…

西门子PLC读取梅安森风速传感器数据

西门子PLC读取梅安森风速传感器数据 读取数据前期准备&#xff1a;西门子PLC读取数据 设备型号为&#xff1a;GFY15 到货开盒的设备有&#xff1a;风速传感器、485线及设置遥控器 读取数据前期准备&#xff1a; 将设备的私有485协议改为modbus公有协议 刚上电的轮询显示时间同时…

麒麟操作系统服务架构保姆级教程(十一)https配置

如果你想拥有你从未拥有过的东西&#xff0c;那么你必须去做你从未做过的事情 在运维工作中&#xff0c;加密和安全的作用是十分重要的&#xff0c;如果仅仅用http协议来对外展示我们的网站&#xff0c;过一段时间就会发现网站首页被人奇奇怪怪的篡改了&#xff0c;本来好好的博…

TiDB 的高可用实践:一文了解代理组件 TiProxy 的原理与应用

导读 TiProxy 是 TiDB 官方推出的高可用代理组件&#xff0c;旨在替代传统的负载均衡工具如 HAProxy 和 KeepAlived&#xff0c;为 TiDB 提供连接迁移、故障转移、服务发现等核心能力。 本文全面解析了 TiProxy 的设计理念、主要功能及适用场景&#xff0c;并通过实际案例展示…

Redisson发布订阅学习

介绍 Redisson 的消息订阅功能遵循 Redis 的发布/订阅模式&#xff0c;该模式包括以下几个核心概念&#xff1a; 发布者&#xff08;Publisher&#xff09;&#xff1a;发送消息到特定频道的客户端。在 Redis 中&#xff0c;这通过 PUBLISH 命令实现。 订阅者&#xff08;Sub…

Github 2025-01-17 Java开源项目日报 Top8

根据Github Trendings的统计,今日(2025-01-17统计)共有8个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Java项目8TypeScript项目1Python项目1OpenAPI 生成器:基于规范自动生成API工具 创建周期:2155 天开发语言:Java协议类型:Apache License 2.0…

基于docker微服务日志ELK+Kafka搭建

ELK 是 Elasticsearch 、 Logstash 、 Kibana 的简称 Elasticsearch 是实时全文搜索和分析引擎&#xff0c;提供搜集、分析、存储数据三大功能&#xff1b;是一套开放 REST 和 JAVA API 等结构提供高效搜索功能&#xff0c;可扩展的分布式系统。它构建于 Apache Lucene 搜索引…

《C++11》中的显式虚函数重载:深入理解与应用

在C编程中&#xff0c;虚函数是一种强大的工具&#xff0c;它允许我们实现多态。通过虚函数&#xff0c;我们可以在派生类中重写基类的函数&#xff0c;从而实现运行时多态。然而&#xff0c;当我们在派生类中重载虚函数时&#xff0c;可能会遇到一些问题。在C11中&#xff0c;…