oracle 增加一个新分区,oracle 11g 新增分区

oracle 11g新增了间隔分区、虚拟列分区和引用分区。详细的介绍请查看官方文件:

1. 间隔分区

间隔分区是范围分区的一种扩展。在引入间隔分区之前,DBA 需要显式定义每个分区的值范围,随着分区值的增长可用分区会逐渐减少直到没有可使用的分区为止。而间隔分区就是为了解决插入表中的数据超过了所有范围分区时而不能自动创建分区的问题。必须至少创建一个范围分区,范围分区的键值确定范围分区的上限值,超过该上限值数据库服务器自动创建特定间隔的分区。

主要用在可预知的添加小范围分区或固定时间类型的分区添加上。

限制条件如下:

1) 只能指定一个分区键列,并且该键列必须是 NUMBER 或 DATE 类型。

2) 索引表不支持间隔分区。

3) 不能为间隔分区创建域索引

4) 不能为分区指定具体名称,由系统自动生成,格式为:SYS_Pnnn,n为数字。

Date类型测试:

创建时间类型间隔分区时指定NUMTOYMINTERVAL(n,day|month|year)子句确定分区扩展的条件,n为数字,指定按n天/月/年的方式进行分区新增。

CREATE TABLE SH.SALES_INTERVAL

PARTITION BY RANGE (time_id)

INTERVAL (NUMTOYMINTERVAL(1,'month')) STORE IN (tbs1,tbs2,tbs3,tbs4)

(

PARTITION P1 values less than (TO_DATE('1-1-2002','dd-mm-yyyy')),

PARTITION P2 values less than (TO_DATE('1-1-2003','dd-mm-yyyy')),

PARTITION P3 values less than (TO_DATE('1-1-2004','dd-mm-yyyy')))

AS

SELECT *

FROM SH.SALES

WHERE TIME_ID < TO_DATE('1-1-2004','dd-mm-yyyy');

select partition_name from user_tab_partitions where table_name='SALES_INTERVAL';

PARTITION_NAME

---------------------------

P1

P2

P3

insert into sh.SALES_INTERVAL values(101001,4,to_date('2005-1-10','yyyy-mm-dd'),10,124,100,200);

insert into sh.SALES_INTERVAL values(101002,5,to_date('2006-1-14','yyyy-mm-dd'),11,125,100,300);

select partition_name from user_tab_partitions where table_name='SALES_INTERVAL';

PARTITION_NAME

---------------------------

P1

P2

P3

SYS_P121

SYS_P122

Number类型测试:

create table sh.test_interval

(

id number,

name varchar2(20)

)

PARTITION BY RANGE (id)

INTERVAL (100)

(PARTITION P001 values less than(500) ,

PARTITION P002 values less than(1000)

);

insert into sh.test_interval select rownum,'A'||rownum from dual connect by level <1201;

select partition_name from user_tab_partitions where table_name='TEST_INTERVAL';

PARTITION_NAME

------------------------------

P001

P002

SYS_P134

SYS_P135

SYS_P136

select count(*) from TEST_INTERVAL PARTITION(SYS_P134);

COUNT(*)

----------

100

select count(*) from TEST_INTERVAL PARTITION(SYS_P135);

COUNT(*)

----------

100

合并分区:

需要注意,分区一定要连续,否则报ORA-14274

alter table SALES_INTERVAL merge partitions for(to_date('2005-10-10','yyyy-mm-dd')),for(to_date('2005-11-10','yyyy-mm-dd')) into partition SYS_P137

强制创建:

LOCK TABLE SALES_INTERVAL PARTITION FOR(to_date('2008-1-14','yyyy-mm-dd')) IN SHARE MODE;

范围分区转换为间隔分区:

alter table TEST drop partition p_max;

alter table TEST set interval(numtodsinterval(1,'DAY'))

alter table TEST set STORE IN (P1,P2,P3,P4)

2. 基于虚拟列的分区

如果某个表的列值是通过计算函数或表达式得到的,则这些列就称为虚拟列。可以在 CREATE 或 ALTER 表操作过程中指定这些列。虚拟列与其它实际表列共享相同的 SQL 名称空间,并与对其进行描述的基础表达式的数据类型相一致。可像其它表列一样在查询 中使用这些列,因此可在 SQL 语句中提供简单、优美且一致的访问表达式机制。

虚拟列的值实际上并未存储在磁盘上的表行中,而是根据需要进行计算。描述虚拟列的函数或表达式应是明确且唯一的,即相同的输入值集应返回相同的输出值。

可以像使用任何其它表列一样使用虚拟列。可对虚拟列进行索引,可在查询、DML 和 DDL 语句中使用它们。可在虚拟列上对表和索引进行分区,甚至可以收集它们的统计信息。 可使用虚拟列分区对表的虚拟列上定义的键列进行分区。对逻辑分区对象的业务要求经常 与现有列不一一对应。随着 Oracle Database 11g 的推出,分区功能得到了增强,可以在虚 拟列上定义分区策略,因而可以更全面地满足业务要求。

如果分区键上的谓词属于以下类型之一,则将对虚拟列分区键执行分区修剪:

• 等式或 Like

• 列表

• 范围

• 扩展分区名称

创建测试表

CREATE TABLE employees

(employee_id number(6) not null, first_name varchar2(30),

last_name varchar2(40) not null, emailvarchar2(25),

phone_number varchar2(20), hire_date date not null,

job_id varchar2(10) not null, salary number(8,2),

commission_pct number(2,2), manager_id number(6),

department_id number(4),

total_compensation as (salary *( 1+commission_pct))

)

PARTITION BY RANGE (total_compensation)

(

PARTITION p1 VALUES LESS THAN (50000),

PARTITION p2 VALUES LESS THAN (100000),

PARTITION p3 VALUES LESS THAN (150000),

PARTITION p4 VALUES LESS THAN (MAXVALUE)

);

插入数据:

insert into employees_inv

(EMPLOYEE_ID,

FIRST_NAME,

LAST_NAME,

EMAIL,

PHONE_NUMBER,

HIRE_DATE,

JOB_ID,

SALARY,

COMMISSION_PCT,

MANAGER_ID,

DEPARTMENT_ID)

select EMPLOYEE_ID,

FIRST_NAME,

LAST_NAME,

EMAIL,

PHONE_NUMBER,

HIRE_DATE,

JOB_ID,

SALARY,

COMMISSION_PCT,

MANAGER_ID,

DEPARTMENT_ID

from employees

where COMMISSION_PCT is not null

and rownum < 10;

确认:

select EMPLOYEE_ID,SALARY,COMMISSION_PCT,TOTAL_COMPENSATION from employees_inv;

EMPLOYEE_ID SALARY COMMISSION_PCT TOTAL_COMPENSATION

---------- ---------- -------------- ------------------

14000 .4 19600

13500 .3 17550

12000 .3 15600

11000 .3 14300

10500 .2 12600

10000 .3 13000

9500 .25 11875

9000 .25 11250

8000 .2 9600

3. 引用分区

引用分区通过在create table中指定PARTITION BY REFERENCE子句实现分区,不需要指定分区列,分区信息继承自父表且自动维护。

创建测试表:

CREATE TABLE orders

( order_id NUMBER(12),

order_date date,

order_mode VARCHAR2(8),

customer_id NUMBER(6),

order_status NUMBER(2),

order_total NUMBER(8,2),

sales_rep_id NUMBER(6),

promotion_id NUMBER(6),

CONSTRAINT orders_pk PRIMARY KEY(order_id)

)

PARTITION BY RANGE(order_date)

( PARTITION Q1_2005 VALUES LESS THAN (TO_DATE('01-APR-2005','DD-MON-YYYY')),

PARTITION Q2_2005 VALUES LESS THAN (TO_DATE('01-JUL-2005','DD-MON-YYYY')),

PARTITION Q3_2005 VALUES LESS THAN (TO_DATE('01-OCT-2005','DD-MON-YYYY')),

PARTITION Q4_2005 VALUES LESS THAN (TO_DATE('01-JAN-2006','DD-MON-YYYY'))

);

创建测试子表:

CREATE TABLE order_items

( order_id NUMBER(12) NOT NULL,

line_item_id NUMBER(3) NOT NULL,

product_id NUMBER(6) NOT NULL,

unit_price NUMBER(8,2),

quantity NUMBER(8),

CONSTRAINT order_items_fk

FOREIGN KEY(order_id) REFERENCES orders(order_id)

)

PARTITION BY REFERENCE(order_items_fk);

确认分区:

select table_name,partition_name from user_tab_partitions where table_name like '%ORDER%' order by 1,2;

TABLE_NAME PARTITION_NAME

------------------------------ ------------------------------

ORDERS Q1_2005

ORDERS Q2_2005

ORDERS Q3_2005

ORDERS Q4_2005

ORDER_ITEMS Q1_2005

ORDER_ITEMS Q2_2005

ORDER_ITEMS Q3_2005

ORDER_ITEMS Q4_2005

父表添加分区

alter table orders add partition Q1_2006 values less than (TO_DATE('01-APR-2006','DD-MON-YYYY'));

Table altered.

SH@PROD3> select table_name,partition_name from user_tab_partitions where table_name like '%ORDER%' order by 1,2;

TABLE_NAME PARTITION_NAME

------------------------------ ------------------------------

ORDERS Q1_2005

ORDERS Q1_2006

ORDERS Q2_2005

ORDERS Q3_2005

ORDERS Q4_2005

ORDER_ITEMS Q1_2005

ORDER_ITEMS Q1_2006

ORDER_ITEMS Q2_2005

ORDER_ITEMS Q3_2005

ORDER_ITEMS Q4_2005

子表添加分区

SH@PROD3> alter table ORDER_ITEMS add partition Q2_2006 values less than (TO_DATE('01-JUL-2006','DD-MON-YYYY'));

alter table ORDER_ITEMS add partition Q2_2006 values less than (TO_DATE('01-JUL-2006','DD-MON-YYYY'))

*

ERROR at line 1:

ORA-14650: operation not supported for reference-partitioned tables

其他说明:

如果未显式指定表空间,则引用分区表的分区将与父表的对应分区保存在同一位置。

与其它分区表一样,可以指定对象级的默认属性和覆盖对象级默认值的分区描述符。

不能禁用引用分区表的外键约束条件。

不允许添加或删除引用分区表的分区。但是,在父表上执行分区维护操作将自动级联到子表。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/417225.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jquery.uploadify flash IE6上传无效

类似$().window&#xff0c;以div方式打开弹窗&#xff0c;弹窗中iframe中就是上传页面&#xff0c;页面加载时就加载上传页面会产生这个问题。解决办法&#xff1a;打开弹窗后再给iframe赋src值。

如何手动修改oracle表空间,ORACLE数据库创建和修改表空间

-建立表空间(oracle中的tablespace(表空间))CREATE TABLESPACE data01DATAFILE D:\oracle\ora92\oradata\db\DATA01.dbf SIZE 200MUNIFORM SIZE 128k;#指定区尺寸为128k,如不指定&#xff0c;区尺寸默认为64k--建立临时表空间CREATE TEMPORARY TABLESPACE temp_dataTEMPFILE D:…

dexpler的使用方法

https://www.abartel.net/dexpler/转载于:https://www.cnblogs.com/yuqt/p/6490848.html

jquery.uploadify参数

uploadify函数的参数为json格式&#xff0c;可以对json对象的key值的修改来进行自定义的设置&#xff0c;如multi设置为true或false来控制是否可以进行多文件上传&#xff0c;下面就来介绍下这些key值的意思&#xff1a; uploader &#xff1a; uploadify.swf 文件的相对路径&a…

Kaggle入门篇

Kaggle入门篇转载于:https://www.cnblogs.com/akrusher/articles/6492096.html

超链接js点击后页面向上滚动问题解决

超链接js点击后页面向上滚动问题解决 <a href"#" οnclick"fun();return false;"></a>

Oracle数据导入要多久,oracle数据库备份导入要注意的几个问题

oracle数据库备份导入要注意的几个问题(1)oracle数据库备份的导入对数据库的版本有要求&#xff0c;也即源数据库(导出产生备份的数据库)的版本要和目标数据库(导入数据库)的版本一致&#xff0c;否则可能导致导入失败。(2)备份中的用户名(数据库导出时所使用的用户)和导入数据…

BZOJ 4241 分块

思路&#xff1a; 考虑分块 f[i][j]表示从第i块开头到j的最大值 cnt[i][j]表示从第i块开始到序列末尾j出现了多少次 边角余料处理一下就好啦~ //By SiriusRen #include <cmath> #include <cstdio> #include <algorithm> using namespace std; const int …

common lisp 学习第一天 初步接触

http://common-lisp.net/project/lispbox/lispbox 集成了Emacs、Slime和CCL。解压后直接运行lispbox.bat即可//(quote x) 返回 x&#xff0c;我们简记为 x> (quote x)x> xx//(atom x) 当 x 是一个原子或者空表时返回原子 t&#xff0c;否则返回NIL。在 Common Lisp 中我们…

oracle数据泵导入分区表,数据泵导入分区表统计信息报错(七)

其实问题的引出是由于出现第一篇文章中描述的问题&#xff0c;不过随着问题的深入研究&#xff0c;挖掘出了一些隐藏的很深的问题&#xff0c;不过问题的研究也慢慢脱离了原本的问题。在解决了表统计信息锁定的问题后&#xff0c;在回过头看看导致第一篇文章中错误的具体原因。…

django ORM创建数据库方法

1、指定连接pymysql(python3.x) 先配置_init_.py import pymysqlpymysql.install_as_MySQLdb() 2、配置连接mysql文件信息 settings.py DATABASES {default: {ENGINE: django.db.backends.mysql, NAME: django_orm, #你的数据库名称USER: root, #你的数据库用户名PASSWOR…

common lisp 学习第二天 简单数据库操作

//简单数据操作单一记录> (defun make-cd (title artist rating ripped)(list :title title :artist artist :rating rating :ripped ripped))make-cd> (make-cd "Roses" "Kathy Mattea" 7 t)(:TITLE "Roses" :ARTIST "Kathy Mattea&…

通过配置文件登陆有密码的mysql不需要输入密码

下面方式通过配置文件登陆有密码的mysql&#xff0c;不需要输入密码。 &#xff08;1&#xff09;先配置一个.my.cnf配置文件。 [client]userxxxxpasswordxxxxxx (2)直接登陆mysql服务 [rootlocalhost scripts]# HOME/var/lib/zabbix mysql 直接登陆&#xff0c;这里的HOME一…

并联机械臂的pid控制Matlab,机械手PID控制(chap2_1ctrl.m)

【实例简介】【实例截图】【核心代码】function [sys,x0,str,ts] spacemodel(t,x,u,flag)switch flag,case 0,[sys,x0,str,ts]mdlInitializeSizes;case 3,sysmdlOutputs(t,x,u);case {2,4,9}sys[];otherwiseerror([Unhandled flag ,num2str(flag)]);endfunction [sys,x0,str,…

common lisp 学习第三天 函数、注释

//函数定义(defun name(parameter*函数参数)"Optional documentation string.函数描述"body-form*函数体)函数名称风格frob-widget函数描述&#xff1a;(documentation foo function)获取foo函数的描述函数体由任意数量的lisp表达式构成&#xff0c;在函数被调用时依…

【计算机视觉】基于OpenCV的人脸识别

一点背景知识 OpenCV 是一个开源的计算机视觉和机器学习库。它包含成千上万优化过的算法&#xff0c;为各种计算机视觉应用提供了一个通用工具包。根据这个项目的关于页面&#xff0c;OpenCV 已被广泛运用在各种项目上&#xff0c;从谷歌街景的图片拼接&#xff0c;到交互艺术展…

Mysql显示创建表的sql语句

show create table 表名 返回 create table A( ……

oracle parallel_max_servers,PARALLEL_MAX_SERVERS参数

PARALLEL_MAX_SERVERS参数用于设置系统中允许的最大并行进程数。Oracle的文档对于这个参数的描述如下&#xff1a;PARALLEL_MAX_SERVERS specifies the maximum number of parallelexecution processes and parallel recovery processes for aninstance. As demand increases, …

[转]python新手必碰到的问题---encode与decode,中文乱码--转载

edu.codepub.com/2009/1029/17037.php 这个问题在python3.0里已经解决了。 这有篇很好的文章&#xff0c;可以明白这个问题: 为什么会报错“UnicodeEncodeError: ascii codec cant encode characters in position 0-1: ordinal not in range(128)”&#xff1f;本文就来研究一下…

Mysql 休眠连接过多,有可能导致“Too many connections”的错误

查看所有连接 show processlist设置休眠连接超时时间60秒&#xff1a;my.ini中mysqld节中添加wait-timeout60可以解决Mysql.Data.dll连接释放后连接没有真正断开的问题。