Oracle基礎維護02-表、主鍵、索引、表結構維護手冊


目錄

一、項目新建表、主鍵、索引注意事項

二、舉例說明建表、主建、索引的操作方法

2.1 設定需求如下

2.2 普通表操作方法

2.3 分區表操作方法

三、表、主鍵、索引的常規維護操作

3.1 表結構修改的方法舉例

3.2 表、主建、索引的日常維護舉例

一、項目新建表、主鍵、索引注意事項

  • 需要顯示指定表和索引所屬表空間,具體語法可參考下文中的示例。
  • 表是否分區根據業務實際需求確定,一般單表數據量超過千萬以上,並有周期性刪除歷史數據需求的表需要考慮使用分區表。
  • 如果是分區表,需要注意對應的索引是本地(local)索引。
  • 主鍵默認就包含了一個唯一性索引,同樣需要注意所屬表空間問題。
  • PL/SQL工具獲取的分區表的建表語句,主建和索引部分獲取不到local關鍵字,需要手動添加上。

二、舉例說明建表、主建、索引的操作方法

下面就對上面所說的注意事項,舉例說明實際建表、主建、索引的操作方法。

2.1 設定需求如下

1. 建普通表t_normal, 字段id, name, start_time, content,
設定id列為表t_normal的主建,主鍵名稱為pk_t_normal_id,
建立id,name兩列的組合索引,索引名稱為idx_t_normal。

2. 建分區表t_part, 字段id, name, start_time, content, 
分區字段是start_time,按天分區,
建立start_time,id兩列為表t_part的主建,主鍵名稱為pk_t_part_id,
建立start_time,id,name三列的組合索引,索引名稱為idx_t_part。

2.1.1查詢數據庫有哪些表空間

select name from v$tablespace;

2.1.2本文檔假設數據庫有這兩個業務用戶的表空間:

DBS_D_XXX     存放數據的表空間
DBS_I_XXX      存放索引的表空間

注:新建表及其索引屬於哪個表空間根據項目自己的規划自行判斷。實際網優項目中用戶自定義的表空間都是DBS_D開頭的是存放數據,DBS_I開頭的是存放索引。

2.2 普通表操作方法

2.2.1新建普通表示例

create table t_normal(
id number, 
name varchar2(20), 
start_time date, 
content varchar2(200)
)tablespace dbs_d_xxx;

注:表示建立的t_normal表數據存放在dbs_d_xxx表空間中。

2.2.2普通表建立主建示例

alter table t_normal add constraint pk_t_normal_id primary key(id) using index tablespace dbs_i_xxx;

注:表示建立的主建pk_t_normal_id對應的唯一性索引pk_t_normal_id數據存放在dbs_i_xxx表空間中。

2.2.3普通表建立索引示例

create index idx_t_normal on t_normal(id, name) tablespace dbs_i_xxx;

注:表示建立的索引idx_t_normal數據存放在dbs_i_xxx表空間中。

2.3 分區表操作方法

項目中新建表,一般常用的分區表基本都是range分區,這里就以range分區舉例說明。

2.3.1新建分區表示例

create table t_part(
id number, 
name varchar2(20), 
start_time date, 
content varchar2(200)
)partition by range(start_time)
(
  partition P20150101 values less than (TO_DATE(' 2015-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
    tablespace dbs_d_xxx,
  partition P20150102 values less than (TO_DATE(' 2015-01-02 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
    tablespace dbs_d_xxx,
  partition P20150103 values less than (TO_DATE(' 2015-01-03 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
    tablespace dbs_d_xxx
);

注:partition by range() 括號中是分區字段,下面的括號中就是包含的具體分區,每個分區都需要顯示指定存放表空間名稱。
上面示例建了3個分區,實際項目可能需要創建半年的分區,格式與上面一樣,這里給出一個15年上半年的分區示例,便於參考。只需根據項目實際情況更改分區字段和表空間名稱即可。

2.3.2分區表建立主建示例

 alter table t_part add constraint pk_t_part_id primary key(start_time, id) using index local tablespace dbs_i_xxx;

注:分區表這里多了local關鍵字,如果沒有這個關鍵字,分區類操作(比如刪除歷史分區)會導致對應的索引失效,所以除非有特殊需求建立全局索引,否則都應該建立本地索引,即必須加上local關鍵字。

2.3.3分區表建立索引示例

create index idx_t_part on t_part(start_time, id, name) local tablespace dbs_i_xxx;

注:同樣注意要加local關鍵字。

2.3.4分區表添加一個分區

alter table t_part add partition P20150104 values less than (TO_DATE(' 2015-01-04 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
    tablespace dbs_d_xxx;   

注:分區表t_part添加一個分區P20150104,這里對應存放的是20150103的數據。

2.3.5分區表刪除一個分區

alter table t_part drop partition P20150104;

注:分區表t_part刪除分區P20150104。

三、表、主鍵、索引的常規維護操作

3.1 表結構修改的方法舉例:

3.1.1表添加一個字段

alter table t_part add content2 varchar2(50);

注:t_part表添加字段content2 數據類型varchar2(50)

3.1.2表添加多個字段

alter table t_part add (
content3 varchar2(50),
content4 varchar2(50),
content5 varchar2(50)
);

注:t_part表添加3個字段content3, content4, content5 數據類型都為varchar2(50)

3.1.3表刪除一個字段

alter table t_part drop column content5;

注:t_part表刪除字段content5,一般不推薦刪除表的字段。

3.1.4表刪除多個字段

alter table t_part drop(content3, content4);

注:t_part表刪除多個字段content3,content4,一般不推薦刪除表的字段。

3.1.5表修改一個字段的數據類型

alter table t_part modify id number(7,0);

注:t_part表修改id字段的數據類型為number(7,0)

3.1.6表修改多個字段的數據類型

alter table t_part modify(
     name varchar2(50),
     content varchar2(50)
);

注:t_part表修改name字段的數據類型為varchar2(50), 修改content字段的數據類型為varchar2(50)

3.2 表、主建、索引的日常維護舉例:

3.2.1刪除表的主建

alter table t_normal drop primary key;
alter table t_part drop primary key;

注:刪除普通表t_normal的主建,刪除分區表t_part的主建。語法相同。

3.2.2刪除表的索引

drop index idx_t_normal;
drop index idx_t_part;

注:刪除普通表的普通索引,刪除分區表的分區索引。語法相同。

3.2.3重建/新建表的主建

普通表t_normal建立主建:
alter table t_normal add constraint pk_t_normal_id primary key(id) using index tablespace dbs_i_xxx;

分區表t_part建立主建:

alter table t_part add constraint pk_t_part_id primary key(start_time, id) using index local tablespace dbs_i_xxx;

注:上文已經提到過,這里再次重點強調,表的主建對應了一個唯一性索引,需要明確指定這個索引的存儲表空間,另外,分區表建立主建語句中要有local關鍵字。
若表中的數據量在百萬級別以上請慎重考慮需求是否合理,大表操作請跟DBA溝通后再操作。

3.2.4重建/新建表的索引

普通表在線建立索引:
create index idx_t_normal on t_normal(id, name) tablespace dbs_i_xxx online;

分區表在線建立索引:

create index idx_t_part on t_part(start_time, id, name) local tablespace dbs_i_xxx online;

注:跟上面新建表時建立索引方法一樣,只是這里多了online參數可選,加上online參數的意思是在線建立索引,可以避免創建索引過程中,影響到其他會話對此表的DML操作。
每張表的索引個數不宜超過4個,否則會對此表的入庫性能有影響。
若表中的數據量在千萬級別以上,且確認要新建索引,請跟DBA溝通后再操作。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM