Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.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
Oracle序列存储在什么表空间中?_Oracle_Sequence - Fatal编程技术网

Oracle序列存储在什么表空间中?

Oracle序列存储在什么表空间中?,oracle,sequence,Oracle,Sequence,我和同事维护的应用程序在后端有一个Oracle数据库。我们正在考虑偶尔以“受限”模式运行应用程序,其中一个数据库表空间设置为只读。我们可以轻松地将必要的表和索引移动到单独的表空间中,这些表空间将在“受限”模式下可写。然而,尽管有几次Google搜索,我还是无法确定Oracle在哪个表空间中存储序列 提到序列值存储在SYSTEM.SEQ$表中。我现在没有访问Oracle DB的权限,但我猜这个表位于一个系统表空间中。我们将表空间设为只读的不是系统表空间,而是我们自己的数据表空间之一 在dev数据库

我和同事维护的应用程序在后端有一个Oracle数据库。我们正在考虑偶尔以“受限”模式运行应用程序,其中一个数据库表空间设置为只读。我们可以轻松地将必要的表和索引移动到单独的表空间中,这些表空间将在“受限”模式下可写。然而,尽管有几次Google搜索,我还是无法确定Oracle在哪个表空间中存储序列

提到序列值存储在SYSTEM.SEQ$表中。我现在没有访问Oracle DB的权限,但我猜这个表位于一个系统表空间中。我们将表空间设为只读的不是系统表空间,而是我们自己的数据表空间之一

在dev数据库上,我可以成功地从相关表空间设置为只读的序列中进行选择


我怀疑将这个表空间设置为只读不会有问题,但我更希望我的怀疑不仅仅通过临时实验得到证实。有人能告诉我吗?

我想是系统,还有什么地方可以存储这些信息


但你为什么想知道这些?如果表空间是只读的,则无法插入或更新,因此根本不必使用序列

现在我面前没有Oracle DB,如果我没记错的话,序列是数据字典的一部分,因此不能手动更新,甚至不能(简单地)在没有特殊语法的情况下进行查询(这就是为什么不能简单地获取序列的当前值-必须增加它)。 显然,数据字典是系统表空间的一部分,应该以任何方式进行操作。

序列(大部分)以SEQ$为单位。零件将以OBJ$(和其他地方的赠款)计价。 但是所有这些表都在系统表空间中。某些系统对象位于SYSAUX中。 DBA_段是一个很好的视图,可以识别对象(如SEQ$)所在的表空间


我怀疑Oracle不允许您将这些表空间置于只读模式,因为要这样做,它需要将该表空间标记为只读,并记录在该表空间的系统表中。有点像是把钥匙锁在保险柜里,然后锁上。

有些表可以在“受限”模式下写,所以我们需要生成它们的PK的序列是可更新的,而不是只读的。实际上,你可以使用“sequence.CURRVAL”来获取序列的当前值,例如,从dual中选择seq.CURRVAL到v_current_value;不总是-如果尚未选择sequence.NEXTVAL,则可能会出现ORA-08002错误。如果您需要序列的当前值,可以在所有\u序列中查找。不正确-无法从所有\u序列中获取当前值。此视图具有最小值/最大值/缓存/增量和最后一个_编号,这与当前值不同。一旦NestValo初始化了序列,就可以从CurrVar获得当前值。也许您应该考虑通过Grave/RoVoCK修改私有窗体,而不是采用这个表空间方法。Privleges旨在让您控制谁可以插入/更新/删除/选择,而不是表空间。