sab*_*326 5 java oracle hibernate tablespace
我有两个表空间:一个用于数据,一个用于索引.我无法更改此配置.如何在Hibernate中指定索引表空间?
我已经阅读过Hibernate Oracle Tablespace Annotation,但这不是同一个问题.我需要为数据指定表空间,为索引指定不同的表空间.
我理解你的挑战。我认为 Hibernate 没有任何简单的方法可以做到这一点。以下是一些解决方法:
ALTER INDEX some_index_name REBUILD TABLESPACE your_index_ts;。如果您有很多索引,此元脚本可能会帮助您查找和移动放错位置的索引。输出将是ALTER类似上面的语句。
SELECT 'ALTER INDEX '||owner||'.'||index_name||' REBUILD TABLESPACE your_index_ts;' stmt
FROM all_indexes
WHERE table_owner='YOUR_SCHEMA'
AND tablespace_name != 'YOUR_INDEX_TS';
Run Code Online (Sandbox Code Playgroud)
理论上,您可以将其自动化并将其放入存储过程中。
让我像 Tom Kyte 可能会做的那样提出问题:为什么要将索引放在单独的表空间中?您想要解决什么应用程序或性能问题?
一个观点(请随意在评论中提出不同意见): 坚持将索引存储在单独的表空间中是老派。事实上,在某些情况下这种做法可能会带来好处,但我最近没有看到这种情况。原因是,如果您正在进行大规模 DML,如果数据和索引位于同一磁盘上,那么数据和索引之间将会出现 IO 争用,因此 DBA 强制它们通过不同的表空间位于不同的设备上。但是,如果 DBA 将数据表空间和索引表空间放在同一个磁盘上,那么就会否定这个意图。如今,您的数据文件往往分布在多个轴上(通过 ASM,甚至通过 RAID 集分布在非 ASM 上,但在 SAN 上运行时更是如此)。对于 ASSM 表空间(不要与 ASM 或 ASMM 混淆),Oracle 目前可以将索引段与表段放在同一表空间中,效果很好。如果您必须执行 TSPITR,那么将整个模式放在一个表空间中会使事情变得更容易一些。我可能会将 LOB 放在单独的表空间中,但这不是您所要求的。
如果您的 DBA 说索引需要位于单独的表空间中,“只是因为它们确实如此”,那么您需要一位新的 DBA。
您可能希望 Oracle 12c 发布时为每个用户提供“DEFAULT INDEX TABLESPACE”属性;可惜没有这样的功能。
| 归档时间: |
|
| 查看次数: |
1535 次 |
| 最近记录: |