تعطيل وبعد ذلك تمكين كل جدول الفهارس في أوراكل

StackOverflow https://stackoverflow.com/questions/129046

  •  02-07-2019
  •  | 
  •  

سؤال

كيف يمكنني تعطيل وبعد ذلك تمكين جميع المؤشرات في المخطط/قاعدة البيانات في أوراكل ؟

ملاحظة:هذا هو جعل sqlldr تشغيل أسرع.

هل كانت مفيدة؟

المحلول

وهنا صنع الفهارس غير صالحة للاستعمال دون الملف:

DECLARE
  CURSOR  usr_idxs IS select * from user_indexes;
  cur_idx  usr_idxs% ROWTYPE;
  v_sql  VARCHAR2(1024);

BEGIN
  OPEN usr_idxs;
  LOOP
    FETCH usr_idxs INTO cur_idx;
    EXIT WHEN NOT usr_idxs%FOUND;

    v_sql:= 'ALTER INDEX ' || cur_idx.index_name || ' UNUSABLE';
    EXECUTE IMMEDIATE v_sql;
  END LOOP;
  CLOSE usr_idxs;
END;

إعادة إنشاء ستكون مشابهة.

نصائح أخرى

الجمع بين 3 إجابات معا:(لأن حدد البيان لا يتم تنفيذ DDL)

set pagesize 0

alter session set skip_unusable_indexes = true;
spool c:\temp\disable_indexes.sql
select 'alter index ' || u.index_name || ' unusable;' from user_indexes u;
spool off
@c:\temp\disable_indexes.sql

هل استيراد...

select 'alter index ' || u.index_name || 
' rebuild online;' from user_indexes u;

ملاحظة يفترض هذا أن استيراد سيحدث في نفسه (sqlplus) الدورة.
إذا كنت تتصل "عفريت" أنه سيتم تشغيل في جلسة منفصلة إذا كنت بحاجة إلى استخدام "تغيير النظام" بدلا من "تغيير الدورة" (وتذكر أن تضع المعلمة مرة أخرى بالطريقة التي وجدتها.

إذا كنت تستخدم غير متوازية الطريق المباشر الأحمال ثم النظر في المعيار لا يسقط الفهارس في كل شيء ، خاصة إذا الفهارس تغطي سوى أقلية من الأعمدة.أوراكل لديه آلية صيانة فعالة من المؤشرات على المسار المباشر الأحمال.

وإلا لكنت أيضا تقديم المشورة صنع الفهارس غير قابل للاستخدام بدلا من إلقائها.فرصة أقل من قصد لا إعادة إنشاء فهرس.

من هنا: http://forums.oracle.com/forums/thread.jspa?messageID=2354075

alter session set skip_unusable_indexes = true;

alter index your_index unusable;

هل استيراد...

alter index your_index rebuild [online];

يمكنك تعطيل القيود في أوراكل ولكن ليس الفهارس.هناك أمر جعل مؤشر ununsable ولكن عليك إعادة إنشاء الفهرس على أي حال, إذا كنت على الارجح مجرد كتابة سيناريو إسقاط ثم إعادة إنشاء الفهارس.يمكنك استخدام user_indexes و user_ind_columns الحصول على جميع الفهارس مخطط أو استخدام dbms_metadata:

select dbms_metadata.get_ddl('INDEX', u.index_name) from user_indexes u;

إذا كنت على Oracle 11g, قد تحتاج أيضا إلى التحقق من dbms_index_utl.

الجمع بين اثنين من الإجابات:

أولا إنشاء sql لجعل كل مؤشر غير صالحة للاستعمال:

alter session set skip_unusable_indexes = true;
select 'alter index ' || u.index_name || ' unusable;' from user_indexes u;

هل استيراد...

select 'alter index ' || u.index_name || ' rebuild online;' from user_indexes u;

يجب أن تحاول sqlldr هو SKIP_INDEX_MAINTENANCE المعلمة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top