Thứ Năm, 20 tháng 5, 2021

[VIP] Tạo index bảng core, huge table (> 1, 2, ...15 tỷ bản ghi) trong Oracle Database

Bài toán: 

Với bảng dữ liệu rất lớn hoặc bảng core, giả sử bảng > 1 tỷ bản ghi, ví dụ bảng này 6,7 tỷ bản ghi như dưới:


Dữ liệu bảng này partition theo ngày từ 2014 chẳng hạn:

....

Thì việc tạo index với câu lệnh :

create index user1.tab1_I1 on user1.tab1(col1,col2, col3, col4) tablespace INDX local;

Sẽ chạy rất lâu và làm gây lock memory (library cache lock) và treo DB.


GIÁI PHÁP:

Tạo index local unusable sau đó rebuild từng partition từ mới đến cũ vì thường quét 1 vài ngày hoặc 1 vài tháng dữ liệu mới nhất, chi tiết:

Bước 1: Tạo index local unusable

create index user1.tab1_I1 on user1.tab1(col1,col2, col3, col4) tablespace INDX local unusable;

Bước 2: Rebuild index  partition unusable

-- Script sinh câu lệnh rebuild partition 2021 lưu vào tablespace theo YYYYMM --> Chuyển vào SQL Navigator để chạy
select  'alter index ' || index_owner || '.' || index_name || ' rebuild partition ' || partition_name || ' tablespace ' || substr ('INDX' || substr(partition_name,5,9),1,10) || ' nologging parallel 8 online;'
from dba_ind_partitions where status!='USABLE'
and index_owner='USER1' and index_name='TAB1_I1'
and partition_name like '%2021%'
order by 1 desc;

-- Script sinh câu lệnh rebuild partition 2020 lưu vào tablespace theo YYYY  --> Chuyển vào SQL Navigator để chạy
select  'alter index ' || index_owner || '.' || index_name || ' rebuild partition ' || partition_name || ' tablespace ' || substr ('INDX' || substr(partition_name,5,9),1,8) || ' nologging parallel 8 online;'
from dba_ind_partitions where status!='USABLE'
and index_owner='USER1' and index_name='TAB1_I1'
and partition_name like '%2020%'
order by 1 desc;

-- Script sinh câu lệnh rebuild partition 2019 lưu vào tablespace theo YYYY  --> Chuyển vào SQL Navigator để chạy
select  'alter index ' || index_owner || '.' || index_name || ' rebuild partition ' || partition_name || ' tablespace ' || substr ('INDX' || substr(partition_name,5,9),1,8) || ' nologging parallel 8 online;'
from dba_ind_partitions where status!='USABLE'
and index_owner='USER1' and index_name='TAB1_I1'
and partition_name like '%2019%'
order by 1 desc;

3 cửa sổ chay đồng thời mất khoảng 1-2 tiếng là xong:


Còn lại những partition cũ ít truy cập thì túc tắc thực hiện:

-- Script sinh câu lệnh rebuild partition còn lại từ 2014-> 2018 lưu vào tablespace theo YYYY
select  'alter index ' || index_owner || '.' || index_name || ' rebuild partition ' || partition_name || ' tablespace ' || substr ('INDX' || substr(partition_name,5,9),1,10) || ' nologging parallel 8 online;'
from dba_ind_partitions where status!='USABLE'
and index_owner='USER1' and index_name='TAB1_I1'
and partition_name  not like '%2021%'
and partition_name  not like '%2020%'
and partition_name  not like '%2019%'
order by 1 desc;

Một số câu lệnh tạo tablespace nếu chưa có:

create tablespace indx202101 datafile '+DATA' size 1G autoextend on next 100m;
create tablespace indx202102 datafile '+DATA' size 1G autoextend on next 100m;
create tablespace indx202103 datafile '+DATA' size 1G autoextend on next 100m;
create tablespace indx202104 datafile '+DATA' size 1G autoextend on next 100m;
create tablespace indx202105 datafile '+DATA' size 1G autoextend on next 100m;
create tablespace indx202106 datafile '+DATA' size 1G autoextend on next 100m;
create tablespace indx202107 datafile '+DATA' size 1G autoextend on next 100m;
create tablespace indx202108 datafile '+DATA' size 1G autoextend on next 100m;
create tablespace indx202109 datafile '+DATA' size 1G autoextend on next 100m;
create tablespace indx202110 datafile '+DATA' size 1G autoextend on next 100m;
create tablespace indx202111 datafile '+DATA' size 1G autoextend on next 100m;
create tablespace indx202112 datafile '+DATA' size 1G autoextend on next 100m;

create tablespace indx2020 datafile '+DATA' size 1G autoextend on next 100m;

create tablespace indx2019 datafile '+DATA' size 1G autoextend on next 100m;

create tablespace indx2018 datafile '+DATA' size 1G autoextend on next 100m;

create tablespace indx2017 datafile '+DATA' size 1G autoextend on next 100m;

create tablespace indx2016 datafile '+DATA' size 1G autoextend on next 100m;

create tablespace indx2015 datafile '+DATA' size 1G autoextend on next 100m;

create tablespace indx2014 datafile '+DATA' size 1G autoextend on next 100m;

Hy vọng hữu ích cho bạn.

=============================
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
hoặc
https://bit.ly/oaz_fp
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile: 0902912888
⚡️ Skype: tranbinh48ca
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: http://bit.ly/ytb_binhoraclemaster
👨 Tiktok: https://www.tiktok.com/@binhoraclemaster?lang=vi
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhoracle
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,khóa học pl/sql, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle dataguard, oracle goldengate, oracle weblogic, oracle exadata, hoc solaris, hoc linux, hoc aix

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master