oracle怎么分库 oracle数据库分表怎么实现

关于Oracle 分区实现和操作的几个问题

1. 组合分区表的创建方式("范围-哈稀"),见附1

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:申请域名雅安服务器托管、营销软件、网站建设、繁昌网站维护、网站推广。

2. 楼主的需求,即"范围-范围分区",在ORACLE 9i, 10g经过测试都是不能实现的

在附1的基础上修改为"范围-范围"组合分区,创建时报错:ORA-14151:无效的表分区方法

3. 关于sxdtgsh兄的回答,我测了

3.1 没有maxvalue上限分区设置,在插入超出分区的数据时会报错ORA-14400: 插入的分区关键字未映射到任何分区

3.2 按回答的语句创建分区表没有问题,但数据无法按照楼主的需求分布

====附1

附录:创建"范围-哈稀"组合分区表

CREATE TABLE TAB11 (ID NUMBER,DT DATE)

PARTITION BY RANGE (DT)

SUBPARTITION BY HASH (ID) SUBPARTITIONS 2 -- 自分区个数,可以不写,由系统判断

(

PARTITION Y2012 VALUES LESS THAN (TO_DATE('2013-01-01','YYYY-MM-DD'))

(

SUBPARTITION Y2012_H1

,SUBPARTITION Y2012_H2

)

,PARTITION Y2013 VALUES LESS THAN (TO_DATE('2014-01-01','YYYY-MM-DD'))

(

SUBPARTITION Y2013_H1

,SUBPARTITION Y2013_H2

)

,PARTITION YMAX VALUES LESS THAN (MAXVALUE)

(

SUBPARTITION YMAX_H1

,SUBPARTITION YMAX_H2

)

)

====附2,请楼主检查最后查询的数据分布

create table T_TEST

(

ID NUMBER(20) NOT NULL,

TIME DATE NOT NULL

)

partition by range(TIME, ID) -- 按时间、ID范围分区 这个例子是按年的

(

partition P_2012_10 values less than (to_date('2013-01-01','yyyy-MM-dd'), 10),

partition P_2012_20 values less than (to_date('2013-01-01','yyyy-MM-dd'), 20),

partition P_2012_MAX values less than (to_date('2013-01-01','yyyy-MM-dd'), MAXVALUE),

partition P_2013_10 values less than (to_date('2014-01-01','yyyy-MM-dd'), 10),

partition P_2013_20 values less than (to_date('2014-01-01','yyyy-MM-dd'), 20),

partition P_2013_MAX values less than (to_date('2014-01-01','yyyy-MM-dd'), MAXVALUE),

partition P_MAX values less than (MAXVALUE,MAXVALUE)

);

INSERT INTO T_TEST VALUES (1,TO_DATE('20121204 00:00:00','YYYYMMDD HH24:MI:SS'));

INSERT INTO T_TEST VALUES (12,TO_DATE('20121204 00:00:00','YYYYMMDD HH24:MI:SS'));

INSERT INTO T_TEST VALUES (32,TO_DATE('20121204 00:00:00','YYYYMMDD HH24:MI:SS'));

INSERT INTO T_TEST VALUES (2,TO_DATE('20131204 00:00:00','YYYYMMDD HH24:MI:SS'));

INSERT INTO T_TEST VALUES (12,TO_DATE('20131204 00:00:00','YYYYMMDD HH24:MI:SS'));

INSERT INTO T_TEST VALUES (33,TO_DATE('20131204 00:00:00','YYYYMMDD HH24:MI:SS'));

INSERT INTO T_TEST VALUES (3,TO_DATE('20141204 00:00:00','YYYYMMDD HH24:MI:SS'));

INSERT INTO T_TEST VALUES (23,TO_DATE('20141204 00:00:00','YYYYMMDD HH24:MI:SS'));

INSERT INTO T_TEST VALUES (43,TO_DATE('20151204 00:00:00','YYYYMMDD HH24:MI:SS'));

SELECT * FROM T_TEST;

SELECT * FROM T_TEST PARTITION(P_2012_10);

SELECT * FROM T_TEST PARTITION(P_2012_20);

SELECT * FROM T_TEST PARTITION(P_2012_MAX);

SELECT * FROM T_TEST PARTITION(P_2013_10);

SELECT * FROM T_TEST PARTITION(P_2013_20);

SELECT * FROM T_TEST PARTITION(P_2013_MAX);

SELECT * FROM T_TEST PARTITION(P_MAX);

mycat怎么操作oracle做分库分表的操作

配置不同的oracle用户就相当于不同的databases;比如system,scott

dataHost name="oracle1" maxCon="1000" minCon="1"balance="0" writeType="0" dbType="oracle" dbDriver="jdbc"

heartbeatselect1 from dual/heartbeat

connectionInitSqlaltersession set nls_date_format='yyyy-mm-dd hh24:mi:ss'/connectionInitSql

writeHosthost="hostM1" url="jdbc:oracle:thin:@localhost:1521:orcl"user="system" password="123456" /

/dataHost

dataHost name="oracle2" maxCon="1000" minCon="1"balance="0" writeType="0" dbType="oracle" dbDriver="jdbc"

heartbeatselect1 from dual/heartbeat

connectionInitSqlaltersession set nls_date_format='yyyy-mm-dd hh24:mi:ss'/connectionInitSql

writeHosthost="hostM1" url="jdbc:oracle:thin:@localhost:1521:orcl"user="scott" password="123456" /

/dataHost

如何将一个oracle数据库复制成一个新的数据库

1、在数据库服务器的开始菜单中找到Datebase Configuration Assistant。

2、在创建画面第一步选择:创建新数据库,点击下一步。

3、根据需求选择自己的数据库类型(一般默认)后,跳转到全局数据库名这个画面时,重点来了:新建数据库名称不能和已经存在的任何一个数据库名称相同。

4、在管理帐户密码界面,可以与别的数据库管理帐户密码相同也可以不同,需注意的是,Oracle数据库默认是区分密码大小写的。

5、跳转到Oracle内存分配大小页面,这里建议将Oracle内存调整为物理主机内存的70%。

6、点击完成后,等待数据库创建完成。

7、数据库创建完成后,用sqlplus 语句连接数据库,在同一服务器上建立多个Oracle数据库操作完成。

oracle分库分表

oracle暂时没有这个功能。

关于你说的“oracle分区表还是不能解决几百亿数据存量下的插入性能”是什么意思?是将数据插入这么多记录的表上性能无法保证,还是太大并发会导致性能问题?

另外,如果你的并发不太大,而且还想实现分表,可以通过触发器实现啊


文章标题:oracle怎么分库 oracle数据库分表怎么实现
转载来于:http://scyanting.com/article/hhsogp.html