2012-05-10 55 views
1

我想使用全局临时表来存储一些昂贵的中间数据。数据是暂时的,但对于PHP会话的持续时间来说是好的,所以看起来使用全局临时表on commit preserve rows会是理想的。确保php会话在使用oci_pconnect时获得相同的oracle会话

但是..它看起来像全局临时表数据只能用于创建它的oracle会话。

因此,这引发了如何确保oci_pconnect能够取回相同的oracle会话的问题,因为我已经读过oracle会话每个持久连接都是唯一的吗?我对跨多个php执行使用事务不感兴趣,只是临时表。

我使用php会话,以便可以用作选择oracle会话的标识符。

到目前为止,这似乎是不可能的,但它不会受到伤害的要求。

EDIT: 背后实现该预期的目的是为了加速接入在我的访问控制中利用的用户组成员资格信息。
提前解析组成员身份,并使用此临时数据,而不是在所有后续查询中删除3 +个连接层。 由于返回的密钥是RAW,因此将它们序列化到外部存储器会导致在再次使用时导致对HEXTORAW()的许多调用,并且似乎无助于达到预期目的。

为确定组级别访问而添加的查询部分在会话期间是静态的,并且自行运行会返回大约600行唯一的16字节RAW键。然后通过链接表将这些键连接到结果集,以确定用户是否对结果集具有任何“组级别”权限。

我使用IN进行游戏并将密钥作为字符串传入,但由于它们是RAW密钥,因此我必须每次查询都要调用HEXTORAW() 600次。表现不如使用临时桌子和做JOIN

是否有任何其他方式告诉Oracle保持查询的该部分缓存的结果不足以将其写入“永久”中间结果?

回答

0

尽管您可能会想出一些技巧来做这项工作,至少在某些时候,我认为这是几乎肯定会在某些时候导致问题的东西,特别是在从开发转换时服务器到生产服务器。选项可能包括:

  1. 使用永久性表格,并在逻辑上完成数据清理时使用它。
  2. 将数据写入平面文件,然后在需要时将其读回。
  3. 将数据写入平面文件,然后将该文件挂载为外部表。

分享和享受。

+0

对于我的预期用法,它看起来像我可能坚持#1。 –

0

'database resident connection pooling'如何?我想这就是你要找的。试一试!