Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database DBMS\u更改\u通知的所有\u行标志的阈值是多少?_Database_Oracle_Plsql - Fatal编程技术网

Database DBMS\u更改\u通知的所有\u行标志的阈值是多少?

Database DBMS\u更改\u通知的所有\u行标志的阈值是多少?,database,oracle,plsql,Database,Oracle,Plsql,我正在尝试为Oracle DB中的表创建缓存。我使用DBMS_CHANGE_通知监视数据库中的更改,以自动更新缓存 然而,只要我所做的更新非常小,这只能以令人满意的方式工作——如果我删除了大部分行,那么通知结构的ALL_rows标志将设置为true,ROWIDs数组为NULL 通过反复试验,我发现更新行数的阈值约为100行,这实在太少了。如果一个表包含几百万行,而我删除了一千行,我就无法获得更新内容的信息,我必须刷新整个表的缓存,这是不可接受的 我能改变这个阈值吗?我在文档中找不到具体的答案:

我正在尝试为Oracle DB中的表创建缓存。我使用DBMS_CHANGE_通知监视数据库中的更改,以自动更新缓存

然而,只要我所做的更新非常小,这只能以令人满意的方式工作——如果我删除了大部分行,那么通知结构的ALL_rows标志将设置为true,ROWIDs数组为NULL

通过反复试验,我发现更新行数的阈值约为100行,这实在太少了。如果一个表包含几百万行,而我删除了一千行,我就无法获得更新内容的信息,我必须刷新整个表的缓存,这是不可接受的

我能改变这个阈值吗?我在文档中找不到具体的答案:

如果设置了ALL_ROWS(0x1)位,则表示整个表 被修改(例如,从t中删除*或行级粒度 通知中未要求或未提供信息;以及 接收者必须保守地假设整个表 已被宣告无效

这只给了我模糊的信息。

从我发现的:

如果在表操作标志中设置了ALL_ROWS位,则表示 表中的所有行都可能已被修改。在里面 添加诸如TRUNCATE之类的操作,这些操作会影响 表中,如果已滚动单个rowid,也可以设置此位 进入一个完整的表无效

如果在给定表中修改了太多行,则可能会发生这种情况 单个事务(超过80个)或总共享内存 由于RDBMS上的rowids而导致的消耗被确定为过大 (超过动态共享池大小的1%)。在这种情况下 接收者必须保守地假设整个表已被删除 无效,回调/应用程序必须能够处理此问题 条件

几年前,我使用了自己的解决方案,这给了我控制/灵活性,但也许有人为你提供了一个解决方案(以50个小块提交?但如果你的应用程序不是唯一一个改变表格的应用程序呢?)。我认为关键在于只缓存正在缓慢变化的表,但这种限制对我来说确实很愚蠢。

从中我发现:

如果在表操作标志中设置了ALL_ROWS位,则表示 表中的所有行都可能已被修改。在里面 添加诸如TRUNCATE之类的操作,这些操作会影响 表中,如果已滚动单个rowid,也可以设置此位 进入一个完整的表无效

如果在给定表中修改了太多行,则可能会发生这种情况 单个事务(超过80个)或总共享内存 由于RDBMS上的rowids而导致的消耗被确定为过大 (超过动态共享池大小的1%)。在这种情况下 接收者必须保守地假设整个表已被删除 无效,回调/应用程序必须能够处理此问题 条件

几年前,我使用了自己的解决方案,这给了我控制/灵活性,但也许有人为你提供了一个解决方案(以50个小块提交?但如果你的应用程序不是唯一一个改变表格的应用程序呢?)。我认为关键在于只缓存正在缓慢变化的表,但这种限制对我来说确实很愚蠢。

从中我发现:

如果在表操作标志中设置了ALL_ROWS位,则表示 表中的所有行都可能已被修改。在里面 添加诸如TRUNCATE之类的操作,这些操作会影响 表中,如果已滚动单个rowid,也可以设置此位 进入一个完整的表无效

如果在给定表中修改了太多行,则可能会发生这种情况 单个事务(超过80个)或总共享内存 由于RDBMS上的rowids而导致的消耗被确定为过大 (超过动态共享池大小的1%)。在这种情况下 接收者必须保守地假设整个表已被删除 无效,回调/应用程序必须能够处理此问题 条件

几年前,我使用了自己的解决方案,这给了我控制/灵活性,但也许有人为你提供了一个解决方案(以50个小块提交?但如果你的应用程序不是唯一一个改变表格的应用程序呢?)。我认为关键在于只缓存正在缓慢变化的表,但这种限制对我来说确实很愚蠢。

从中我发现:

如果在表操作标志中设置了ALL_ROWS位,则表示 表中的所有行都可能已被修改。在里面 添加诸如TRUNCATE之类的操作,这些操作会影响 表中,如果已滚动单个rowid,也可以设置此位 进入一个完整的表无效

如果在给定表中修改了太多行,则可能会发生这种情况 单个事务(超过80个)或总共享内存 由于RDBMS上的rowids而导致的消耗被确定为过大 (超过动态共享池大小的1%)。在这种情况下 接收者必须保守地假设整个表已被删除 无效,回调/应用程序必须能够处理此问题 条件


几年前,我使用了自己的解决方案,这给了我控制/灵活性,但也许有人为你提供了一个解决方案(以50个小块提交?但如果你的应用程序不是唯一一个改变表格的应用程序呢?)。我认为关键在于只缓存缓慢变化的表,但这种限制在我看来确实很愚蠢。

目前有一个过程可以指定值:


如果我可以用getter查找当前值,那就太好了,我还没有找到它。

目前有一个过程,您可以在其中指定值: