设为首页 收藏本站
查看: 1227|回复: 0

[经验分享] 使用exchange普通表模式被切换到分区表

[复制链接]

尚未签到

发表于 2015-9-10 13:17:44 | 显示全部楼层 |阅读模式
        随着数据库的不断增长的数据量。有些表需要转换的普通堆表分区表模式。
  有几种不同的方式来执行此操作,如出口数据表,区表再导入数据到分区表;使用EXCHANGE PARTITION方式来转换为分区表以及使用DBMS_REDEFINITION来在线重定义分区表。本文描写叙述的是使用EXCHANGE PARTITION方式来实现。以下是详细的操作演示样例。
        有关详细的dbms_redefinition在线重定义表的原理及步骤可參考:基于 dbms_redefinition 在线重定义表
      有关使用DBMS_REDEFINITION在线重定义分区表可參考:使用DBMS_REDEFINITION在线切换普通表到分区表
      有关分区表的描写叙述请參考:Oracle 分区表
  
  1、主要步骤
    a、为新的分区表准备对应的表空间
    b、基于源表元数据创建分区表以及相关索引、约束等
    c、使用exchange方式将普通表切换为分区表
    d、更正相关索引及约束名等(可省略)
    e、使用split依据须要将分区表切割为多个不同的分区
    f、收集统计信息
  
  2、准备环境     

--创建用户
SQL> create user leshami identified by xxx;
SQL> grant dba to leshami;
--创建演示须要用到的表空间
SQL> create tablespace tbs_tmp datafile '/u02/database/SYBO2/oradata/tbs_tmp.dbf' size 10m autoextend on;
SQL> alter user leshami default tablespace tbs_tmp;
SQL> create tablespace tbs1 datafile '/u02/database/SYBO2/oradata/tbs1.dbf' size 10m autoextend on;
SQL> create tablespace tbs2 datafile '/u02/database/SYBO2/oradata/tbs2.dbf' size 10m autoextend on;
SQL> create tablespace tbs3 datafile '/u02/database/SYBO2/oradata/tbs3.dbf' size 10m autoextend on;
SQL> conn leshami/xxx
-- 创建一个lookup表
CREATE TABLE lookup (
id            NUMBER(10),
description   VARCHAR2(50)
);
--加入主键约束
ALTER TABLE lookup ADD (
CONSTRAINT lookup_pk PRIMARY KEY (id)
);
--插入数据
INSERT INTO lookup (id, description) VALUES (1, 'ONE');
INSERT INTO lookup (id, description) VALUES (2, 'TWO');
INSERT INTO lookup (id, description) VALUES (3, 'THREE');
COMMIT;
--创建一个用于切换到分区的大表
CREATE TABLE big_table (
id            NUMBER(10),
created_date  DATE,
lookup_id     NUMBER(10),
data          VARCHAR2(50)
);
--填充数据到大表
DECLARE
l_lookup_id    lookup.id%TYPE;
l_create_date  DATE;
BEGIN
FOR i IN 1 .. 10000 LOOP
IF MOD(i, 3) = 0 THEN
l_create_date := ADD_MONTHS(SYSDATE, -24);
l_lookup_id   := 2;
ELSIF MOD(i, 2) = 0 THEN
l_create_date := ADD_MONTHS(SYSDATE, -12);
l_lookup_id   := 1;
ELSE
l_create_date := SYSDATE;
l_lookup_id   := 3;
END IF;
INSERT INTO big_table (id, created_date, lookup_id, data)
VALUES (i, l_create_date, l_lookup_id, 'This is some data for ' || i);
END LOOP;
COMMIT;
END;
/
--为大表加入主、外键约束,索引。以及加入触发器等.
ALTER TABLE big_table ADD (
CONSTRAINT big_table_pk PRIMARY KEY (id)
);
CREATE INDEX bita_created_date_i ON big_table(created_date);
CREATE INDEX bita_look_fk_i ON big_table(lookup_id);
ALTER TABLE big_table ADD (
CONSTRAINT bita_look_fk
FOREIGN KEY (lookup_id)
REFERENCES lookup(id)
);
CREATE OR REPLACE TRIGGER tr_bf_big_table
BEFORE UPDATE OF created_date
ON big_table
FOR EACH ROW
BEGIN
:new.created_date := TO_CHAR (SYSDATE, 'yyyymmdd hh24:mi:ss');
END tr_bf_big_table;
/
--收集统计信息
EXEC DBMS_STATS.gather_table_stats('LESHAMI', 'LOOKUP', cascade => TRUE);
EXEC DBMS_STATS.gather_table_stats('LESHAMI', 'BIG_TABLE', cascade => TRUE);
  3、创建分区表
CREATE TABLE big_table2 (   
id            NUMBER(10),   
created_date  DATE,   
lookup_id     NUMBER(10),   
data          VARCHAR2(50)   
)   
PARTITION BY RANGE (created_date)   
(PARTITION big_table_2014 VALUES LESS THAN (MAXVALUE) tablespace tbs3);  
ALTER TABLE big_table2 ADD (
CONSTRAINT big_table_pk2 PRIMARY KEY (id)
);
CREATE INDEX bita_created_date_i2 ON big_table2(created_date) LOCAL;
CREATE INDEX bita_look_fk_i2 ON big_table2(lookup_id) LOCAL;
ALTER TABLE big_table2 ADD (
CONSTRAINT bita_look_fk2
FOREIGN KEY (lookup_id)
REFERENCES lookup(id)
);
--触发器也须要单独加入到分区表
CREATE OR REPLACE TRIGGER tr_bf_big_table2              --Author: Leshami
BEFORE UPDATE OF created_date                        --Blog   : http://blog.iyunv.com/leshami
ON big_table2
FOR EACH ROW
BEGIN
:new.created_date := TO_CHAR (SYSDATE, 'yyyymmdd hh24:mi:ss');
END tr_bf_big_table2;
/
  4、使用exchange切换为分区表
--以下的这个命令就是通过exchange方式来直接将普通表来切换为分区表
ALTER TABLE big_table2
EXCHANGE PARTITION big_table_2014
WITH TABLE big_table
WITHOUT VALIDATION
UPDATE GLOBAL INDEXES;
SQL> select count(*) from big_table2;
COUNT(*)
----------
10000
DROP TABLE big_table;
RENAME big_table2 TO big_table;
ALTER TABLE big_table RENAME CONSTRAINT big_table_pk2 TO big_table_pk;
ALTER TABLE big_table RENAME CONSTRAINT bita_look_fk2 TO bita_look_fk;
ALTER INDEX big_table_pk2 RENAME TO big_table_pk;
ALTER INDEX bita_look_fk_i2 RENAME TO bita_look_fk_i;
ALTER INDEX bita_created_date_i2 RENAME TO bita_created_date_i;
ALTER TRIGGER tr_bf_big_table2 RENAME TO tr_bf_big_table;
  5、使用split方式切割分区表
ALTER TABLE big_table
SPLIT PARTITION big_table_2014 AT (TO_DATE('31-DEC-2012 23:59:59', 'DD-MON-YYYY HH24:MI:SS'))
INTO (PARTITION big_table_2012 tablespace tbs1 ,
PARTITION big_table_2014)
UPDATE GLOBAL INDEXES;
ALTER TABLE big_table
SPLIT PARTITION big_table_2014 AT (TO_DATE('31-DEC-2013 23:59:59', 'DD-MON-YYYY HH24:MI:SS'))
INTO (PARTITION big_table_2013 tablespace tbs2,
PARTITION big_table_2014)
UPDATE GLOBAL INDEXES;
--收集统计信息,假设表非常大的话,须要考虑使用并行度。採样值
--对于上述的操作中,本地分区索引和数据存储在指定的表空间,存在混用情形;对于全局索引则保存在缺省表空间。
--上面提到的2种情形。能够依据须要作对应调整
EXEC DBMS_STATS.gather_table_stats('LESHAMI', 'BIG_TABLE', cascade => TRUE);
--验证结果
SQL> col HIGH_VALUE format a45 wrapped
SQL> select table_name, partition_name,high_value,num_rows from user_tab_partitions
2  where table_name='BIG_TABLE';
TABLE_NAME      PARTITION_NAME       HIGH_VALUE                                      NUM_ROWS
--------------- -------------------- --------------------------------------------- ----------
BIG_TABLE       BIG_TABLE_2012       TO_DATE(' 2012-12-31 23:59:59', 'SYYYY-MM-DD        3333
HH24:MI:SS', 'NLS_CALENDAR=GREGORIA
BIG_TABLE       BIG_TABLE_2013       TO_DATE(' 2013-12-31 23:59:59', 'SYYYY-MM-DD        3334
HH24:MI:SS', 'NLS_CALENDAR=GREGORIA
BIG_TABLE       BIG_TABLE_2014       MAXVALUE                                            3333     
  本文參考:Partitioning an Existing Table using EXCHANGE PARTITION


DSC0000.png       idkey=9ece469d99da670d85e1576013677151012787a7bfc26894598e61853d487917" target="_blank">
  很多其它參考
有关Oracle RAC请參考
     使用crs_setperm改动RAC资源的全部者及权限
     使用crs_profile管理RAC资源配置文件
     RAC 数据库的启动与关闭
     再说 Oracle RAC services
     Services in Oracle Database 10g
     Migrate datbase from single instance to Oracle RAC
     Oracle RAC 连接到指定实例
     Oracle RAC 负载均衡測试(结合server端与client)
     Oracle RAC server端连接负载均衡(Load Balance)
     Oracle RAC client连接负载均衡(Load Balance)
     ORACLE RAC 下非缺省端口监听配置(listener.ora tnsnames.ora)
     ORACLE RAC 监听配置 (listener.ora tnsnames.ora)
     配置 RAC 负载均衡与故障转移
     CRS-1006 , CRS-0215 故障一例
     基于Linux (RHEL 5.5) 安装Oracle 10g RAC
     使用 runcluvfy 校验Oracle RAC安装环境
有关Oracle 网络配置相关基础以及概念性的问题请參考:
     配置非默认端口的动态服务注冊
     配置sqlnet.ora限制IP訪问Oracle
     Oracle 监听器日志配置与管理
     设置 Oracle 监听器password(LISTENER)
     配置ORACLE client连接到数据库
有关基于用户管理的备份和备份恢复的概念请參考
     Oracle 冷备份
     Oracle 热备份
     Oracle 备份恢复概念
     Oracle 实例恢复
     Oracle 基于用户管理恢复的处理
     SYSTEM 表空间管理及备份恢复
     SYSAUX表空间管理及恢复
     Oracle 基于备份控制文件的恢复(unsing backup controlfile)
有关RMAN的备份恢复与管理请參考
     RMAN 概述及其体系结构
     RMAN 配置、监控与管理
     RMAN 备份具体解释
     RMAN 还原与恢复
     RMAN catalog 的创建和使用
     基于catalog 创建RMAN存储脚本
     基于catalog 的RMAN 备份与恢复
     RMAN 备份路径困惑
     使用RMAN实现异机备份恢复(WIN平台)
     使用RMAN迁移文件系统数据库到ASM
     linux 下RMAN备份shell脚本
     使用RMAN迁移数据库到异机
有关ORACLE体系结构请參考
     Oracle 表空间与数据文件
     Oracle password文件
     Oracle 參数文件
     Oracle 联机重做日志文件(ONLINE LOG FILE)
     Oracle 控制文件(CONTROLFILE)
     Oracle 归档日志
     Oracle 回滚(ROLLBACK)和撤销(UNDO)
     Oracle 数据库实例启动关闭过程
     Oracle 10g SGA 的自己主动化管理
     Oracle 示例和Oracle数据库(Oracle架构)
   

         
版权声明:本文博客原创文章,博客,未经同意,不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-111987-1-1.html 上篇帖子: Exchange 2013与 Office Web Apps 整合 下篇帖子: Active Directory(活动目录)与Exchange Server编程及相关
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表