【问题标题】:SqlPlus sessions in parallel OR keeping the session alive after disconnectingSqlPlus 会话并行或在断开连接后保持会话活动
【发布时间】:2017-03-20 16:47:42
【问题描述】:

我问了一个问题,可能看起来与这个问题相似,但它是关于不同的东西。

假设我没有权限从运行 Oracle 软件包的帐户运行 ALTER SYSTEM FLUSH SHARED_POOL

另一方面,我可以访问有权运行ALTER SYSTEM FLUSH SHARED_POOL 的帐户,但我无法从该帐户运行Oracle 软件包。有点搞混了,不过现在就这样吧。

现在,我有一个 Bash 脚本,让我假设它在当前版本中以这种方式运行包:

负责flu​​sh的部分:

sqlplus /nolog
connect sysuser/syspassword@db_instance
alter system flush shared_pool;
quit

负责包的部分:

sqlplus user/password@db_instance @sqlfile.sql

还有sqlfile.sql(尽可能简化):

variable rc refcursor;
exec :rc := package.function(parameter,parameter,parameter);
print rc;
exit

直到一切看起来像这样 - 它工作正常。但是有一些例子,当我必须一个接一个地运行几个包时,因为它们相互依赖,输出数据保存在TEMPORARY_TABLE 中。 我绝对确定至少来自TEMPORARY TABLE的数据在断开连接时会刷新。所以即使TEMPORARY_TABLE在断开连接后保持活动状态,数据也会丢失。多包示例sqlfile.sql

variable rc refcursor;
exec :rc := package.function(parameter,parameter,1);
print rc;
variable rc refcursor;
exec :rc := package.function(parameter,parameter,2);
print rc;
variable rc refcursor;
exec :rc := package.function(parameter,parameter,3);
print rc;
exit

因为我做的是为了测试Oracle包输出和性能的目的,所以我必须运行

alter system flush shared_pool

在每次出现exec :rc := package.function(parameter,parameter,parameter) 之后。如果只有一个,那没问题。但是如果有很多,并且它们相互依赖......问题就开始出现了。

sqlplus /nolog << EOF

connect user/password@db_instance
variable rc refcursor;
exec :rc := package.function(parameter,parameter,1);
print rc;
connect sysuser/syspassword@db_instance
alter system flush shared_pool;

connect user/password@db_instance
variable rc refcursor;
exec :rc := package.function(parameter,parameter,2);
print rc;
connect sysuser/syspassword@db_instance
alter system flush shared_pool;

connect user/password@db_instance
variable rc refcursor;
exec :rc := package.function(parameter,parameter,3);
print rc;
connect sysuser/syspassword@db_instance
alter system flush shared_pool;

exit
EOF

脚本本身正在运行 - 但来自TEMPORARY_TABLE 的数据丢失了。

我想过在 bash 中并行运行两个 sqlplus 命令,但是 flush 必须在精确的时刻运行......我只是不知道如何解决这个问题,它是足以让天使哭泣。

【问题讨论】:

  • 这是一个架构问题,而不是技术问题。我在想的第一件事是:为什么你必须做所有这些事情,而你可能只有一个用户可以运行上述所有内容,作为那个用户?使用 SYSDBA 不应与数据操作混合使用,因此您知道应该使用哪个用户。您是否问过您的 DBA 为什么他不想给您“用户”所需的权限?是什么原因?
  • 这方面有什么更新吗?
  • @tvCa - 管理员授予我从我的数据库用户运行alter system flush shared_pool 的权限,现在一切都很好:)
  • 这正是您需要的解决方案..

标签: oracle bash session sqlplus


【解决方案1】:

管理员授予我从我的数据库用户运行alter system flush shared_pool 的权限,现在一切都很好:) – dziki

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-31
    • 2016-05-12
    • 1970-01-01
    • 2010-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多