如何在Java中使用liquibase对表和索引使用不同的表空间

问题描述 投票:1回答:1

我正在Spring Boot(2.1.8)java(1.8)应用程序中使用liquibase(3.6.3)来管理数据库(Oracle 12.2)模式更改。我的liquibase变更集不包含“表空间”参数,并且所有数据(包括索引)都在默认表空间“ USERS”中创建。现在,我需要将所有现有索引重新定位到另一个表空间“ INDX”,并在默认的“ USERS”表空间而不是新的“ INDX”表空间中创建所有将来的索引。

所以,我的问题:

  1. 如何将旧索引从“ USERS”表空间迁移到“ INDX”表空间?

  2. 如何在'INDX'表空间中创建新索引?我知道列/约束元素的“ primaryKeyTablespace”参数和createIndex元素的“表空间”参数,还有其他解决方案吗?可以为所有集中索引的索引指定'INDX'表空间吗?

谢谢!

java oracle indexing liquibase tablespace
1个回答
0
投票

您的第一个问题的答案是如下重建索引:

alter index [index_name] rebuild tablespace [tablespace_name];

这将锁定您的表一段时间,以完成重建。如果需要保持表可用于更新,请使用“在线”命令:

alter index [index_name] rebuild tablespace [tablespace_name] online;

如果索引中有很多数据,则可以添加“ parallel”子句以加快处理速度。通常,不要将并行度设置为高于系统上CPU内核的数量:

alter index [index_name] rebuild tablespace [tablespace_name] online parallel [x];

关于默认表空间的第二个问题,您可以根据您的Oracle版本以不同的方式处理此问题。 Oracle 19c具有一项新功能,该功能允许数据库自动为您的表建立索引(即您无需执行任何操作!),您可以在此处阅读:https://blogs.oracle.com/oraclemagazine/autonomous-indexing

如果使用的是较旧版本的Oracle,那么您将只能使用liquibase中可用的任何配置选项。

© www.soinside.com 2019 - 2024. All rights reserved.