我的同事和我维护的应用程序在后端有一个Oracle数据库。我们正在考虑偶尔以“受限”模式运行应用程序,其中一个数据库表空间设置为只读。我们可以轻松地将必要的表和索引移到单独的表空间,这些表空间可以在“受限”模式下写入。但是,尽管有几次Google搜索,但我无法确定Oracle存储序列的表空间。
This answer提到序列值存储在SYSTEM.SEQ $表中。我现在无法访问Oracle数据库,但我猜这个表存在于一个系统表空间中。我们制作只读的表空间不是系统表空间,它是我们自己的数据表空间之一。
在dev数据库中,我可以从一个序列中成功地进行SELECT,并将相关的表空间设置为只读。
我怀疑将这个表空间设为只读不会有问题,但我更倾向于通过临时实验证实我的怀疑。有人可以赐教我吗?
答案 0 :(得分:9)
序列(大部分)在SEQ $中。零件将在OBJ $(并在其他地方授予)。 但是所有这些表都在SYSTEM表空间中。一些SYSTEM对象在SYSAUX中。 DBA_SEGMENTS是一个很好的视图,用于标识对象(例如SEQ $)所在的表空间。
我怀疑Oracle不会让这些表空间进入READ ONLY模式,因为要这样做,它需要将该表空间标记为只读,该表空间记录在该表空间的SYSTEM表中。有点像锁定它解锁的保险箱中的钥匙。
答案 1 :(得分:0)
我想这是系统,还有哪些地方存储这些信息?
但你为什么想知道这个?如果表空间是只读的,则无法插入或更新,因此您根本不必使用序列。
答案 2 :(得分:0)
我现在面前没有Oracle DB,如果我没记错的话,序列是数据字典的一部分,因此不能手动更新,甚至不能(简单地)查询没有特殊的语法(这就是为什么你不能简单地获取序列的当前值 - 你必须增加它)。 显然,数据字典是SYSTEM表空间的一部分,应该通过任何方式触及。