【每日一记3】第2天oracle分区知识
  

dan 763

{{ttag.title}}
本帖最后由 dan 于 2020-1-31 12:56 编辑

oracle 8开始就支持分区
什么时候使用分区表:
表的大小超过2GB。

优点:
1、改善查询性能:分区技术使数据库的可管理性变得更加容易,如:用户可以往一个单独的分区中装载数据,而对其他分区没有任何影响;用户可以在单独的分区上创建索引,可以仅搜索自己关心的分区,提高检索速度。
2、可以把不同的分区映射到磁盘以平衡I/O,改善整个系统性能。
3、分区技术减少数据的不可用时间,用户可以单独维护一个分区中的数据,而不影响其他分区中数据的使用,如果某个分区出现故障,表在其他分区的数据仍然可用。
4、分区技术在数据库级完成,几乎不需要对应用程序做任何修改。


范围分区:根据表中列值的范围将整个表分成不同的部分,如按照时间进行范围分区。
列表分区:使用列表值将表划分成几部分。
hash分区:使用哈希函数把表分成几部分。
复合分区:同时使用两种分区方法对表进行分区。

注意:
1、各个分区内拥有的数据约均匀约好
2、修改数据时,先指定分区名(update 表名 partition(分区名) set ...)
3、修改数据前,取保开启行移动(alter table 表名 enable row movement;),否则会发生ORA-14402错误

分区的建立:
1、在表创建时,就创建分区,以后的数据自动归类到相应的分区
范围分区:
create table ... partition by range(列名)
(
partition 分区名1 values less than(...) tablespace 表空间名,
partition 分区名2 values less than(...) tablespace 表空间名,
...
);(各个分区所在的表空间名可以不一样)
hash分区:
create table ... partition by hash(列名) partitions 分区个数;(系统自动生成分区名)
或者:create table ... partition by range(列名)
(
partition 分区名1 tablespace 表空间名,
partition 分区名2 tablespace 表空间名,
...
);(各个分区所在的表空间名可以不一样)
列表分区:
        create table ... partition by list(列名)
        (
        partition 分区名1 (值1,值2...) tablespace 表空间,
       partition 分区名2 (值1,值2...) tablespace 表空间,
        );    (各个分区所在的表空间名可以不一样,各个具体的值不一样)
      例如:   
       create table people_list (name varchar2(20),city varchar2(20)) partition by list (city)  (partition p1 values ('ganzhou','nankang') tablespace            users,partition p2 values ('quannan','dingnan')  tablespace hbk_data);

2、已经存在的表没有方法可以直接转化为分区表。但是有几种方式可以间接完成这个操作,大家可以参考:oracle分区表的建立方法(包含已经存在的表要分区):http://blog.csdn.net/wanglilin/article/details/7177338
分区的更新:
        添加分区:
范围分区:
alter table ... add partition 分区名1 values less than(...) tablespace 表空间名
hash分区:
alter table ... add partition 分区名1 tablespace 表空间名
列表分区:
alter table ... add partition 分区名1 (值1,值2...) tablespace 表空间
修改分区:
alter table ... modify partition
合并分区:
         alter table ... merge patition 分区名1,分区2 into partition 分区3(合并分区之后,原来的分区将不存在。hash分区不支持合并)
                  拆分分区(原有分区将不存在):
                  alert table ... split partition 分区名 at (值) into (partition 分区1,partition 分区2) (这种拆分适合范围分区)
                  alert table ... split partition 分区名 values (值1,值2) into (partition 分区1,partition 分区2) (这种拆分适合列表分区)
分区的删除:
        alter table ... drop partition 分区名;
删除分区内数据:
        数据删除后马上回收占用的空间:
        alter table ... truncate partition 分区名
       数据删除后空间不回收
       delete from 表名 partition(分区名)

相关查询
--查询表上有多少分区
SELECT * FROM useR_TAB_PARTITIONS WHERE TABLE_NAME='表名'

打赏鼓励作者,期待更多好文!

打赏
暂无人打赏

zjwshenxian 发表于 2020-2-7 08:32
  
感谢分享
发表新帖
热门标签
全部标签>
西北区每日一问
技术盲盒
每日一问
技术笔记
干货满满
GIF动图学习
通用技术
标准化排查
SDP百科
产品连连看
技术咨询
技术圆桌
社区新周刊
信服课堂视频
功能体验
2023技术争霸赛专题
秒懂零信任
自助服务平台操作指引
畅聊IT
在线直播
新版本体验
技术晨报
安装部署配置
sangfor周刊
VPN 对接
专家问答
高手请过招
升级&主动服务
答题自测
MVP
网络基础知识
升级
安全攻防
上网策略
测试报告
日志审计
问题分析处理
流量管理
每日一记
运维工具
云计算知识
用户认证
原创分享
解决方案
项目案例
SANGFOR资讯
专家分享
技术顾问
信服故事
功能咨询
终端接入
授权
设备维护
资源访问
地址转换
虚拟机
存储
迁移
加速技术
排障笔记本
产品预警公告
玩转零信任
信服圈儿
S豆商城资讯
技术争霸赛
「智能机器人」
追光者计划
深信服技术支持平台
社区帮助指南
答题榜单公布
纪元平台
卧龙计划
华北区拉练
天逸直播
以战代练
山东区技术晨报
文档捉虫活动
齐鲁TV
华北区交付直播
每周精选
2024年技术争霸赛
北京区每日一练
场景专题
故障笔记
排障那些事
高频问题集锦

本版版主

461
247
13

发帖

粉丝

关注

本版达人

feeling

本周分享达人

新手29676...

本周提问达人