Oracle 11g虚拟列上建分区

在Oracle 11g上,可以在虚拟列上做分区,这个特性还比较有用,下面来做一个测试:

SQL> select * from v$version;

BANNER

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

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

PL/SQL Release 11.2.0.1.0 - Production

CORE    11.2.0.1.0      Production

TNS for Linux: Version 11.2.0.1.0 - Production

NLSRTL Version 11.2.0.1.0 - Production

SQL> drop table test purge;

SQL> create table test

(bureau_code varchar2(20) not null,

province_code as (CAST(SUBSTR(bureau_code,0,2) AS VARCHAR2(2)))

)

partition by list (province_code)

(

partition p1 values (‘01‘),

partition p2 values (‘02‘),

partition p3 values (‘03‘),

partition p4 values (‘04‘),

partition p5 values (‘05‘)

);

SQL> insert into test(bureau_code) values(‘0101‘);

SQL> insert into test(bureau_code) values(‘0102‘);

SQL> insert into test(bureau_code) values(‘0202‘);

SQL> insert into test(bureau_code) values(‘0202‘);

SQL> insert into test(bureau_code) values(‘0302‘);

SQL> insert into test(bureau_code) values(‘0302‘);

SQL> insert into test(bureau_code) values(‘0402‘);

SQL> insert into test(bureau_code) values(‘0502‘);

SQL> commit;

SQL> select * from test partition(p1);

BUREAU_CODE          PR

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

0101                 01

0102                 01

SQL> set autotrace traceonly

SQL> select * from test partition(p1);

执行计划

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

Plan hash value: 213508695

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

| Id  | Operation             | Name | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |

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

|   0 | SELECT STATEMENT      |      |     2 |    30 |     4   (0)| 00:00:01 |       |       |

|   1 |  PARTITION LIST SINGLE|      |     2 |    30 |     4   (0)| 00:00:01 |    
1 |     1 |

|   2 |   TABLE ACCESS FULL   | TEST |     2 |    30 |     4   (0)| 00:00:01 |    
1 |     1 |--证明是走了分区的

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

Note

-----

- dynamic sampling used for this statement (level=2)

统计信息

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

0  recursive calls

0  db block gets

8  consistent gets

0  physical reads

0  redo size

434  bytes sent via SQL*Net to client

338  bytes received via SQL*Net from client

2  SQL*Net roundtrips to/from client

0  sorts (memory)

0  sorts (disk)

2  rows processed

时间: 2024-08-11 21:04:55

Oracle 11g虚拟列上建分区的相关文章

Oracle 11g 虚拟列 Virtual Column介绍

Oracle 11G 虚拟列 Virtual Column Oracle 11G 在表中引入了虚拟列,虚拟列是一个表达式,在运行时计算,不存储在数据库中,不能更新虚拟列的值. 定义一个虚拟列的语法: column_name [datatype] [GENERATED ALWAYS] AS [expression] [VIRTUAL] 1.虚拟列可以用在select,update,delete语句的where条件中,但是不能用于DML语句 2.可以基于虚拟列来做分区 3. 可以在虚拟列上建索引,o

Oracle 11g在Linux上的安装

Oracle 11g在Linux上的安装 创建所需用户和组 vim mk_user.sh groupadd -g 501 oinstallgroupadd -g 502 dbagroupadd -g 503 operuseradd -u 501 -g oinstall -G dba,oper oracle sh mk_user.sh 创建所需的目录vim mk_dir.sh mkdir -p /u01/app/oraInventorychmod -R 775 /u01/app/oraInvent

ORACLE 11g在linux上建立第二个实例

linux服务器主机不够,而测试人员需要新的一台oracle环境做测试,,所以准备在已经有的oracle的linux主机上上面建立第二个实例.这台oracle服务器的资源足够用,所以就直接在上面搭建多实例来满足测试人员的需求. 1,使用vnc 远程工具进去,dbca报错如下: [[email protected] ~]$ dbca No protocol specified [[email protected] ~]$ exit 2,需要设置display窗口: [[email protecte

Oracle 11g下用模板建复合分区

利用模板建复合分区大大的降低了脚本的复杂度,下面来做个试验: --未使用模板的方法建复合分区 SQL> drop table test purge; SQL> create table test ( owner VARCHAR2(10), created date, object_name VARCHAR2(10), object_type VARCHAR2(20) ) partition by range(created) subpartition by list(owner) ( part

Oracle 11g新特性之--虚拟列(Virtual Column)

Oracle 11g新特性之--虚拟列(Virtual Column) Oracle 11G虚拟列Virtual Column介绍 Oracle 11G 在表中引入了虚拟列,虚拟列是一个表达式,在运行时计算,不存储在数据库中,不能更新虚拟列的值. 定义一个虚拟列的语法: column_name [datatype] [GENERATED ALWAYS] AS [expression] [VIRTUAL] 1.虚拟列可以用在select,update,delete语句的where条件中,但是不能用

Oracle 11g 新特性(一)-- 虚拟列

数据库版本: Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Oracle11g 增加了虚拟列的新特性, 具体说明如下: 1> 只能在堆组织表(普通表)上创建虚拟列,不能在索引组织表.外部表.临时表上创建虚拟列 2> 虚拟列不能是LOB或者RAW类型 3> 虚拟列的值并不是真实存在的,只有用到时,才根据表达式计算出虚拟列的值,磁盘上并不存放 4> 可把虚拟列当做分区关键字建立分区表,这是ORACLE

Oracle 虚拟列 子分区 virtual column partition

Oracle 11g 虚拟列子分区实验 以下两个create 语句均为创建成功: 需求描述: 项目要求对3个字段进行分区,如时间,小时,还有个区域ID,便联想到虚拟列. drop table test_part purge;   create table test_part  (t_time date,  hour number,  city_id number,  hour_city varchar2(108) GENERATED ALWAYS AS(to_char(hour)||'|'||t

虚拟列分区

Oracle11g 增加了虚拟列的新特性,具体说明如下: 1.只能在堆组织表(普通表)上创建虚拟列,不能在索引组织表.外部表.临时表上创建虚拟列: 2.虚拟列不能是LOB或者RAW类型: 3.虚拟列的值并不是真实存在的,只有用到时,才根据表达式计算出虚拟列的值,磁盘上并不存放.虚拟列的值由ORACLE根据表达式自动计算得出,不可以手动去修改和指定虚拟列的值. 4.可把虚拟列当做分区关键字建立分区表,这是ORACLE 11g的另一新特性--虚拟列分区 创建带有虚拟列的分区表:    create

oracle 11g 新增分区

oracle 11g新增了间隔分区.虚拟列分区和引用分区.详细的介绍请查看官方文件: Creating Partitions 1. 间隔分区 间隔分区是范围分区的一种扩展.在引入间隔分区之前,DBA 需要显式定义每个分区的值范围,随着分区值的增长可用分区会逐渐减少直到没有可使用的分区为止.而间隔分区就是为了解决插入表中的数据超过了所有范围分区时而不能自动创建分区的问题.必须至少创建一个范围分区,范围分区的键值确定范围分区的上限值,超过该上限值数据库服务器自动创建特定间隔的分区.主要用在可预知的添