Artarad_oracle12c

امکان List Partitioning خودکار در پایگاه داده اوراکل نسخه ۱۲.۲

امکان list partitioning خودکار در پایگاه داده اوراکل نسخه ۱۲.۲ به منظور مدیریت مقادیر یکتا از کلید اصلی list partitioning معرفی شد.

صورت مسئله
در نظر بگیرید که سازمان مورد نظر شما با مشتری هایی از کشورهای آمریکا، بریتانیا و ایرلند در ارتباط است، لذا شما نیاز به partition‌ نمودن جدول سفارشات براساس نام کشور به صورت زیر دارید:

DROP TABLE orders PURGE;

CREATE TABLE orders
(
id NUMBER,
country_code VARCHAR2(5),
customer_id NUMBER,
order_date DATE,
order_total NUMBER(8,2),
CONSTRAINT orders_pk PRIMARY KEY (id)
)
PARTITION BY LIST (country_code)
(
PARTITION part_usa VALUES (‘USA’),
PARTITION part_uk_and_ireland VALUES (‘GBR’, ‘IRL’)
);

INSERT INTO orders VALUES (1, ‘USA’, 10, SYSDATE, 10200.93);
INSERT INTO orders VALUES (2, ‘USA’, 11, SYSDATE, 948.22);
INSERT INTO orders VALUES (3, ‘GBR’, 22, SYSDATE, 300.83);
INSERT INTO orders VALUES (4, ‘IRL’, 43, SYSDATE, 978.43);

COMMIT;

تیم فروش سفارشی از یک مشتری جدید در یک کشور متفاوت را دریافت می نماید.
همچنین DBA سازمان در جریان این اتفاقات قرار نمی گیرد.

INSERT INTO orders VALUES (5, ‘BGR’, 96, SYSDATE, 2178.43);
*
ERROR at line 1:
ORA-14400: inserted partition key does not map to any partition

SQL>

List partitioning خودکار
امکان list partitioning خودکار، نسبت به ایجاد یک پارتیشن برای هر مقدار یکتای جدید از کلید list partition اقدام میکند.
می توان این قابلیت را بر روی جداول موجود با دستور Alter Table اجرا نمود.

ALTER TABLE orders SET PARTITIONING AUTOMATIC;

همچنین در صورت نیاز می توتن به بازسازی جدول مربوطه با کلمه کلیدی AUTOMATIC اقدام نمود.

DROP TABLE orders PURGE;

CREATE TABLE orders
(
id NUMBER,
country_code VARCHAR2(5),
customer_id NUMBER,
order_date DATE,
order_total NUMBER(8,2),
CONSTRAINT orders_pk PRIMARY KEY (id)
)
PARTITION BY LIST (country_code) AUTOMATIC
(
PARTITION part_usa VALUES (‘USA’),
PARTITION part_uk_and_ireland VALUES (‘GBR’, ‘IRL’)
);

INSERT INTO orders VALUES (1, ‘USA’, 10, SYSDATE, 10200.93);
INSERT INTO orders VALUES (2, ‘USA’, 11, SYSDATE, 948.22);
INSERT INTO orders VALUES (3, ‘GBR’, 22, SYSDATE, 300.83);
INSERT INTO orders VALUES (4, ‘IRL’, 43, SYSDATE, 978.43);
COMMIT;

به محض فعال سازی امکان list partitioning خودکار، سفارش جدید با موفقیت ثبت خواهد شد.

INSERT INTO orders VALUES (5, ‘BGR’, 96, SYSDATE, 2178.43);

۱ row created.

SQL>

با استفاده از query {CDB|DBA|ALL|USER}_TAB_PARTITIONS view یک partition جدید به منظور نگهداری سفارش جدید مشاهده می شود.

EXEC DBMS_STATS.gather_table_stats(USER, ‘orders’, cascade => TRUE);

SET LINESIZE 100

COLUMN table_name FORMAT A30
COLUMN partition_name FORMAT A30
COLUMN high_value FORMAT A15

SELECT table_name,
partition_name,
high_value,
num_rows
FROM user_tab_partitions
ORDER BY 1, 2;

TABLE_NAME PARTITION_NAME HIGH_VALUE NUM_ROWS
—————————— —————————— ————— ———-
ORDERS PART_UK_AND_IRELAND ‘GBR’, ‘IRL’ 2
ORDERS PART_USA ‘USA’ 2
ORDERS SYS_P549 ‘BGR’ 1

SQL>

با استفاده از query {CDB|DBA|ALL|USER}_PART_TABLES view در ستون autolist در view وضعیت فعالیت list partitioning خودکارمشاهده می گردد.

COLUMN table_name FORMAT A30
COLUMN autolist FORMAT A8

SELECT table_name,
autolist
FROM user_part_tables;

TABLE_NAME AUTOLIST
—————————— ——–
ORDERS YES

SQL>

0 پاسخ

دیدگاه خود را ثبت کنید

تمایل دارید در گفتگوها شرکت کنید؟
در گفتگو ها شرکت کنید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *