Oracle LiveLabs实验:探索 Oracle 23c 数据库的强大功能 - 架构权限和无锁预留

使用申请地址见这里。

实验帮助见这里。

7小时45分

欢迎来到 Live Labs,我们在这里探索并深入研究 Oracle 数据库管理的迷人领域! 在今天的会议中,我们将重点讨论两个有趣的主题:Oracle 架构级权限和无锁列保留。

架构级别权限
Oracle 架构级别权限在控制 Oracle 数据库内的访问和安全方面发挥着关键作用。 在 Oracle 中,模式可以被视为保存数据库对象(例如表、视图、过程等)的逻辑容器。 通过模式级别权限,我们可以授予或撤销用户或角色的权限,确保正确的个人对模式对象具有适当级别的访问权限。

在探索过程中,我们将深入探讨架构级权限的概念,了解各种可用的权限类型,例如 SELECT、INSERT、UPDATE、DELETE 等。 我们将学习如何向用户和角色授予和撤销这些权限,确保遵守最小权限原则,从而增强 Oracle 数据库的整体安全状况。

无锁列保留
接下来,我们将把注意力转移到无锁列预留的迷人世界。 在处理高度并发的系统和多用户环境时,管理数据一致性变得至关重要。 无锁列预留提供了一种有效的机制来实现这一点,而无需诉诸传统的锁定机制。

在我们的探索过程中,我们将揭开无锁列保留的内部工作原理,了解它们如何允许多个用户同时修改表中的特定列,而不会导致冲突或不一致。 我们将讨论实施此方法时的优点和注意事项,包括对性能的影响以及确保数据完整性所需的预防措施。

架构级别权限的主要优点:

  • 细粒度访问控制:模式级别权限允许对模式内数据库对象的访问进行细粒度控制。 它使管理员能够在更细粒度的级别上授予或撤销权限,确保用户或角色只能访问必要的对象。

  • 提高安全性:通过实施架构级别权限,您可以遵循最小权限原则,仅向用户提供执行任务所需的权限。 这有助于减轻未经授权的访问和潜在数据泄露的风险。

  • 数据完整性:架构级别权限通过控制用户可以对架构对象执行的操作来维护数据完整性。 通过限制某些操作(例如更新或删除),您可以防止对关键数据的意外或恶意修改。

  • 简化管理:通过架构级别权限,管理访问控制变得更加简化。 您可以在架构级别授予权限,从而简化管理流程,而不是为每个对象单独授予权限。

  • 灵活性和可扩展性:架构级别权限在管理用户角色和权限时提供灵活性。 随着数据库的增长和发展,您可以轻松地在架构级别修改权限,以满足新的需求并确保不同用户组的正确访问级别。

无锁列预留的主要优点:

  • 增强的并发性:无锁列保留允许多个用户同时修改特定列,而不会导致冲突或锁定争用。 这种方法提高了高并发系统中的并发性和可扩展性,减少了等待时间并增强了系统性能。

  • 减少锁定开销:传统的锁定机制可能会带来大量开销,特别是在多个用户需要同时修改表中不同列的情况下。 无锁列预留消除了对锁的需求,最大限度地减少了争用并提高了整体系统效率。

  • 改进的响应能力:通过消除锁定,无锁列保留使用户能够对特定列进行修改,而无需等待其他冲突的锁被释放。 这可以缩短响应时间并提供更具交互性的用户体验。

  • 一致的数据访问:无锁列保留通过允许对特定列的并发修改来确保对数据的一致访问。 这有助于维护数据完整性并防止锁定冲突可能引起的不一致。

  • 简化的事务管理:无锁列保留通过最大限度地减少对显式锁的需求并降低与死锁检测和解决相关的复杂性来简化事务管理。 这可以带来更简单、更稳健的事务工作流程。

在本实验室中,您将:

  • 创建用户和表
  • 授予架构权限
  • 对无锁预留执行查询

为了举办这个研讨会,您需要:Oracle 23c 免费开发者版本数据库或在 LiveLabs 环境中运行的数据库

实验 4:用户创建和表初始化

介绍

在本实验中,我们将重点关注为 Oracle 数据库环境设置必要的组件。 我们将创建两个用户,用户 1 和用户 2,并初始化架构 1 下的两个表。

目标

  • 为 Oracle 数据库环境创建两个用户:用户 1 和用户 2。
  • 初始化架构 1 下的两个表:inventory_no_reservations 和 inventory_reservations。
  • 创建具有以下列的 inventory_no_reservations 表:id、product_name、数量和预算。
  • 创建具有以下列的 inventory_reservations 表:id、product_name、数量、预算(可预留)和minimum_balance 约束。
  • 将数据插入到 inventory_no_reservations 表中,其中包含两行:产品 A 和产品 B。
  • 将数据插入到 inventory_reservations 表中,其中包含两行:产品 C 和产品 D。

任务 1:创建用户

connect / as sysdba
alter session set container = FREEPDB1;
connect system@FREEPDB1-- 创建 schema1、用户 1 和用户 2。
CREATE USER s1 IDENTIFIED BY Welcome123;
CREATE USER u1 IDENTIFIED BY Welcome123;
CREATE USER u2 IDENTIFIED BY Welcome123;-- 提供以下角色,以便用户可以连接到数据库、执行查询和访问数据库对象。
GRANT CONNECT to u1;
GRANT CREATE SESSION TO u1;
GRANT CONNECT to u2;

这里其实遗留了一个问题,就是CONNECT和CREATE SESSION有什么区别?
CREATE SESSION是权限,而CONNECT是角色。

SQL> col role for a10
SQL> select * from role_sys_privs where role='CONNECT';ROLE       PRIVILEGE                                ADM COM INH
---------- ---------------------------------------- --- --- ---
CONNECT    SET CONTAINER                            NO  YES YES
CONNECT    CREATE SESSION                           NO  YES YESSQL> select granted_role from dba_role_privs where grantee = 'U1' and default_role = 'YES';GRANTED_ROLE
--------------------------------------------------------------------------------
CONNECTSQL> select granted_role from dba_role_privs where grantee = 'U2' and default_role = 'YES';GRANTED_ROLE
--------------------------------------------------------------------------------
CONNECT

目前为止,用户u1和u2仅有连接数据库的权限。

任务 2:在架构 1 下创建两个表

第一个表 inventory_no_reservations 将用作普通表,没有任何特殊功能。 第二个表 inventory_reservations 将使用无锁预留创建。 此功能可以有效管理特定列的预留,在我们的案例中,我们将其绑定到“预算”列。

CREATE TABLE s1.inventory_no_reservations (id NUMBER PRIMARY KEY,product_name VARCHAR2(50),quantity NUMBER,budget NUMBER
);-- 注意reservable关键字
CREATE TABLE s1.inventory_reservations (id NUMBER PRIMARY KEY,product_name VARCHAR2(50),quantity NUMBER,budget NUMBER reservable CONSTRAINT minimum_balance CHECK (budget >= 400)
);

任务 3:在每个表中插入几行

ALTER USER s1 QUOTA UNLIMITED ON users;
INSERT INTO s1.inventory_no_reservations
VALUES
(1, 'Product A', 10, 700), 
(2, 'Product B', 5, 200);
commit;INSERT INTO s1.inventory_reservations
VALUES
(1, 'Product C', 8, 1000), 
(2, 'Product D', 3, 500);
commit;

实验 5:模式权限管理

介绍

在本实验中,我们将探讨 Oracle 中模式权限的管理。 通过向用户授予特定表的选择、插入、更新和删除权限,我们可以控制他们在模式内的访问。 我们还将检查模式特权与选择授权的功能。

加入我们,深入了解架构权限管理、以不同用户身份登录、查询表并观察架构权限对访问的影响。 我们将创建第三个表来演示没有模式权限的用户所面临的限制。 通过本实验,您将更深入地了解架构权限管理及其在 Oracle 数据库中的含义。

目标

  • 了解 Oracle 中的模式权限管理。
  • 了解授予对特定表的选择、插入、更新和删除权限。
  • 将架构权限与选择授权及其限制进行比较。
  • 观察架构权限对用户表访问的影响。
  • 比较具有和不具有架构权限的用户访问能力。
  • 演示基于架构权限的用户对新创建的表的访问限制。
  • 探索无锁预留对性能和用户体验的好处。
  • 区分常规表和无锁保留表。

先决条件

  • 对Oracle数据库管理有基本的了解。
  • 熟悉 SQL 和数据库概念,例如表、查询和用户权限。
  • 具有创建和修改用户、表和特权的适当权限访问 Oracle 数据库环境。
  • 现有架构或出于测试目的创建新架构的能力。 注意:确保您拥有执行实验室中提到的任务所需的访问权限和权限。

任务 1:向用户授予权限

connect system@FREEPDB1
GRANT SELECT, INSERT, UPDATE, DELETE ON s1.inventory_no_reservations TO u1;
GRANT ALL PRIVILEGES ON SCHEMA s1 TO u2;

任务 2:通过用户登录来测试架构权限新功能与选择授予的区别

架构级别权限:是在架构级别授予用户或角色的权限,允许他们对该架构内的所有对象执行某些操作。 这些权限通常应用于整个架构,而不是特定于对象的。 一些示例包括:创建、更改、删除、选择、插入、更新、删除和执行。

SELECT 授权:更具体,用于控制对模式内各个表或视图的读取访问。 当用户或角色被授予对特定表或视图的 SELECT 权限时,他们可以查询该特定对象的数据。 与架构级权限相比,SELECT 授权提供了更精细的控制级别,允许管理员限制对敏感数据的访问,同时允许对架构的其他部分进行读取访问。

任务 2 重点测试新的架构特权功能并将其与选择授予进行比较。 用户 1 将不具有架构级别权限,而用户 2 将具有。 在实验期间,我们将以每个用户身份登录并观察他们对架构中不同表的访问。

通过以用户 1 身份登录,我们将验证该用户并尝试查询表 1。正如预期的那样,由于缺乏架构权限,用户 1 将无法访问 inventory_reservations 表。

CONNECT u1/Welcome123@FREEPDB1;
show user
-- 成功
select * from s1.inventory_no_reservations;
-- 失败,无权限。ORA-00942: table or view does not exist
select * from s1.inventory_reservations;

但是,当我们以用户 2 身份登录时,我们将观察表 1 上的成功查询,并尝试查询架构中的第二个表 inventory_reservations。

CONNECT u2/Welcome123@FREEPDB1;
show user
-- 成功
select * from s1.inventory_no_reservations;
-- 成功
select * from s1.inventory_reservations;

此外,我们将基于架构 1 中现有的库存表创建第三个表 inventory_third_table。我们将向这个新表中插入数据并观察用户 1 和用户 2 的访问权限。而用户 2 将有权访问新表 表,用户 1 不会,突出显示架构权限对用户访问的影响。

connect system@FREEPDB1CREATE TABLE s1.inventory_third_table (id NUMBER,product_name VARCHAR2(50),quantity NUMBER,budget NUMBER
);INSERT INTO s1.inventory_third_table
VALUES
(3, 'Product E', 7, 29.99),
(4, 'Product F', 12, 39.99);
COMMIT;

用户u1和u2尝试访问新建的表:

CONNECT u1/Welcome123@FREEPDB1;
show user
-- 失败,无权限
select * from s1.inventory_third_table;CONNECT u2/Welcome123@FREEPDB1;
show user
select * from s1.inventory_third_table;

这太棒了! 我们可以看出 u2 有权访问模式中的所有表。

至此,架构级别权限实验已完成! 现在,您对如何在架构级别授予和管理权限有了深入的了解,从而允许不同的用户对架构内的表进行不同级别的访问。 这些知识使您能够对数据库对象实施安全、高效的访问控制。 继续利用架构级权限来确保组织良好且受控的数据库环境。 您在 Oracle 数据库管理方面的专业知识正在不断增长,并且您正在成为一名出色的数据库管理员!

该实验室将为下一次会议奠定基础,我们将在其中探索无锁预留功能。 我们将更新 inventory_reservations 表并检查常规表和无锁预留表之间的行为差异。 此功能解决了传统表引起的会话挂起问题,其中多次提交可能会导致延迟。

实验 6:无锁预留

介绍

在本实验中,我们将探讨无锁预留的概念及其对数据库事务的影响。 通过执行正常更新并利用无锁保留,我们将观察会话行为以及此功能的优点。

通过遵循本实验中的步骤,我们将深入了解正常更新期间会话的行为以及无锁预留的优势。 加入我们,探索这些令人惊叹的概念,并通过无锁预留体验改进的性能和用户体验。

目标

  • 了解无锁预留的概念及其好处。
  • 执行正常更新并观察会话行为,无需无锁预留。
  • 体验由于未提交的更改和预算金额不足而导致的会话挂起。
  • 探索无锁预留在提高性能和用户体验方面的优势。
  • 使用无锁保留执行更新并观察是否存在会话挂起。
  • 使用无锁预留处理由于低于“阈值”而导致的会话错误。
  • 了解提交更改和回滚事务如何影响无锁预留。
  • 通过无锁预留确认预算栏中预留金额的恢复。

先决条件

  • 对数据库概念和事务有基本的了解。
  • 熟悉 SQL 查询和语法。
  • 访问 Oracle 数据库系统。
  • 具有足够权限执行更新和创建表的用户凭据。
  • 了解会话行为和事务管理。

任务1:正常更新

在数据库管理领域,Oracle 数据库中的传统更新曾经被认为是修改表中数据的标准方法。

任务 1 侧重于正常更新。 通过以用户 2 身份打开三个窗口,我们将对 inventory_no_reservations 表执行更新。 在窗口 1 中,我们将记录的预算减少 100,但不提交更改。 在窗口 2 中,我们将尝试将同一记录更新 100,从而由于窗口 1 中未提交的更改而导致会话挂起。类似地,在窗口 3 中,我们将把记录减少 200,从而导致另一次会话挂起。 然后,我们将提交窗口 1 中的更改,释放其他两个窗口之一。 如果任何释放的窗口在提交时遇到错误,我们将记录错误消息。 请注意,预算金额不足将导致中止。

-- 打开3个以用户u2连接的窗口
CONNECT u2/Welcome123@FREEPDB1;-- 窗口1(成功,还未提交)
UPDATE s1.inventory_no_reservations
SET budget = budget - 100 where ID = 1;-- 窗口2 (挂起)
UPDATE s1.inventory_no_reservations
SET budget = budget - 100
WHERE ID = 1;COMMIT;-- 窗口3(挂起)
UPDATE s1.inventory_no_reservations
SET budget = budget - 200
WHERE ID = 1;COMMIT;-- 窗口1提交,窗口2和窗口3解除挂起状态并提交。
commit;

关键见解:随着 Oracle 不断发展以提供更高效和可扩展的替代方案(例如无锁预留),这种方法现在正逐渐成为过去。 与传统的更新过程不同,无锁预留利用先进的并发控制机制,使多个事务能够同时处理同一数据,而不会施加可能阻碍性能并引入潜在冲突的锁。

任务 2:无锁预留

这项创新培育了一个更加简化和响应迅速的数据处理环境,允许更快、更无缝的数据修改,而不会影响数据完整性。 无锁预留彻底改变了数据库处理更新的方式,在当前的数字环境中提供了更加优化和可扩展的解决方案。

任务 2 引入了无锁预留的概念。 使用相同的三个窗口,我们现在将对 inventory_reservations 表执行更新。 在窗口 1 中,我们将记录的预算减少 200,但无需做出承诺。 在窗口 2 中,我们将相同的记录减少 200,并且与之前不同的是,会话不会挂起。 在窗口 3 中,我们将尝试将记录减少 200,低于“阈值”,这将导致会话错误。 然后,我们将提交窗口 1 中的更改并回滚窗口 2 中的更改。最后,我们将在窗口 3 中再次运行事务,这应该会成功,因为我们已经恢复了预算列中的保留金额。

回顾下之前列的定义为:

budget NUMBER reservable CONSTRAINT minimum_balance CHECK (budget >= 400)

最初的预算为1000:

SQL> select budget from s1.inventory_reservations where id = 1;BUDGET
----------1000

注意:使用相同的 3 个窗口。

-- 窗口1
UPDATE s1.inventory_reservations
SET budget = budget - 200 where ID = 1;-- 窗口2。没有阻塞,而且commit成功。因此其它窗口查询的结果为800
UPDATE s1.inventory_reservations
SET budget = budget - 200
WHERE ID = 1;COMMIT;-- 窗口1,提交
-- 现在所有会话查询结果为600
commit;-- 窗口3,违反约束,报错
UPDATE s1.inventory_reservations
SET budget = budget - 300
WHERE ID = 1;
-- ORA-02290: check constraint (S1.MINIMUM_BALANCE) violated-- 在窗口 2 中执行此语句以增加200。
UPDATE s1.inventory_reservations
SET budget = budget + 200
WHERE ID = 1;COMMIT;-- 转到窗口 3 并再次运行事务,它应该会成功,因为我们将 200 返还给保留列预算。
UPDATE s1.inventory_reservations
SET budget = budget - 300 where ID = 1;COMMIT;

恭喜您完成无锁预留实验室! 您已经亲身体验了这一创新功能如何通过启用对特定列的并发更新而无需会话挂起来增强数据库性能。 通过无锁预留,您可以确保更顺畅、更高效的操作,提供无缝的用户体验。 继续利用这些强大的功能来优化您的数据库管理并在您的 Oracle 之旅中保持领先!

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

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

相关文章

Python-函数

str1 "asdasdasd" str2 "asfgrbbtnyjyuktuyjyder" str3 "adsf3t4tykuikjdrg"def my_len(str):count 0for i in str:count 1print(count)my_len(str1) my_len(str2) my_len(str3) 函数的定义: def 函数名(传入参数):…

偷录的录音、视频能否成为“呈堂证供”?

很多人都说偷录的录音是无效的,其实是对法条的不及时跟新,因为《最高人民法院关于未经对方当事人同意私自录音取得的资料能否作为证据使用问题的批复》(法复〔1995〕2号)…

AI在商业领域的多重应用:优化运营与提升客户体验

在商业领域,人工智能(AI)可以用于多种方式,从优化运营到改进客户体验。以下是一些使用AI的商业用例以及如何在商业环境中有效地使用AI的一些建议: 数据分析和决策支持: 使用AI算法来分析大规模数据集&#…

Spring框架简介

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

简明SQL条件查询指南:掌握WHERE实现数据筛选

条件查询是用于从数据库中根据特定条件筛选数据行的一种方式&#xff0c;它避免了检索整个表中的数据。通常&#xff0c;使用 WHERE 子句来定义过滤条件&#xff0c;只有符合这些条件的数据行才会被返回。 SQL中的运算符有&#xff1a;、!、<、> 等&#xff0c;用于进行…

小程序当前页面栈以及跳转

1.调用页面栈刷新接口 let pages getCurrentPages(); //当前页面栈 if (pages.length > 1) { let beforePage pages[pages.length - 2]; //获取上一个页面实例对象 beforePage.$vm.getActivityLi…

「网页开发|前端开发|Vue」06 公共组件与嵌套路由:让每一个页面都平等地拥有导航栏

本文主要介绍在多个页面存在相同部分时&#xff0c;如何提取公共组件然后在多个页面中导入组件重复使用来减少重复代码。在这基础上介绍了通过嵌套路由的方式来避免页面较多或公共部分较多的情况下&#xff0c;避免不断手动导入公共组件的麻烦&#xff0c;并且加快页面跳转的速…

KT142C-sop16语音芯片ic的串口指令详细说明_默认9600指令可设

3.1 通讯格式 支持异步串口通讯模式,通过串口接受上位机发送的命令 通讯标准:9600 bps --- 可以发送指令修改&#xff0c;并且记忆&#xff0c;详见3.4.5 数据位 :8 停止位 :1 校验位 :none 流控制 :none 格式&#xff1a;$S VER Len CMD Feedback para1 …

PIGOSS BSM:网络大屏展现功能与特色全面解析

导语 PIGOSS BSM是一款强大的IT运维监控工具&#xff0c;提供了丰富的功能和特色。其中的“网络大屏”模块是其核心功能之一&#xff0c;能够以直观、全面的方式展示网络设备的状态信息和各种关键指标。本文将详细介绍PIGOSS BSM网络大屏的功能及特色&#xff0c;让您全面了解其…

多线程与高并发——并发编程(6)

文章目录 六、并发集合1 ConcurrentHashMap1.1 存储结构1.2 存储操作1.2.1 put方法1.2.2 putVal方法-散列算法1.2.3 putVal方法-添加数据到数组&初始化数组1.2.4 putVal方法-添加数据到链表1.3 扩容操作1.3.1 treeifyBin方法触发扩容1.3.2 tryPresize方法-针对putAll的初始…

React16、18 使用 Redux

Redux 核心 Redux 介绍 Redux 是javaScript 状态容器&#xff0c;提供可预测化的状态管理 Redux 工作流程 Actions&#xff1a;对象&#xff0c;描述对状态进行怎样的操作 Reducer&#xff1a;函数&#xff0c;操作状态并返回新的状态 Store&#xff1a;存储状态的容器&am…

设计模式的一些笔记(个人见解参杂各个模式的用途,未完待续0907)

文章目录 一、创建者模式1&#xff09;工厂模式2&#xff09;原型模式3&#xff09;建造者模式4&#xff09;单例&#xff08;单件&#xff09;模式 二、行为型模式1&#xff09;策略模式2&#xff09;观察者模式3&#xff09;命令模式4&#xff09;迭代器模式5&#xff09;状态…

Unity Asset Bundle Browser 工具

Unity Asset Bundle Browser 工具 您可以在 Unity 项目中使用 Asset Bundle Browser 工具能够查看和编辑资源包的配置。 有关更多信息&#xff0c;请参阅 Unity Asset Bundle Browser 文档。 注意&#xff1a;此工具是不受支持的实用程序。查看极大的资源包可能会导致性能下…

关于µC/OS-III 多任务的基本理解

关于C/OS-III 多任务的基本理解 任务和任务管理是 RTOS 的核心&#xff0c;且大多数项目使用 RTOS 的目的就是为了使用 RTOS 的多任务管理能力。 C/OS-III作为经典的RTOS&#xff0c;了解并学习其任务管理机制&#xff0c;是非常有必要的。 文章目录 关于C/OS-III 多任务的基本…

SQL SERVER 如何实现UNDO REDO 和PostgreSQL 有近亲关系吗

开头还是介绍一下群&#xff0c;如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,SQL Server&#xff0c;Redis &#xff0c;Oracle ,Oceanbase 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请加微信号 l…

Excel VSTO开发5 -Excel对象结构

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 5 Excel对象结构 Excel提供了几个比较重要的对象&#xff1a; Application、Workbooks、Workbook、Worksheets、Worksheet 为了便…

Mp4文件提取详细H.264和MP3文件

文章目录 Mp4文件提取为H.264和MP3文件**提取视频为H.264&#xff1a;****提取音频为MP3&#xff1a;** 点赞收藏加关注&#xff0c;追求技术不迷路&#xff01;&#xff01;&#xff01;欢迎评论区互动。 Mp4文件提取为H.264和MP3文件 要将视频分开为H.264&#xff08;视频编…

栈 之 如何实现一个栈

前言 栈最鲜明的特点就是后进先出&#xff0c;一碟盘子就是类似这样的结构&#xff0c;最晚放上去的&#xff0c;可以最先拿出来。本文将介绍的是如何自己实现一个栈结构。 栈的操作 栈是一种先进后出&#xff08;Last-In-First-Out, LIFO&#xff09;的数据结构&#xff0c…

Ubantu终端常用命令、快捷键和基本操作

目录 前言 一、常用命令 二、常用快捷键 三、快捷键自定义设置 总结 前言 Ubantu终端常用命令和快捷键用于进行系统管理、文件操作、软件安装等常见使用场景。使用它们可以提高工作效率&#xff0c;简化操作流程&#xff0c;并进行更多的自定义配置和控制。同时&#xff0c…

[SSR渲染学习]nuxt的跨域处理

nuxt跨域请求其他api // https://nuxt.com/docs/api/configuration/nuxt-config export default defineNuxtConfig({devtools: { enabled: true },css: [//共享css处理,不是重点可以看看,:是当前文件根目录/assets/css/global.css],//跨域处理nitro: {devProxy: {/go1-api:{ta…