在 Oracle 中,您如何将架构移动到不同的表空间?

Stu*_*ard 5 schema oracle tablespaces

我注意到在 USERS 表空间中创建了一个架构,但我们的本地规则是它应该单独位于一个表空间中。在 Oracle 中,您如何将架构移动到不同的表空间?

小智 7

模式本身不能存储,也不能以任何方式整体更改表空间。事实上,它只是一个元结构。相反 - 有DEFAULT TABLESPACE底层的属性USER。如果您更改它,则默认情况下会在此表空间中创建新对象(除非您明确指定另一个对象)。

此外,每种类型的结构(表/索引/分区...)都有自己的移动到另一个表空间的方式。(即移动一个表不会移动建立在它上面的索引——这是相当不可取的,因为你想将索引存储在另一个文件系统中以获得更好的性能)。这意味着,您必须逐个对象移动架构对象的内容。

  • 为表和索引设置单独的表空间对于性能来说并不是真正必要的,尽管出于管理原因仍然可以这样做。请参阅 [this old SO thread](http://stackoverflow.com/a/1819617/266304) 或各种 AskTom 文章。 (6认同)
  • 另外,请记住,任何 LOB 对象(BLOB、CLOB)的存储都与表的其余部分分开,只有一个指针存储在表结构本身中。如果您的意图是移动整个表及其内容,则需要独立移动 LOB 段。“更改表 t 移动 lob(y) 存储为(表空间用户)” (2认同)