Hiển thị các bài đăng có nhãn Admin-Partitoning. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn Admin-Partitoning. Hiển thị tất cả bài đăng

Thứ Tư, 14 tháng 12, 2022

Thứ Hai, 21 tháng 11, 2022

Oracle Database khủng với 32TB, 246 tỷ row Oracle quản lý như thế nào?

Mục đích: Show những bảng rất lớn của các database khủng (200TB online + 800TB Offline trên Tape), đây là database RDBMS lớn nhất tại Việt Nam và top lớn nhất trên thế giới. Thế thì chúng ta sẽ quản lý như nào cho hiệu quả. Nội dung này sẽ được chia sẻ khi bạn là học viên OAZ hoặc OAZ Mastery.

- Bảng lớn nhất dung lượng 32TB, nhiều bảng khác 10-30TB,... được báo cáo tự động hàng ngày:
- Những bảng > 1 tỷ row rất nhiều, trong đó bảng lớn nhất là 246 tỷ row, cực khủng, liệu Oracle có quản lý được không, khi cần có truy xuất được không?




=============================
* 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
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 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

=============================
oracle tutorial, 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,sql tutorial, khóa học pl/sql tutorial, 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 multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty
Sửa bài viết

Chủ Nhật, 17 tháng 4, 2022

Tạo composite partition theo list và subpartition theo range

Mục đích: Tạo bảng partition theo trường status gộp và subpartition theo trường month, chỉ 1 số partition theo status mới cần tạo subpartition do dữ liệu nhỏ.

Chi tiết thủ tục

--1.TẠO BẢNG

--drop table app_owner.tab1_new;

CREATE TABLE app_owner.tab1_new
(
   tab1_ID        NUMBER,
  INSERT_DATE             DATE,
  REP_CUST_ID   number;
  INVOICE_ID              NUMBER(10)            NOT NULL,
  CUST_ID                 NUMBER(10)            NOT NULL,
  EINV_ID number,  
  MONTH                   DATE                  NOT NULL,
  STA_DATE                DATE,
  END_DATE                DATE,
  TAX                     NUMBER(3),  
  PAYMENT_AMOUNT_VAT      NUMBER(15,2),
  STATUS                  NUMBER,
  DESCRIPTION             VARCHAR2(4000 BYTE)
)
NOCOMPRESS 
TABLESPACE DATA
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            BUFFER_POOL      DEFAULT
           )
LOGGING
PARTITION BY LIST  (STATUS)
SUBPARTITION BY RANGE (month)
(  
   PARTITION P03 VALUES ('0','3')
    LOGGING
    NOCOMPRESS 
    TABLESPACE DATA
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                BUFFER_POOL      DEFAULT
               ),
   PARTITION P16 VALUES ('1','6')
    LOGGING
    NOCOMPRESS 
    TABLESPACE DATA
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                BUFFER_POOL      DEFAULT
               ),  
   PARTITION P5 VALUES ('5')
    LOGGING
    NOCOMPRESS 
    TABLESPACE DATA
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                BUFFER_POOL      DEFAULT
               ),                                              
  PARTITION P2 VALUES ('2')
    LOGGING
    NOCOMPRESS 
    TABLESPACE DATA
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                BUFFER_POOL      DEFAULT
               )
  (  
      SUBPARTITION data2020 VALUES LESS THAN (TO_DATE('01-01-2021', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data2021 VALUES LESS THAN (TO_DATE('01-01-2022', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data202201 VALUES LESS THAN (TO_DATE('01-02-2022', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data202202 VALUES LESS THAN (TO_DATE('01-03-2022', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data202203 VALUES LESS THAN (TO_DATE('01-04-2022', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data202204 VALUES LESS THAN (TO_DATE('01-05-2022', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data202205 VALUES LESS THAN (TO_DATE('01-06-2022', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data202206 VALUES LESS THAN (TO_DATE('01-07-2022', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data202207 VALUES LESS THAN (TO_DATE('01-08-2022', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data202208 VALUES LESS THAN (TO_DATE('01-09-2022', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data202209 VALUES LESS THAN (TO_DATE('01-10-2022', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data202210 VALUES LESS THAN (TO_DATE('01-11-2022', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data202211 VALUES LESS THAN (TO_DATE('01-12-2022', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data202212 VALUES LESS THAN (TO_DATE('01-01-2023', 'DD-MM-YYYY')) TABLESPACE DATA
    ),   
  PARTITION P4 VALUES ('4')
    LOGGING
    NOCOMPRESS 
    TABLESPACE DATA
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                BUFFER_POOL      DEFAULT
               )
    (  
      SUBPARTITION data2020_ VALUES LESS THAN (TO_DATE('01-01-2021', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data2021_ VALUES LESS THAN (TO_DATE('01-01-2022', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data202201_ VALUES LESS THAN (TO_DATE('01-02-2022', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data202202_ VALUES LESS THAN (TO_DATE('01-03-2022', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data202203_ VALUES LESS THAN (TO_DATE('01-04-2022', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data202204_ VALUES LESS THAN (TO_DATE('01-05-2022', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data202205_ VALUES LESS THAN (TO_DATE('01-06-2022', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data202206_ VALUES LESS THAN (TO_DATE('01-07-2022', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data202207_ VALUES LESS THAN (TO_DATE('01-08-2022', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data202208_ VALUES LESS THAN (TO_DATE('01-09-2022', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data202209_ VALUES LESS THAN (TO_DATE('01-10-2022', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data202210_ VALUES LESS THAN (TO_DATE('01-11-2022', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data202211_ VALUES LESS THAN (TO_DATE('01-12-2022', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data202212_ VALUES LESS THAN (TO_DATE('01-01-2023', 'DD-MM-YYYY')) TABLESPACE DATA
    ),    
  PARTITION PM VALUES (DEFAULT)
    LOGGING
    NOCOMPRESS 
    TABLESPACE DATA
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                BUFFER_POOL      DEFAULT
               ) 
)
NOCACHE
MONITORING
ENABLE ROW MOVEMENT;

--2.Đổi tên bảng hiện tại đang chạy thành history

--27s
alter table app_owner.tab1 rename to tab1_history;

Có thể gặp lỗi như bên dưới:
--ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired

Ta phải Kill lock đi theo câu lệnh, xác định đúng INST_ID để kill vào đúng node cần kill (nhầm co s 
SELECT /*lock table*/  'kill -9 ' || spid a, a.INST_ID,A.SQL_ID,A.SID, A.SERIAL#, a.USERNAME, a.STATUS,A.SCHEMANAME,a.OSUSER,A.MACHINE,A.PROGRAM,A.TYPE,A.LOGON_TIME,BACKGROUND
FROM gv$session a, gv$process b 
WHERE b.addr = a.paddr   
AND a.inst_id=b.inst_id 
--and b.inst_id=3
AND (b.inst_id, a.sid) in
(SELECT /*+ parallel(8)*/ s.inst_id,s.sid
FROM gv$locked_object v, dba_objects d,
gv$lock l, gv$session s
WHERE v.object_id = d.object_id
AND (v.object_id = l.id1)
AND v.session_id = s.sid
and object_name=upper('tab1'))
--and type='USER'
--ORDER BY username, session_id;

--3.Đổi tên bảng mới về bảng product

alter table app_owner.tab1_new rename to tab1;

--4.Insert dữ liệu vào bảng mới

insert/*+ append nologging parallel(a,8) */ into app_owner.tab1  a
select /*+ parallel(b,8) */ * from app_owner.tab1_history b;

commit;

--5.Tao lại index

create index app_owner.tab1_NEW_I1 on app_owner.tab1(tab1_ID) tablespace INDX local parallel 8 online;
alter index app_owner.tab1_NEW_I1 noparallel;
create index app_owner.tab1_NEW_I2 on app_owner.tab1(CUST_ID)  tablespace INDX local parallel 8 online;
alter index app_owner.tab1_NEW_I2 noparallel;
create index app_owner.tab1_NEW_I3 on app_owner.tab1(REP_CUST_ID)  tablespace INDX local parallel 8 online;
alter index app_owner.tab1_NEW_I3 noparallel;
create index app_owner.tab1_NEW_I5 on app_owner.tab1(EINV_ID)  tablespace INDX local parallel 8 online;
alter index app_owner.tab1_NEW_I5 noparallel;
create index app_owner.tab1_I6 on app_owner.tab1(INVOICE_ID)  tablespace INDX local parallel 8 online;
alter index app_owner.tab1_I6 noparallel;

--6.Gahter

BEGIN
  SYS.DBMS_STATS.GATHER_TABLE_STATS (
     OwnName           => 'app_owner'
    ,TabName           => 'tab1'
    ,Estimate_Percent  => 10
    ,Method_Opt        => 'FOR ALL COLUMNS SIZE 1'
    ,Degree            => 16
    ,Cascade           => TRUE
    ,No_Invalidate  => FALSE);
END;
/

Hy vọng giúp í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
=============================
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 multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, middleware, hoc solaris, hoc linux, hoc aix, unix, securecrt, xshell, mobaxterm, putty
Sửa bài viết

Thứ Sáu, 15 tháng 4, 2022

Chuyển đổi bảng non-partition sang partition tự động

Vấn đề:

Bảng table_non_partition không chia partition mà dữ liệu đã 100, 200,... triệu row rồi, select rất chậm do vậy cần phải partition bảng này.
Sửa bài viết

Chuyển đổi bảng non-partition sang partition tự động

Vấn đề:

Bảng table_non_partition không chia partition mà dữ liệu đã 100, 200,... triệu row rồi, select rất chậm do vậy cần phải partition bảng này.
Sửa bài viết

Thứ Tư, 2 tháng 3, 2022

Partition kết hợp (composite partitioning) trong Oracle Database

Composite Range-Hash Partitioning

CREATE TABLE page_history
( id                NUMBER NOT NULL
, url               VARCHAR2(300) NOT NULL
, view_date         DATE NOT NULL
, client_ip         VARCHAR2(23) NOT NULL
, from_url          VARCHAR2(300)
, to_url            VARCHAR2(300)
, timing_in_seconds NUMBER
) PARTITION BY RANGE(view_date) INTERVAL (NUMTODSINTERVAL(1,'DAY'))
SUBPARTITION BY HASH(client_ip)
SUBPARTITIONS 32
(PARTITION p0 VALUES LESS THAN (TO_DATE('01-JAN-2006','dd-MON-yyyy')))
PARALLEL 32 COMPRESS;
Sửa bài viết

Thứ Hai, 28 tháng 2, 2022

KHI NÀO CẦN TẠO PARTITION CHO BẢNG CSDL ORACLE

KHI NÀO NÊN TẠO PARTITION CHO BẢNG?

Oracle đã dựa trên câu chuyện bó đũa của Việt Nam để đưa ra tính năng tuyệt vời này: Tức là với bảng lớn (tương đương 10 cây đũa) thì rất khó chúng ta có thể thao tác, quản trị; nhưng khi chia thành những phần nhỏ chúng ta lại dễ dàng quản trị (bẽ gây đũa) được 😀😀😀

Vậy khi nào chúng ta cần tạo partition cho CSDL Oracle Theo khuyến cáo của Oracle thì chúng ta cần cân nhắc tạo partition cho bảng khi:
• Khi bảng lớn hơn 2GB
• Bảng có dữ liệu lịch sử: Chỉ cần DML trong tháng hiện tại (VD tháng 10/2019), còn lại trước đó Read Only
• Bảng chứa nhiều partition phân tán trên các phân vùng đĩa khác nhau (như SSD, FC, SAS, SATA) khi đó sẽ được lưu trên các tablespace tương ứng (như DATA2019, DATA2018, DATA2017,...)
• Còn 1 nội dung nữa mà Oracle không đưa ra trong phần lý thuyết đó là: Thực tế câu lệnh SELECT của chúng ta hay sử dụng quét theo điều kiện gì (theo ngày, theo tháng, theo quý hay theo năm) để chúng ta quyết định loại partition cho phù hợp.

Lựa chọn kiểu partition gì?

Chúng ta lựa chọn các kiểu partition dưới đây hoặc kết hợp các loại partition với nhau (composite):
- Với dữ liệu lịch sử thì đánh theo By Range.
- Với dữ liệu xác định trước được giá trị thì đánh theo By list.
- Với dữ liệu không có quy luật thì đánh theo By Hash.

Ví dụ:

-- Partition theo RANGE
CREATE TABLE invoices
(invoice_no    NUMBER NOT NULL,
 invoice_date  DATE   NOT NULL,
 comments      VARCHAR2(500))
PARTITION BY RANGE (invoice_date)
(PARTITION invoices_q1 VALUES LESS THAN (TO_DATE('01/04/2001', 'DD/MM/YYYY')) TABLESPACE users,
 PARTITION invoices_q2 VALUES LESS THAN (TO_DATE('01/07/2001', 'DD/MM/YYYY')) TABLESPACE users,
 PARTITION invoices_q3 VALUES LESS THAN (TO_DATE('01/09/2001', 'DD/MM/YYYY')) TABLESPACE users,
 PARTITION invoices_q4 VALUES LESS THAN (TO_DATE('01/01/2002', 'DD/MM/YYYY')) TABLESPACE users);
-- Partition theo HASH
CREATE TABLE invoices
(invoice_no    NUMBER NOT NULL,
 invoice_date  DATE   NOT NULL,
 comments      VARCHAR2(500))
PARTITION BY HASH (invoice_no)
PARTITIONS 4
STORE IN (users, users, users, users);
-- Composite Partition (partition theo RANGE và subpartition theo HASH)
CREATE TABLE invoices
(invoice_no    NUMBER NOT NULL,
 invoice_date  DATE   NOT NULL,
 comments      VARCHAR2(500))
PARTITION BY RANGE (invoice_date)
SUBPARTITION BY HASH (invoice_no)
SUBPARTITIONS 8
(PARTITION invoices_q1 VALUES LESS THAN (TO_DATE('01/04/2001', 'DD/MM/YYYY')),
 PARTITION invoices_q2 VALUES LESS THAN (TO_DATE('01/07/2001', 'DD/MM/YYYY')),
 PARTITION invoices_q3 VALUES LESS THAN (TO_DATE('01/09/2001', 'DD/MM/YYYY')),
 PARTITION invoices_q4 VALUES LESS THAN (TO_DATE('01/01/2002', 'DD/MM/YYYY'));
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
=============================
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 multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, middleware, hoc solaris, hoc linux, hoc aix, unix, securecrt, xshell, mobaxterm, putty
Sửa bài viết

Thứ Sáu, 16 tháng 4, 2021

Split Partition trong Oracle Database

Mục đích: Khi tạo partition từ 01/01/2021-31/12/2021 mà lại cần các partition 01/01/2020-31/12/2020 thì sẽ không add thêm partition vào được do min partition là 01/01/2021. 

Giải pháp:  split partition của Oracle Database
Sửa bài viết

Thứ Năm, 1 tháng 4, 2021

Thứ Sáu, 5 tháng 3, 2021

Thứ Bảy, 12 tháng 12, 2020

Tự động Add partition cho bảng partition trong Oracle Database

Vấn đề: Đối với các bảng dữ liệu có đánh partition theo tháng hoặc theo ngày, người DBA thường xuyên phải đánh partition, nếu quên dữ liệu insert vào sẽ bị lỗi và có thể dẫn đến lỗi toàn hệ thống.

– Giải pháp: Để giải quyết vấn đề trên ta thường viết thủ tục đánh partition tự động cho bảng và đặt scheduler để chạy định kỳ. Việc đánh partition không ảnh hưởng tới các thao tác insert, select, update, delete.
Sửa bài viết

Thứ Ba, 1 tháng 12, 2020

Script rebuild index theo ngày, tháng, năm trong Oracle Database

---index theo nam
DECLARE
   v_nam          varchar2(4) := '2012';
   v_tablespace   varchar2(50):='INDX';
   cursor c1 is  
--     select table_owner,table_name,max(partition_name)
--     from dba_tab_partitions group by table_owner,table_name having max(partition_name) like '%'||v_nam||'%' and length(max(partition_name))<9;
     select table_owner,table_name,max(partition_name)
     from dba_tab_partitions where table_name='table1' group by table_owner,table_name;
Sửa bài viết

Quản lý Index Partition trong Oracle Database

--1.CHECK
select a.* from DBA_PART_INDEXES a, DBA_TAB_PARTITIONS b where a.owner=B.TABLE_OWNER and a.table_name=B.TABLE_NAME and a.owner not like 'SYS%' and b.partition_name like '%20131231';

-- Script rebuild index partititon unusable
select 'alter index ' || index_owner || '.' || index_name || ' rebuild partition ' || partition_name || ' tablespace INDX nologging parallel 8 online;' from dba_ind_partitions where status='UNUSABLE';


-- Script rebuild các partition index 
--+ Bước 1: Rebuild
select 'alter index ' || index_owner || '.' || index_name || ' rebuild partition ' || partition_name || ' tablespace INDX' ||substr(partition_name,5,4)||' nologging parallel 8 online;' from dba_ind_partitions where 
index_owner='APP_OWNER'
and index_name in (
'index_name_1',
'index_name_2'
)
order by partition_name desc
;
--+ Bước 2: Nologging noparallel
alter index app_owner.index_name_1 noparallel nologging;
alter index app_owner.index_name_2 noparallel nologging;

Sửa bài viết

Chuyển bảng non-partition sang partition theo tháng trong Oracle Database

-- Thu tuc chuyen bang user1.table1 partition theo bdate sang partition theo thang
--1.CHECK, lay bang partition
select * from dba_tab_partitions where length(partition_name)=10;

--Lay cau truc bang sau ra lam mau
user1    table1
Sửa bài viết

Chuyển bảng non-partition sang partition theo ngày trong Oracle Database

Mục đích: Khi bảng non-partiton lớn (> 2GB hoặc > 50 triệu row) thì chúng ta cân nhắc chuyển bảng sang partition, nếu quét theo ngày thì tạo partition theo ngày theo thủ tục sau:

select min(month) from user1.table1_NOPART;
     
--select min(load_date) from user1.table1  ;
--1.Rename table
alter table user1.table1 rename to table1_NOPART;
Sửa bài viết

Tạo bảng partition theo ngày và add thêm partition thiếu của 1 bảng theo ngày trong Oracle Database

1. TẠO BẢNG

CREATE TABLE test_owner.tab1
    (ID                     VARCHAR2(15) NOT NULL,
    start_datetime                  DATE NOT NULL,
    col1 DATE NOT NULL,
    col2 VARCHAR2(1) NOT NULL,
    col3 NUMBER(10,0),
)
TABLESPACE DATA
PARTITION BY RANGE (start_datetime)
(
  PARTITION DATA20210303 VALUES LESS THAN (TO_DATE(' 2021-03-04 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
  TABLESPACE DATA202103
)

2. THÊM PARTITION CÁC NGÀY KHÁC CHO BẢNG

DECLARE
   v_nam          NUMBER (4) := 2021;
   v_owner        varchar2 (50) := 'test_owner';
   v_tablename    VARCHAR2 (50) := 'tab1';
Sửa bài viết

GIẢI PHÁP: NÉN DỮ LIỆU LÀM GIẢM DUNG LƯỢNG VÀ TĂNG TỐC ĐỘ TRUY XUẤT DỮ LIỆU trong Oracle Database

1. Kiểm tra dung lượng của từng partition trước khi compress:
 
select segment_name,partition_name,bytes/1024/1024 "MB"
from dba_Segments where segment_type = 'TABLE PARTITION' 
and owner like 'user1'
--and lower(SEGMENT_name) like 'segment_name1%'
and bytes/1024/1024 >2
order by MB desc
Sửa bài viết

Tạo bảng Hash Partition trong Oracle Database

--Tạo bảng sales hash partition 

CREATE TABLE sales_hash
  (s_productid  NUMBER,
   s_saledate   DATE,
   s_custid     NUMBER,
   s_totalprice NUMBER)
PARTITION BY HASH(s_productid)
( PARTITION p1 TABLESPACE tbs1
, PARTITION p2 TABLESPACE tbs2
, PARTITION p3 TABLESPACE tbs3
, PARTITION p4 TABLESPACE tbs4
);


--Tạo  composite range-hash partitioned table dùng mệnh đề STORE IN 

CREATE TABLE sales

  ( prod_id       NUMBER(6)

  , cust_id       NUMBER

  , time_id       DATE

  , channel_id    CHAR(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_2006 VALUES LESS THAN (TO_DATE('01-APR-2006','dd-MON-yyyy'))

 , PARTITION sales_q2_2006 VALUES LESS THAN (TO_DATE('01-JUL-2006','dd-MON-yyyy'))

 , PARTITION sales_q3_2006 VALUES LESS THAN (TO_DATE('01-OCT-2006','dd-MON-yyyy'))

 , PARTITION sales_q4_2006 VALUES LESS THAN (TO_DATE('01-JAN-2007','dd-MON-yyyy'))

 );

--Tạo bảng với composite range-hash partitioning

CREATE TABLE page_history

( id                NUMBER NOT NULL

, url               VARCHAR2(300) NOT NULL

, view_date         DATE NOT NULL

, client_ip         VARCHAR2(23) NOT NULL

, from_url          VARCHAR2(300)

, to_url            VARCHAR2(300)

, timing_in_seconds NUMBER

) PARTITION BY RANGE(view_date) INTERVAL (NUMTODSINTERVAL(1,'DAY'))

SUBPARTITION BY HASH(client_ip)

SUBPARTITIONS 32

(PARTITION p0 VALUES LESS THAN (TO_DATE('01-JAN-2006','dd-MON-yyyy')))

PARALLEL 32 COMPRESS;


CREATE  TABLE ABC(

id VARCHAR2(100) primary key,

datecreated DATE)

PARTITION BY RANGE (datecreated) INTERVAL (NUMTODSINTERVAL(1,'DAY'))

  SUBPARTITION BY HASH (ID) SUBPARTITIONS 4

 (PARTITION lessthan2018  VALUES LESS THAN (TIMESTAMP' 2018-01-01 00:00:00') );

Sửa bài viết

ĐỌC NHIỀU

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