Я столкнулся с проблемой с разделением разделов и подразделением в Oracle. Пожалуйста, объясните пример.Как сделать разделение и подразделение с разделом обмена в Oracle?
ответ
Вы можете найти следующий пример
CREATE TABLE DEPARTMENT
( DEPT_ID NUMBER(30,0) NOT NULL ENABLE,
IS_ACTIVE VARCHAR2(1 BYTE) NOT NULL ,
BUSINESS_DATE DATE NOT NULL ENABLE,
COMPANY_CODE VARCHAR2(4) DEFAULT 'C1' NOT NULL ,
CONSTRAINT PK_DEPARTMENT PRIMARY KEY (BUSINESS_DATE, COMPANY_CODE, DEPT_ID) ENABLE
)
PARTITION BY RANGE
(
BUSINESS_DATE
)
INTERVAL (
NUMTODSINTERVAL(1,'DAY')
)
SUBPARTITION BY LIST(COMPANY_CODE)
SUBPARTITION TEMPLATE
(
SUBPARTITION CMN_01 VALUES ('C1'),
SUBPARTITION CMN_02 VALUES ('C2'),
SUBPARTITION CMN_03 VALUES ('C3')
)
(
PARTITION DEFAULT_PART VALUES LESS THAN ('01-JAN-2012')
)
;
CREATE INDEX IDX1_DEPARTMENT ON DEPARTMENT (DEPT_ID, IS_ACTIVE);
CREATE TABLE TEMP_DEPARTMENT AS SELECT * FROM DEPARTMENT WHERE 1=2;
CREATE TABLE EMPLOYEE
( ID NUMBER(30,0) NOT NULL ENABLE,
DEPT_ID NUMBER(30,0) NOT NULL ENABLE,
BUSINESS_DATE DATE NOT NULL ENABLE,
COMPANY_CODE VARCHAR2(4) DEFAULT 'C1' NOT NULL,
CONSTRAINT PK_EMPLOYEE PRIMARY KEY (BUSINESS_DATE,COMPANY_CODE, ID) ENABLE,
CONSTRAINT FK1_EMPLOYEE_DEPT FOREIGN KEY (BUSINESS_DATE, COMPANY_CODE, DEPT_ID)
REFERENCES DEPARTMENT (BUSINESS_DATE, COMPANY_CODE, DEPT_ID) ENABLE NOVALIDATE
)
PARTITION BY RANGE
(
BUSINESS_DATE
)
INTERVAL (
NUMTODSINTERVAL(1,'DAY')
)
SUBPARTITION BY LIST(COMPANY_CODE)
SUBPARTITION TEMPLATE
(
SUBPARTITION CMN_01 VALUES ('C1'),
SUBPARTITION CMN_02 VALUES ('C2'),
SUBPARTITION CMN_03 VALUES ('C3')
)
(
PARTITION DEFAULT_PART VALUES LESS THAN ('01-JAN-2012')
);
--insert несколько thousads записей в DEPARTMENT и EMPLOYEE таблиц для нескольких partiton и их все суб разделы
select * from DEPARTMENT where BUSINESS_DATE='19-JAN-15' and COMPANY_CODE='C1';
select* from EMPLOYEE;
select * from all_tab_partitions where TABLE_OWNER='TEST' and
table_name='DEPARTMENT';
select * from ALL_TAB_SUBPARTITIONS where TABLE_OWNER='TEST' and
table_name='DEPARTMENT';
select * from all_tab_partitions where TABLE_OWNER='TEST' and
table_name='EMPLOYEE';
select * from ALL_TAB_SUBPARTITIONS where TABLE_OWNER='TEST' and
table_name='EMPLOYEE';
select * from TEMP_DEPARTMENT;
--- обмен и усечение суб секционирования
1)
ALTER TABLE DEPARTMENT EXCHANGE SUBPARTITION SYS_SUBP7356 WITH TABLE TEMP_DEPARTMENT WITHOUT VALIDATION UPDATE GLOBAL INDEXES; --Exchange sub partitioning
2)
truncate table TEMP_DEPARTMENT; --truncate temp exchange table
3)
ALTER TABLE DEPARTMENT TRUNCATE SUBPARTITION SYS_SUBP7356 DROP STORAGE UPDATE GLOBAL INDEXES; --truncate sub partitioning (sub partition name from ALL_TAB_SUBPARTITIONS table) with global index update
--Here above 1 to 3 steps execute for three sub partitioning
4) ALTER TABLE DEPARTMENT DROP PARTITION SYS_P7359 UPDATE GLOBAL INDEXES;
--get это имя раздела из таблицы all_tab_partitions с глобальным индексом обновления
5) ALTER TABLE EMPLOYEE TRUNCATE SUBPARTITION SYS_SUBP7360 DROP STORAGE UPDATE GLOBAL INDEXES;
; --truncate суб перегородка (суб название раздела из таблицы ALL_TAB_SUBPARTITIONS) с обновлением глобального индекса --Here выше 5 шагов выполнить за три субом разбиения 6) ALTER TABLE EMPLOYEE DROP PARTITION SYS_P7363 UPDATE GLOBAL INDEXES;
--get этого имени раздела из таблицы all_tab_partitions с глобальным обновлением индекса 7) --alter index PK_DEPARTMENT rebuild; 8) --alter index IDX1_DEPARTMENT rebuild; 9) --отверстий индекса PK_EMPLOYEE rebuild; --Step 7 до 9, которое требуется только тогда, когда UPDATE GLOBAL INDEXES не используется во время изменяющих таблиц для обмена, усечения и уронить раздел или подраздел раздела 10) начинает
dbms_stats.gather_table_stats(ownname=>'TEST', tabname=>'DEPARTMENT', granularity=>'ALL' ,no_invalidate=>FALSE);
dbms_stats.gather_table_stats(ownname=>'TEST', tabname=>'EMPLOYEE', granularity=>'ALL' ,no_invalidate=>FALSE);
end;
UPDATE GLOBAL INDEXES используются в время Altering Table для обмена, обрезания и разбиения раздела или подразделения, где глобальные индексы применяются к этой таблице, тогда мы можем выполнять операцию DML на одной и той же таблице параллельно здесь. UPDATE GLOBAL INDEXES используется для восстановления индексов одновременно с изменением операции. Если UPDATE GLOBAL INDEXES не используется, операция DML не разрешается на одной и той же таблице параллельно. Он будет выходить за пределы ORA Exception для глобальных индексов. Сообщение ERROR при выполнении операции вставки после удаления/замены/обрезания раздела/подраздела из таблицы: Ошибка SQL: ORA-01502: индекс TEST.PK_DEPARTMENT или раздел такого индекса находится в состоянии непригодного использования 01502. 00000 - "index «% s.% s 'или раздел такого индекса находится в непригодном состоянии " * Причина: Была сделана попытка получить доступ к индексному или индексному разделу , который был помечен как непригодный для прямой нагрузки или DDL * Действие: DROP указанный индекс или REBUILD указанного индекса или перестраивать непригодный индекс раздела
Если вы не хотите использовать UPDATE GLOBAL INDEXES и хотите параллельную работу DML с продувкой затем сделать индексы Local (не должен содержать первичный ключ или уникальное ограничение, потому что оно по умолчанию создано глобальным уникальным индексом). Оно находится на разделе и подразделе и ссылается на табличное пространство по умолчанию. С локальными индексами вы наблюдали медленную вставку в эту таблицу.
- 1. Подразделение поэтапного и производственного обмена IIS
- 2. Oracle SQL подразделение
- 3. Является ли разделение Presto Hive разделом?
- 4. Как сделать подразделение, рассчитать процент в HQL?
- 5. Как сделать перетаскивание изображения в это подразделение?
- 6. Oracle, создать индекс с разделом по диапазону
- 7. Подразделение в MYSQL
- 8. Oracle Partition by ID и подразделение DATE с интервалом
- 9. Как очистить ajax загруженное подразделение?
- 10. Ранг над разделом в Oracle SQL
- 11. Случайное разделение по сравнению с разделом, затем Shuffle
- 12. сделать OSX панель настроек с разделом
- 13. Python большое плавающее подразделение
- 14. Как сделать разделение в SQL
- 15. Oracle DB ежедневное разделение
- 16. Как сделать разделение строки
- 17. Как сделать разделение строк
- 18. Подразделение и с плавающей запятой в verilog
- 19. ODP.NET - Подразделение на ноль?
- 20. Oracle проблема разделение
- 21. Подразделение и оператор Modulo
- 22. Как сделать дополнение и разделение столбцов с псевдонимом в запросе?
- 23. Разделение JavaFX Буфер обмена getString() странное поведение
- 24. Подразделение и плавающие точки
- 25. Дополнение и Подразделение
- 26. Производительность Oracle: Разделение разделов и Вставка Append
- 27. Подразделение и мощность в Javascript
- 28. раздел оракула by group_id и подразделение ежемесячно
- 29. разделение двух сложных столбцов (Oracle)
- 30. Подразделение с перекрытием