Partition-方案一. 通过 Export/import 方法
来源:互联网 发布:python编码汉字互转 编辑:程序博客网 时间:2024/06/16 19:10
方案一. 通过 Export/import 方法
可以任选如下四种方法的一种来对非分区表进行分区(维护时间由大到小):
A) 通过 Export/import 方法
B) 通过 Insert with a subquery 方法
C) 通过 Partition Exchange 方法
D) 通过 DBMS_REDEFINITION 方法
以上四种方法都会从一个已经存在的非分区表创建出一个分区表。尽管官方已经对这四种方法的维护时间预期做了倒序排列,但实际维护时间针对不同情况有所不同。
SQL> select count(*) from WZ_REAL_DATA; COUNT(*)---------- 45506888SQL> select sum(bytes)/1024/1024/1024 G from dba_segments where segment_name='WZ_REAL_DATA'; G----------1.62988281SQL> desc WZ_REAL_DATA Name Null? Type ----------------------------------------- -------- ---------------------------- STIME NOT NULL DATE PI_AI_POINT NOT NULL VARCHAR2(30) FVALUE NUMBER(16,4)SQL> select min(stime) from WZ_REAL_DATA;MIN(STIME---------01-MAR-12SQL> select max(stime) from WZ_REAL_DATA;MAX(STIME---------18-MAY-15
查看表WZ_REAL_DATA是否为分区表:
SQL> select table_name,tablespace_name from user_tables where table_name='WZ_REAL_DATA';TABLE_NAME TABLESPACE_NAME------------------------------ ------------------------------WZ_REAL_DATA XDWZJSSQL> select table_name,partition_name,partition_position from user_tab_partitions where table_name='WZ_REAL_DATA';no rows selectedSQL>
发现4500万数据的大表竟然不是分区表,并且此表大小快超过2G了,oracle建议对大于2G的表进行分区;
下面开始进行分区实验:
方案一. 通过 Export/import 方法
这种方法的实现是先 export 一个非分区表,创建一个新的分区表,然后 import 数据到新创建的分区表中。
1) Export 您的非分区表:
$ exp xdwz/qizhengtao tables=WZ_REAL_DATA file=WZ_REAL_DATA.dmp[oracle@localhost ~]$ exp xdwz/qizhengtao tables=WZ_REAL_DATA file=WZ_REAL_DATA.dmp log=WZ_REAL_DATA.logExport: Release 11.2.0.4.0 - Production on Fri May 6 16:09:37 2016Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing optionsExport done in ZHS16GBK character set and AL16UTF16 NCHAR character setAbout to export specified tables via Conventional Path .... . exporting table WZ_REAL_DATA 45506888 rows exportedExport terminated successfully without warnings.[oracle@localhost ~]$ dateFri May 6 16:13:57 CST 2016
导出表4min 20sed
2) Drop 掉该非分区表:
SQL> !date
Fri May 6 16:16:08 CST 2016
查下原表的DDL建表语句:
SQL> select dbms_metadata.get_ddl('TABLE','WZ_REAL_DATA','XDWZ') from dual;DBMS_METADATA.GET_DDL('TABLE','WZ_REAL_DATA','XDWZ')-------------------------------------------------------------------------------- CREATE TABLE "XDWZ"."WZ_REAL_DATA" ( "STIME" DATE NOT NULL ENABLE, "PI_AI_POINT" VARCHAR2(30) NOT NULL ENABLE, "FVALUE" NUMBER(16,4), CONSTRAINT "PK_WZ_REAL_DATA1" PRIMARY KEY ("STIME", "PI_AI_POINT") USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS STORAGE(INITIAL 1811939328 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "XDWZJS" ENABLE ) SEGMENT CREATION IMMEDIATE PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING STORAGE(INITIAL 1750073344 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "XDWZJS"
删除表:
SQL> drop tablZ_REAL_DATA;Table dropped.
删除表非常快,大概2S钟;
3) 重新创建该表成为一个分区表:
创建分区表
CREATE TABLE WZ_REAL_DATA (STIME DATE NOT NULL, PI_AI_POINT VARCHAR2(30) NOT NULL, FVALUE NUMBER(16,4), CONSTRAINT PK_WZ_REAL_DATA1 PRIMARY KEY (STIME,PI_AI_POINT)) partition by range (stime) (partition p1_2012 values less than (to_date('2013-01-01','yyyy-mm-dd')), partition p1_2013 values less than (to_date('2014-01-01','yyyy-mm-dd')), partition p1_2014 values less than (to_date('2015-01-01','yyyy-mm-dd')), partition p1_2015 values less than (to_date('2016-01-01','yyyy-mm-dd')), partition p_max values less than (maxvalue)) tablespace XDWZJS;
4) 通过 import 的 ignore=y 方式来还原备份的数据:
[oracle@localhost ~]$ export NLS_LANG="AMERICAN_AMERICA.ZHS16GBK"[oracle@localhost ~]$ imp xdwz/qizhengtao tables=WZ_REAL_DATA file=WZ_REAL_DATA.dmp log=WZ_REAL_DATA_imp.log ignore=y buffer=102400000 commit=y
如果表比较大,建议放后台执行,我这导入dmp文件1436.9375M用了16min
ignore=y 语句会让 import 忽略掉表的创建,直接加载所有数据。
如果使用 Data Pump export/import(expdp/impdp)可以采用 impdp 的 table_exists_action 选项,例如 table_exists_action = APPEND 或者 table_exists_action = REPLACE。
确认表WZ_REAL_DATA是否已经改为分区表:
SQL> select table_name,tablespace_name from user_tables where table_name='WZ_REAL_DATA';TABLE_NAME TABLESPACE_NAME------------------------------ ------------------------------WZ_REAL_DATASQL> select table_name,partition_name,partition_position from user_tab_partitions where table_name='WZ_REAL_DATA';TABLE_NAME PARTITION_NAME PARTITION_POSITION------------------------------ ------------------------------ ------------------WZ_REAL_DATA P1_2012 1WZ_REAL_DATA P1_2013 2WZ_REAL_DATA P1_2014 3WZ_REAL_DATA P1_2015 4WZ_REAL_DATA P_MAX 5SQL>
至此普通表转分区表完成。
- Partition-方案一. 通过 Export/import 方法
- Partition-方案四:通过 DBMS_REDEFINITION 方法
- Partition-方案二:通过 Insert with a subquery 方法
- IMPORT EXPORT
- export import
- export,import ,export default
- export,import ,export default
- DATA IMPORT & EXPORT
- Oracle Export,Import
- Oracle export,import
- Oracle import/export
- Oracle import and export
- export import test
- dll import&&export
- IMPORT/EXPORT DATA
- db2 export import
- Mysql import export procedure
- oracle import/export 命令
- AndroidStudio--Terminal的使用
- Android匹配Uri工具类UriMatcher
- html初探
- hdu-2489 Minimal Ratio Tree(DFS+最小生成树)
- 学习OpenCV——Surf(特征点篇)&flann快速最近邻搜索算法
- Partition-方案一. 通过 Export/import 方法
- django 购物系统 - 添加至购物车表单
- eclipse/intellij idea 远程调试hadoop 2.6.0
- android获取屏幕的宽高
- AFNetworking 3.0迁移指南
- 直接插入排序
- 是否可以从一个静态(static)方法内部发出对非静态(non-static)方法的调用?
- Unix网络编程之名字与地址转化—gethostbyname
- fastImageCache解析:来自bang同学,非常棒!