Oracle基础维护02-表、主键、索引、表结构维护手册

 

目录概述

一、项目新建表、主键、索引注意事项

二、举例说明建表、主建、索引的操作方法

    2.1 设定需求如下
        2.1.1 查询数据库有哪些表空间
        2.1.2 本文档假设数据库有这两个业务用户的表空间
    2.2 普通表操作方法
        2.2.1 新建普通表示例
        2.2.2 普通表建立主建示例
        2.2.3 普通表建立索引示例
    2.3 分区表操作方法
        2.3.1 新建分区表示例
        2.3.2 分区表建立主建示例
        2.3.3 分区表建立索引示例
        2.3.4 分区表添加一个分区
        2.3.5 分区表删除一个分区

三、表、主键、索引的常规维护操作

    3.1 表结构修改的方法举例
        3.1.1 表添加一个字段
        3.1.2 表添加多个字段
        3.1.3 表删除一个字段
        3.1.4 表删除多个字段
        3.1.5 表修改一个字段的数据类型
        3.1.6 表修改多个字段的数据类型
    3.2 表、主建、索引的日常维护举例
        3.2.1 删除表的主建
        3.2.2 删除表的索引
        3.2.3 重建/新建表的主建
        3.2.4 重建/新建表的索引

 

内容详述

 

一、项目新建表、主键、索引注意事项

需要显示指定表和索引所属表空间,具体语法可参考下文中的示例。
表是否分区根据业务实际需求确定,一般单表数据量超过千万以上,并有周期性删除历史数据需求的表需要考虑使用分区表。
如果是分区表,需要注意对应的索引是本地(local)索引。
主键默认就包含了一个唯一性索引,同样需要注意所属表空间问题。
PL/SQL工具获取的分区表的建表语句,主建和索引部分获取不到local关键字,需要手动添加上。

 

二、举例说明建表、主建、索引的操作方法

下面就对上面所说的注意事项,举例说明实际建表、主建、索引的操作方法。

2.1 设定需求如下

## 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沟通后再操作。

 

 
posted @ 2018-10-30 16:04  zhuntidaoren  阅读(254)  评论(0编辑  收藏  举报