改变系统刷新 shared_pool 甲骨文

alter system flush shared_pool oracle

我有两个问题 首先,在服务器和一个客户端中执行 ALTER SYSTEM FLUSH SHARED_POOL 命令之间的区别很大吗?在我的公司,他们告诉我我必须直接在服务器中执行该命令,但我认为这只是一个用于网络的命令,只是一条被刷新的消息我认为这不应该有实质性的不同它是如何发生的有大量数据,我说的是一个大约需要 5 分钟才能刷新的系统

第二,如何从另一个实例刷新一个实例?

ALTER SYSTEM FLUSH SHARED_POOL; 可以是来自客户端或服务器的 运行,没关系。

许多 DBA 会 运行 来自服务器的命令,原因有二。首先,许多 DBA 运行 all 来自服务器的命令,通常是因为他们从未了解 IDE 的重要性。其次,命令 ALTER SYSTEM FLUSH SHARED_POOL; 只影响集群数据库中的一个实例。直接连接到服务器通常是确保连接到集群的每个数据库实例的简单方法。

但是您可以使用以下代码轻松地从 all 个实例刷新共享池,而无需直接连接到每个实例。 (感谢 berxblog 提出这个想法。)

--Assumes you have elevated privileges, like DBA role or ALTER SYSTEM privilege.
create or replace function flush_shared_pool return varchar2 authid current_user as
begin
    execute immediate 'alter system flush shared_pool';
    return 'Done';
end;
/

select *
from table(gv$(cursor(
    select instance_number, flush_shared_pool from v$instance
)));

INSTANCE_NUMBER   FLUSH_SHARED_POOL
---------------   -----------------
1                 Done
3                 Done
2                 Done

我部分不同意@sstan - 刷新共享池在生产中应该很少见,但在开发中可能相对常见.刷新共享池和缓冲区缓存可以帮助模仿 运行ning 查询 "cold".