4

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

这个答案提到序列值存储在 SYSTEM.SEQ$ 表中。我现在无法访问 Oracle 数据库,但我猜这个表存在于系统表空间之一中。我们使只读的表空间不是系统表空间,它是我们自己的数据表空间之一。

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

我怀疑让这个表空间只读不会有问题,但我宁愿我的怀疑得到证实,而不仅仅是临时实验。有人可以启发我吗?

4

3 回答 3

9

序列(大部分)在 SEQ$ 中。零件将在 OBJ$ 中(以及其他地方的赠款)。但是所有这些表都在 SYSTEM 表空间中。一些 SYSTEM 对象位于 SYSAUX 中。DBA_SEGMENTS 是识别对象(例如 SEQ$)驻留在哪些表空间的好视图。

我怀疑 Oracle 不会让您将这些表空间置于只读模式,因为这样做,它需要将该表空间标记为只读,该表空间记录在该表空间的 SYSTEM 表中。有点像把钥匙锁在它解锁的保险箱里。

于 2009-01-11T21:50:58.817 回答
0

我猜是系统,还有哪里可以存储这些信息?

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

于 2009-01-11T14:45:15.277 回答
0

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

于 2009-01-11T15:13:54.843 回答