Oracle億級數據的分區處理

隨着業務數據量的增大,單張表的數據量會越來越大,對錶的操作效率會越來越低,因此有必要對數據庫的表進行分區處理.這裏介紹其一,還有另一種在線重定義表分區也是可以的(ORACLE9之後添加的新功能)

思路:
1.查看錶大小(確定是否有必要進行分區)
2.對CUS_SUMMARY的表結構和數據進行備份CUS_SUMMARY1和建立分區表之後將數據導入到CUS_SUMMARY2中
3.刪除CUS_SUMMARY,將CUS_SUMMARY2重命名爲CUS_SUMMARY

首先看下數據量和所佔用的內存大小,查詢後選擇分區

--1
select sum(bytes)/(1024*1024) as "size(M)" from user_segments
where segment_name=upper('CUS_SUMMARY');
--2
select count(*) from CUS_SUMMARY

數據量數據大小
1.創建複製一份原有的表和數據到新的表中,原建表語句

-- Create table
create table CUS_SUMMARY
(
  pk               VARCHAR2(36) default "PBP"."ISEQ$$_99928".nextval not null,
  pktt             VARCHAR2(4),
  term             VARCHAR2(8),
  termsub          VARCHAR2(8),
  pkorg            VARCHAR2(12),
  orgname          VARCHAR2(30),
  pkcus            VARCHAR2(36),
  cusname          VARCHAR2(100),
  pkkv             VARCHAR2(36),
  pkog             VARCHAR2(12),
  pkkv_source      VARCHAR2(36),
  value            NUMBER(20,6),
  pksub            VARCHAR2(40),
  if_import        CHAR(1),
  remark           VARCHAR2(300),
  rcreationtime    DATE,
  rcreator         VARCHAR2(36),
  rcreationversion VARCHAR2(20)
)
tablespace TSPBP
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  );
-- Add comments to the table 
comment on table CUS_SUMMARY
  is '客戶彙總表(用BAS_KEYWORD_VARIABLE變量)';
-- Add comments to the columns 
comment on column CUS_SUMMARY.pk
  is '客戶彙總主鍵';
comment on column CUS_SUMMARY.pktt
  is '時期類型主鍵(3月6年06年初bas_term_type)';
comment on column CUS_SUMMARY.term
  is '時期(例六月201406,二季20142,年2014,上半年20141,當前9不填)';
comment on column CUS_SUMMARY.termsub
  is '時期-輔助字段(不定期存結束日期)';
comment on column CUS_SUMMARY.pkorg
  is '機構主鍵';
comment on column CUS_SUMMARY.orgname
  is '機構名稱';
comment on column CUS_SUMMARY.pkcus
  is '客戶主鍵';
comment on column CUS_SUMMARY.cusname
  is '客戶名稱(姓名/企業中文名稱)';
comment on column CUS_SUMMARY.pkkv
  is '關鍵字變量主鍵';
comment on column CUS_SUMMARY.pkog
  is '網格主鍵';
comment on column CUS_SUMMARY.pkkv_source
  is '關鍵字變量主鍵_源';
comment on column CUS_SUMMARY.value
  is '關鍵字變量值';
comment on column CUS_SUMMARY.pksub
  is '輔助主鍵-1:相關表中的主鍵值,方便特殊查詢2:null代表總數';
comment on column CUS_SUMMARY.if_import
  is '是否導入';
comment on column CUS_SUMMARY.remark
  is '備註';
comment on column CUS_SUMMARY.rcreationtime
  is '記錄創建時間';
comment on column CUS_SUMMARY.rcreator
  is '記錄創建人主鍵';
comment on column CUS_SUMMARY.rcreationversion
  is '記錄創建版本';
-- Create/Recreate indexes 
create unique index INDEX_62 on CUS_SUMMARY (PKTT, PKORG, PKKV, PKSUB, TERM DESC, PKCUS)
  tablespace TSPBP
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  );
-- Create/Recreate primary, unique and foreign key constraints 
alter table CUS_SUMMARY
  add constraint PK_CUS_SUMMARY primary key (PK)
  using index 
  tablespace TSPBP
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  );

創建CUS_SUMMARY1,備份數據

insert into CUS_SUMMARY1 select * from CUS_SUMMARY;

創建分區表CUS_SUMMARY2,添加分區語句,這裏最好先不要加索引,因爲添加索引之後,從舊錶往新表導入數據會很慢,

-- Create table
   partition by range(term)
   interval (1)
   store in (users, system)
   (
      partition sp1 values less than (201811)
   )

2.Oracle的普通表沒有辦法通過修改屬性的方式直接轉化爲分區表,必須通過重建的方式進行轉變,添加分區語句,根據需要添加分區(不需要添加MAXVALUE分區,不然之後添加分區會很麻煩)
3.刪除原CUS_SUMMARY表,將CUS_SUMMARY2重命名爲CUS_SUMMARY,可能數據量比較大,所以我這裏報錯了,所以大家可以刪除CUS_SUMMARY,重新新建帶分區的CUS_SUMMARY,將CUS_SUMMARY1或者CUS_SUMMARY2數據導入

ALTER TABLE CUS_SUMMARY2 RENAME TO CUS_SUMMARY;

拓展

alter table CUS_SUMMARY2 add partition CUS_201905 values less than ('201906');



```sql
---彩蛋:測試建立表分區
create table emp
   (
     EMPNO    NUMBER(4) not null,
     ENAME    VARCHAR2(10),
     JOB      VARCHAR2(9),
     MGR      NUMBER(4),
     HIREDATE DATE,
     SAL      number,
     COMM     NUMBER(7,2),
     DEPTNO   NUMBER(2)
   )
   partition by range(sal)
   interval (1)
   store in (users, system)
   (
      partition sp1 values less than (201701)
   );
續集
[數據量大到原始表空間不足解決辦法](https://blog.csdn.net/weixin_43495390/article/details/105215123)



		
		
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章