Hvad er Oracle Partitioned Table?
Partitionering opdeler en tabel, et indeks eller en indeksorganiseret tabel i mindre komponenter. Hver komponent kaldes en partition (eller underpartition for sammensatte partitionerede objekter). Hver partition har et unikt navn og kan valgfrit have individuelle lagerkarakteristika:Eksempler inkluderer komprimering eller lagring i forskellige tablespaces. En veldesignet partitioneringsstrategi kan forbedre forespørgselsadgang og opdateringer ved at begrænse operationen til et enkelt eller undersæt af partitioner.
Partitionering for ydeevne – Partitionsbeskæring
Funktionen Oracle Partitioned table gør det muligt for forespørgselsoptimeringsværktøjet at springe partitioner over, der ikke kræves af en bestemt SQL-sætning. Afhængigt af SQL-sætningen kan optimeringsværktøjet identificere partitioner og underpartitioner, der skal tilgås, såvel som dem, der ikke gør det. Dette kan resultere i væsentlige forbedringer i forespørgselsydeevne, fordi optimeringsværktøjet fokuserer på en specifik delmængde af data, som kan forfines yderligere, hvis der findes yderligere prædikater.
Optimeringsværktøjet gør dette ved at bruge partitionsoplysningerne, der er gemt i dataordbog til at identificere indholdet af en partition uden at forespørge på de data, den indeholder. Partitionering er et ekstra lag af dataordbogen mellem tabeller/indekser og tabelrum
Begrænsning af opdelt tabel
I Oracle Database 11g kan en tabel maksimalt have 1048575 (1024K – 1) partitioner. Med den eneste undtagelse af tabeller, der indeholder kolonner med LONG eller LONG RAW datatyper, kan alle tabeller partitioneres (inklusive kolonner af typen CLOB eller BLOB).
Type af tabelpartitioner
Partitionering er tilgængelig i Oracle-databasen fra version 8.0, og oracle tilføjer løbende flere og flere funktioner for hver udgivelse. Følgende tabel viser en oversigt over de vigtigste ændringer
Den vigtigste partitionsstrategi givet af Oracle er
(1)Range
(2)List
(3) Hash
(4)Composite
Sådan opretter du partitionstabellen
Afhængigt af partitionstyper er her måden at oprette partitionstabellen på
Rangepartitionering
Oracle Partitioner dataene baseret på på hinanden følgende værdiområder for partitionsnøglen.
Hver partitions slutpunkt er angivet ved hjælp af følgende syntaks:
VALUES LESS THAN (value-list)
Eksempel
CREATE TABLE EXP_RANGE (ID NUMBER(15) NOT NULL, CODE_ID NUMBER(15) NOT NULL, PERIOD_NAME VARCHAR2(15) NOT NULL, ACTUAL_FLAG VARCHAR2(1) NOT NULL, VERSION_ID NUMBER(15), LAST_UPDATE_DATE DATE NOT NULL, . . . . . . ) PARTITION BY RANGE (PERIOD_NAME) ( PARTITION PR1 VALUES LESS THAN ('JAN-2019'), PARTITION PR2 VALUES LESS THAN ('FEB-2019') . . . . . . );
Områdepartitionering er nyttig til at partitionere historiske data og transaktionsdata, da grænserne for områdepartitionen definerer partitionens rækkefølge i tabeller og indekser
Listepartitionering
I denne metode kortlægger oracle specifikke rækker til partitioner, baseret på en statisk liste over bogstavelige værdier. Partitionsnøglen til listepartitionering kan kun være baseret på en enkelt kolonne.
CREATE TABLE EXP_LIST (ID NUMBER NOT NULL, ORG_ID NUMBER, OPEN_FLAG VARCHAR2(4) NOT NULL, . . . . . . ) PARTITION BY LIST (open_flag) ( PARTITION PR1 VALUES ('YES'), PARTITION PR2 VALUES ('NO') );
Hash-partitionering
I dette orakel brugte hashing-algoritmen til at bestemme den fysiske placering af data. Hash-partitionering vil fordele data jævnt over et fast antal partitioner.
CREATE TABLE EXP_HASH (ID NUMBER NOT NULL, ORG_ID NUMBER, ORDERED_ITEM VARCHAR2(2000), OPEN_FLAG VARCHAR2(1) NOT NULL, . . . . . . ) PARTITION BY HASH (ID) PARTITIONS 10 . . . . . .; );
Sammensat partitionering
I dette orakel bruges kombinationen af range, list og hash partitioning.composite partitioneringsmetoder er range-hash eller range-list.
CREATE TABLE sales_details ( prod_id NUMBER(6) , cust_id NUMBER , time_id DATE , channel_id VARCHAR2(1) , promo_id NUMBER(6) , quantity_sold NUMBER(3) , amount_sold NUMBER(10,2) ) PARTITION BY RANGE (time_id) SUBPARTITION BY HASH (cust_id) SUBPARTITIONS 8 STORE IN (ts1, ts2, ts3, ts4) ( PARTITION sales_q1_2019 VALUES LESS THAN (TO_DATE('01-APR-2019','dd-MON-yyyy')) , PARTITION sales_q2_2019 VALUES LESS THAN (TO_DATE('01-JUL-2019','dd-MON-yyyy')) , PARTITION sales_q3_2019 VALUES LESS THAN (TO_DATE('01-OCT-2019','dd-MON-yyyy')) , PARTITION sales_q4_2019 VALUES LESS THAN (TO_DATE('01-JAN-2019','dd-MON-yyyy')) );
Sådan flyttes det eksisterende objekt til opdelt objekt
Der er mange måder at opnå denne bedrift på. Jeg forklarer her den forsimplede metode
1.Opret en tom opdelt tabel ved hjælp af den partitionerede klausul og med muligheden parallel. Tabelnavnet skal have et andet navn end den ikke-opdelte tabel.
2.Fyld data for den påkrævede partition fra den ikke-opdelte tabel.
3. Overvej at bruge APPEND orakel-tip med en INSERT-sætning som en nem kodeændring, der giver god ydeevne. Hvis logning er aktiveret, og indekser er til stede, er tippet INSERT /*+ APPEND */ muligvis ikke effektivt. For at minimere omkostningerne ved indeksvedligeholdelse skal du droppe indekser før migrering og genskabe dem, når den opdelte tabel er blevet udfyldt.
4.Omdøb den opdelte tabel til det samme som den oprindelige tabel, eller skift synonymet.
5. Byg tabelindekser til den opdelte tabel
Læser også
Oracle Partition Index
Oracle Parallel Query
https://docs.oracle.com/cd/B28359_01/server.111/b32024/partition.htm