更改 sql92_security 参数需要回收数据库。这一点就很清楚了。但是,我想知道滚动回收是否足够?或者此参数是否需要所有实例一起完全停止/启动数据库?
(滚动回收只是一次回收 RAC 1 中的每个实例,以最大限度地减少停机..)
更改 sql92_security 参数需要回收数据库。这一点就很清楚了。但是,我想知道滚动回收是否足够?或者此参数是否需要所有实例一起完全停止/启动数据库?
(滚动回收只是一次回收 RAC 1 中的每个实例,以最大限度地减少停机..)
我有创建 Oracle 数据库的作业。
所以要求允许 6 名员工进入数据库。
考虑到 Oracle 也需要一些,在为 6 名员工创建数据库时我应该投入多少个进程?
我假设每个员工需要打开 10 个会话,这意味着 10*6 =60 个进程
我应该为 Oracle 数据库设置多少个是否足以为 Oracle 设置 240 个进程所以总数应该是 300 个进程?
谢谢。
我有一个包含两个节点(例如节点 A 和节点 B)的 Oracle 19c RAC 集群。我的应用程序与节点 A 处理的服务一起连接到 SCAN IP。这是一个好的做法,还是应该只连接到 SCAN IP 并让它负责负载平衡?
大问题:如何以零停机 (ZDT) 方式轮换 Oracle 数据库中的密码?
我目前的想法是轮换用户。最初,我有MY_USER
所有的桌子等等。我现在有:
CREATE USER MY_USER NO AUTHENTICATION;
GRANT CREATE SESSION TO MY_USER;
CREATE USER MY_USER_PROXY_1 IDENTIFIED BY "abc123";
GRANT CREATE SESSION TO MY_USER_PROXY_1;
ALTER USER MY_USER GRANT CONNECT THROUGH MY_USER_PROXY_1;
当我想轮换密码时,我只需创建MY_USER_PROXY_2
并将“连接通过”授权授予MY_USER
. 这样,应用程序可以继续创建新连接,直到我使用新用户部署它。由于“连接通过”,新用户基本上与旧用户相同,因此一切都应该继续工作而不会大张旗鼓。之后,我可以停用MY_USER_PROXY_1
或让密码正常过期
MY_USER
如果有 1 个“物理”用户 ( ) ,这似乎是一种合理的方法
但是,我已经在使用代理用户进行多租户。和以前一样,但不是 1 个用户,而是可能有数百个用户通过同一个代理用户:
CREATE USER TENANT_PROXY_1 IDENTIFIED BY "abc123";
GRANT CREATE SESSION TO TENANT_PROXY_1;
-- During tenant onboard
CREATE USER TENANT_1234 NO AUTHENTICATION;
GRANT CREATE SESSION TO TENANT_1234;
ALTER USER TENANT_1234 GRANT CONNECT THROUGH TENANT_PROXY_1;
创建的问题TENANT_PROXY_2
是重新创建所有connect through
授权。我可以遍历所有用户,例如“TENANT_%”并以这种方式应用授权,但在TENANT_PROXY_2
创建并使用授权更新但在重新启动应用程序以使用新的代理用户之前,这将始终是一个机会之窗。因此,当代理用户轮换到时,它将添加授权TENANT_PROXY_1
并因此失败TENANT_PROXY_2
我尝试使用角色(作为连接器和连接者),但看起来只支持用户(是否可以根据角色配置 Oracle 的 CONNECT THROUGH?证实了这一点):
ALTER USER TENANT_1234 GRANT CONNECT THROUGH TENANT_PROXY_ROLE;
GRANT ROLE TENANT_PROXY_ROLE TO TENANT_PROXY_1;
-- or
ALTER ROLE TENANT_PROXY_ROLE GRANT CONNECT THROUGH TENANT_PROXY_1;
GRANT ROLE TENANT_PROXY_ROLE TO TENANT_1234;
我唯一的想法是在入职期间预先创建并向所有代理用户应用授权,并TENANT_PROXY_1
通过用户手动循环。不那么优雅,但似乎仍然合理TENANT_PROXY_N
N
N
我还尝试了 2 级代理(例如,TENANT_PROXY_1[TENANT_PROXY[TENANT_1234]]
或TENANT_PROXY_1[TENANT_PROXY][TENANT_1234]
),但这也是不行的
对这两种解决方案有任何想法吗?数据库已经存在了几十年,ZDT 密码轮换问题是否有任何官方解决方案或模式?
我在可插拔数据库中有一个本地用户,它在其架构下有数据、对象等。
我可以轻松将此用户转换为普通用户而不会丢失其对象等吗?(甲骨文数据库 19c)
我有一个(可能很简单)关于如何通过使用 sqlplus 查询已安装的备用数据库来查找 Oracle 19c 主数据库主机的查询。我可以获得如下主要名称:
select PRIMARY_DB_UNIQUE_NAME from v$database;
但是我怎样才能以类似的方式找到主节点的主机呢?
非常感谢。
正如下面与 sarat 的讨论中提到的,基于他的建议的以下 cmd 有效:
select distinct(machine) from v$session where username='PUBLIC' and osuser='oracle' and machine <> (select PRIMARY_DB_UNIQUE_NAME from v$database);
但我需要在输出中添加一个前导标题,以便之后从假脱机文件中获取结果。
select 'title'||distinct(machine) from v$session where username='PUBLIC' and osuser='oracle' and machine <> (select PRIMARY_DB_UNIQUE_NAME from v$database)
这失败了吗?有什么办法吗?谢谢。
我正在尝试安装 Oracle 19c,它需要 X-display,所以我输入了 xhost +,但它不起作用。有什么想法可以解决这个问题吗?另外,我想知道 Ubuntu 确实支持 Oracle 19c。
以下示例不起作用,我只是想展示我正在尝试做的事情。
给定表:
-- this table is located at the CDB
create table t1 (tab_name varchar2(35))
/
-- this proc is located at the CDB
Create or replace procedure FindTables(vPdb in varchar2, vOwner in varchar2)
BEGIN
insert into t1(tab_name) select TABLE_NAME from ALL_TABLES@vPdb where OWNER=vOwner;
END;
/
有没有办法创建一个临时数据库链接或类似的东西?或任何其他方式?
编辑
我还需要用户表的解决方案。
我有几个存储过程,它们使用 log miner 分析 oracle 日志。这些程序在为此方式创建的 CDB 用户 C##ADMIN 上运行。
现在我想将记录的值与实时值进行比较,因此我需要能够从 CDB 访问每个 pdb。
经过几次搜索,我发现了database link
一个可能的答案。但是当我试图创建一个数据库链接时,它会说ORA-02011: duplicate database link name
。当我试图放弃它时,我得到了ORA-65230: internal database link cannot be altered or dropped
.
我尝试运行以下查询,但失败了:(即使连接为/ as sysdba
:)
SELECT * FROM ALL_TABLES@testpdb;
ORA-12541: TNS:no listener
*Cause: The connection request could not be completed because the listener
is not running.
*Action: Ensure that the supplied destination address matches one of
the addresses used by the listener - compare the TNSNAMES.ORA entry with
the appropriate LISTENER.ORA file (or TNSNAV.ORA if the connection is to
go by way of an Interchange). Start the listener on the remote machine.
SELECT * FROM test.TABLE1@testpdb;
ORA-12541: TNS:no listener
*Cause: The connection request could not be completed because the listener
is not running.
*Action: Ensure that the supplied destination address matches one of
the addresses used by the listener - compare the TNSNAMES.ORA entry with
the appropriate LISTENER.ORA file (or TNSNAV.ORA if the connection is to
go by way of an Interchange). Start the listener on the remote machine.
所以我的问题是: