Thứ Ba, 1 tháng 12, 2020

Tạo virtual index trong Oracle Database

CREATE TABLE objects_tab AS SELECT * FROM all_objects;

ALTER TABLE objects_tab ADD (
  CONSTRAINT objects_tab_pk PRIMARY KEY (object_id)
);
Sửa bài viết

Tạo virtual index trong Oracle Database

CREATE TABLE objects_tab AS SELECT * FROM all_objects;

ALTER TABLE objects_tab ADD (
  CONSTRAINT objects_tab_pk PRIMARY KEY (object_id)
);
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