禁用并稍后启用 Oracle 中的所有表索引
如何禁用并稍后启用 Oracle 中给定架构/数据库中的所有索引?
注意:这是为了让sqlldr运行得更快。
How would I disable and later enable all indexes in a given schema/database in Oracle?
Note: This is to make sqlldr run faster.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
将 3 个答案合并在一起:
(因为 select 语句不执行 DDL)
执行导入...
注意,这假设导入将在同一个 (sqlplus) 会话中进行。
如果您调用“imp”,它将在单独的会话中运行,因此您需要使用“ALTER SYSTEM”而不是“ALTER SESSION”(并记住将参数放回您找到它的方式。
combining 3 answers together:
(because a select statement does not execute the DDL)
Do import...
Note this assumes that the import is going to happen in the same (sqlplus) session.
If you are calling "imp" it will run in a separate session so you would need to use "ALTER SYSTEM" instead of "ALTER SESSION" (and remember to put the parameter back the way you found it.
从这里: http://forums.oracle.com/forums/thread.jspa? messageID=2354075
更改会话设置skip_unusable_indexes = true;
更改索引your_index不可用;
执行导入...
更改索引your_index重建[在线];< /代码>
From here: http://forums.oracle.com/forums/thread.jspa?messageID=2354075
alter session set skip_unusable_indexes = true;
alter index your_index unusable;
do import...
alter index your_index rebuild [online];
您可以禁用 Oracle 中的约束,但不能禁用索引。 有一个命令可以使索引无法使用,但无论如何您都必须重建索引,因此我可能只编写一个脚本来删除并重建索引。 您可以使用 user_indexes 和 user_ind_columns 获取模式的所有索引或使用 dbms_metadata:
You can disable constraints in Oracle but not indexes. There's a command to make an index ununsable but you have to rebuild the index anyway, so I'd probably just write a script to drop and rebuild the indexes. You can use the user_indexes and user_ind_columns to get all the indexes for a schema or use dbms_metadata:
如果您使用非并行直接路径加载,请考虑并进行基准测试,根本不删除索引,特别是当索引仅覆盖少数列时。 Oracle 有一种有效维护直接路径加载索引的机制。
否则,我还建议使索引不可用,而不是删除它们。 意外地不重新创建索引的可能性较小。
If you are using non-parallel direct path loads then consider and benchmark not dropping the indexes at all, particularly if the indexes only cover a minority of the columns. Oracle has a mechanism for efficient maintenance of indexes on direct path loads.
Otherwise, I'd also advise making the indexes unusable instead of dropping them. Less chance of accidentally not recreating an index.
如果您使用的是 Oracle 11g,您可能还需要查看 dbms_index_utl。
If you're on Oracle 11g, you may also want to check out dbms_index_utl.
结合两个答案:
首先创建sql以使所有索引不可用:
执行导入...
Combining the two answers:
First create sql to make all index unusable:
Do import...
您应该尝试 sqlldr 的 SKIP_INDEX_MAINTENANCE 参数。
You should try sqlldr's SKIP_INDEX_MAINTENANCE parameter.
如果没有文件,索引将无法使用:
重建将是类似的。
Here's making the indexes unusable without the file:
The rebuild would be similiar.